渗透测试 | 黑白盒测试配合实战经验分享
字数 1274 2025-08-19 12:40:52
黑白盒测试配合实战经验教学文档
前言
黑白盒测试是软件测试领域的两种核心方法,它们从不同角度保障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:
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);
问题点:
$_GET['id']直接从URL获取,无任何验证或过滤$id直接传递给$adminClass->GetAdmin($id)方法- 缺乏参数预处理和SQL语句安全处理
总结
- 黑白盒测试结合:功能测试与代码审计相互印证,提高漏洞发现效率
- 工具辅助:合理使用Seay、Fortify等工具减轻手工审计负担
- SQL注入防御:
- 所有用户输入必须验证和过滤
- 使用参数化查询或预处理语句
- 最小权限原则配置数据库账户
- 持续学习:关注最新bypass技术,保持防御手段更新