记一次受委托的产品安全测试
字数 1745 2025-08-19 12:41:36

产品安全测试实战教学文档

前言

本文记录了一次完整的产品安全测试过程,涵盖了从组件漏洞排查到多种WEB漏洞发现的实战经验。测试目标是基于ThinkPHP 3和PHP 5.4构建的运维管理系统。

一、组件漏洞排查

常用漏洞查询平台

  1. Snyk.io:https://snyk.io/vuln/search?type=any&q=fastjson
  2. CVE Details:https://www.cvedetails.com/google-search-results.php?q=thinkphp
  3. Seebug:https://www.seebug.org/search/?keywords=thinkphp
  4. 搜索引擎技巧site:www.cnvd.org.cn thinkphp

目标组件分析

  1. ThinkPHP 3

    • 未明确子版本,已知TP<=3.2.3存在注入漏洞
    • 版本确认方法:
      • 通过路由报错信息
      • 有源码时全局搜索THINK_VERSION
  2. PHP 5.4

    • 已修复%00截断问题(PHP 5.3.24修复)
    • 版本较低,可能存在其他未修复漏洞

二、主机层面测试

全端口扫描技巧

# 快速扫描开放端口
ports=$(nmap -p- --min-rate=1000 -T4 10.13.38.11 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//)

# 针对开放端口进行详细扫描
nmap -p$ports -sC -sV 10.13.38.11

三、WEB目录爆破

工具选择

  1. dirsearch

    • 快速确定重要路径(如actuator未授权、备份文件、api接口、常见后台)
  2. Dirbuster

    • 使用40万关键词级别的medium字典
    • 可全面爆破路径,发现更多文件夹

四、WEB安全测试发现

0x01 服务端自动填充密码漏洞

  • 漏洞描述:服务端直接将上一次成功登录的账号密码作为默认值填充到登录输入框中
  • 风险
    • 明文密码暴露
    • 无验证码和防重放token,存在暴力破解风险
  • 修复建议
    • 禁止服务端自动填充敏感信息
    • 增加验证码和CSRF防护

0x02 存储型XSS漏洞

  • 测试方法:在输入框插入<">测试HTML转义情况
  • 利用payload<"><script>alert(/xss/)</script>
  • 反射型XSS发现
    • 服务器返回Content-Type: text/html
    • 输入参数直接体现在响应中

0x03 命令注入漏洞

  • 背景:后台功能涉及SSH登录操作,可能调用sshpass
  • 测试过程
    • 尝试&&||><、反引号均被过滤
    • 发现未过滤$(),成功利用$(sleep 5)
  • 后续操作
    • 获取授权
    • 拖取代码进行审计

0x04 SQL注入漏洞

  • 框架特性:ThinkPHP 3存在前台登录绕过漏洞(通过UNION SELECT控制返回密码值)
  • 测试结果
    • 用户名参数无注入点
    • 后台多处使用$where变量拼接用户输入,单引号闭合可注入
  • 利用工具:SQLMAP

0x05 前台SSRF漏洞

  1. HTTPS型SSRF

    • 请求数据中存在IP地址字段,后端进行curl请求
    • 限制:CURLOPT_FOLLOWLOCATION未启用,无法使用302跳转
  2. 万金油型SSRF

    • go函数开启了CURLOPT_FOLLOWLOCATION
    • 可利用302跳转到gopher协议攻击内网

0x06 前台任意文件上传漏洞

  • 漏洞位置xxxxxx/uploadfile/app.php
  • 关键代码
    $src = file_get_contents('php://input');
    if (preg_match("#^data:image/(\w+);base64,(.*)$#", $src, $matches)) {
        $base64 = $matches[2];
        $type = $matches[1];
        $data = base64_decode($base64);
        file_put_contents($filePath, $data);
    
  • 利用方法
    • 构造data:image/php;base64,格式的请求
    • 直接上传PHP文件内容
  • 绕过特点
    • 文件内容无PHP特征,可绕过WAF检测

0x07 前台命令执行漏洞

  • 发现过程:通过复杂变量跟踪发现未授权命令执行接口
  • 影响:可直接获取系统权限

五、总结与建议

安全开发建议

  1. 输入输出严格过滤和转义
  2. 敏感操作增加权限验证
  3. 文件上传限制文件类型和内容
  4. 避免直接拼接用户输入到命令和SQL中
  5. 对外请求限制协议和目标地址

安全测试方法论

  1. 先了解系统组件和架构
  2. 主机和WEB层面全面扫描
  3. 从低危漏洞入手,逐步深入
  4. 代码审计辅助发现深层漏洞
  5. 开发与安全知识相结合

持续学习建议

  1. 关注常见组件的漏洞公告
  2. 掌握多种漏洞利用技巧
  3. 了解防御措施以绕过限制
  4. 开发和安全知识相互补充

本测试案例展示了从信息收集到多种高危漏洞发现的完整过程,体现了安全测试的系统性和深入性。

产品安全测试实战教学文档 前言 本文记录了一次完整的产品安全测试过程,涵盖了从组件漏洞排查到多种WEB漏洞发现的实战经验。测试目标是基于ThinkPHP 3和PHP 5.4构建的运维管理系统。 一、组件漏洞排查 常用漏洞查询平台 Snyk.io :https://snyk.io/vuln/search?type=any&q=fastjson CVE Details :https://www.cvedetails.com/google-search-results.php?q=thinkphp Seebug :https://www.seebug.org/search/?keywords=thinkphp 搜索引擎技巧 : site:www.cnvd.org.cn thinkphp 目标组件分析 ThinkPHP 3 : 未明确子版本,已知TP <=3.2.3存在注入漏洞 版本确认方法: 通过路由报错信息 有源码时全局搜索 THINK_VERSION PHP 5.4 : 已修复%00截断问题(PHP 5.3.24修复) 版本较低,可能存在其他未修复漏洞 二、主机层面测试 全端口扫描技巧 三、WEB目录爆破 工具选择 dirsearch : 快速确定重要路径(如actuator未授权、备份文件、api接口、常见后台) Dirbuster : 使用40万关键词级别的medium字典 可全面爆破路径,发现更多文件夹 四、WEB安全测试发现 0x01 服务端自动填充密码漏洞 漏洞描述 :服务端直接将上一次成功登录的账号密码作为默认值填充到登录输入框中 风险 : 明文密码暴露 无验证码和防重放token,存在暴力破解风险 修复建议 : 禁止服务端自动填充敏感信息 增加验证码和CSRF防护 0x02 存储型XSS漏洞 测试方法 :在输入框插入 <"> 测试HTML转义情况 利用payload : <"><script>alert(/xss/)</script> 反射型XSS发现 : 服务器返回 Content-Type: text/html 输入参数直接体现在响应中 0x03 命令注入漏洞 背景 :后台功能涉及SSH登录操作,可能调用 sshpass 测试过程 : 尝试 && 、 || 、 > 、 < 、反引号均被过滤 发现未过滤 $ 和 () ,成功利用 $(sleep 5) 后续操作 : 获取授权 拖取代码进行审计 0x04 SQL注入漏洞 框架特性 :ThinkPHP 3存在前台登录绕过漏洞(通过UNION SELECT控制返回密码值) 测试结果 : 用户名参数无注入点 后台多处使用 $where 变量拼接用户输入,单引号闭合可注入 利用工具 :SQLMAP 0x05 前台SSRF漏洞 HTTPS型SSRF : 请求数据中存在IP地址字段,后端进行curl请求 限制: CURLOPT_FOLLOWLOCATION 未启用,无法使用302跳转 万金油型SSRF : go 函数开启了 CURLOPT_FOLLOWLOCATION 可利用302跳转到gopher协议攻击内网 0x06 前台任意文件上传漏洞 漏洞位置 : xxxxxx/uploadfile/app.php 关键代码 : 利用方法 : 构造 data:image/php;base64, 格式的请求 直接上传PHP文件内容 绕过特点 : 文件内容无PHP特征,可绕过WAF检测 0x07 前台命令执行漏洞 发现过程 :通过复杂变量跟踪发现未授权命令执行接口 影响 :可直接获取系统权限 五、总结与建议 安全开发建议 输入输出严格过滤和转义 敏感操作增加权限验证 文件上传限制文件类型和内容 避免直接拼接用户输入到命令和SQL中 对外请求限制协议和目标地址 安全测试方法论 先了解系统组件和架构 主机和WEB层面全面扫描 从低危漏洞入手,逐步深入 代码审计辅助发现深层漏洞 开发与安全知识相结合 持续学习建议 关注常见组件的漏洞公告 掌握多种漏洞利用技巧 了解防御措施以绕过限制 开发和安全知识相互补充 本测试案例展示了从信息收集到多种高危漏洞发现的完整过程,体现了安全测试的系统性和深入性。