0x00 实验环境
攻击机:Win 11
靶机也可作为攻击机:Ubuntu20 (docker搭建的vulhub靶场)
vulhub靶场下载地址:
|
|
部署:
|
|
0x01 影响版本
标志:/index.php
版本:thinkphp2.x
简介:在ThinkPHP 2.x版本中,使用preg_replace的/e
模式匹配路由:
|
|
导致用户的输入参数被插入双引号中执行,造成任意代码执行漏洞
大体说的还是因为php版本在5.6.29以下时都是支持该函数执行中间的命令的,可到了7.x就不支持了。简单来讲就是
|
|
e 配合函数preg_replace()使用, 可以把匹配来的字符串当作正则表达式执行;
/e 可执行模式,此为PHP专有参数,例如preg_replace函数。
例如:
|
|
只要在“just test”中匹配到了“test”字符,就执行中间的print_r这条函数的命令。
0x02 漏洞复现
注:复现是比较简单的,原理需要自己去深入剖析
(1)访问页面
(2)使用报错爆出thinkphp的版本2.1:
|
|
(3)抓包或者使用插件查看一下有没有php的版本号,上面有介绍过,那个命令执行的触发条件<=php5.6.29,下面这个版本是满足条件的:
(4)漏洞利用:
|
|
(5)传马,使用以下语句(类似于在该页面写入了一句话木马):
|
|
菜刀与蚁剑均能连接:
蚁剑连接:
0x02 漏洞修复
升级框架版本
ThinkPHP 2.x 已停止维护,漏洞无法通过零散修复彻底解决。最彻底的方式是升级到官方支持的最新版本(如 ThinkPHP 5.1 或 6.x),这些版本对输入过滤、路由解析等机制进行了全面重构,安全性大幅提升。