Thinkphp 2.x、3.0-3.1版代码执行漏洞分析


Thinkphp 2.x、3.0-3.1版代码执行漏洞分析

此漏洞为tp框架中Lite精简模式中存在可能的漏洞,ThinkPHP 开启lite模式后,会加载Lite下的Dispacher.class.php文件去匹配URL并分发用户请求, 而在该文件中的一处使用了perg_replace函数的 /e参数,


此函数/e模式会将其的第二个参数当作php代码执行,而在此文件中一二参数都为可控,\1与\2分别代表着第一个参数中的两个括号的位置,例如当我们传访问的url为index.php?s=1/2/3/4/5/6时,在第一次进行匹配是\1即代表1,\2即代表2,在第二次匹配时\1即代表3,\2即代表4。
本地复现:

payload:
?s=/1/2/3/${eval($_GET[1])}&1=system(%22whoami%22);

要将我们的payload写到偶数位也就是\2处,原因是\2处为函数的第二个参数处且被双引号包裹,可以解析变量


文章作者: wa1ki0g
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 wa1ki0g !
  目录