JSONP劫持
概述
引入:因为浏览器为了防止个人信息暴露(cookie等),对浏览器设置了同源策略,这个时候,从不同的域(网站)访问数据需要一个特殊的技术(跨域请求),JSONP应用而生。
JSONP( JSON with Padding)是json的一种“使用模式”,可以让网页从别的域名(网站)那获取资料,即跨域读取数据。
这样就很容易理解,JSONP劫持,就是攻击者attacker通过构造设计一个网站evil(网站中包含其他网站的JSONP漏洞利用代码,具体为回调函数和script标签)请求用户已注册并登录的网站victim(含有JSONP漏洞,该网站对来自网站evil的请求没有进行安全检查直接返回数据)将数据通过alert弹窗等方式返回到网站victim并显示用户在网站victim的注册信息。
总结:JSONP劫持就是利用scirpt标签的src属性实现跨域请求,获取网站数据的过程。
相关劫持
DNS劫持:指攻击者利用其他攻击手段,篡改了某个域名的解析结果,使得指向该域名的IP变成了另一个IP,导致对相应网址的访问被劫持到另一个不可达的或者假冒的网址,从而实现非法窃取用户信息或者破坏正常网络服务的目的。
点击劫持:clickjacking,攻击者使用一个或多个透明的 iframe 覆盖在一个正常的网页上,然后诱使用户在该网页上进行操作,当用户在不知情的情况下点击透明的 iframe 页面时,用户的操作已经被劫持到攻击者事先设计好的恶意按钮或链接上。
攻击者既可以通过点击劫持设计一个独立的恶意网站,执行钓鱼攻击等;也可以与 XSS 和 CSRF 攻击相结合,突破传统的防御措施,提升漏洞的危害程度。
相关安全事件: Facebook ‘likejacking’ 骗局攻击、Adobe Flash Player 网站漏洞利用、Twitter 的 Don’t click 攻击等,都利用了点击劫持技术。
防御:
服务器端防御—X-FRAME-IPTIONS机制,X-Frame-Options 有三个可选的值:
DENY:浏览器拒绝当前页面加载任何Frame页面;
SAMEORIGIN:Frame页面的地址只能为同源域名下的页面;
ALLOW-FROM:允许frame加载的页面地址。
客户端防御----NoScirpt拓展,利用 NoScript 中 ClearClick 组件能够检测和警告潜在的点击劫持攻击,自动检测页面中可能不安全的页面。
<iframe src="http://www.evil.com/" width="1000" height="1000" scrolling="no"></iframe>
crolling=“no” : 从不显示滚动条(即使需要)
cookie劫持:获取用户的cookie,通过cookie登录,进一步伪造身份。
<script>alert(doucument.cookie)</script>
JSONP漏洞的利用过程
目标:获取victim在网站B的敏感信息,比如id,name,email等信息。
前提条件:注册并登录+无安全检查
victim在网站B注册并登录
网站B对来自网站A的JSONP请求没有进行安全检查就直接返回数据
过程:
- victim通过浏览器向网站A(恶意构造的网站)发出请求(可以通过邮箱等点击劫持或则DNS劫持让victim进行请求)
- 网站A向vitcim返回响应页面,响应页面中包含了JavaScript的回调函数和向网站B请求的script标签,示例代码如下:
- 用户收到响应,解析JS代码,将回调函数作为参数向网站B发出请求并将回调函数作为参数请求:这里的回调函数为:Callback(),功能是以alert弹窗形式显示用户在网站B的相关注册信息。参数请求是jsonp=Callback,这里的参数和回调函数名一致。
- 返回包含用户信息的JSON数据。网站B接收到请求
(src="http://B.com/user?jsonp=Callback")
后,解析请求的URL,以 JSON 格式生成请求需要的数据,将封装的包含用户信息的JSON数据作为回调函数的参数返回给浏览器,网站B返回的数据实例如下:
Callback({"id":1,"name":"test","email":"test@test.com"})
- **网站B弹窗或者向网站A上传用户信息数据。**网站B数据返回后,浏览器则自动执行Callback函数对步骤4返回的JSON格式数据进行处理,通过alert弹窗展示了用户在网站B的注册信息。另外也可将JSON数据回传到网站A的服务器,这样网站A利用网站B的JSONP漏洞便获取到了用户在网站B注册的信息。
JSONP跨域请求的一个例子,前端和后端代码样例,实现一个弹窗功能。
JSONP漏洞的危害
JSONP属于敏感信息泄露型的漏洞。受害者通过访问evil网站获取受害者的个人信息,如邮箱,姓名,手机等信息,通过这些信息可以进一步实施诈骗行为。
other
- token 是网站给每一次 HTTP 连接分配的随机数,用来标识不同的用户身份。
- Twitter 蠕虫攻击就是利用点击劫持漏洞来实现CSRF攻击。
- 通过 Clickjacking 漏洞,反射型 XSS 可以转化为存储型 XSS 漏洞,只要用户点击触发此漏洞,就可以在用户浏览器上执行任意的JavaScript 代码
- 既然是窃取敏感信息,那么敏感信息除了一些 email 手机号 用户名等还有什么呢?没错,甚至可以是 CSRF Token 信息,有时候在 CSRF token 获取不到但是又找不到 XSS 的攻击点的时候不妨考虑一下 jsonp 劫持。
- JSONP攻击方式有点类似于CSRF攻击。
- 没有跨域限制的标签:link,img,script,iframe。