php 牛牛漏洞,phpcms v9 SQL注入漏洞(第二弹)

本文详细分析了一个PHP CMS系统中由于更新用户昵称时的代码漏洞,导致的数据注入问题。攻击者可以利用此漏洞将带有特殊字符的昵称存入数据库,并在重新登录时影响其他数据,如评论的用户名。攻击流程包括修改个人信息,截取数据包并替换特定cookie值。修复此类漏洞对于系统的安全性至关重要。
摘要由CSDN通过智能技术生成

第二次玩乌云,等待乌云发BB漏洞文件发生在phpcms\modules\member\index.php中392行

public function account_manage_info() { // account_manage_info方法,就是更新个人资料

if(isset($_POST['dosubmit'])) {

//更新用户昵称

$nickname = isset($_POST['nickname']) && trim($_POST['nickname']) ? trim($_POST['nickname']) : ''; //存在真名名字就去掉2边空格

if($nickname) {

$this->db->update(array('nickname'=>$nickname), array('userid'=>$this->memberinfo['userid'])); //存在$nickname这个变量就更新真实名字,漏洞发生在此处

if(!isset($cookietime)) {

$get_cookietime = param::get_cookie('cookietime');

} // 取出cookietime

$_cookietime = $cookietime ? intval($cookietime) : ($get_cookietime ? $get_cookietime : 0);

$cookietime = $_cookietime ? TIME + $_cookietime : 0;

param::set_cookie('_nickname', $nickname, $cookietime);//这里设置cookie

}

………………….//省略若干无关代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

publicfunctionaccount_manage_info(){// account_manage_info方法,就是更新个人资料

if(isset($_POST['dosubmit'])){

//更新用户昵称

$nickname=isset($_POST['nickname'])&&trim($_POST['nickname'])?trim($_POST['nickname']):'';//存在真名名字就去掉2边空格

if($nickname){

$this->db->update(array('nickname'=>$nickname),array('userid'=>$this->memberinfo['userid']));//存在$nickname这个变量就更新真实名字,漏洞发生在此处

if(!isset($cookietime)){

$get_cookietime=param::get_cookie('cookietime');

}// 取出cookietime

$_cookietime=$cookietime?intval($cookietime):($get_cookietime?$get_cookietime:0);

$cookietime=$_cookietime?TIME+$_cookietime:0;

param::set_cookie('_nickname',$nickname,$cookietime);//这里设置cookie

}

………………….//省略若干无关代码

我们注册用户,然后修改个人信息**.**.**.**/index.php?m=member&c=index&a=account_manage_info&t=1我们更新测试下,将带有’ (单引号的名字)带入数据库试试

c7c0ef390798673de18f8a48dbac9387.png

然后我们看看数据库中对应表的更新

3ebab6e489b61977e4b15314496b5b49.png

然后发现已经成功进入了数据库接下来我们要做的就是重新登录(必须重新注销登录,因为要用到这里重新登录的cookie)当我们重新登录的时候在phpcms\modules\member\index.php中543行public function login() {$this->_session_start();//…..省略若干代码param::set_cookie('auth', $phpcms_auth, $cookietime);param::set_cookie('_userid', $userid, $cookietime);param::set_cookie('_username', $username, $cookietime);param::set_cookie('_groupid', $groupid, $cookietime);param::set_cookie('_nickname', $nickname, $cookietime);//…..省略若干代码这里我们发现已经重新设置nickname的cookie了,而这里的$nickname也是从数据库里面取出来的。我们看phpcms\modules\comment\index.php中的post方法

f43c3880c12e8eac33d60c76dfbd3602.png

这里的$username变量是通过cookie过来的然后这个$username变量又做了些什么呢?在phpcms\modules\comment\index.php 100行处

a315c2aeca015718ace7311d30bcf908.png

发现这个它赋给了一个$data数组,然后进入了数据库,一个insert语句$comment->add()这样一个过程上面是一个提交评论的操作,我们的攻击思路是这样的当我们提交评论的时候,截取我们的数据包,将其中的username这个cookie值用我们nickname这个cookie值来代替,这样就起到了注入的效果了,我们测试下具体攻击过程就不演示了。。。贴一下官网测试的结果

c88ec7bace9a1ac818c33fe95358499b.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值