利用Burp Suite对OWASP Juice Shop进行渗透测试
1. 简介
OWASP 的 在线果汁商店 (Juice Shop) 项目, 是一个很好的开源Web 靶场。它包含了OWASP的10大漏洞 [1], 并且这个项目用到了很多流行的技术如 HTML5, AngularJS, Bootstrap, Node.Js, SQLite等等,应用架构如下图所示:
本文将展示如何利用著名的Web 渗透工具Burp Suite 来进行渗透测试。 Burp Suite的Web渗透功能异常强大,但也不乏一些槽点:
易用性不是很好,初学者经常一头雾水,甚至开始连页面都无法正常加载。 可用性有待改善,代理需要手工配置,这个比起Fiddler的代理自动设置就逊色多了。 默认字体太小了,不修改默认字体大小估计非得上放大镜了。
尽管有以上种种不足,鉴于其强大的功能,暂且先凑合着吧。
个人认为,学习Burp Suite最好的方法就是用其来对靶场进行渗透测试(这里提醒一下,请勿在未授权情况下对Internet上的服务器进行渗透测试)。下面将通过具体的渗透步骤来讲解Burp Suite的方法,比如 Intruder模块。
2. 实验环境
本实验中利用了Ubuntu 16.04 LTS 作为测试环境。环境搭建布骤如下:
1. 安装 Docker, 如下一条命令即可
sudo apt-get installdocker-engine
2. 安装 Juice Shop 靶场应用
Juicy Shop 的源代码托管在github上:
https://github.com/bkimminich/juice-shop
最方便的方式是采用Docker安装
首先把镜像端到本地来:
docker pull bkimminich/juice-shop
然后进行部署
docker run -d -p 3000:3000bkimminich/juice-shop
打开浏览器http://localhost:3000 , 如果到如下页面,则表示Juice Shop部署成功。
3. 安装 Burp Suite。本文需要用到Professional 版本。可以从
https://portswigger.net/burp
申请一个试用版。
3. 渗透测试
3.1 注册一个测试用户
点击Login,然后点击”Not yet a customer”
注册完成后,登录进该用户即可。
另外Juice Shop 隐藏了一个评分系统的链接
http://localhost:3000/#/score-board
每次完成任务后,Web界面上都会收到提示信息。另外,评分系统中也会更新状态。
3.2XSS 攻击
3.2.1 反射型XSS攻击 难度指数 ★
我们首先看一下反射性XSS攻击这道题
Performa reflected XSS attack with<script>alert("XSS1")</script>.
这道题很简单,在搜索框中直接输入
<script>alert("XSS1")</script>
就直接弹出了对话框,过关!
3.2.2 持续型XSS攻击 难度指数 ★★★
接着我们来试试持续型XSS攻击这道题。
这道题需要成功生成一个存储型的 XSS攻击。
这道题则需要费些心思了。在何处产生存储呢。我们回想起在注册用户的时侯,
注册信息因该是存储下来的。我们再次访问注册页面,并将Proxy的 Intercept 设置成ON以便截获注册时发送的信息。如下图所示。
这是我们将email地址篡改成 XSS 攻击
<script>alert(”XSS2”)</script>
后转发出去,我们就可以看到来自 Juice Shop的首肯。
过关。
3.3 SQL 注入攻击难度指数 ★★
既然是Web 靶场,SQL 注入攻击时必不可少的一环。
SQL注入这道题要求我们以SQL注入的方法登录管理员帐户。
首先我们先在登录页面进行登录,来截取HTTP报文(登录时,不一定需要正确的用户密码名)。截获的HTTP 报文如下图所示。
在看一下服务器返回的信息。
服务器返回信息中,包含了一个字符串”Invalid email or password”。很明显,这表明登录不成功。下面则是SQL 注入的重点了。右键点击请求,选择 “Send toIntruder”,将该条记录发送到”Intruder” 模块进行自动化测试。然后点击 “Intruder”标签页进入 Intruder模块。然后点击”Positions” 子标签页。
可以看到如下界面
这里事实上就是定义自动化测试时对那些变量进行替换。我们这里仅对email变量进行攻击测试。配置如下
1. 点击 Clear 按钮。
2. 鼠标移到test@freebuf.com上点击”Add” 按钮。
然后单击Payload子标签页。这里可以定义如何对变量进行替换。通常是采用字典(wordlist)来
进行替换。Burp Suite 本身似乎并未提供一个现成的字典,幸好Fuzzdb 开源项目提供了一个很好的字典,包含了各种攻击可能用到的字典。可以采用如下git命令将其克隆到本地:
git clone https://github.com/fuzzdb-project/fuzzdb
克隆完成后,点击Load来加载 wordlist, 这里可以加载fuzzdb中/attack/sql-injection/detect/xplatform.txt 定义的wordlist。
需要注意的一点是,一定要将”URL-encode these characters” 前面的勾去掉,即不对特殊字符做编码。最后设置如下图所示,注意红框标注的地方。
配置完成后,点击右上角的”Start Attack”按钮开始攻击。数十秒后,攻击完成。
查看结果页面,有些SQL注入攻击失败了,有些成功了。一个最简单的筛选办法就是查看Status列,一般成功的会返回200.
相应的攻击向量为
{"email":"' or1=1--","password":"123456"}
攻击成功后可以再次看到来自Juice Shop的首肯。
4. 小结
Juicy Shop 是一个包含了数十种漏洞的Web靶场,其架构设计非常有代表性。用来练习 Web 渗透和熟悉Burp Suite的使用再合适不过了。本文介绍了如何利用Burp Suite 提供的功能组件特别是Intruder模块来进行攻击。读者如果能够根据本文提供的例子,举一反三的操作,一定很快能熟悉如何利用BurpSuite 来进行Web 渗透。然而要想在Web渗透上达到一定的造诣,除了需要深入钻研HTTP协议,Web 应用的常见架构外,还需要练就天马行空般的黑客思维。
- Java实现的一个编号生成器工具类——5种方法
- 【机器学习】有趣的机器学习:最简明入门指南
- 不使用反射,“一行代码”实现Web、WinForm窗体表单数据的填充、收集、清除,和到数据库的CRUD
- 海量数据处理利器之布隆过滤器
- ORM查询语言(OQL)简介--概念篇
- Discuz! 任意文件删除漏洞重现及分析
- .NET DLR 上的IronScheme 语言互操作&&IronScheme控制台输入中文的问题
- Java中Map相关的6大问题——每个开发人员都要注意
- android service 学习(下)
- 混淆漏洞CVE-2017-0213技术分析
- android service 学习(上)
- 黑帽SEO剖析之隐身篇
- Java中如何判断一个字符串是Java代码还是英文呢?
- 将复杂查询写到SQL配置文件--SOD框架的SQL-MAP技术简介
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- COBBLER无人值守批量安装系统.md
- 使用VSCode 打包你的第一个flutter应用(安卓篇)
- KICKSTART无人值守批量安装系统.md
- Centos7-Firewall防火墙基础讲解
- 优酷iOS插件化页面架构方法
- 处理一次k8s、calico无法分配podIP的心路历程
- 小视频源码,按返回键两次退出
- iOS音视频接入 - TRTC多人音视频通话
- Android平台RTMP推流或轻量级RTSP服务(同屏或摄像头)编码前数据接入类型总结
- 接口测试框架实战(二) | 搞定多环境下的接口测试
- MySQL 案例:“丢失数据”的谜题
- 接口测试框架实战(三) | APIObject 模式、原则与应用
- 接口测试框架实战(四) | 通用 API 封装实战
- 面试字节两轮后被完虐,一份字节跳动面试官给你的Android技术面试指南,请查收!
- 3分钟短文:说说Laravel模型中还算常用的2个“关系”