跨站脚本攻击,是指攻击者在页面中注入恶意的脚本代码,当受害者访问该页面时,恶意代码会在其浏览器上执行,需要强调的是,XSS不仅仅限于JavaScript,还包括flash等其它脚本语言。
DOM是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。DOM中有很多对象,其中一些是用户可以操纵的,如uRI ,location,refelTer等。客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOM—based XSS漏洞。
一、low难度
源码
<?php
# No protections, anything goes
?>
打开源代码分析之后发现服务端并没有任何的PHP代码,所以说执行判断的只有客户端的JavaScript代码
2、直接在URL中通过修改default参数上传XSS注入,我们尝试一下看看插入一条XSS语句会有什么变化,将default后面的参数修改为:<script>alert(1)</script>
![](https://img-blog.csdnimg.cn/img_convert/a29b94ae0778b8db304273051637b1ac.png)
可以看出我们成功了。
二、Medium难度
1、源码
<?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;
}
}
?>
简单来说,就是过滤掉了“<script”,当函数匹配到 <script 字符串的时候就会将URL后面的参数修正为 ?default=English
2、在这里可以通过onerror事件,在装载文档或图像的过程中如果发生了错误就会触发
</option></select><img src=x onerror=alert(1)>
![](https://img-blog.csdnimg.cn/img_convert/8e7b431f905e581d3913c379431b9b2a.png)
三、High难度
1、源码
<?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进行检查。
2、可以使用&连接另一个自定义变量来绕过构造。
&<script>alert(1)</script>
![](https://img-blog.csdnimg.cn/img_convert/256d6bba5e2f24e628c3f56c2b21b864.png)
四、Impossible难度
源码:
<?php
# Don't need to do anything, protction handled on the client side
?>
不需要做任何事情,保护由客户端处理。