在本章中,我们将介绍以下配方:
- 点击劫持测试
- 基于 DOM 的跨站点脚本测试
- JavaScript 执行测试
- HTML 注入测试
- 客户端资源操作测试
在浏览器中执行的客户机上可用的代码需要进行测试,以确定是否存在敏感信息或是否允许用户输入,而无需服务器端验证。了解如何使用 Burp 执行这些测试。
要完成本章中的食谱,您需要以下内容:
- OWASP 断网应用(VM)
- OWASP 多联线
- Burp 代理社区或专业人士(https://portswigger.net/burp/
点击劫持也称为UI 补救攻击。此攻击是一种欺骗性技术,诱使用户与透明 iframe 交互,并可能向攻击者控制的网站发送未经授权的命令或敏感信息。让我们看看如何使用 Burp Clickbandit 来测试站点是否容易受到点击劫持的攻击。
使用 OWASP Mutillidae II 应用程序和 Burp Clickbandit,让我们确定该应用程序是否能够抵御点击劫持攻击。
- 导航到 OWASP Mutillidae II 的主页。
- 切换到 Burp,然后从顶级菜单中选择 Burp 单击 Burp:
- 一个弹出框解释了该工具。单击标题为“将 Clickbandit 复制到剪贴板”的按钮:
- 返回 Firefox 浏览器,按F12打开开发者工具。从 developer tools 菜单中,选择 Console,并在底部查找提示:
- 在控制台提示下(例如,
>>
),将复制到剪贴板的 Clickbandit 脚本粘贴到提示中:
- 将脚本粘贴到提示中后,按回车键。您应该会看到 Burp Clickbandit 记录模式。单击开始按钮开始:
- 在应用程序出现后开始单击。单击 Mutillidae 顶部菜单中的可用链接,单击侧菜单中的可用链接,或浏览到 Mutillidae 中的页面。单击周围后,按 Burp Clickbandit 菜单上的 Finish(完成)按钮。
- 您应该注意到,大红色块透明地出现在 Mutillidae 网页的顶部。每个红色方框表示恶意 iframe 可能出现的位置。请随意单击每个红色块以查看下一个红色块的显示,依此类推:
- 如果要停止并保存结果,请单击“保存”按钮。这将把点击劫持 PoC 保存在一个 HTML 文件中,供您放置在渗透测试报告中。
由于 Mutillidae 应用程序未使用设置为DENY
的 X-FRAME-OPTIONS 标头,因此有可能向 Mutillidae 网页中注入恶意 iframe。Clickbandit 增加了 iframe 的不透明程度以提高可见性,并创建了一个概念验证(PoC)来说明如何利用该漏洞。
文档对象模型(DOM是浏览器中捕获的所有 HTML 网页的树状结构表示。为了方便起见,开发人员使用 DOM 在浏览器中存储信息。作为 web 渗透测试人员,确定是否存在基于 DOM 的跨站点脚本(XSS漏洞非常重要。
使用 OWASP Mutillidae II HTML5 web 存储练习,让我们确定应用程序是否容易受到基于 DOM 的 XSS 攻击。
- 导航至 OWASP 2013 | HTML5 Web 存储| HTML5 存储:
- 注意使用 HTML5Web 存储位置存储在 DOM 中的名称/值对。Web 存储包括会话和本地变量。开发人员使用这些存储位置方便地将信息存储在用户浏览器中:
-
切换到 Burp Proxy Intercept 选项卡。在 Intercept(截取)按钮打开时打开 Interceptor(截取)。
-
在 Firefox 浏览器中按F5或单击“重新加载”按钮重新加载 HTML 5 Web 存储页面。
-
切换到 Burp Proxy HTTP history 选项卡。查找刚才执行的重新加载创建的暂停请求。注意,
User-Agent
字符串高亮显示,如以下屏幕截图所示:
- 将前面突出显示的
User-Agent
替换为以下脚本:
<script>try{var m = "";var l = window.localStorage; var s = window.sessionStorage;for(i=0;i<l.length;i++){var lKey = l.key(i);m += lKey + "=" + l.getItem(lKey) + ";\n";};for(i=0;i<s.length;i++){var lKey = s.key(i);m += lKey + "=" + s.getItem(lKey) + ";\n";};alert(m);}catch(e){alert(e.message);}</script>
- 单击“前进”按钮。现在,单击切换按钮关闭拦截器,以关闭拦截器。
- 注意显示 DOM 存储内容的警报弹出窗口:
注入的脚本说明了存在跨站点脚本漏洞以及存储在 DOM 中的敏感信息如何允许攻击者窃取敏感数据。
JavaScript 注入是特定于任意注入 JavaScript 的跨站点脚本攻击的一个子类型。此区域中的漏洞可能会影响浏览器中保存的敏感信息,如用户会话 cookie,也可能导致修改页面内容,从而允许从攻击者控制的站点执行脚本。
使用 OWASP Mutillidae II 密码生成器练习,让我们确定应用程序是否容易受到 JavaScript XSS 攻击。
- 导航至 OWASP 2013 | A1–注入(其他)| JavaScript 注入|密码生成器:
- 注意:单击“生成密码”按钮后,将显示密码。另外,请注意,URL 中提供的用户名值会像网页上的
http://192.168.56.101/mutillidae/index.php?page=password-generator.php&username=anonymous
上的一样反映回*。这意味着页面上可能存在潜在的 XSS 漏洞:*
- 切换到 Burp Proxy HTTP history 选项卡,并查找与密码生成器页面关联的 HTTP 消息。翻到消息编辑器中的 Response 选项卡,并对字符串
catch
执行搜索。请注意,返回的 JavaScript 有一个 catch 块,其中向用户显示错误消息。我们将使用此位置放置精心设计的 JavaScript 注入攻击:
- 切换到 Burp Proxy Intercept 选项卡。在 Intercept(截取)按钮打开时打开 Interceptor(截取)。
- 按F5或单击重新加载按钮,在 Firefox 浏览器中重新加载密码生成器页面。
- 切换到 Burp Proxy Interceptor 选项卡。当请求暂停时,注意突出显示的
username
参数值,如下所示:
- 用以下精心编制的 JavaScript 注入脚本替换前面突出显示的值
anonymous
:
canary";}catch(e){}alert(1);try{a="
- 单击“前进”按钮。现在,单击切换按钮关闭拦截器,以关闭拦截器。
- 注意警报弹出窗口。您已经成功演示了 JavaScript 注入 XSS 漏洞的存在!
注入网页的 JavaScript 片段与原始 catch 语句的结构匹配。通过创建一个假名称canary并以分号结束语句,创建了一个精心编制的新catch 块,其中包含恶意 JavaScript 负载。
HTML 注入是将任意 HTML 代码插入易受攻击的网页。该领域的漏洞可能会导致出于社会工程用户的目的而泄露敏感信息或修改页面内容。
使用 OWASP Mutillidae II 捕获数据页,让我们确定应用程序是否容易受到 HTML 注入攻击。
- 导航至 OWASP 2013 | A1–通过 Cookie 注入的注入(其他)| HTMLi |捕获数据页:
- 注意攻击前页面的外观:
- 切换到 Burp Proxy Intercept 选项卡,并在 Intercept 按钮打开时打开 Interceptor。
- 暂停请求时,记下最后一个 cookie,
acgroupswitchpersist=nada
:
- 暂停请求时,用以下 HTML 注入脚本替换最后一个 cookie 的值:
<h1>Sorry, please login again</h1><br/>Username<input type="text"><br/>Password<input type="text"><br/><input type="submit" value="Submit"><h1> </h1>
- 单击“前进”按钮。现在单击切换按钮关闭拦截器,以关闭拦截器。
- 注意 HTML 现在是如何包含在页面中的!
由于缺乏输入验证和输出编码,可能存在 HTML 注入漏洞。利用此漏洞的结果是插入任意 HTML 代码,这可能导致 XSS 攻击或社会工程方案,如前面的配方中所示。
如果应用程序根据客户端 URL 信息或资源路径(即 AJAX 调用、外部 JavaScript、iframe 源)执行操作,则结果可能导致客户端资源操纵漏洞。此漏洞与攻击者控制的 URL 有关,例如,JavaScript 位置属性、HTTP 响应中的位置标头或控制重定向的 POST 正文参数。此漏洞的影响可能导致跨站点脚本攻击。
使用 OWASP Mutillidae II 应用程序,确定是否可以操作客户端上公开的任何 URL 参数,以及这些值的操作是否会导致应用程序的行为不同。
- 导航至 OWASP 2013 | A10–未经验证的重定向和转发|信用:
- 单击学分页面上的 ISSA 肯塔基亚纳链接:
- 切换到 Burp Proxy HTTP history 选项卡,并在 Credits 页面找到您的请求。请注意,有两个查询字符串参数:
page
和forwardurl
。如果我们操纵发送用户的 URL,会发生什么?
-
切换到 Burp Proxy Intercept 选项卡。在 Intercept(截取)按钮打开时打开 Interceptor(截取)。
-
当请求暂停时,注意
fowardurl
参数的当前值:
- 将
forwardurl
参数的值替换为https://www.owasp.org
而不是原来选择的http://www.issa-kentuckiana.org
:
- 单击“前进”按钮。现在单击切换按钮关闭拦截器,以关闭拦截器。
- 请注意,我们是如何被重定向到一个网站,而不是最初点击的网站!
应用程序代码决策,例如将用户重定向到何处,决不应依赖于客户端可用值。这些值可以被篡改和修改,以将用户重定向到攻击者控制的网站或执行攻击者控制的脚本。