当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(22) 关注此漏洞

缺陷编号: WooYun-2012-15364

漏洞标题: 躺在床上读代码之 php168分类系统之SQL注射修改管理员密码

相关厂商: PHP168

漏洞作者: 快点啊!!

提交时间: 2012-11-28 14:24

公开时间: 2013-01-12 14:25

漏洞类型: SQL注射漏洞

危害等级: 高

自评Rank: 20

漏洞状态: 未联系到厂商或者厂商积极忽略

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 help@wooyun.org

Tags标签: 第三方不可信程序 php+数字类型注射 php168

2人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2012-11-28: 积极联系厂商并且等待厂商认领中,细节不对外公开
2013-01-12: 厂商已经主动忽略漏洞,细节向公众公开

简要描述:

该产品又名:齐博分类信息系统 v6 bilud 20101112

不知道为什么该公司没有在wooyun注册,在chinaz的下载排行该应用排行第三,如果不是刷的话。

该漏洞的描述估计更像是一篇漏洞利用示范。

详细说明:

在 /member/company.php 中的第13行:



code 区域
@extract($_POST);





这句代码会将POST中的所有东西注册未全局变量。



那么,如何利用呢,比较有意思的是接下来的代码。





code 区域
$cpDB=$db->get_one("SELECT * FROM `{$pre}memberdata_1` WHERE uid='$lfjuid'");
…… 省略X行。
if(!$cpDB){



code 区域
/*{A}*/
$db->query("INSERT INTO `{$pre}memberdata_1` ( `uid` , `cpname` , `cplogo` , `cptype` , `cptrade` , `cpproduct` , `cpcity` , `cpfoundtime` , `cpfounder` , `cpmannum` , `cpmoney` , `cpcode` , `cppermit` , `cpweb` , `cppostcode` , `cptelephone` , `cpfax` , `cpaddress` ,`cplinkman`,`cpmobphone`,`cpqq`,`cpmsn`) VALUES ( '$lfjuid','$cpname','$cplogo','$cptype','$cptrade','$cpproduct','$cpcity','$cpfoundtime','$cpfounder','$cpmannum','$cpmoney','$cpcode','$cppermit','$cpweb','$cppostcode','$cptelephone','$cpfax','$cpaddress','$cplinkman','$cpmobphone','$cpqq','$cpmsn')");
$grouptype=$webdb[AutoPassCompany]?'1':'-1';





code 区域
$db->query("UPDATE {$pre}memberdata SET grouptype='$grouptype' WHERE uid='$lfjuid'");
refreshto("company.php?job=edit","你的资料已经提交",1);
}else{



code 区域
/*{B}*/
$db->query("UPDATE {$pre}memberdata_1 SET cpname='$cpname',cplogo='$cplogo',cptype='$cptype',cptrade='$cptrade',cpproduct='$cpproduct',cpcity='$cpcity',cpfoundtime='$cpfoundtime',cpfounder='$cpfounder',cpmannum='$cpmannum',cpmoney='$cpmoney',cpcode='$cpcode',cppermit='$cppermit',cpweb='$cpweb',cppostcode='$cppostcode',cptelephone='$cptelephone',cpfax='$cpfax',cpaddress='$cpaddress',cplinkman='$cplinkman',cpmobphone='$cpmobphone',cpqq='$cpqq',cpmsn='$cpmsn' WHERE uid='$lfjuid'");
refreshto("company.php?job=edit","修改成功",1);
}
}





okay,看我注释为{B}的哪一行我们可以看出来,只要我们覆盖了pre变量,我们就可以执行任意update语句了,但是前提是我们必须知道原本的表前缀pre是什么。



如何知道表前缀呢?有点意思的是标注为{A}的那一行。



code 区域
在数据库中,`{$pre}memberdata_1`表结构中的uid是唯一的,所以只要我们覆盖掉cpDB变量,再提交一次stpe=2走到{A}所在的SQL语句,SQL就会报错并告诉我们表前缀是什么。





php168_1.jpg





code 区域
好了,我们看到表前缀了,那还客气什么,覆盖pre走到{B}去修改管理员的密码吧。





php168_2.jpg





okay,到此为止,结束,可以把管理员密码改成12345了,这里其实update完全受你控制,你爱干什么干什么,别客气。



code 区域
注意:上面的例子我故意让它报错了来截图,实际操作中可以把{}和{内的东西删除}



漏洞证明:

php168_2.jpg





okay,到此为止,结束,可以把管理员密码改成12345了,这里其实update完全受你控制,你爱干什么干什么,别客气。



code 区域
注意:上面的例子我故意让它报错了来截图,实际操作中可以把{}和{内的东西删除}



修复方案:

这里没必要用extract,你真的很想用的话可以加上EXTR_SKIP参数。

版权声明:转载请注明来源 快点啊!!@乌云


漏洞回应

厂商回应:

未能联系到厂商或者厂商积极拒绝

漏洞Rank:10 (WooYun评价)


漏洞评价:

对本漏洞信息进行评价,以更好的反馈信息的价值,包括信息客观性,内容是否完整以及是否具备学习价值

漏洞评价(共0人评价):
登陆后才能进行评分

评价

  1. 2012-11-28 14:25 | 快点啊!! ( 路人 | Rank:10 漏洞数:4 | 开源产品在走下坡路,能干点啥就干点啥吧。)
    0

    没有粗体功能,再好的文章也出不来。

  2. 2012-11-28 14:28 | 街球幽灵 ( 路人 | Rank:29 漏洞数:5 | 社会工程学研究,手机维修工程师。)
    0

    有字就行了~

  3. 2012-11-28 15:38 | xsser 认证白帽子 ( 普通白帽子 | Rank:297 漏洞数:22 | 当我又回首一切,这个世界会好吗?)
    0

    要那么多功能干嘛

  4. 2012-11-29 11:52 | 低调的瘦子 ( 普通白帽子 | Rank:504 漏洞数:74 | loading……………………)
    0

    @xsser >_<我提交的洞洞怎么还没审核啊

登录后才能发表评论,请先 登录