参数功能快速识别术
经验视角:参数名中的秘密
参数名往往泄露了其背后的功能逻辑,就像变量名暗示着用途:
- 数据库相关:
id=123
、user_id=admin
、query=SELECT
等通常关联数据库操作 - 权限控制:
admin=false
、role=guest
、access_token=xxx
可能涉及权限验证 - 文件操作:
file=logo.png
、path=/var/www
常与文件系统交互 - API控制:
callback=jsonp
、format=xml
可能影响响应格式
实战案例:在某次测试中,发现isDebug=true
参数导致返回详细错误信息,进而暴露了数据库结构。
页面数据分析法
通过对比修改参数前后的页面变化,可以验证猜想:
GET /profile?id=100 HTTP/1.1
Host: example.com# 修改为
GET /profile?id=101 HTTP/1.1
Host: example.com
观察点:
- 页面内容是否变化(用户信息不同)
- 响应时间差异(是否存在SQL性能问题)
- HTTP状态码变化(403/404等)
参数值测试方法论
数据类型测试矩阵
参数类型 | 测试用例 | 潜在漏洞 |
---|---|---|
数值型 | 100→101, 0, -1, 9999999 | IDOR, 整数溢出 |
布尔型 | false→true, 1→0 | 权限绕过 |
字符串型 | ', ", <, >, \ | SQLi, XSS, 路径遍历 |
数组型 | []→["admin"], [1,2]→[1] | 逻辑漏洞 |
经典案例:将?premium=false
改为?premium=true
直接解锁付费功能,典型的权限控制缺失。
边界值测试艺术
测试极值往往能发现意外漏洞:
POST /cart/checkout HTTP/1.1
Host: shop.com
Content-Type: application/x-www-form-urlencodeditem_count=2147483647 # INT_MAX
可能触发:
- 整数溢出导致实际购买数量为负数
- 库存检查绕过
- 支付金额计算错误
HTTP协议特性利用
CRLF注入实战
GET /redirect?url=https://safe.com%0D%0ASet-Cookie:sessionid=malicious HTTP/1.1
Host: victim.com
可能实现:
- HTTP响应头注入
- 虚假Cookie设置
- XSS组合攻击(需配合反射)
编码绕过技巧
GET /search?q=<script%09>alert(1)</script> HTTP/1.1
Host: example.com
常用编码:
- %09 → Tab(绕过空格过滤)
- %0a → 换行(拆分防御逻辑)
- %252e → 双重URL编码的"."
协议级攻击手法
HTTP参数污染(HPP):
GET /api?user=admin&user=guest HTTP/1.1
不同后端处理方式可能导致权限混淆
HTTP方法篡改:
POST /admin/delete HTTP/1.1
X-HTTP-Method-Override: GET
可能绕过仅限制POST的CSRF保护
黑盒测试核心:Fuzz之道
经典Fuzz向量库
SQL注入:
' OR '1'='1'--
admin'--
1' ORDER BY 10--
XSS:
<img src=x onerror=alert(document.domain)>
<svg onload=alert(1)>
javascript:alert(1)
命令注入:
;id
`whoami`
$(cat /etc/passwd)
智能Fuzz策略
种子变异:基于正常输入逐步变异
name=John → name=John'→ name=John'--→ name=John' OR 1=1--
上下文感知:
- JSON参数:测试
{"user":"admin\"}"}
- XML输入:尝试XXE注入
<!DOCTYPE xxe [...]>
自动化工具链:
- Burp Intruder:集群轰炸
- OWASP ZAP:自动化扫描
- ffuf:目录/参数爆破
总结与进阶建议
避免思维定势
某次测试中,开发者使用了非常规参数名_$$_admin_mode_$$_=0
,只有保持开放心态才能发现这类"隐藏功能"。
测试环境推荐
- DVWA:包含从易到难的各种漏洞
- WebGoat:OWASP官方学习平台
- Burp Suite Collaborator:帮助检测盲注漏洞
新兴漏洞关注
- GraphQL:批量查询攻击、类型混淆
- JWT:算法切换、密钥爆破
- WebSockets:CSWSH、消息注入
记住,渗透测试是99%的耐心尝试加1%的灵感闪现。每次面对HTTP数据包,都应当怀着"这里一定有问题,只是我还没发现"的心态。漏洞永远存在,区别只在于发现者的视角和坚持。