burp靶场–业务逻辑漏洞
https://portswigger.net/web-security/logic-flaws#what-are-business-logic-vulnerabilities
### 什么是业务逻辑漏洞?
业务逻辑漏洞是应用程序设计和实现中的缺陷,允许攻击者引发意外行为。这可能使攻击者能够操纵合法功能来实现恶意目标。这些缺陷通常是由于未能预见可能发生的异常应用程序状态而导致的,因此未能安全地处理它们。
实验1:过度信任客户端控制【购物车商品价格修改导致低价购买商品】
### 实验要求:
该实验室没有充分验证用户输入。您可以利用其采购工作流程中的逻辑缺陷以意想不到的价格购买商品。要解决实验室问题,请购买“轻量级l33t皮夹克”。
您可以使用以下凭据登录您自己的帐户:wiener:peter
###
运行 Burp 后,登录并尝试购买皮夹克。由于您没有足够的商店积分,订单被拒绝。
在 Burp 中,转到“代理”>“HTTP 历史记录”并研究订单流程。请注意,当您将商品添加到购物车时,相应的请求包含一个price参数。将POST /cart请求发送到 Burp Repeater。
在 Burp Repeater 中,将价格更改为任意整数并发送请求。刷新购物车并确认价格已根据您的输入进行更改。
重复此过程,将价格设置为低于您可用商店积分的任意金额。
完成解决实验室的命令。
实验2:高级逻辑漏洞
### 实验要求:
该实验室没有充分验证用户输入。您可以利用其采购工作流程中的逻辑缺陷以意想不到的价格购买商品。要解决实验室问题,请购买“轻量级l33t皮夹克”。
您可以使用以下凭据登录您自己的帐户:wiener:peter
### 实验操作:
运行 Burp 后,登录并将便宜的商品添加到您的购物车。
在Burp中,转到“代理”>“HTTP历史记录”并研究相应的HTTP消息。请注意,数量由POST /cart请求中的参数确定。
转到“拦截”选项卡并打开拦截。将另一个项目添加到您的购物车并转到POST /cartBurp 中拦截的请求。
将参数更改quantity为任意整数,然后转发任何剩余的请求。您会发现购物车中的数量已根据您的输入成功更新。
重复此过程,但这次请求负数。检查是否已成功从购物车数量中扣除。
请求合适的负数量以从购物车中删除比当前包含的更多的商品。确认您已成功强制购物车包含负数量的产品。转到您的购物车,请注意总价现在也是负数。
像往常一样将皮夹克添加到您的购物车。添加另一个商品的适当负数量,以将总价降低到低于您的剩余商店积分。
下订单解决实验室问题。
支付成功,发现实验未完成,需要购物l33t商品才行:
重新修改商品购物车:总价为正,指定商品l33t为正数,购买成功。
实验3:安全控制不一致
###【管理接口鉴定权限错误+修改账号邮箱地址未校验,导致管理接口以邮箱号为权限认定方式导致绕过】
### 实验要求:
该实验室有缺陷的逻辑允许任意用户访问仅应由公司员工使用的管理功能。要解决该实验,请访问管理面板并删除用户carlos。
### 实验操作:
打开实验室,然后转到 Burp 中的“目标”>“站点地图”选项卡。右键单击实验室域并选择“参与工具”>“发现内容”以打开内容发现工具。
单击“会话未运行”以开始内容发现。片刻之后,查看对话框中的“站点地图”选项卡。请注意,它发现了路径/admin。
尝试浏览到/admin. 尽管您无权访问,但错误消息表明DontWannaCry用户有访问权限。
进入账户注册页面。请注意通知DontWannaCry员工使用公司电子邮件地址的消息。使用任意电子邮件地址注册,格式如下:
anything@your-email-id.web-security-academy.net
您可以通过单击“电子邮件客户端”按钮找到您的电子邮件域名。
前往邮件客户端,点击确认邮件中的链接即可完成注册。
使用您的新帐户登录并转到“我的帐户”页面。请注意,您可以选择更改您的电子邮件地址。将您的电子邮件地址更改为任意@dontwannacry.com地址。
请注意,您现在可以访问管理面板,您可以在其中删除carlos以解决实验
进入站点进行用户注册:注册邮件账户实验实验室提供的账户:
attacker@exploit-0a3900ac03381e4f801cca3001230032.exploit-server.net
点击邮箱确认,账户注册成功:
实验4:业务规则执行存在缺陷【优惠券功能逻辑错误导致低价购买商品】
### 实验要求:
该实验室的采购流程存在逻辑缺陷。要解决实验室问题,请利用此缺陷购买“轻量级 l33t 皮夹克”。
您可以使用以下凭据登录您自己的帐户:wiener:peter
### 实验操作:
登录并注意有一个优惠券代码,NEWCUST5。
在页面底部,注册新闻通讯。您会收到另一个优惠券代码,SIGNUP30。
将皮夹克添加到您的购物车。
前往结账台并应用两个优惠券代码即可获得订单折扣。
尝试多次应用这些代码。请注意,如果您连续两次输入相同的代码,则会被拒绝,因为优惠券已被应用。但是,如果您交替使用这两个代码,则可以绕过此控制。
重复使用这两个代码足够多的次数,将您的订单总额减少到少于剩余的商店积分。完成解决实验室的命令。
未登陆状态下访问站点获得另一个优惠券:
实验5:低级逻辑缺陷
登录账号,购买商品的数量一次最多可以 +99,可以用 Burp 的 intruder 送到 Overflow
### 实验要求:
该实验室没有充分验证用户输入。您可以利用其采购工作流程中的逻辑缺陷以意想不到的价格购买商品。要解决实验室问题,请购买“轻量级l33t皮夹克”。
您可以使用以下凭据登录您自己的帐户:wiener:peter
### 实验操作:
运行 Burp 后,登录并尝试购买皮夹克。由于您没有足够的商店积分,订单被拒绝。在代理历史记录中,研究订单流程。将POST /cart请求发送到 Burp Repeater。
在 Burp Repeater 中,请注意,您只能为每个请求添加 2 位数字的数量。将请求发送给 Burp Intruder。
转到打嗝入侵者。在“位置”选项卡上,将quantity参数设置为99。
在“有效负载”选项卡上,选择有效负载类型“空有效负载”。在“有效负载设置”下,选择“无限期继续”。开始攻击。
当攻击正在进行时,转到您的购物车。经常刷新页面并监控总价。最后,请注意,价格突然切换为一个大的负整数,并开始向 0 递增。价格已超过后端编程语言允许的整数最大值 (2,147,483,647)。结果,该值已循环回最小可能值 (-2,147,483,648)。
清理你的购物车。在接下来的几个步骤中,我们将尝试添加足够的单位,以便价格循环并稳定在 0 美元到剩余商店积分的 100 美元之间。仅使用皮夹克在数学上是不可能的。请注意,夹克的价格以美分存储 (133700)。
再次创建相同的入侵者攻击,但这一次,在“有效负载”>“有效负载设置”下,选择生成准确的323有效负载。
转到“资源池”选项卡,将攻击添加到“最大并发请求数”设置为 的资源池中1。开始攻击。
当 Intruder 攻击完成后,转到POST /cartBurp Repeater 中的请求并发送单个47夹克请求。订单的总价现在应该是-$1221.96。
使用 Burp Repeater 将适量的其他商品添加到您的购物车,使总金额在 0 美元到 100 美元之间。
下订单解决实验室问题。
无限重放:
总价数据有负数有正数转化,说明存在溢出,32bit的整形溢出 -2,147,483,648到2,147,483,647范围:由于上面fuzz一直在跳动,无法在总价在0-100之间停下,所以重新设置intruder:设置生成232次空复制测试:
添加其他商品,用同样的方法在intruder操作,直到总金额为0-100
实验6:对异常输入的处理不一致
### 实验要求:
该实验室没有充分验证用户输入。您可以利用其帐户注册过程中的逻辑缺陷来访问管理功能。要解决该实验,请访问管理面板并删除用户carlos。
### 实验操作:
通过 Burp 代理流量时,打开实验室并转到“目标”>“站点地图”选项卡。右键单击实验室域并选择“参与工具”>“发现内容”以打开内容发现工具。
单击“会话未运行”以开始内容发现。片刻之后,查看对话框中的“站点地图”选项卡。请注意,它发现了路径/admin。
尝试浏览到/admin. 尽管您无权访问,但错误消息表明DontWannaCry用户有访问权限。
进入账户注册页面。请注意通知DontWannaCry员工使用公司电子邮件地址的消息。
通过实验室横幅中的按钮,打开电子邮件客户端。记下您的电子邮件服务器域名中的唯一 ID ( @YOUR-EMAIL-ID.web-security-academy.net)。
返回实验室并使用非常长的电子邮件地址进行注册,格式如下:
very-long-string@YOUR-EMAIL-ID.web-security-academy.net
长度应very-long-string至少为 200 个字符。
转到电子邮件客户端,您会发现您已收到一封确认电子邮件。单击该链接即可完成注册过程。
登录并进入“我的帐户”页面。请注意,您的电子邮件地址已被截断为 255 个字符。
注销并返回帐户注册页面。
使用另一个长电子邮件地址注册一个新帐户,但这一次将dontwannacry.com子域包含在您的电子邮件地址中,如下所示:
very-long-string@dontwannacry.com.YOUR-EMAIL-ID.web-security-academy.net
确保 的very-long-string字符数正确,以便m末尾的“ ”@dontwannacry.com恰好是字符 255。
转到电子邮件客户端,然后单击您收到的确认电子邮件中的链接。登录到您的新帐户,您会发现您现在可以访问管理面板。确认电子邮件已成功发送到您的电子邮件客户端,但应用程序服务器将与您的帐户关联的地址截断为 255 个字符。因此,您能够使用看似有效的@dontwannacry.com地址进行注册。您可以从“我的帐户”页面确认这一点。
转到管理面板并删除carlos以解决实验室问题。
使用实验室给定的邮箱账户注册一个站点的账户:attacker:111 注册玩登陆,看到自己的邮箱账户:
使用构造的超长字符串邮箱注册:
实验7:双用端点的弱隔离【重置密码修改参数,实现重置任意账户密码】
### 实验要求:
该实验室根据用户的输入对用户的权限级别做出了有缺陷的假设。因此,您可以利用其帐户管理功能的逻辑来访问任意用户的帐户。要解决本实验,请访问administrator帐户并删除用户carlos。
您可以使用以下凭据登录您自己的帐户:wiener:peter
### 实验 操作:
运行 Burp 后,登录并访问您的帐户页面。
更改您的密码。
研究POST /my-account/change-passwordBurp Repeater 中的请求。
请注意,如果您current-password完全删除该参数,则无需提供当前密码即可成功更改密码。
观察发现修改密码的用户是由该username参数确定的。再次设置username=administrator并发送请求。
注销并注意,您现在可以administrator使用刚刚设置的密码成功登录。
转到管理面板并删除carlos以解决实验室问题。
实验8:工作流程验证不足
### 实验要求:
该实验室对采购工作流程中的事件顺序做出了有缺陷的假设。要解决实验室问题,请利用此缺陷购买“轻量级 l33t 皮夹克”。
您可以使用以下凭据登录您自己的帐户:wiener:peter
### 实验操作:
运行 Burp 后,登录并使用商店积分购买任何您能买得起的商品。
研究代理历史。请注意,当您下订单时,POST /cart/checkout请求会将您重定向到订单确认页面。发送GET /cart/order-confirmation?order-confirmation=true到 Burp Repeater。
将皮夹克添加到您的购物篮中。
在Burp Repeater中,重新发送订单确认请求。请注意,订单已完成,且成本未从您的商店信用中扣除,并且实验室已解决。
实验9:通过有缺陷的状态机绕过身份验证
### 实验要求:
该实验室对登录过程中的事件顺序做出了有缺陷的假设。要解决该实验室问题,请利用此缺陷绕过实验室的身份验证,访问管理界面并删除用户carlos。
您可以使用以下凭据登录您自己的帐户:wiener:peter
### 实验操作:
运行 Burp 后,完成登录过程,并注意您需要选择您的角色,然后才能进入主页。
使用内容发现工具来识别/admin路径。
尝试直接从角色选择页面浏览/admin并观察到这不起作用。
注销然后返回登录页面。在Burp中,打开代理拦截然后登录。
转发POST /login请求。下一个请求是GET /role-selector. 放弃此请求,然后浏览到实验室的主页。请注意,您的角色已默认为该administrator角色,并且您可以访问管理面板。
删除carlos解决实验室。
正常用户wiener登陆,无法访问控制面板:
丢弃角色请求:
实验10:无限金钱逻辑缺陷
### 实验要求:
该实验室的采购流程存在逻辑缺陷。要解决实验室问题,请利用此缺陷购买“轻量级 l33t 皮夹克”。
您可以使用以下凭据登录您自己的帐户:wiener:peter
### 实验操作:
该解决方案使用 Burp Intruder 来自动化购买和兑换礼品卡的过程。精通 Python 的用户可能更喜欢使用 Turbo Intruder 扩展。
运行 Burp 后,登录并注册新闻通讯以获取优惠券代码SIGNUP30。请注意,您可以购买 10 美元的礼品卡并从“我的帐户”页面兑换。
将礼品卡添加到您的购物篮中,然后前往结账。使用优惠券代码即可享受 30% 的折扣。完成订单并将礼品卡代码复制到剪贴板。
前往您的帐户页面并兑换礼品卡。请注意,整个过程已为您的商店积分增加了 3 美元。现在您需要尝试自动化此过程。
gift-card研究代理历史记录并注意您通过在请求参数 中提供代码来兑换礼品卡POST /gift-card。
转到“项目选项”>“会话”。在“会话处理规则”面板中,单击“添加”。“会话处理规则编辑器”对话框打开。
在对话框中,转到“范围”选项卡。在“URL 范围”下,选择“包括所有 URL”。
返回“详细信息”选项卡。在“规则操作”下,单击“添加”>“运行宏”。在“选择宏”下,再次单击“添加”以打开宏记录器。
选择以下请求序列:
POST /cart
POST /cart/coupon
POST /cart/checkout
GET /cart/order-confirmation?order-confirmed=true
POST /gift-card
然后,单击“确定”。宏编辑器打开。
在请求列表中,选择GET /cart/order-confirmation?order-confirmed=true。单击“配置项目”。在打开的对话框中,单击“添加”以创建自定义参数。为参数命名gift-card并突出显示响应底部的礼品卡代码。单击“确定”两次返回宏编辑器。
选择POST /gift-card请求并再次单击“配置项目”。在“参数处理”部分中,使用下拉菜单指定参数gift-card应源自先前的响应(响应 4)。单击“确定”。
在宏编辑器中,单击“测试宏”。查看响应GET /cart/order-confirmation?order-confirmation=true并记下生成的礼品卡代码。看看POST /gift-card请求。确保gift-card参数匹配并确认收到响应302。继续单击“确定”,直到返回 Burp 主窗口。
将请求发送GET /my-account给 Burp Intruder。使用“狙击手”攻击类型。
在“有效负载”选项卡上,选择有效负载类型“空有效负载”。在“有效负载设置”下,选择生成412有效负载。
转到“资源池”选项卡,将攻击添加到“最大并发请求数”设置为 的资源池中1。开始攻击。
攻击结束后,您将有足够的商店信用来购买夹克并解决实验室问题。
签到领优惠券:
Dm1MR5tYm2
兑换礼品卡:
将上述过程使用burp变成自动化:
POST /cart 将礼品卡加入购物车
POST /cart/coupon 使用优惠券
POST /cart/checkout 结账
GET /cart/order-confirmation?order-confirmed=true 确认订单
POST /gift-card 兑换礼品卡
实验11:通过加密oracle绕过身份验证
### 实验要求:
该实验室存在一个逻辑缺陷,该缺陷会向用户公开加密预言。要解决该实验室问题,请利用此缺陷来访问管理面板并删除用户carlos。
您可以使用以下凭据登录您自己的帐户:wiener:peter
### 实验操作:
启用“保持登录状态”选项登录并发表评论。使用 Burp 的手动测试工具研究相应的请求和响应。观察stay-logged-incookie 是否已加密。
请注意,当您尝试使用无效的电子邮件地址提交评论时,响应会notification在将您重定向到博客文章之前设置一个加密的 cookie。
请注意,错误消息以email明文形式反映了您从参数中输入的内容:
Invalid email address: your-invalid-email
推断这必须从notificationcookie 中解密。将当前请求POST /post/comment和后续GET /post?postId=x请求(包含通知 cookie)发送到 Burp Repeater。
在Repeater中,观察到您可以使用请求email的参数POST来加密任意数据,并在标头中反映相应的密文Set-Cookie。同样,您可以使用请求notification中的 cookieGET来解密任意密文并将输出反映在错误消息中。为简单起见,双击每个请求的选项卡并分别重命名选项卡encrypt和decrypt。
在解密请求中,复制您的stay-logged-incookie 并将其粘贴到notificationcookie 中。发送请求。响应现在包含解密的stay-logged-incookie,而不是错误消息,例如:
wiener:1598530205184
这表明 cookie 的格式应为username:timestamp. 将时间戳复制到剪贴板。
转到加密请求并将电子邮件参数更改为administrator:your-timestamp。发送请求,然后notification从响应中复制新的 cookie。
解密这个新的 cookie,并观察到 23 个字符的“ Invalid email address: ”前缀会自动添加到您使用email参数传入的任何值中。将notificationcookie 发送到 Burp Decoder。
在解码器中,对 cookie 进行 URL 解码和 Base64 解码。
在 Burp Repeater 中,切换到消息编辑器的“十六进制”选项卡。选择前 23 个字节,然后右键单击并选择“删除所选字节”。
重新编码数据并将结果复制到notification解密请求的cookie中。发送请求时,观察有错误提示,说明使用的是基于块的加密算法,且输入长度必须是16的倍数,需要在“ Invalid email address: ”前缀中填充足够的字节,使得字节数您将删除 16 的倍数。
在 Burp Repeater 中,返回加密请求并在预期 cookie 值的开头添加 9 个字符,例如:
xxxxxxxxxadministrator:your-timestamp
加密该输入并使用解密请求来测试它是否可以成功解密。
将新密文发送到 Decoder,然后对其进行 URL 和 Base64 解码。这次,删除数据开头的 32 个字节。重新编码数据并将其粘贴到notification解密请求中的参数中。检查响应以确认您的输入已成功解密,并且最重要的是,不再包含“ Invalid email address: ”前缀。你应该只看到administrator:your-timestamp.
从代理历史记录中,将GET /请求发送到 Burp Repeater。完全删除该sessioncookie,并stay-logged-in用您自制的cookie的密文替换该cookie。发送请求。请注意,您现在已以管理员身份登录并有权访问管理面板。
使用 Burp Repeater,浏览/admin并注意删除用户的选项。浏览至/admin/delete?username=carlos求解实验室。
参考:
### BurpSuite靶场系列之逻辑漏洞
https://www.cnblogs.com/yii-ling/p/17152071.html#5-low-level-logic-flaw
https://mp.weixin.qq.com/s/rHFsfj8i4uXpadf9_A4IXg
### portswigger业务逻辑漏洞:
https://portswigger.net/web-security/logic-flaws#what-are-business-logic-vulnerabilities
### PayloadsAllTheThings业务逻辑错误
https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Business%20Logic%20Error
### owasp业务逻辑漏洞:
https://owasp.org/www-community/vulnerabilities/Business_logic_vulnerability
### 干货 | 业务逻辑漏洞挖掘总结
https://mp.weixin.qq.com/s/3EoBtqaS4KhZfmrLDr6hSQ
### 【Web渗透】业务逻辑漏洞
https://mp.weixin.qq.com/s/qvvlaE3inyzQzE5akOt9PA
https://mp.weixin.qq.com/s/XgXC_zGPGkO8uBahhTK5Uw