漏洞作者: menmen519
include/library/DB.class.php(128-134):
[php]
static public function GetDbRowById($table, $ids=array()) {
$one = is_array($ids) ? false : true;
settype($ids, 'array');
$idstring = join('/',/'', $ids);
if(preg_match('/[/s]/', $idstring)) return array();
$q = "SELECT * FROM `{$table}` WHERE id IN ('{$idstring}')";
$r = self::GetQueryResult($q, $one);
[/php]
发现传递进来的参数,进行处理后变为$idstring ,在此期间 只是做了空格检测,并没有做其他特殊字符的过滤,然后直接进入查询,故而导致sql注入
辐射的文件有:
account/bindmobile.php
ajax/chargecard.php
ajax/coupon.php
api/call.php
......
拿其中第一个举例说明:
[php]
<?php
require_once(dirname(dirname(__FILE__)) . '/app.php');
if ( $_POST ) {
$userid = $_POST['userid'];
$update['mobile'] = $_POST['mobile'];
$user = Table::Fetch('user', $userid, 'id');
[/php]
这里$userid并没有做任何处理,就传递过去了,我们构造url为
通过监控器,发现sql语句完整执行:
SELECT * FROM `user` WHERE id IN ('sssssssssssssssssssss',sleep(5))#')
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论