dvwa-XSS-DOM
DOM全称为Document Object Model即文档对象模型,是W3C制定的标准接口规范,是一种处理HTML和XML文件的标准API。DOM提供了对整个文档的访问模型,将文档作为一个树形结构。
而DOM型的XSS是一种基于文档对象模型(DOM)的一种漏洞。这种XSS与反射型XSS、存储型XSS有着本质的区别,它的攻击代码不需要服务器解析响应,触发XSS依靠浏览器的DOM解析,客户端的JavaScript脚本可以访问浏览器的DOM并修改页面的内容,不依赖服务器的数据,直接从浏览器获取数据并执行。
文档对象模型 (DOM) 将 web 页面与到脚本或编程语言连接起来。通常是指 JavaScript,但将 HTML、SVG 或 XML 文档建模为对象并不是 JavaScript 语言的一部分。DOM 模型用一个逻辑树来表示一个文档,树的每个分支的终点都是一个节点 (node),每个节点都包含着对象 (objects)。DOM 的方法 (methods) 让你可以用特定方式操作这个树,用这些方法你可以改变文档的结构、样式或者内容。节点可以关联上事件处理器,一旦某一事件被触发了,那些事件处理器就会被执行。
low
请求页面

http请求
1 | |
响应页面
和请求页面几乎一样,下拉选框中多了个之前点击的语言。
low.php源码
low.php属于是放弃治疗了,直接不防了,空城计!
1 | |
index.php源码
document 表示的是一个文档对象,Location 对象包含有关当前 URL 的信息,href 属性是一个可读可写的字符串,可设置或返回当前显示的文档的完整 URL。也就是说 “document.location.href” 的写法得到页面的 URL,而 indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置,这里用来判断 “default=” 是否在 URL 中。可以看到,scirpt标签中的代码document.write增加了表格下拉选项lang节点。关键部分源码:
1 | |
攻击思路
- 修改
default。发送http请求http://127.0.0.1/vulnerabilities/xss_d/?default=<script>alert(document.cookie)</script>
medium
源码
这次代码将<script过滤了,当匹配到<script字符串的时候就会将URL后面的参数修正为?Default=English,然后终止php运行。
1 | |
攻击思路
既然只是过滤了<script字符串,我们另辟蹊径,利用其他HTML标签。
- 利用img标签。发送http请求
http://127.0.0.1/vulnerabilities/xss_d/?default=English</option></select><img src="" onerror=alert(document.cookie)>high
源码
服务器设置了白名单,default 参数只接受 French,English,German 以及 Spanish 这几个单词,不是这几个单词会默认为English。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20<?php
// Is there any input?
if ( array_key_exists( "default", $_GET ) && !is_null ($_GET[ 'default' ]) ) {
# White list the allowable languages
switch ($_GET['default']) {
case "French":
case "English":
case "German":
case "Spanish":
# ok
break;
default:
header ("location: ?default=English");
exit;
}
}
?>
攻击思路
仅限制了default,使用参数连接符号&尝试“无中生有”。
/?default=English&<script>alert(document.cookie)</script>?default=English&a=</option></select><img src="" onerror=alert(document.cookie)>
impossible
源码
放心交给客户端,大致意思是,而且protect,逼死强迫症。
1 | |