portswigger 业务逻辑漏洞
相关知识
业务逻辑漏洞的原理
逻辑漏洞是指由于程序逻辑不严导致一些逻辑分支处理错误造成的漏洞。
在实际开发中,因为开发者水平不一没有安全意识,而且业务发展迅速内部测试没有及时到位,所以常常会出现类似的漏洞。
此漏洞常出现在:交易界面、用户账户、验证码、越权等
业务逻辑的危害
访问权限绕过
敏感数据访问
执行非法交易
破坏业务运行
靶场实战
第一关
第一关要求购买商品 Lightweight l33t leather jacket
我们先点击 My account 登录一下 wiener:peter
然后点击 Home 返回主页面

我们点击View details
滑到最底部,看到有一个加入到购物车,我们先不急着加入购物车
先开启 burp 的拦截功能

然后我们回到刚刚的网页,然后添加到购物车Add to cart
返回 burp,可以看到如下请求
我们把最下面的 Price 改成 1

后面的请求都 Forward 放行就好了,然后我们关掉拦截
回到网页,点击 My account 右边的购物篮

然后我们点击 Place order 付款
最后我们以 0.01$的单价购买了该商品

第二关
第二关和第一关的区别是,标题多了个 高级
我们先登录,然后找到刚刚那个商品,直接加入购物车
我们通过 burp 抓取到刚刚加入购物车的 POST 请求
发现这里并没有和上一题一样的 price 参数,显然剩下的参数可用的只有 quantity 数量了
我们回到主页面
找到一个单价较高的商品,点击进入

如果在该网页直接修改数量为负数的话会发现不可行,这里做了前端校验
所以我们开启 burp 拦截功能
抓取 POST 包,修改 quantity 为 -99(实际上实验只需要-14)

关闭 burp 的拦截
然后我们点击购物车,发现需要支付的金额是负数,我们不管,直接点击Place order结账,然后他显示结账金额应为正数,看来并不能倒贴我们钱
那我们把-99 的数量产品增加,直到总账单金额为正数即可


第三关
这一关是垂直越权,普通用户也可以使用管理员功能
我们在访问这个实验后,在 burp 页面扫描改站点目录(爆破)

然后点击 Session is not running 后点击 yes
等上一段时间,直至发现这里多了个 admin

我们尝试访问一下 /admin 页面

发现无法访问,并且提示只能由账号为 DontWannaCry 用户访问
我们点击 Register 注册一个账号
注意:邮箱需要使用上方 Email client 提供的邮箱
注册后还需要再次点击 Email client 进行验证
然后我们再修改邮箱为 @DontWannaCry.com

再访问 /admin

根据题目需求,删掉 carlos 即可

第四关
这一关的描述没有什么特别的,但是进来后发现有一栏,这个是优惠券

我们先登录再说
然后我们直接把要买的 Lightweight l33t leather jacket 加入购物车
然后键入优惠券并提交

当我们再次提交,发现不可用再用了
我们回到 Home 划到最下面
下方有个注册,我们随便注册一下
然后弹出来一个新的优惠券

我们回到购物篮,把新的优惠券填进去

我们再试试刚刚的 NEWCUST5 优惠券,发现成功了,再试试 SIGNUP30,也成功,以此类推
说明这里只要交替使用优惠券即可

最终实现 0 元购

第五关
这里总额数据大到一定程度会溢出(2,147,483,647),然后变成负数(从-2,147,483,648开始)
我们先将一个物品加入购物车,获取其 POST 请求,把该 POST 请求发送到 Intruder

清除载荷,并修改数量为 99

选择 Null payloads

次数选择325

开始攻击,如果不行的话把模式改成攻城锤Battering ram
然后我们选别的商品凑单,凑到为整数 0-100
(由于测试时偷偷用掉了一点钱,所以我的余额并没有 100)

第六关
这一关题目说明需要在注册界面利用漏洞来访问管理员功能,删除Carlos
根据之前的做法,我们可以通过扫描目录获得 /admin ,登录进去还是需要 DontWannaCry 用户
首先,注册一个用户,然后再验证该用户,返回该用户的时候发现并没有修改邮箱的选项
那么我们尝试直接在注册页面修改邮箱,利用长度截断(256个字符)使得注册的邮箱地址为@dontwannacry.com
1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111@dontwannacry.com.exploit-ac4b1f8f1e6bd1c6c1fa0c6201da0097.web-security-academy.net
截止至@dontwannacry.com刚好 256 个字符
注册完验证后我们登录账户

