挖洞经验 | 通过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

  1. 在目标WebPageTest服务上执行Traceroute命令(如对https://google.com)
  2. 获取WebPageTest生成的Test ID(如171124_GW_9)

2. 构造攻击链

  1. IP伪造:通过设置FASTLY-CLIENT-IP请求头为127.0.0.1绕过IP限制
  2. 文件上传:构造恶意zip文件上传到目标系统
  3. 竞争条件利用:在SecureDir函数删除危险文件前访问上传的PHP文件

3. 工具使用建议

  1. 使用Burp Suite的Intruder模块:
    • 一个Intruder用于上传恶意zip文件
    • 另一个Intruder用于访问解压后的PHP文件
  2. 使用Turbo Intruder插件提高成功率(建议线程数200)

漏洞复现PoC

  1. 构造包含PHP webshell的zip文件
  2. 发送以下请求伪造IP:
POST /work/workdone.php HTTP/1.1
Host: wpt-vpn.stage.mozaws.net
FASTLY-CLIENT-IP: 127.0.0.1
...其他头部...

[上传的zip文件内容]
  1. 快速访问上传的PHP文件:
GET /work/[test_id]/webshell.php HTTP/1.1
Host: wpt-vpn.stage.mozaws.net

防御措施

  1. 对WebPageTest服务启用基本的用户名密码验证
  2. 修复IP伪造漏洞(移除或限制HTTP_FASTLY_CLIENT_IP的使用)
  3. 改进SecureDir函数的实现,消除竞争条件
  4. 限制文件上传功能或增加更严格的文件类型检查

时间线与修复

  • 2017年11月:漏洞发现
  • 与Mozilla和WebPageTest团队沟通
  • 2018年1月17日:修复版本发布
  • Mozilla官方奖励:$500

参考资源

  • Mozilla官方漏洞报告:Bugzilla
  • WebPageTest GitHub仓库修复commit

本教学文档详细分析了漏洞的技术细节和利用方法,仅供安全研究和防御参考,严禁用于非法用途。

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 的关键漏洞点: 2. SecureDir函数的安全限制 位于 /www/common_lib.inc 的SecureDir函数(第2322-2347行): 3. IP伪造漏洞 在 /www/common.inc 中发现的IP伪造漏洞(第70行): 漏洞利用步骤 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: 快速访问上传的PHP文件: 防御措施 对WebPageTest服务启用基本的用户名密码验证 修复IP伪造漏洞(移除或限制HTTP_ FASTLY_ CLIENT_ IP的使用) 改进SecureDir函数的实现,消除竞争条件 限制文件上传功能或增加更严格的文件类型检查 时间线与修复 2017年11月:漏洞发现 与Mozilla和WebPageTest团队沟通 2018年1月17日:修复版本发布 Mozilla官方奖励:$500 参考资源 Mozilla官方漏洞报告:Bugzilla WebPageTest GitHub仓库修复commit 本教学文档详细分析了漏洞的技术细节和利用方法,仅供安全研究和防御参考,严禁用于非法用途。