XSS-DVWA

时间:2023-03-08 20:44:46

1.反射型

LOW:

没有过滤,直接键入PAYLOAD

查看源码

XSS-DVWA

这里没有任何过滤,使用htmlspecialchars()过滤

XSS-DVWA

结果不弹窗

XSS-DVWA

MEDIUM:

LOW等级的方法不奏效了

XSS-DVWA

观察输出可能是过滤了<script>标签

审查元素发现确实过滤了<script>标签

XSS-DVWA

使用大小写混写绕过 <scrIpt>alert(1)</sCript>

XSS-DVWA

查看代码发现只过滤了<script>

XSS-DVWA

而且只过滤了一次,所以可以嵌套<script>绕过

<scr<script>ipt>alert(1)</scrip<script>t>

还可以使用htmlspecialchars()过滤

XSS-DVWAXSS-DVWA

HIGH:

MEDIUM也不会弹窗了

XSS-DVWA

发现发生了过滤,而且script都被过滤了

输入<img src=1 onerror=alert(1)>

XSS-DVWA

查看源码,发现仅仅是过滤了script

XSS-DVWA

过滤时不推荐使用黑名单,基本上总有办法绕过

IMPOSSIBLE:

XSS-DVWA

发现输入的代码变成了HTML实体查看源码发现使用了htmlspecialchars处理,并且使用了token,防止了CSRF

XSS-DVWA

2.存储型

LOW:

这里Name的maxlength是10,可以审查元素给修改成大的值

XSS-DVWA

输入<script>alert(1)</script>弹窗出现两次,说明在Name和Message处都存在存储型XSS

XSS-DVWA

查看源码发现只是去除了两端的空白字符

XSS-DVWA

使用htmlspecialchars处理

XSS-DVWAXSS-DVWA

MEDIUM:

使用LOW的PAYLOAD已经不行了

XSS-DVWA

还是过滤了script

XSS-DVWA

在Name处成功弹窗,Message处被过滤了

XSS-DVWA

查看源码

XSS-DVWA

HIGH:

XSS-DVWA

查看源码

XSS-DVWA

IMPOSSIBLE:

直接看源码

XSS-DVWA

对name,message都过滤了

3.DOM型

LOW:

XSS-DVWA

直接弹窗

查看源码

XSS-DVWA

emmm..毛都没有..

MEDIUM:

输入PAYLOAD

XSS-DVWA

发现没有弹窗,查看元素

XSS-DVWA

发现在<option>标签里,再次尝试一次,这次闭合<option>标签

XSS-DVWA

还是没又弹窗,中再次查看元素

XSS-DVWA

再次向上闭合<select>标签

XSS-DVWAXSS-DVWA

成功弹窗

查看源码

XSS-DVWA

如果出现<script,会重定向到English

HIGH:

输入MEDIUM的PAYLOAD

XSS-DVWA

发现重定向到English了

URL中 #后面的字符会被当做定位标识符,所以不会被传递给服务器,只与浏览器交互,而DOM型XSS也是只与浏览器交互

所以尝试#,修改完#之后,浏览器不会重载,需要手动刷新

XSS-DVWA

审查元素

XSS-DVWA

剩下就是类似于MEDIUM等级,闭合标签

XSS-DVWAXSS-DVWA

查看源码

XSS-DVWA

只允许French,English,German,Spanish四种语言

IMPOSSIBLE:

直接看源码

XSS-DVWA

告诉我们代码防御在客户端

查看index.php

XSS-DVWAXSS-DVWA

如果是impossible等级的,不会解码URL,直接置为空,并不会进行解码

XSS-DVWA

果然没有解码

将上面代码注释

XSS-DVWAXSS-DVWA

注意:

防御XSS即使用了htmlspecialchars,只要我们在前端又进行了操作

也可能有危险,请看下面的例子

<html>

<?php
$a=htmlspecialchars($_GET['id']);
//$a=$_GET['id'];
echo 'id: '.$a;
echo '</br>';
echo 'urldecodeId: '.urldecode($a);
echo '</br>';
?>

html: <input type='text' value="<?=$a?>"/>
<br/>

<script>
    var lang = document.location.href.substring(document.location.href.indexOf("id="));
    document.write('JS: '+lang);
    document.write('<br/>');
    document.write('decodeURI: '+decodeURI(lang));
</script>

</html>

XSS-DVWA

最后的转码会造成XSS