Thinkphp5.0.23-rce漏洞复现

一、配置靶场 

       靶场环境:Ubuntu,vulhub-2022>thinkphp>5.0.23-rce

      攻击机:kali2023

二、信息收集

       由于是靶场环境,所以这里直接对目标ip进行信息收集,这里看到目标主机只开启了8080端口。

      Thinkphp5.0.23-rce漏洞复现_第1张图片

     直接访问ip+端口,明显是一个thinkphp的框架,并且看到版本信息为V5.0

三、渗透测试

       使用bp抓包,查看请求方式为get方式。

        

       然后将请求方式改成post请求。

      然后构造exp

  Thinkphp5.0.23-rce漏洞复现_第2张图片

       使用重放器,看效果

Thinkphp5.0.23-rce漏洞复现_第3张图片

           成功查看到了用户信息,然后再看看当前目录

Thinkphp5.0.23-rce漏洞复现_第4张图片

        ok,接着上传phpinfo 

Thinkphp5.0.23-rce漏洞复现_第5张图片

 然后,在浏览器里直接访问test.php。

Thinkphp5.0.23-rce漏洞复现_第6张图片

 四、总结

        ThinkPHP是一款运用极广的PHP开发框架。其5.0.23以前的版本中,获取method的方法中没有正确处理方法名,导致攻击者可以调用Request类任意方法并构造利用链,从而导致远程代码执行漏洞。

   

 public function method($method = false)
            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);
                $method = strtoupper($_POST[Config::get('var_method')]);
                if (in_array($method, ['GET', 'POST', 'DELETE', 'PUT', 'PATCH'])) {
                    $this->method = $method;
                    $this->{$this->method}($_POST);
                }
            } elseif (isset($_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'])) {
                $this->method = strtoupper($_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE']);
            } else {

调用KaTeX parse error: Expected '}', got 'EOF' at end of input: this->{this->method}(P O S T 语 句) ,此时假设我们控制了method的值,也就意味着可以调用Request类的任意方法,而当调用构造方法__construct()时,就可以覆盖Request类的任意成员变量,可以覆盖t h i s − > m e t h o d , 直 接 指 定 了 c h e c k ( ) 方 法 中 的 this->method,直接指定了check()方法中的this−>method,直接指定了check()方法中的method值。

你可能感兴趣的:(php,开发语言)