DVWA-DOM型XSS全等级绕过方法
- 人工智能
- 2025-08-30 17:30:01

DOM型XSS全等级绕过 前言一、LOW级别二、Medium级别 图片插入语句法 三、High级别 字符 # 绕过服务端过滤 四、Impossible级别 前言
DOM,全称Document Object Model,是一个平台和语言都中立的接口,可以使程序和脚本能够动态访问和更新文档的内容、结构以及样式。DOM型XSS其实是一种特殊类型的反射型XSS,它是基于DOM文档对象模型的一种漏洞。在网站页面中有许多页面的元素,当页面到达浏览器时浏览器会为页面创建一个顶级的Document object文档对象,接着生成各个子文档对象,每个页面元素对应一个文档对象,每个文档对象包含属性、方法和事件。可以通过JS脚本对文档对象进行编辑从而修改页面的元素。也就是说,客户端的脚本程序可以通过DOM来动态修改页面内容,从客户端获取DOM中的数据并在本地执行。基于这个特性,就可以利用JS脚本来实现XSS漏洞的利用。
一、LOW级别打开dvwa,并将等级设置为low 我们查看源代码:
<?php # No protections, anything goes ?>从源代码可以看出,这里low级别的代码没有任何的保护性措施! 观察主页面,可以看到页面的功能是让我们选择默认的语言,但是这里又没有对default参数没有进行任何的过滤。 因此,我们在这里构造XSS代码,在default参数后面写入脚本,构造访问连接:
http://127.0.0.1/dvwa/vulnerabilities/xss_d/?default=<script>alert('Oh_No')</script>点击之后,我们的 script脚本成功被执行了! 查看网页的源代码即可看出,因为我们的脚本插入到代码中,所以执行了 同样的,我们可以修改语句,使其弹窗可以获取cookie
二、Medium级别先查看源代码:
<?php // Is there any input? if ( array_key_exists( "default", $_GET ) && !is_null ($_GET[ 'default' ]) ) { $default = $_GET['default']; # Do not allow script tags if (stripos ($default, "<script") !== false) { header ("location: ?default=English"); exit; } } ?>从Medium源代码中可以看到它对default参数的值进行了检查,用了stripos()函数对default参数的值进行了检测是否有<scipt字符,如果有的话,就将default=English。
注意:stripos() 函数是不区分大小写的。具体函数用法请参考: PHP stripos() 函数.
图片插入语句法既然这里过滤了<script,那么我们可以用图片插入语句法:
<img src =1 onerror = alert('dom')>当我们访问URL:
http://127.0.0.1/dvwa/vulnerabilities/xss_d/?default=<img src =1 onerror = alert('dom')>此时没有出现任何的变化,界面没有反应。这个时候查看网页的源代码: 可以看到我们输入的脚本语句被插入进了value值中,没有插入到option标签的值中,所以我们语句当中的<img>标签就没有起到作用,因此不会弹窗。 我们改进我们的语句,尝试将前面的标签闭合
http://127.0.0.1/dvwa/vulnerabilities/xss_d/?default=</select><img src =1 onerror = alert('dom')>页面成功出现弹窗: 查看一下网页的源代码: 我们还可以直接在English值的后面直接进行拼接:
http://127.0.0.1/dvwa/vulnerabilities/xss_d/?default=English</select><img src =1 onerror = alert('dom')>页面也能直接出现弹窗:
查看网页源代码:
三、High级别先查看源代码:
<?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; } } ?>分析High级别源代码,这里先if判断default的值是否为空,如果不为空就用switch语句进行匹配,很明显这相当于设置了白名单,只允许传 default值为English、French、German、Spanish 其中一个。
字符 # 绕过服务端过滤url中有一个字符为#,该字符后的数据不会发送到服务器端,#后面的内容是对浏览器的操作,不会发送到http请求当中去,从而绕过服务端过滤。 因此可以这样构造连接:
http://127.0.0.1/dvwa/vulnerabilities/xss_d/?default=English#<script>alert('high!!!')</script>点击提交刷新页面后,出现弹窗:
四、Impossible级别查看源代码:
<?php # Don't need to do anything, protction handled on the client side ?>意思是不需要做任何事,保护在客户端处理。
尝试修改English为: <script>alert(‘hello’)</script> 从上图可以看出框内的值是我们输入的参数的经过URL编码后的数据。 查看网页源代码: 并没有对我们输入的内容进行URL解码,所以我们输入的任何内容都是经过URL编码,然后直接赋值。因此不存在XSS漏洞。
我们可以对比LOW级别的网页源代码:
本站所有文章均为原创,欢迎转载,请注明文章出处: blog.csdn.net/weixin_43847838/article/details/111940420.。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。
DVWA-DOM型XSS全等级绕过方法由讯客互联人工智能栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“DVWA-DOM型XSS全等级绕过方法”