0x01-OWASPJuiceShop-GettingStarted

目录

这是什么?

OWASP Juice Shop 是一个练习网页应用测试的工具。

这是 Github 链接

本篇是 OWASP Top 10 系列的起始篇。

对于不清楚 OWASP 是什么的同学,看这里

简单说 OWASP 是一套网页应用的测试列表,你可以按照它的指示一项一项地对网页应用进行测试,

它会告诉你该漏洞的原理,测试方式以及应对策略,十分详细,是行业标杆。

在这里插入图片描述

部署 Juice Shop

可以在 Juice Shop 的 Github 页面看到,Juice Shop 可以被一键部署到 Heroku(是免费的),你只需要注册一个账号即可。同时也可以下载到本地,部署到虚拟机。

Heroku很方便,注册个账号,点一下 Github 上的部署,就搞定了。

部署完成之后,在个人帐号的 Settings 一栏,往下拉可以看到自己的应用的 Heroku 域名。

在这里插入图片描述

在这里插入图片描述

直接访问即可。

在这里插入图片描述

其他部署方式见文档。

帮助文档

帮助文档在这里,这里有所有你需要的资料。

另外,在浏览器,访问 https://example.herokuapp.com/#/score-board,将看到一个计分板,这里按照漏洞的类型做了分类,并且每个分类中用难度系数(1-6星)对每一个挑战做了评估,可以选择适合自己的开始。

在这里插入图片描述

在这里插入图片描述

第一个挑战

排在 OWASP Top 10 第一位的是 Injection

在 score-board 把 1-2 星都选上,然后选择 Injection,之后我就按顺序往下走了。

在这里插入图片描述

点击右上角 Account,找到 Login 界面。随意输入用户名密码,报错了。

在这里插入图片描述

这个练习是一个经典 SQL 注入。首先在 Burp Suite 中拦截一个请求,然后右键 Send to Repeater (Ctrl + R 也行)。

在这里插入图片描述

这里有什么漏洞?

这里的漏洞是 Bypass Login Authentication,绕过登陆验证。

攻击者只需要在用户名处,构造一个恒为 true 的表达式,然后注释掉接着的部分,即使不输入密码,也可以成功绕过登录验证。

OWASP 关于 Injection 的解释在这里

Example Attack Scenarios 里面,有对于原理的详细讲解。

在这里插入图片描述

漏洞是怎么造成的?

在 OWASP 的解释中可以看到,正式程序员在开发注册流程的时候,手动拼接 SQL 请求,没有对用户的输入做出筛选,过滤和验证,导致的漏洞。

怎么这样的注入漏洞是否存在?

举个例子,某程序员在代码中拼接了如下的 SQL 语句。

query = "SELECT * FROM user 
where username =' + $username + 
'and password=' + 
hash_func($password) + 
"';""

这里,在拼接的时候,程序员选择了使用单引号,',当然也有可能选择使用双引号,",只需要转义一下。

所以,测试这样的注入是否存在,只需要在用户名处输入一个单引号,或者双引号,如果网页报出了服务器端或者数据库端的错误,那么注入漏洞就存在。

输入 test:test 或者 ":test 的时候,点击提交报的是 Invalid email or password.

在这里插入图片描述

在这里插入图片描述

而如果我输入一个单引号,页面报错是一个奇怪的 [object Object]

在这里插入图片描述

初步可以断定,登录验证可绕过。

在 Repeater 里面查看一下服务端的返回,是这样的。

在这里插入图片描述

后端的错误展示了很多信息,如使用的是 SQLite 数据库,具体的 SQL 语句以及密码。

利用漏洞

原理知道了,那么只需要构造一个 SQL 表达式,结果恒为 true 即可绕过验证。

在用户名处输入

' or 1 = 1 -- 

即可绕过验证。

解释:

  • 第一个单引号与 email 的单引号配对,相当于 email = ''
  • or 是逻辑表达式,说 email = '' 或者 1 = 1
  • 1 = 1 是恒为 true 的,所以整个表达式恒为 true
  • 最后的 --,将剩下的 SQL 部分注释掉,也就是忽略密码部分验证。注意,-- 后面一定要加上一个空格,不然后面的注释不生效。
    最后的 SQL 表达式会是

    "SELECT * FROM Users WHERE email = '' or 1 =1 -- AND password = ...

执行一下,成功绕过登录验证。

在这里插入图片描述

预防措施

见 OWASP How to Prevent 部分,比我讲的好多了。



参考链接: