jsonp劫持与CORS漏洞


0X00-引言


给朕去燕尾服来,B站这跨年上流,太TM上流了

vae 素颜 爷青回

看我不卷死你们

小飞机

0X01-同源策略与跨域


同源策略是浏览器安全的一个策略

同源策略:不同域的客户端脚本在没有明确授权的情况下,不能读写对方的资源。简单来说同源策略就是浏览器会阻止一个源与另一个源的资源交互。可以试想一下,如果没有同源策略,当你访问一个正常网站的时候又无意间打开了另一个恶意网站,恶意网站会从你刚刚访问的正常网站上窃取你全部的信息。

同源是指:协议、域名、端口号都相同,三者其一不同都不能称为同源。

同源限制:

  • 存储在浏览器的数据不能通过脚本跨域访问
  • 不能通过脚本操作不同域下的DOM
  • 不能通过ajax请求不同域的数据

跨域是不同源之间的资源访问

跨域方法举例:

  • jsonp跨域(只接受get方法)(非官方技术)(奇淫技巧)
  • CORS(跨资源共享)

对同源策略免疫的标签

  • 的 src
  • 的 href
  • python -m SimpleHTTPServer 666 #开启web服务
    

    访问http://192.168.234.135:666/jsonp.html

    image-20211230214049344

    经验证存在jsonp劫持漏洞

    我们构造exp,同时开启web服务

    诱导用户访问该exp,使用户的jsonp数据发送到攻击者服务器上面

    exp中反弹数据的端口为888

    web服务端口为666

    
    
    
    JSONP劫持测试
    
    
    
    
    
    
    
    

    开启监听-访问exp

    image-20211230214620619

    image-20211230214650222

    一直转圈圈

    image-20211230214728303

    将得到的数据url解码得到jsonp数据

    image-20211230214933996

    挖掘方法

    寻找script类型的并且包含jsonp特征的资源
    谷歌语法:site:target.com inurl:?callback
    浏览器-开发者工具-网络-搜索关键词(json / jsonp / callback)
    检查响应有无敏感信息
    

    关键词:

    cb
    callback
    jsoncb
    jsonp
    jQuery
    jsoncallback
    jsonpcallback
    jsoncall
    jsonpcall
    

    0X04-防御措施


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

    0X05-参考


    JSONP绕过CSRF防护token

    jsonp漏洞手动挖掘

    一次实战之JSONP 漏洞

    0X06-CORS漏洞


    CORS 是一个 W3C标准,全称是 "跨域资源共享"(Cross-origin resource sharing) 。它允许浏览器向跨源服务器发出 XMLHttpRequest 请求,用于绕过SOP(同源策略)来实现跨域资源访问的一种技术。
    CORS漏洞则是利用CORS技术窃取用户敏感数据,CORS漏洞的成因是服务端配置的规则不当所导致的,服务器端没有配置Access-Control-Allow-Origin等字段。

    CORS中关键的几个HTTP头字段如下:

    • Access-Control-Allow-Origin:该字段是必须的。它的值要么是请求时Origin字段的值,要么是一个*,表示接受任意域名的请求。
    • Access-Control-Allow-Credentials:该字段可选。它的值是一个布尔值,表示是否允许发送Cookie。默认情况下,Cookie不包括在CORS请求之中。当设置为true时,即表示服务器明确许可,Cookie可以包含在请求中,一起发给服务器。现实环境中的CORS,几乎都是必定需要cookie的
    • Access-Control-Allow-Methods:用来判断浏览器通过什么方式发起的,默认是content-type,如果后端服务器未配置这个请求头,或者仅允许content-type而浏览器通过XMLHttpRequest发起,也会跨域失败
    • Access-Control-Allow-Headers:指定可以在请求报文中添加的HTTP头字段;
    • Access-Control-Max-Age:指定超时时间;

    0X07-CORS漏洞演示


    访问靶场http://192.168.234.141/DoraBox/

    image-20211231155027118

    image-20211231164400047

    burp抓包-分析-发现此等字段心想有点CORS的意思(此时假装不知道是靶场)

    image-20211231155349250

    添加Origin字段-条件满足-存在CORS漏洞

    image-20211231155704767

    EXP:

    
    
    
    
     cors exp
    
    
    
    
    
    

    生成html文件-windows系统双击即可弹出json信息

    image-20211231163420258

    制作exp诱导用户点击,是用户访问网站的json信息发送到攻击者服务器(kali),kali监听端口

    图中文件放入kali-开启web服务-index.html不需要(截图时没删除)

    image-20211231163649676

    get.php源码:

    
    
    
    	CORS TEST
    
    
    	

    POST.PHP源码

    
    
    
        CORS TEST
    
    
        

    先开启监听再访问http://192.168.234.135:666/CORS/Exp.html

    image-20211231164122607

    点击确定

    kali接受到信息

    image-20211231164226940

    url解码-这时就可以从黑客服务器看到用户的json信息

    image-20211231164329834

    挖掘思路:

    get请求的json形式敏感信息,请求头中添加任意Origin值

    看返回头中是否存在以下

    Access-Control-Allow-Origin:https:和请求头中Origin值一样
    Access-Control-Allow-Credentials:true
    

    若存在,构造POC进行跨域读取json数据

    burp快速过滤

    image-20211231222258893

    访问认为有CORS的页面

    过滤-将Access-Control-Allow-Origin:https:*填入-如下

    image-20211231222548160

    危害:

    • 获取用户数据
    • 客户端缓存中毒:这种配置允许攻击者利用其他的漏洞,更改没有验证的字段,看是否正常回显。比如,一个应用返回数据报文头部中包含“X-User”这个字段,这个字段的值没有经过验证就直接输出到返回页面上,此时就可以结合XSS漏洞来利用。
    • 服务端缓存中毒:利用CORS的错误配置注入HTTP头部,这可能会被服务器端缓存下来,比如制造存储型xss

    0X08-修复建议


    仔细评估是否开启CORS,如果不必要就不要开启CORS。

    如果是绝对必要的话,要定义“源”的白名单。尽量不使用正则表达式配置,不要配置“Access-Contol-Allow-Origin”为通配符“*”,同时严格校验来自请求的Origin值。

    0X09-参考


    CORS跨域漏洞总结

    CORS配置不当—挖掘技巧及实战案例全汇总

    初识CORS跨域资源共享漏洞

    CORS漏洞原理分析