ThinkPHP历史漏洞分析

老洞分析,本文章将会对 ThinkPHP 中出现过的多个漏洞进行分析,提高自己的 PHP 代码审计能力

ThinkPHP5 SQL注入1

影响版本:5.0.13<=ThinkPHP<=5.0.155.1.0<=ThinkPHP<=5.1.5,根据官方的安全更新,进行 Compare

查询 Commit 记录,发现 Builder.php 的更新比较可疑,打开 PHPStorm 配置好 xdebug,在 119 和 122 出下断点进行调试

根据代码执行流程,需要传入一个不为空的数组,当传入数组的第一位为inc时,执行断点 119 的语句,那么就构造一个username/a传入username[0]=inc成功触发断点

将剩下的请求补充完整,传入?username[0]=inc&username[1]=hello&username[2]=world

也就是说,username[1]会成功传入到 $sql变量中,被execute函数执行。传入一个报错注入语句,则被解析执行如图:

开启 Debug 情况下将会输出 MySQL 执行后的结果