一、OWASP TOP 10(2017)关于XSS(跨站脚本)的描述
XSS漏洞发生在当应用程序发送给浏览器的页面中包含用户提供的数据,而这些数据没有经过适当的验证或转义(escape)或者没有使用安全的JavaScript API,就会导致跨站脚本漏洞。主要有两种已知的跨站漏洞类型:1)存储式;2)反射式。这两种类型既可以发生在服务器上也可以发生在客户端。大部分服务器类型跨站脚本漏洞通过测试或代码分析相对容易找到。而客户端类型跨站脚本漏洞很难识别。
二、DOM XSS的原理
基于 DOM 的类型,其中注入的恶意输入不是通过反射或存储方式从服务器发出的:XSS 是由本地 JavaScript 代码在客户端生成的。
基于 DOM 的 XSS 也有反射和存储子类型的功能,非常类似于基于源的 XSS。它们都是由浏览器本身通过其 JS 引擎和客户端存储提供反射和存储。
然而,与简单的请求 / 响应模型不同,基于 DOM 的 XSS 可能需要对代码流进行大量分析才能捕捉到它。对于静态甚至动态分析工具来说,很难发现这个缺陷。
三、DOM Injection DOM注入
(1)题目:
- Your victim is a system that takes an activation key to allow you to use it.
- Your goal should be to try to get to enable the activate button.
- Take some time to see the HTML source in order to understand how the key validation process works.
目标系统需要你使用激活码,你的目标是激活被禁用的按钮。花一些时间阅读HTML代码,以便理解激活码的工作过程。
(2)课程目标
课程主题:
如何实现DOM注入攻击
攻击方式:
一些应用专门使用AJAX操作和更新在DOM中使用的javascript,DHTML和eval()方法。攻击者可能会利用这一点,拦截回复,注入一些JavaScript命令来实现攻击。
(3)操作步骤
利用火狐浏览器的web 开发者功能,查看页面的源代码。设置——web 开发者——查看器,可以找到如下代码:
点击Activate按钮,跳转到如下界面:
找到如下代码:
浏览器与服务器端通过Ajax实现XML通信,查看源代码之后,发现代码中使用了XMLHttprequest。XML响应中包括激活按钮的JavaScript语句。任意输入一个License Key,这时候需要打开Burpsuite,对服务器返回的数据进行拦截。拦截HTTP返回数据,替换body内容为:
document.form.SUBMIT.disabled=false;
此时,浏览器激活按钮被成功激活。
方法二:
利用firefox浏览器的查看器功能,定位到Activate按钮所在的源码位置,如下图所示:
将其中的disabled属性删除,可看到页面上Activate按钮处于激活状态。
点击Activate按钮,页面提示本课程已成功完成。
四、XML Injection
(1)题目:
WebGoat-Miles Reward Miles shows all the rewards available. Once you’ve entered your account ID, the lesson will show you your balance and the products you can afford. Your goal is to try to add more rewards to your allowed set of rewards. Your account ID is 836239.
WebGoat-Miles奖励里程显示了所有可获取的奖励。一旦你输入你的账号id,课程将向您展示您的结余以及你可以支付的商品。你的目标是尝试着给你的允许的奖励中增加更多的奖赏。你的ID账号是836239。
(2)课程目标
课程主题:
这门课程教你如何实施XML注入攻击。
攻击的工作方式:
Ajax应用使用XML来与服务器进行信息交互。但该XML内容能够被非法用户轻易拦截并篡改。
课程目标:
WebGoat-Miles奖励里程显示了所有可获取的奖励。一旦你输入你的账号id,课程将向您展示您的结余以及你可以支付的商品。你的目标是尝试着给你的允许的奖励中增加更多的奖赏。你的ID账号是836239。
(3)操作步骤
欢迎来到WebGoat-Miles奖励里程计划。
打开浏览器代理,利用burpsuite进行抓包分析。
打开Burpsuite的服务器端拦截消息功能
输入用户id,利用burpsuite观察服务器端返回的消息。
此时发现返回的数据中包含前三列奖励信息,修改服务器端返回的消息,添加如下两行代码:
WebGoat Core Duo Laptop 2000 Pts
WebGoat Hawaii Cruise 3000 Pts
此时,点击forward,可发现服务器返回的信息与预想的一致。
点击SUBMIT,提示本课程已全部完成。
五、JSON Injection JSON注入
(1)JSON的含义
JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
(2)题目:
- You are traveling from Boston, MA- Airport code BOS to Seattle, WA - Airport code SEA.
- Once you enter the three digit code of the airport, an AJAX request will be executed asking for the ticket price.
- You will notice that there are two flights available, an expensive one with no stops and another cheaper one with 2 stops.
- Your goal is to try to get the one with no stops but for a cheaper price.
你现在正从波士顿(MA机场,代码为BOS)旅行去西雅图(WA机场,代码为SEA)。你输入机场的三位数代码后,一个查询机票价格的ajax请求就会被执行。
你会注意到有两个可选航班,一个没有中途停靠但较贵;另一个停靠两站,但也更便宜一些。
你的目标是尝试着以更低的价格买到没有中途停靠的航班机票。
(3)课程目标
攻击是如何实现的?
JavaScript Object Notation(JSON)是一种简单有效的轻量级数据交换格式。 JSON可以有很多形式,例如数组,列表,哈希表和其他数据结构。 JSON广泛用于AJAX和Web2.0应用程序,并且由于其易用性和速度而受到程序员对XML的青睐。 但是,JSON和XML一样容易受到注入攻击。 恶意攻击者可以从服务器注入回复并在其中注入一些任意值。
(4)操作步骤
1.查询波士顿——西雅图的航班价格,并抓包分析包中数据。
(2)找到包数据中不同的部分,发现600美元的航班price2Submit=%24600,300美元的航班price2Submit=%24600。
(3)选中600美元的航班,截取数据包,将其中的price2Submit=%24600修改为price2Submit=%24600。
点击SUBMIT,点击forward。
(4)提示课程已完成。价格修改成功。