一个“如果”如何帮你发现程序漏洞
大多数人认为漏洞挖掘深藏在工具和扫描器中。我不这么认为。我认为它存在于代码中——以及一个简单的短语:“如果…”
“如果”的力量
漏洞赏金狩猎不是关于拥有最大的有效载荷列表;而是关于提出正确的问题。每个漏洞都始于开发人员没有问的问题:
- 如果我把这个用户ID改成别人的会怎样?→ IDOR
- 如果我从请求中移除这个令牌会怎样?→ 身份验证绕过
- 如果我发送意外输入会怎样?→ 验证失败
在正确时刻提出的一个“如果?”可以比任何自动扫描更快地揭示P1漏洞。
真实故事——一个问题,丰厚回报
场景:测试一个Web应用的登录流程。 如果问题:“如果我只是从请求中移除令牌会怎样?” 结果:会话仍然被接受。身份验证检查被绕过——一个确认的P1漏洞。 没有花哨的工具,只是一个问题和快速测试。 教训:开发人员通常将“令牌存在”等同于“已授权”。询问当它缺失时会发生什么打破了这种假设。
像黑客一样思考
工具揭示表面级缺陷;问题暴露埋在代码中的假设。养成这些习惯:
- 质疑开发人员的假设:他们假设什么总是正确的?
- 移除或修改必需的参数和头部
- 尝试乱序操作或没有预期令牌的操作
- 修改ID、重放请求,并发送意外的内容类型
每个漏洞都始于开发人员没有考虑的“如果”。
工具是放大器,不是替代品
扫描器很有价值,但它们只遵循你编写的规则。你的大脑——你的好奇心——才是引擎。使用自动化来扩展检查,但要带着问题引领。
你的工具指向表面。你的“如果?”深入代码。
触发有用“如果?”的快速检查清单
- 移除认证令牌/ cookies/ 头部
- 修改ID、UUID和引用
- 在多步骤流程中更改请求顺序
- 发送格式错误或意外的数据类型
- 用不同权限重试请求
结论
大多数人用工具狩猎。最好的猎手用一个问题来审问代码:“如果…?”这个想法通常就是你找到一个真正漏洞——有时是P1漏洞——所需要的全部。
如果你对哪些编程语言对此最有用感兴趣,请务必查看我的文章《编码:被忽视的黑客支柱》。