安全小黄鸭 前天 23:53
XSSI漏洞解析与防护
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

XSSI漏洞并非开发逻辑错误产生,而是浏览器漏洞所致。它通过劫持AJAX请求接口,结合浏览器漏洞获取敏感信息。本文解析了XSSI漏洞的产生原因、攻击原理及案例分析,并提供了相应的修复方法,帮助开发者提升应用安全性。

🔍 XSSI漏洞的产生源于AJAX请求接口被劫持,且后台未验证请求头中的'X-Requested-With: XMLHttpRequest',导致攻击者可加载存在问题的接口。

🌐 攻击者利用浏览器漏洞,如IE bug、Harmony proxy bug等,获取接口返回内容。其中,Proxy的设计缺陷允许代理window对象,截获并读取返回的字符串内容。

🛡️ 修复方法包括:AJAX接口统一验证'X-Requested-With'请求头,或添加响应头'X-Content-Type-Options: nosniff',以及及时更新浏览器版本修复已知漏洞。

Fr1day 2017-08-27 19:31

一篇虎头蛇尾的番外

这是之前写的一篇文章,写到一半拖延了半年...


一句话总结:XSSI漏洞,并非开发逻辑错误而产生的,更应该算是浏览器的漏洞。


0x00 JSONP劫持漏洞

首先,从大家比较熟悉的 JSONP劫持 开始讲起。举个栗子,某站(xxx.yyy.com)需要从主站(www.yyy.com)跨域加载一些信息,所以有了下面的这段代码:

但是getinfo.php的代码没有对来源站做检查,再加上script的跨域特性,就让攻击者有机可乘了。攻击代码示例如下:

当用户点击了恶意链接之后,页面解析自动发出请求,然后执行攻击者设定好的代码,该接口返回的信息就被攻击者掌握了。攻击原理可以参考CSRF漏洞,利用姿势参考XSS漏洞,这里不再细讲。


这是 JSONP劫持 里比较经典的一个案例。而我们今天要讲的是 XSSI漏洞,跟这个有什么关系吗?


都是劫持敏感信息,但劫持的类型不一样。JSONP劫持的是callback函数名可以被攻击者控制/猜测的JSONP接口,开发人员背锅。而XSSI漏洞劫持的通常是一些AJAX请求的接口,需要配合浏览器漏洞才能成功利用


0x01 XSSI


XSSI -> Cross Site Script Include,漏洞到底是怎么产生的呢?


原因之一,是你用了假的AJAX请求。从开发的视角来看,AJAX请求只能通过 javascript 里的 XMLHttpRequest 对象发出,且在请求的时候浏览器会自动在请求头里加上 X-Requested-With: XMLHttpRequest。如果后台没有检查请求头里没有 “X-Requested-With: XMLHttpRequest” ,直接返回数据(AJAX失去了做人的尊严),就会出现问题。


也就是说,攻击者仍然可以用这种方法去加载存在问题的接口(就像JSONP劫持一样):


```

<script src=http://www.yyy.com/getinfo.php??userid=xxx>

```


但AJAX请求返回内容的格式不定,有可能是json,也有可能是字符串、CSV等。举个栗子,json的格式往往是 {"secret": "secret"},没有赋值给某个变量,也不像jsonp请求会执行指定函数。攻击者无法直接获取到内容,那到底是什么操作泄露了返回的内容呢?


原因之二,是浏览器有了真的漏洞。15年有国外的研究人员发布文章提到了如下几种攻击方法,可以获取到接口的内容:


我们重点来分析下第三种,通过Proxy的设计缺陷来获取json的内容。产生原因比较经典:因为浏览器新性能导致的漏洞。


0x02 案例分析——Proxy

先来看下 Proxy 的基本使用方法。

看起来像webhook,可以更改原有接口的逻辑,截获参数的内容。原本设计应该是为了方便JavaScript的类继承,但黑阔们发现可以用Proxy代理window对象:

由于 {{target_url}} 是用<script>标签加载的,返回内容会被浏览器当成JS解析,当返回的内容为字符串(xyz)的时候,执行内容类似于 window.xyz。字符串的内容就被Proxy has函数读取到了。


现在漏洞已经修复,不能再给window对象添加Proxy代理。修复的过程也比较有意思,出过几次bypass,看来国际大厂的开发哥哥们也喜欢 “指哪儿修哪儿”


具体的案例可以参考: http://balpha.de/2013/02/plain-text-considered-harmful-a-cross-domain-exploit/


0x03 更多劫持方法

Proxy问题只是诸多劫持方法中的一种,更多类型的数据劫持方法可以参考: 

http://www.mbsd.jp/Whitepaper/xssi.pdf

http://bobao.360.cn/learning/detail/3242.html


乌云知识库翻译版本: http://wps2015.org/drops/drops/XSSI%E6%94%BB%E5%87%BB%E5%88%A9%E7%94%A8.html


更多关于Proxy的用法:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy


0x04 影响及修复

漏洞的利用条件:

* 含有敏感信息的接口没有验证 X-Requested-With 请求头

* 浏览器非最新版本,或者存在0day

* 用户点击攻击者的链接


修复:

* AJAX接口统一验证 X-Requested-With 请求头,或者添加响应头 X-Content-Type-Options: nosniff 

* 关服务器跑路(划掉)



阅读原文

跳转微信打开

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

XSSI漏洞 AJAX劫持 浏览器漏洞 安全防护
相关文章