发现后面的确实是需要的邮箱地址
再登录 /admin

删除 carlos 即可
注意,截断的是登录的时候(比如在 admin 登录),用户注册并需要邮箱验证的则没有被截断,否则,邮箱收不到验证信息
第七关
我们先用 wiener:peter 登录
如果使用 burp 的目录扫描功能,可以扫描出 /admin 目录
我们访问该页面会显示需要 administrator 用户
尝试一下把用户名改成这个

再输入完其他后,显示当前密码不正确并提示你的用户名是 administrator
从这里,我们可以发现,这里可以修改任意用户的密码
我们先抓包看看正常修改密码的流程是怎样的

可以看到有一个 POST 请求包,包含了刚刚输入的信息

把该报发送到 Repeater,把用户改成 administrator 并删掉 current-password=peter 再发送

密码修改成功,接下来登录管理员账号并访问 /admin 删除掉 carlos 即可

第八关
使用wiener:peter登录后我们先把任务物品加入购物车,点击支付
我们可以看到支付界面发送了一个 POST 包,并且又发送了一个 GET 包
需要留意的是这个 GET 包

我们随便买一个便宜的东西,看看正常的流程是如何

买单
回到 burp 看看

可以看到这里和刚刚是有区别的
我们把差异的部分复制下来
/order-confirmation?order-confirmed=true
我们再把任务物品加入购物车,在买单前启动 burp 的拦截功能
第一个 POST 放行,随后的 GET 包修改成

购买成功

第九关
题目:通过有缺陷的状态机绕过身份验证
和前面一样,使用 burp 的目录扫描功能,即可扫描出 /admin 目录,就不演示了
访问 /admin 显示需要使用 administrator 账号

启动 burp 的拦截功能
先登录 wiener:peter
放行用户登录 POST 请求,随后扔掉角色选择的 GET 包

可以看到,他也看出来我们扔掉了这个包

我们不管,直接回到主页,发现已经登录了(如果点击我的用户可以发现就是管理员账号)

我们访问 /admin

删除 carlos

(第十关)[https://portswigger.net/web-security/logic-flaws/examples/lab-logic-flaws-infinite-money]
无限💰 greedisgood99999999999
先登录 wiener:peter
登录完后返回主页
我们最下面看到有一个注册拿优惠券的功能


把礼品卡加入购物车,进入购物篮

输入刚刚的码,买单

复制兑换码
回到 My account 换钱

可以看到赚了 3 块钱
使用宏功能批量操作刚刚的过程,我们打开 burp
点击 Project options - Sessions
然后在 Session Handling Rules
点击 Add 然后点 Scope 把 URL Scope 改为 Include all URLs

在 Details 的 Rule Actions 选择 Add Run a macro

然后再点击 Add
选择刚刚进行的操作(4个 POST 1 个 GET)







全点 ok ,访问 MY account ,把请求包发送到 Intruder
清除全部 payload

如图选择 Null payloads

线程池选择 1

开始攻击

可以看到金额确实增加了



第十一关
登录账户 wiener:peter 记得勾选保持登录

我们修改一下邮箱,看看包


可以发现这里的 notification 应该就是刚刚输入的邮箱
回到主页,随便点击一篇博客

发现无法评论,显示邮箱不合法

我们抓包看看刚刚的请求包
注意红框框住的


可以看到这里的 notification 应该就是刚刚填的邮箱通过加密而来
说明这里可以进行加密
我们再评论一次,这次使用拦截功能

第一个 POST 包直接放行
第二个把 notification 修改成 stay-logged-in

可以看到 stay-logged-in 的解码内容是这个

wiener:1653032784455
我们在下方评论区再次评论,内容修改为administrator:1653032784455

抓包,复制获取响应的 notification

C%2f8Uc2smsqCClbg1qF6tr70LA2yCdMvOop6kZBlNFdigJn8JHJXlIRdHOVy5LcMpQw7niZFV9pg8Wczf15MRUA%3d%3d
我们在拦截功能开启的情况下访问 /admin
修改 stay-logged-in


先写到这,后面再更新

浙公网安备 33010602011771号