
用合法掩饰非法,这10种业务逻辑安全漏洞,穿过保护机制套利提权
这是应用程式设计和实作中常见的缺陷,允许攻击者引发意外行为。这可能使攻击者能够操纵合法功能来实现恶意目标。识别它们通常需要一定程度的人类知识,例如了解业务领域或攻击者在给定上下文中可能有什么目标。这使得使用自动漏洞扫描器很难检测到它们。因此,Business Logic Vulnerabilities(业务逻辑漏洞)通常是错误赏金猎人和手动测试人员的重要目标。
简介
业务逻辑安全漏洞是应用程式设计和实作中常见的缺陷,允许攻击者引发意外行为。这可能使攻击者能够操纵合法功能来实现恶意目标。识别它们通常需要一定程度的人类知识,例如了解业务领域或攻击者在给定上下文中可能有什么目标。这使得使用自动漏洞扫描器很难检测到它们。因此,Business Logic Vulnerabilities(业务逻辑漏洞)通常是错误赏金猎人和手动测试人员的重要目标。
逻辑漏洞的产生,是因为设计和开发团队对使用者如何与应用程式互动做出了有缺陷的假设。常见的问题如下:
- 过度信任使用者操作:例如1未检查使用者输入
- 输入范围处理不当:例如2正负范围未处理,3数字边界处理不当, 4对异常输入的处理不一致
- 使用者不会总是遵循预期的顺序:例如在5特定流程输入的合理性未验证, 6端点未隔离, 7没有完整的流程检查, 8可以跳过流程的检查点
- 特定于业务领域的逻辑缺陷:例如9未检查业务状态, 10利用业务规则套利
1.未检查使用者输入
使用者送出请求时直接将商品价格修改成低价,系统也接受这个价格
举例如下
某一网站选择商品放入购物车时,可以看到以请求,价格为1337
POST /cart HTTP/2
...omit...
product=1&redir=PRODUCT&quantity=1&price=1337
因为过度信任使用者操作,所以用户可直接修改价格,如下
POST /cart HTTP/2
...omit...
product=1&redir=PRODUCT&quantity=1&price=1
此时到购物车后就会发现这个商品变成1元
2.正负范围未处理
送出请求时将购买数改成负数,导致买越多商品越便宜
举例如下
某一网站选择商品放入购物车时,输入负金额网站不会阻挡,
因此可以先选择商品,并将数量改成负数后放入购物车,如下
POST /cart HTTP/2
...omit...
product=2&redir=PRODUCT&quantity=-10&price=1337
在结帐页面会发现结帐金额变负,但因为是负金额无法结帐
因此要在选择其他商品放入购物车,一直到结帐金额变成正数,就可以正常结帐
3.数字边界处理不当
故意买很多商品,让结帐金额突破正数上限值而转成负数
举例如下
某一网站购物车结帐时,金额超过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之间
4.对异常输入的处理不一致
利用输入长度截段特性,伪造特定帐号
举例如下
某一网站在注册帐号时,系统会把用@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,因此成功获得管理者权限
Lab: Inconsistent handling of exceptional input
5.在特定流程输入的合理性未验证
系统提供用户改自己email的功能,但因为系统没有对email做验证,所以用户可以将email改成任何值
举例如下
某一网站会把用@dontwannacry.com
信箱注册的帐号当做admin
所以可先新注册一个帐号,然后在把自己的email改为xxx@dontwannacry.com
但因为网站存在逻辑漏洞,没有限制这个行为,而且系统只用email判断管理者,当系统发现刚新注册的帐号为xxx@dontwannacry.com
,就会判定为管理者。因此新注册的帐号成功取得admin身份
6.端点未隔离
系统提供用户改自己密码的功能,但因为系统没有做限制,所以用户可以改任何人的密码
举例如下
某一网站提供用户自己改密码的功能,但并不需要输入旧密码如下
POST /my-account/change-password HTTP/2
...omit...
csrf=89efyur6238edkf34&username=wiener&new-password-1=123qwe&new-password-2=123qwe
因此可以直接把username换成administrator,然后直接administrator的密码改成123qwe,如下
POST /my-account/change-password HTTP/2
...omit...
csrf=89efyur6238edkf34&username=administrator&new-password-1=123qwe&new-password-2=123qwe
7.没有完整的流程检查
使用者只要送出确认完成的参数,系统不检查就判定流程完成
举例如下
某一网站将商品放入购物车后,使用以下2步骤结帐
1. POST /cart/checkout
(统计金额100)
2. GET /cart/order-confirmation?order-confirmation=true
( 确认金额100付款完成)
但因为系统没有完整检查参数,因此攻击者可以在第2步最后结帐完成确认前,加入其他商品,如下
1.1 POST /cart/checkout
(统计金额100)
1.2 加入其他商品
2. GET /cart/order-confirmation?order-confirmation=true
( 确认金额100付款完成)
只需要传送购买结帐完成的参数,系统就会以为结帐完成,攻击者就可以得到商品
8.可以跳过流程的检查点
在登入时避开权限设定的参数,导致系统无法将权限做调整,让使用取得默认权限
举例如下
某一网站登入流程如下
1.POST /login
输入帐密登入
2.GET /role-selector
帐密确认成功后取得所有权限,所以会根据帐号角色将不必要的权限删除
所以攻击时只要把第2步的请求丢掉,网站就不会调整权限,因此就会维持所有权限的状态
9.未检查业务状态
业务规则执行时存在缺陷,在流程中没有记录重要状态
举例如下
某一网站提供coupon功能,一个coupon code只能用一次,连续使用会被系统禁止
但该系统有逻辑漏洞,只比较上一次的coupon code做判断,因此能用以下方式绕过有缺陷的检查机制
- 第1次,使用coupon code a
- 第2次,使用coupon code b
- 第3次,使用coupon code a 可以成功,因为和上次coupon code b不同,所以系统以为没用过
10.利用业务规则套利
利用即有商业规则,找出可以套利的方法
某一网站提供以下机制
- coupon code: 可免费取得, 不限制使用次数, 买任何商品可以打7折
- gift card: 取得一张要花10元, 1张只能用1次, 可折扺商品价格10元也可换成等价现金
因此只要透过以下步骤就能套利
- 用coupon code买gift card只要7元
- 把gift card换成等价现金10元,就能现赚3元
- 重覆1-2步骤多次,就能买到任何价格的商品
更多推荐
所有评论(0)