Task 1 部署实验环境&前期准备
Juice Shop 是一个大型应用程序,它并不会涵盖OWASP-TOP10中的每个主题,此应用程序和OWASP相关的主题如下:
Injection(注入类漏洞)
Broken Authentication(损坏的身份验证机制-身份验证失效漏洞)
Sensitive Data Exposure(敏感信息泄露)
Broken Access Control(损坏的访问控制机制-越权漏洞)
Cross-Site Scripting XSS(跨站点脚本漏洞-XSS)
打开目标机器并访问站点
Task 2 遍历目标应用程序
Question #1: What's the Administrator's email address?--管理员的电子邮件地址是什么?
点到每个商品里,可以看到每个人的评论,找到管理员的评论
Question #2: What parameter is used for searching?--用于搜索的参数是什么?
通过右上角搜索,随便输入,即可看到搜索参数
‘
Question #3: What show does Jim reference in his review? --吉姆在他的评论中提到了什么节目?
找到jim的评论,他提到replicator
在浏览器搜索:jim replicator,发现一个叫stat trek的节目
Task 3 注入漏洞-实验
Question #1: Log into the administrator account!--尝试登录管理员帐户!
前面的到了管理员邮箱,这里尝试登录,直接使用万能密码
登录成功
Question #2: Log into the Bender account!--登录 Bender 帐户!
同样的方法,先在评论里找到邮箱,在用万能密码登录
bender@juice-sh.op
\
成功
Task 4 身份验证失效漏洞-实验
uestion #1: Bruteforce the Administrator account's password!--暴力破解管理员帐户的密码!
根据题目要求下载密码本
apt-get install seclists
从以下位置加载列表: /usr/share/wordlists/SecLists/Passwords/Common-Credentials/best1050.txt
进入登录页面页面,输入管理员邮箱,密码随便输,然后打开burp抓包,将其发送给 Intruder,密码栏标记起来
导入刚才的密码本,开始弱密码爆破
找到200的返回码
密码为admin123
通过密码登录,得到flag
Question #2: Reset Jim's password!--重置Jim的密码!
根据重制页面,要回答的问题是“你最年长的兄弟姐妹的中间名是什么?”
在任务 2 中,我们已经发现Jim可能与星际迷航有关,所以我们通过谷歌搜索“Jim Star Trek”这为我们提供了来自 Star Trek 的关于 Jame T. Kirk 的维基百科页面;翻阅相关维基百科页面 我们发现他有一个哥哥,Jim哥哥的中间名为Samuel,所以我们可以将其输入到“忘记密码”页面中并尝试更改Jim账户的密码。
成功
Task 5 敏感信息泄露-实验
Question #1: Access the Confidential Document!--访问机密文件!
在about us页面,可以看到一个链接
点进去发现是一个ftp目录,那么我们就可以访问ftp其他主目录
我们在/ftp目录中,尝试下载敏感信息acquisitions.md文件
下载完后返回最开始的页面,接收对应的flag
Question #2: Log into MC SafeSearch's account!--登录 MC SafeSearch 的帐户!
虽然我们依然可以通过万能密码登录,但与题目要求不同,不能爆flag
thm在此提供了一段YouToBe
当我们看完对应的歌曲MV视频后,我们可以得到一些关键信息:目标用户的密码本应是“Mr. Noodles”,但他已经将一些“元音字母替换为零”,这意味着将字母o
替换为0
,所以我们可知mc.safesearch@juice-sh.op
帐户的密码是“Mr. N00dles”
使用已知的密码登录MC SafeSearch的帐户(mc.safesearch@juice-sh.op
、Mr. N00dles
),并获得一个flag:
Question #3: Download the Backup file!--下载备份文件!
现在我们返回开始的/ftp目录并尝试下载 package.json.bak
文件,,但我们接收到了一个403状态码提示,该提示告诉我们只允许下载 .md
和 .pdf
格式的文件。
为了解决这个问题,我们将使用一个名为“Poison Null Byte”的字符来进行绕过,该空字节内容如下所示:%00
。
注意:由于我们在此处是使用 url 来下载文件,因此我们需要将空字节也编码为 url 编码格式;经过url编码处理的Poison Null Byte 将变为:%2500
。
成功下载
原理:Poison Null Byte 实际上是一个 NULL 终止符,在字符串中的某个字节处放置一个 NULL 字符,那么该字符串将告诉目标服务器在NULL字符处终止读取,然后字符串的其余部分将被置为空。
返回最初页面,收到flag
Task 6 损坏的访问控制(越权)-实验
现代系统将允许多个用户访问不同的页面,其中管理员用户可以使用管理页面以方便编辑、添加和删除网站的不同元素,当你使用 Weebly 或 Wix 等程序构建网站时,你就可能会用到管理员页面来辅助建站。
当发现损坏的访问控制漏洞或错误时,它将被归类为以下两种类型之一:
水平(横向)越权:当用户可以执行 操作或访问具有相同权限级别的另一个用户的数据时发生。
垂直(纵向)越权:当用户可以执行 操作或访问具有更高权限级别的另一个用户的数据时发生。
Question #1: Access the administration page!--访问管理页面!
首先,我们将在Firefox浏览器中打开Debugger(调试器)或者在谷歌浏览器中打开Sources,Debugger可以通过在浏览器中打开Web开发者工具找到,找到Debugger之后再刷新页面,找到并查看main-es2015.js文件,要将其内容转换为我们可以阅读的格式,单击 { } 按钮即可。
现在在上图的js文件内容中 搜索关键词“admin”,你可以找到几个包含“admin”的不同代码段,最终我们所发现的是“path: administration”,它指代了一个名为“/#/administration”的页面路径,但是在未登录的情况下无法进入该路径相关页面。
由于这是一个管理员页面,因此我们需要在管理员帐户中才能查看它。阻止普通用户访问管理员界面的一个好方法是 只加载普通用户所需要使用的部分应用程序,这可以防止泄露一些敏感信息或阻止查看管理页面等。
接下来根据前文所得的信息,我们先登录到管理员账户,再访问“/#/administration”页面,获取对应的flag:
Question #2: View another user's shopping basket!--查看其他用户的购物篮!
开启BurpSuite,在管理员帐户登录后的界面中单击“你的购物篮”,然后在Burp页面转发捕获到的请求,直到你看到GET /rest/basket/1 HTTP/1.1
,接着使用Burp将/basket/
之后的数字 1 更改为 2,现在和该请求所对应的页面 就可以显示 UserID为2 的用户购物篮!
使用Burp转发所有请求,然后在浏览器中 查看修改之后的请求所对应的页面以便得到一个flag。
Question #3: Remove all 5-star reviews!--删除所有 5 星评论!
通过管理员权限删除5星评论,得到flag
Task 7 跨站点脚本(XSS漏洞)-实验
XSS 或跨站点脚本是一种允许攻击者在 Web 应用程序中运行 恶意javascript脚本 的漏洞,是 Web 应用程序中最常见的漏洞类型之一;XSS的复杂度从简单到极其困难都有所包含,因为每个 Web 应用程序可能会以不同的方式来解析具有查询功能的js代码。
XSS攻击主要分为三种类型:
基于DOM的XSS(特殊的反射型XSS):基于DOM的XSS (Document Object Model-based Cross-site Scripting) 可以利用 HTML 环境执行恶意 javascript代码,这种类型的XSS攻击通常会使用 <script></script>
HTML 标记然后结合 支持动态代码执行的接收器 来构造Payload,此外,这种类型的XSS攻击还可以通过直接修改DOM元素来构造Payload。
例子:利用innerHTML篡改页面
<script>document.body.innerHTML="<div style=visibility:visible;><h1>This is DOM XSS</h1></div>";</script>
持久型(存储型)XSS(服务器端):持久型XSS 是在服务器加载包含它的页面时才会运行的 恶意javascript脚本(js脚本已插入到网站数据库中),当服务器在将用户所输入的数据上传(upload)到网站页面 而未对用户数据进行正确过滤时,就可能会发生这种XSS攻击,此类攻击手段在博客文章页面很常见。
反射型XSS(客户端):反射型XSS 是在 Web 应用程序的客户端运行的恶意javascript脚本(因受害者点击恶意链接而导致恶意js脚本运行),常见于目标服务器未正确过滤搜索(search)数据时。
Question #1: Perform a DOM XSS!--执行基于DOM的XSS攻击
我们将利用带有 javascript 警告标记(alert tag)的 iframe 元素来构造攻击载荷
<iframe src="javascript:alert(`xss`)">
将上面代码在搜索框输入,得到弹窗以及flag
注意:我们在此处利用的是iframe
元素,它是Web应用程序中常见的 HTML 元素之一,还有其他能够产生相同攻击效果的HTML元素;使用以上这种Payload类型的XSS也可称为XFS(跨框架脚本-Cross-Frame Scripting),XFS是能够在 Web 应用程序中被检测到的 XSS 的最常见形式之一,一个允许用户修改 iframe
或者其他DOM元素的网站很容易受到XSS攻击。
原理:当用户在搜索栏中输入关键字进行搜索时,这通常会导致客户端向服务器发送相关的请求,然后服务器将根据搜索栏中的关键字来返回一些相关信息;如果web应用程序没有做一些正确的“用户输入”过滤,那么我们就能够利用搜索栏来执行 XSS 攻击。
Question #2: Perform a persistent XSS!--执行持久型(存储型)XSS攻击
首先,登录到管理员帐户,然后导航到“Last Login IP”页面。
我们可以从上图看到,最后登陆的ip地址显示为0.0.0.0 ,现在我们注销此次登陆,这样就能记录一个新的“最后登陆ip”,同时还要确保打开 Burp 拦截,以便我们捕获这个注销登陆的请求。
改完成之后,在Burp中将请求转发给目标服务器即可。
当我们重新登录管理员帐户并再次导航到“Last Login IP”页面时,我们就能看到一个 XSS 警告框,并能获取对应的flag。
Question #3: Perform a reflected XSS!--执行反射型XSS攻击
我们导航到“历史订单”页面
点击订单右上角的小卡车,进入详细订单页面,我们发现url参数和订单id一样
我们尝试更改url参数为
<iframe src="javascript:alert(`xss`)">
爆出弹窗以及flag
Task 8 计分板
导航进/#/score-board/部分,在该部分你可以看到你已经完成的任务 以及 其他本文未涵盖的不同难度的任务。
收到flag
网友评论