环境:
dvwa: 192.168.11.135 dvwa版本: Version 1.9 (Release date: 2015-09-19)
kail机器:192.168.11.156
一、XSS是什么
XSS(Cross Site Scripting,跨站脚本攻击),是指恶意攻击者往web页面里插入恶意script代码,当用户浏览该页面时,嵌入其中web里面的script代码会被执行,从而达到恶意攻击用户的目的。
xss漏洞通常是通过php的输出函数将javascript代码输出到html页面中,通过用户本地浏览器执行的,所以xss漏洞关键就是寻找参数未过滤的输出函数。
二、跨站脚本攻击XSS分类
三、常用绕过方式
普通注入:<script>alert('XSS')</script> 或者 <script>alert(document.cookie)</script>
大小写绕过:<sCript>alert(document.cookie)</scRipt> 或者 <scRipt>alert('lady_killer9')</sCript>
双写绕过:<scr<script>ipt>alert(document.cookie)</scr<script>ipt> 或者 <scr<script>ipt>aleralertt(document.cookie)</scr<script>ipt>
html标签绕过:<img src=x οnerrοr=alert('XSS');> 或者 <A HREF=http://192.168.11.135:81/phpinfo.php>link</A> 或者 <img src=x:alert(alt) οnerrοr=eval(src) alt=xss>
闭合标签绕过:></option></select><img src=x:alert(alt) οnerrοr=eval(src) alt=xss>
闭合+html标签绕过:></option></select><img src=x:alert(alt) οnerrοr=eval(src) alt=xss>
四、XSS(Reflected)
4.1、XSS(Reflected) LOW级别
代码:
主要步骤:array_key_exists函数判断name变量是否存在,并判断是否非空。若存在且非空,直接输出。
漏洞原因:
普通注入:<script>alert('XSS')</script>
弹出:
4.2、XSS(Reflected) Medium级别
代码:
主要步骤:array_key_exists函数判断name变量是否存在,并判断是否非空。若存在且非空,使用str_replace函数替换<script>为空字符串,然后输出。
漏洞原因:
普通注入:<script>alert(document.cookie)</script>
大小写绕过:<sCript>alert(document.cookie)</scRipt>
弹出:
双写绕过:<scr<script>ipt>alert(document.cookie)</scr<script>ipt>
弹出:
1.3、XSS(Reflected) High级别
代码:
主要步骤:array_key_exists函数判断name变量是否存在,并判断是否非空。若存在且非空,使用preg_replace函数进行正则表达式匹配,且大小写都会匹配到,替换为空字符串,然后输出。
漏洞原因:
普通注入:<script>alert('XSS')</script>
注入失败,仅剩余了>,其他全部没有了,再尝试大小写或双写绕过。
大小写绕过:<sCript>aleRt(document.cookie)</scRipt>
注入失败。
双写绕过:<scr<script>ipt>aleralertt(document.cookie)</scr<script>ipt>
注入失败。可能使用了正则表达式,尝试不使用js标签
html标签绕过:<img src=x οnerrοr=alert('XSS');>
<A HREF=http://192.168.11.135:81/phpinfo.php>link</A>
五、XSS(Stored)
5.1、XSS(Stored) LOW级别
正常输出:
代码:
主要步骤:
漏洞原因:
通过阅读后端代码,我们发现name、message长度的判断并不在后端,按F12查看前端代码:
普通注入:分别在Name与Message输入框输入 <script>alert('lady_killer9')</script>
点击Sign Guestbook后:
注入失败。
方法1:Name有长度限制,Message注入失败,应该是Name可以注入,但是被限制了。尝试抓包进行注入:
注入成功,弹出:
方法2:前端页面中删除maxlength="10"
改成
5.2、XSS(Stored) Medium级别
正常输出:
前端限制Name、Message的长度。
代码:
主要步骤:
漏洞原因:
普通注入:前端删除输入长度限制,分别在Name与Message输入框输入 <script>alert('lady_killer9')</script>
标签被删除
标签没了,尝试大小写绕过。
大小写绕过:<scRipt>alert('lady_killer9')</sCript>
注入成功。
5.3、XSS(Stored) High级别
post方式,前端检查长度,直接删除,然后Html标签绕过。
代码:
主要步骤:
漏洞原因:
html标签绕过:<img src=x οnerrοr=alert('XSS');>
注入成功。
六、参考
跨站脚本漏洞(XSS)基础讲解 - 简书 (jianshu.com)
网络安全-靶机dvwa之XSS注入Low到High详解(含代码分析)_lady_killer9的博客-CSDN博客_dvwa xss注入