业务逻辑漏洞是应用程式设计和实作中常见的缺陷,允许攻击者引发意外行为。 这可能使攻击者能够操纵合法功能来实现恶意目标。 识别它们通常需要一定程度的人类知识,例如了解业务领域或攻击者在给定上下文中可能有什么目标。 这使得使用自动漏洞扫描器很难检测到它们。 因此,Business Logic Vulnerabilities(业务逻辑漏洞)通常是错误赏金猎人和手动测试人员的重要目标。
逻辑漏洞的产生,是因为设计和开发团队对使用者如何与应用程式互动做出了有缺陷的假设。常见的问题如下:
输入範围处理不当:例如正负範围未处理,数字边界处理不当, 对异常输入的处理不一致过度信任使用者操作:例如未检查使用者输入使用者不会总是遵循预期的顺序:例如在特定流程输入的合理性未验证, 端点未隔离, 没有完整的流程检查, 可以跳过流程的检查点特定于业务领域的逻辑缺陷:例如未检查业务状态, 利用业务规则套利输入範围处理不当
在这输入範围处理不当的类型中,常见的手法有以下几种
正负範围未处理数字边界处理不当对异常输入的处理不一致正负範围未处理
送出请求时将购买数改成负数,导致买越多商品越便宜
举例如下
某一网站选择商品放入购物车时,输入负金额网站不会阻挡,
因此可以先选择商品,并将数量改成负数后放入购物车,如下
POST /cart HTTP/2...omit...product=2&redir=PRODUCT&quantity=-10&price=1337
在结帐页面会发现结帐金额变负,但因为是负金额无法结帐
因此要在选择其他商品放入购物车,一直到结帐金额变成正数,就可以正常结帐
数字边界处理不当
故意买很多商品,让结帐金额突破正数上限值而转成负数
举例如下
某一网站购物车结帐时,金额超过2,147,483,647会变成-2,147,483,647
所以先选择商品并将数量设定99后放入购物车,在把以下请求传到burp intruder,选择null payloads后设定Continue indefinitely发动攻击
POST /cart HTTP/2...omit...product=1&redir=PRODUCT&quantity=99&price=1337
当攻击正在进行时,刷新页面监控总价,一但总价超过2,147,483,647就会变成-2,147,483,648,然后慢慢接近0
一旦快接近0就可以停止攻击,并搭配选择其他商品让总价维持在0-100之间
对异常输入的处理不一致
利用输入长度截段特性,伪造特定帐号
举例如下
某一网站在注册帐号时,系统会把用@dontwannacry.com信箱注册的帐号当做admin,而且只支持255个字元
所以先设计一个@dontwannacry.com域名的email帐号,长度要255字元如下
attack1234attack1234attack1234attack1234attack1234attack1234attack1234attack1234attack1234attack1234attack1234attack1234attack1234attack1234attack1234attack1234attack1234attack1234attack1234attack1234verylongstringverylongstringverylongst@dontwannacry.com
在设计一个包含dontwannacry.com字符串的email域名,并加入其中,如下
attack1234attack1234attack1234attack1234attack1234attack1234attack1234attack1234attack1234attack1234attack1234attack1234attack1234attack1234attack1234attack1234attack1234attack1234attack1234attack1234verylongstringverylongstringverylongst@dontwannacry.com.ac881fc51ee252ee80936d82019b0090.web-security-academy.net
确认该域名@dontwannacry.com.ac881fc51ee252ee80936d82019b0090.web-security-academy.net能收到信后,用这个email注册,收到信点击确认链结后,注册成功并登入
但因为网站在登入注册的逻辑上有问题,当帐户超过255个字会被截段,因此网站会误认为是用以下的@dontwannacry.com当做注册帐号
attack1234attack1234attack1234attack1234attack1234attack1234attack1234attack1234attack1234attack1234attack1234attack1234attack1234attack1234attack1234attack1234attack1234attack1234attack1234attack1234verylongstringverylongstringverylongst@dontwannacry.com
由于系统会把用@dontwannacry.com信箱注册的帐号当做admin,因此成功获得管理者权限
其他三种类型的业务逻辑漏洞,可参考业务逻辑漏洞 https://systw.net/note/archives/1516