挖洞经验 | 通过WebPageTest服务0day漏洞实现Mozilla AWS环境远程代码执行
字数 1233 2025-08-18 11:38:23
WebPageTest 0day漏洞分析与利用教学文档
漏洞概述
本教学文档详细分析了一个在Mozilla AWS环境中发现的WebPageTest服务0day漏洞,该漏洞最终可导致远程代码执行(RCE)。漏洞涉及服务端请求伪造(SSRF)、IP伪造和竞争条件利用等多个技术点。
WebPageTest简介
WebPageTest是一款开源的Web前端性能分析工具,主要功能包括:
- 提供网站性能评测
- 支持IE和Chrome浏览器
- 模拟真实浏览器连接速度
- 从全球多个地点运行网站速度测试
- 提供资源加载瀑布图、页面速度优化检查和建议
漏洞发现环境
在Mozilla AWS环境中发现的两个相关资产:
- wpt-vpn.stage.mozaws.net
- wpt1.dev.mozaws.net
漏洞技术分析
1. 关键漏洞点:workdone.php
位于/www/work/workdone.php的关键漏洞点:
// IP限制逻辑(第110行)
!strcmp($_SERVER['REMOTE_ADDR'], "127.0.0.1")
// 文件上传与解压逻辑(第133-136行)
if (isset($_FILES['file']['tmp_name'])) {
ExtractZipFile($_FILES['file']['tmp_name'], $testPath);
CompressTextFiles($testPath);
}
2. SecureDir函数的安全限制
位于/www/common_lib.inc的SecureDir函数(第2322-2347行):
function SecureDir($path) {
$files = scandir($path);
foreach ($files as $file) {
$filepath = "$path/$file";
if (is_file($filepath)) {
$parts = pathinfo($file);
$ext = strtolower($parts['extension']);
if (strpos($ext, 'php') === false &&
strpos($ext, 'pl') === false &&
strpos($ext, 'py') === false &&
strpos($ext, 'cgi') === false &&
strpos($ext, 'asp') === false &&
strpos($ext, 'js') === false &&
strpos($ext, 'rb') === false &&
strpos($ext, 'htaccess') === false &&
strpos($ext, 'jar') === false) {
chmod($filepath, 0666);
} else {
chmod($filepath, 0666); // just in case the unlink fails for some reason
unlink($filepath);
}
} elseif ($file != '.' && $file != '..' && is_dir($filepath)) {
SecureDir($filepath);
}
}
}
3. IP伪造漏洞
在/www/common.inc中发现的IP伪造漏洞(第70行):
if (isset($_SERVER["HTTP_FASTLY_CLIENT_IP"]))
$_SERVER["REMOTE_ADDR"] = $_SERVER["HTTP_FASTLY_CLIENT_IP"];
漏洞利用步骤
1. 获取有效Test ID
- 在目标WebPageTest服务上执行Traceroute命令(如对https://google.com)
- 获取WebPageTest生成的Test ID(如171124_GW_9)
2. 构造攻击链
- IP伪造:通过设置
FASTLY-CLIENT-IP请求头为127.0.0.1绕过IP限制 - 文件上传:构造恶意zip文件上传到目标系统
- 竞争条件利用:在SecureDir函数删除危险文件前访问上传的PHP文件
3. 工具使用建议
- 使用Burp Suite的Intruder模块:
- 一个Intruder用于上传恶意zip文件
- 另一个Intruder用于访问解压后的PHP文件
- 使用Turbo Intruder插件提高成功率(建议线程数200)
漏洞复现PoC
- 构造包含PHP webshell的zip文件
- 发送以下请求伪造IP:
POST /work/workdone.php HTTP/1.1
Host: wpt-vpn.stage.mozaws.net
FASTLY-CLIENT-IP: 127.0.0.1
...其他头部...
[上传的zip文件内容]
- 快速访问上传的PHP文件:
GET /work/[test_id]/webshell.php HTTP/1.1
Host: wpt-vpn.stage.mozaws.net
防御措施
- 对WebPageTest服务启用基本的用户名密码验证
- 修复IP伪造漏洞(移除或限制HTTP_FASTLY_CLIENT_IP的使用)
- 改进SecureDir函数的实现,消除竞争条件
- 限制文件上传功能或增加更严格的文件类型检查
时间线与修复
- 2017年11月:漏洞发现
- 与Mozilla和WebPageTest团队沟通
- 2018年1月17日:修复版本发布
- Mozilla官方奖励:$500
参考资源
- Mozilla官方漏洞报告:Bugzilla
- WebPageTest GitHub仓库修复commit
本教学文档详细分析了漏洞的技术细节和利用方法,仅供安全研究和防御参考,严禁用于非法用途。