BurpSuite官方实验室之逻辑漏洞
这是BurpSuit官方的实验室靶场,以下将记录个人逻辑漏洞共11个Lab的通关过程
Web Security Academy: Free Online Training from PortSwigger
lab1:
Excessive trust in client-side controls
过度信任客户端控件
目标是买一件Lightweight “l33t” Leather Jacket,给了账号和密码账户wiener:peter
登录后账号只有100美金但购买的商品是1337美金,直接购买会提示余额不足。
查看了apply和place order的请求包并不存在相关的金额数量参数
重新将商品加入购物车拦截请求包
请求包如下
猜测price为金额字段进行修改,修改为0和0.1失败,修改为1成功加入购物车,金额为0.01美元
成功提交订单
lab2:
High-level logic vulnerability
高级逻辑漏洞
目标同样是买一件Lightweight “l33t” Leather Jacket
同样拦截加入购物车的请求包,发现没了price只能更改数量
加入另一个商品,抓包更改请求quantity属性为-20
总价为负数提交失败,增加到正数
购买成功
lab3:
Inconsistent security controls
不一致的安全控制
目标到管理后台删除Carlos用户
在target=>site map
可以线程数设置大一点,扫的有点慢
也可以用脚本,扫到存在/admin的路径
尝试访问/admin,访问失败说只有DontWannaCry用户才能访问这个界面
这个DontWannaCry是什么鬼,进入注册页面给了提示,使用@dontwannacry.com的邮箱地址就可以了
用@dontwannacry.com结尾的邮箱注册失败
在email client界面找到了我们的邮箱
格式为
@exploit-0a98002904e66735c1014106016d00d1.exploit-server.net
注册一个
tpaer@exploit-0a98002904e66735c1014106016d00d1.exploit-server.net
找到响应的link
访问url注册成功
登录来到如下页面
直接把邮箱后缀修改为@dontwannacry.com结尾,成功多出Admin pannel
删除Carlos用户成功通关
lab4:
Flawed enforcement of business rules
商业规则的执行有缺陷
目标购买Lightweight “l33t” Leather Jacket,进页面给了提示在结账时使用这个code
取结账页面发现这个代码实际是一个5美金优惠券的代码,添加即可减少金额
减5美金肯定是不够的,看看这个券的code能不能重复使用,显示优惠券重复使用了
看在哪还能找到优惠券,在商品底部发现一个sign up界面
用我们的邮箱登录获得了另一张优惠券SIGNUP30
这个减的多减了400刀,但还是买不起
试着可不可以间优惠券重复利用,成功利用
利用该逻辑漏洞成功零元购
lab5:
Low-level logic flaw
低级逻辑缺陷
目标购买Lightweight “l33t” Leather Jacket
还是钱不够,可控的只有商品的购买数量
如果一个参数超过了后端编程语言变量类型的整数最大值就会循环到最小值
例如-2147483648~2147483647,当超过2147483647就会从-2147483648开始
我们可以控制数量进而控制总金额超过整数最大值变为负数,配合购买其他商品实现零元购。
更改quantity商品增加数量为99(最大值),试了100不可以
开始爆破到总价趋近于0时停止,经测试大概320多次99
接下来添加另一个商品,将总金额提升到0~100
成功购买
lab6:
Inconsistent handling of exceptional input
异常输入的不一致处理
目标到管理面板删除carlos用户
这个关卡似曾相识和lab3差不多,尝试一样的方法注册账号
知道了我们注册的邮箱后缀,进行注册
@exploit-0a81002e04cdda20c143199d014d00b6.exploit-server.net
登录后台这次不一样了,没给更改邮箱的按钮
尝试使用
{多个字符}@dontwannacry.com@exploit-0a81002e04cdda20c143199d014d00b6.exploit-server.net
多个字符把后面的@exploit-0a81002e04cdda20c143199d014d00b6.exploit-server.net屏蔽掉
ssdsasdasdsadsasdasdasdsadasdasdsadsadsadsadasdsadsadasdasdsadsadsadsadsadsadsadadasdasdsadasdasdassssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss@dontwannacry.com.exploit-0a81002e04cdda20c143199d014d00b6.exploit-server.net
成功进入管理面板删除carlos用户
lab7:
Weak isolation on dual-use endpoint
两用端点上的弱隔离
目标是登录administrator删除carlos用户,给了账号密码wiener:peter
登录后界面如下,尝试更改密码
抓包
删除current-password看是否能修改,修改成功
更改username为administrator看是否能修改其他用户密码,修改成功
使用administrator账户登录,删除carlos
lab8:
Insufficient workflow validation
工作流验证不足
目标给了账号让买商品
号里有100刀,先随便购买一个便宜的place order并抓包
POST /cart/checkout请求会重定向到订单确认页面
GET /cart/order-confirmation?order-confirmation=true
成功购买
当将购买商品加入购物车
重新发包GET /cart/order-confirmation?order-confirmation=true
购买成功
lab9:
Authentication bypass via flawed state machine
通过有缺陷的状态机绕过认证
目标给了用户管理界面删除carlos
登录后有个选角色的界面
抓包登录
其中第二个包/role-selector好像是角色选取把它drop掉
现在路径如下
https://0a6300dc03469877c024b48000ce0035.web-security-academy.net/role-selector
删除/role-selector直接访问首页,因为跳过了角色选择默认为administrator当访问首页是以administrator权限进行访问的因此会有Admin panel
直接进入Admin panel删除carlos
lab10:
Infinite money logic flaw
无限金钱逻辑缺陷
目标买商品
在页面底端注册获得优惠券
SIGNUP30
使用优惠券购买Gift Card礼品卡(礼品卡相当于一个10元的购物券可以赠送),当用3元优惠券购买10元的礼品卡,就相当于7元购买了10元然后再进行使用用户的余额就会多了3元将优惠券金额转换为真实的余额。
购买后得到礼品卡的卡号
YRhyyNYl8T
在用户页面进行兑换
余额成功如预期一样增加了3元
如果优惠券可以重复使用,就可以利用该操作达到无限金额的效果,成功复用优惠券
接下来利用bp中的宏来进行完成一系列的自动化操作
首先新建规则,范围包括所有的URL:
新建宏指令:
选择如下5个URL
为第四个URL配置项目
选择gift-card的code并起名gift-card
为第五个URL配置项目
选择参数 gift-card 的来源自第四个响应包:
配置完毕后测试宏,账户成功又增加了3刀
sniper模式爆破/my-account
需要单线程来跑,这个2022的burp
跑了很久终于跑完了
lab11:
Authentication bypass via encryption oracle
通过加密oracle绕过身份验证
目标管理界面删除carlos
登录界面,有stay logged in(保持登录状态)选项
勾选登录会有如下请求包
在评论区评论
拦截到如下请求:
第一个包
第二个包
第三个包
当使用错误的电子邮箱评论时
响应会重定向到刚才的博客页面,并设置一个加密的cookie字段notification
将cookie中的stay-logged-in
字段复制到notification
中进行发包得到当前用户名+时间戳
wiener:1669636281964
邮件参数更改为管理员用户名+时间戳
administrator:1669636281964
发送请求后从cookie字段 得到新的 notification 的值,解密后发现有干扰字段 Invalid email
将得到的新的 notification 利用 Burp Decoder进行解密加密
Decode:
URL=>Base64=>Hex删除23字节
Encode:
Base64=>URL
最终得到
%7a%7a%73%4c%34%6d%6f%68%30%6e%77%4d%34%53%55%76%70%78%73%31%5a%42%4f%4f%30%71%6a%4a%68%46%35%59%76%48%62%34%77%39%4e%69%6b%4d%65%79%57%73%39%6b%6c%50%46%73%77%39%49%3d
将编码替换到cookie 字段的 notification 值
随后观察错误信息发现使用了基于块的加密算法,输入长度必须是16的倍数
用一些的字节来填充 email,最后获得新的 notification
administrator + 时间戳
xxxxxxxxxadministrator:1669636281964
FklldvYsXP81Suq15eJd7AQ75jOjvpsPom8buuyniI5aMt2BY3cKBS2oxaIO%2b24xz3qDeQHraVMB0fT49MivDA%3d%3d
对字符串进行解码编码:
Decode:
URL=>Base64=>Hex删除32字节(16倍数)
Encode:
Base64=>URL
最终得到如下编码,替换notification重发评论包可以看到正确的administrator + 时间戳
%57%6a%4c%64%67%57%4e%33%43%67%55%74%71%4d%57%69%44%76%74%75%4d%63%39%36%67%33%6b%42%36%32%6c%54%41%64%48%30%2b%50%54%49%72%77%77%3d
点击 HOME 回到主页,拦截请求包,删除cookie中的 session ,替换 stay-logged-in 为刚才解码的得到的URL编码,修改后放包
回到主页面后发现是以administrator身份登录的,有Admin panel的管理界面
删除carlos成功通关