测试伪造请求的能力
ID |
---|
WSTG-BUSL-02 |
总结
伪造请求是攻击者用来绕过前端 GUI 应用程序直接提交信息进行后端处理的一种方法。攻击者的目标是通过拦截代理发送 HTTP POST/GET 请求,其数据值不受应用程序业务逻辑支持、防范或预期。伪造请求的一些示例包括利用可猜测或可预测的参数或公开“隐藏”的特性和功能,例如启用调试或显示特殊屏幕或窗口,这些屏幕或窗口在开发过程中非常有用,但可能会泄露信息或绕过业务逻辑。
与伪造请求的能力相关的漏洞对于每个应用程序来说都是独一无二的,并且与业务逻辑数据验证不同,因为它的重点是破坏业务逻辑工作流。
应用程序应具有适当的逻辑检查,以防止系统接受伪造请求,这些请求可能允许攻击者有机会利用应用程序的业务逻辑、流程或流程。请求伪造并不是什么新鲜事;攻击者使用拦截代理向应用程序发送 HTTP POST/GET 请求。通过请求伪造,攻击者可能能够通过查找、预测和操纵参数来规避业务逻辑或流程,使应用程序认为流程或任务已经发生或尚未发生。
此外,伪造请求可能允许通过调用“隐藏”特性或功能(例如最初由开发人员和测试人员使用的调试,有时称为 "彩蛋"来颠覆编程或业务逻辑流。“彩蛋是计算机程序、电影、书籍或填字游戏等作品中故意的内部笑话、隐藏信息或功能。根据游戏设计师沃伦·罗宾内特 (Warren Robinett) 的说法,这个词是由 Atari 创造的,他们被告知存在一条秘密信息,该信息已被罗宾内特隐藏在他已经广泛传播的游戏 Adventure 中。据说这个名字让人想起了传统的复活节彩蛋狩猎活动。
示例 1
假设一个电子商务剧院网站允许用户选择他们的门票,对整个销售应用一次性 10% 的高级折扣,查看小计并进行销售。如果攻击者能够通过代理看到应用程序有一个隐藏字段(1 或 0),则业务逻辑使用该字段来确定是否已使用折扣。然后,攻击者能够多次提交 1 或“未采取任何折扣”值,以多次利用相同的折扣。
示例 2
假设一个在线视频游戏为寻找海盗的宝藏、海盗以及完成的每个级别所获得的积分支付代币。这些代币稍后可以兑换奖品。此外,每个关卡的积分都有一个等于该关卡的乘数值。如果攻击者能够通过代理看到应用程序在开发和测试过程中使用了一个隐藏字段,以快速到达游戏的最高级别,他们就可以快速到达最高级别并快速积累未获得的积分。
此外,如果攻击者能够通过代理看到应用程序在开发和测试过程中有一个隐藏字段,以启用一个日志,指示其他在线玩家或隐藏宝藏与攻击者的关系,那么他们将能够快速转到这些位置并获得分数。
测试目标
- 查看项目文档,查找字段的可猜测、可预测或隐藏功能。
- 插入逻辑上有效的数据,以绕过正常的业务逻辑工作流。
如何测试
通过识别可猜测的值
- 使用拦截代理,观察 HTTP POST/GET,寻找值以固定间隔递增或易于猜到的一些指示。
- 如果发现某个值是可猜测的,则该值可能会更改,并且可能会获得意外的可见性。
通过识别隐藏选项
- 使用拦截代理,观察 HTTP POST/GET 查找隐藏功能的一些迹象,例如可以打开或激活的调试。
- 如果找到任何值,请尝试猜测并更改这些值以获得不同的应用程序响应或行为。
相关测试用例
修复
应用程序必须足够智能,并设计有业务逻辑,以防止攻击者预测和操纵参数以破坏编程或业务逻辑流,或利用隐藏/未记录的功能,例如调试。