chenhongl

导航

 

#知识点:
1、子域名接管-检测&探针&利用
2、COSP跨域资源-检测&探针&利用
3、JSONP跨域回调-检测&探针&利用

#前置知识点:
1、同源策略(SOP):同源策略限制从一个源加载的文档或脚本与来自另一个源的资源进行交互,这是一个用于隔离潜在恶意文件的关键的安全机制.简单说就是浏览器的一种安全策略。可以防止CSRF攻击。

虽然同源策略在安全方面起到了很好的防护作用,但也在一定程度上限制了一些前端功能的实现,所以就有了许多跨域的手段。

“同源”包括三个条件:同协议 同域名 同端口

【例】:
http://www.xiaodi8.com
不属于同源:
https://www.xiaodi8.com 协议不同,不属于同源
http://www.xiaodi9.com  域名不同,不属于同源
http://www.xiaodi8.com:81 端口不同,不属于同源
属于同源:
http://www.xiaodi8.com/xiaodi

 

2、COSP跨域资源:(解决同源策略的限制,业务需求需要调用外部资源)
CORS全称Cross-Origin Resource Sharing, 跨域资源共享,是HTML5的一个新特性,已被所有浏览器支持,跨域资源共享(CORS)是一种放宽同源策略的机制,它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制,以使不同的网站可以跨域获取数据。

COSP的设置:
  Access-Control-Allow-Origin:指定哪些域可以访问域资源。例如,如果requester.com想要访问provider.com的资源,那么开发人员可以使用此标头安全地授予requester.com对provider.com资源的访问权限。
  Access-Control-Allow-Credentials:指定浏览器是否将使用请求发送cookie。仅当allow-credentials标头设置为true时,才会发送Cookie。
  Access-Control-Allow-Methods:指定可以使用哪些HTTP请求方法(GET,PUT,DELETE等)来访问资源。此标头允许开发人员通过在requester.com请求访问provider.com的资源时,指定哪些方法有效来进一步增强安全性。

但是如果COSP的设置得不合理,就会导致资源被调用---CORS漏洞

检测项目:https://github.com/chenjj/CORScanner

3、JSONP跨域回调
JSONP跨域巧妙的利用了script标签能跨域的特点,实现了json的跨域传输。
检测项目:手工审查元素筛选或Burp项目
https://github.com/p1g3/JSONP-Hunter

 

4、子域名接管:
域名解析记录指向域名,对应主机指向了一个当前未在使用或已经删除的特定服务,攻击者通过注册指向域名,从而控制当前域名的控制权,实现恶意软件分发、网络钓鱼/鱼叉式网络钓鱼、XSS 、身份验证绕过等。子域名接管不仅仅限于CNAME记录,NS,MX甚至A记录也会受到影响。
检测项目:
https://github.com/pwnesia/dnstake
https://github.com/anshumanbh/tko-subs
https://github.com/mhmdiaa/second-order
https://github.com/r3curs1v3-pr0xy/sub404
https://github.com/Echocipher/Subdomain-Takeover

 

总结:

  同源策略可以防止CSRF攻击,但有时候网站需要进行跨域调用,COSP跨域和JSONP跨域回调都是为了解决同源策略下,第三方资源的调用,

  但是如果COSP的设置得不合理,就会导致资源被调用---CORS漏洞,JSONP跨域回调也可以被利用

 

 一、CORS资源跨域-敏感页面源码获取

1、原理:
CORS漏洞:(允许跨域,允许资源共享,建立在同源策略上)CORS漏洞只做资源的获取(源码)
用户A在登录自己的后台或者页面,这个时候访问了第三方的页面,第三方页面去请求这个后台并获取页面的内容,即用户A访问了第三方页面就将自己后台页面的内容泄露了

CSRF漏洞:(如果有同源策略,那就会失效)可以通过CSRF漏洞来进行操作,比如添加用户
用户A在登录自己的后台或者页面,这个时候访问了第三方的页面,第三方页面去请求这个后台并获取页面的内容,即用户A访问了第三方页面就将自己后台页面的内容泄露了

 

2、CORS漏洞产生的原因
设置COSP时:
  Access-Control-Allow-Orign:*    (如果设置为*,表示可以接受任意来源的文件的调用---有漏洞)
  Access-Control-Allow-Orign:http://www.xiaodi8.com  (设置指定页面白名单,只接收这个网站过来的请求,其他页面就不支持了---没有漏洞)

利用条件:如果对方是登录状态,可能获取到敏感文件

此漏洞的危害比较小

 

【例】:

① 登录了blog后台http://www.xiaodi8.com/zb_system/admin/index.php

②再去访问http://www.xiaodi8.com/test.html

#test.html 模拟CORS攻击

这个代码的意思是去请求获取http://www.xiaodi8.com/zb_system/admin/index.php这个页面的资源

 

③ 也可以将获取的页面的内容发送给指定页面来接收

#c.html

# tet.php:
<?php
$file = fopen("secrect.html", "w+");
$res = $_POST['z0'];
fwrite($file, $res);
fclose($res);
?>

访问http://localhost:8081/c.html,去请求目标资源地址,把资源内容通过参数z0发送到tes.php,由tes.php去处理获取的资源内容

会在当前目录生成一个secrect.html,然后这个secrect.html就是http://localhost:8107/zb_system/admin/index.php页面的资源。
打开secrect.html,就可以看到获取的源码

 

二、JSONP回调跨域-虎牙个人信息泄露

1、产生原理:
你的网站需要调用外部支付接口:
  比如调用支付宝官方接口,怎样判断是否支付成功?
  自己的网站域名是支付宝官方的域名吗?当然不是,所以属于不同源,不符合同源策略

调用第三方接口,除了支付接口,类似的登录接口等一系列都是这种回调。
所以网站有同源策略但也想支持跨域资源的调用,可以通过JSONP跨域回调


大型网站这种同源策略有没有?(肯定有)

 

用户A的浏览器访问过huya、baidu、youku等平台
攻击者:尝试测试这些官方网站的回调页面(解决同源策略的安全问题)(而不是不直接去请求有敏感信息的页面)

对于官方来讲:来源如果来自攻击者的网站,是不合法的,直接被同源策略防护阻止
但用户回调第三方:官方认同的合法的,从哪里触发都可以了,就不会阻止

这时候攻击者自己搭建网站去触发代码,只要用户A访问了攻击页面,相当于用户A就触发了回调,解决了同源策略的防护问题
攻击者从而得到了回调页面的内容(如果回调中有用户的敏感信息,就是有价值的漏洞)

【例】:

① 登录“虎牙直播”平台的账号;

② 监控页面数据包

勾选Preserve log,搜索callback,查看哪些接口有回调,查看回调的“Response”信息

 

有回调的地方,是允许调用第三方资源的,从而可以被利用

③ 当访问个人资料的时候有回调信息:

访问地址:https://user.huya.com/user/getUserInfo?callback=jQuery17205956628992364452_1649121318647&uid=1259515769956

回调信息:jQuery17205956628992364452_1649121318647({"code":200,"data":{"uid":1259515769956,"avatar":"https://huyaimg.msstatic.com/avatar/1098/f5/f1d0e63d36c8ce1eb1e428c6306173_180_135.jpg?1565133598"},"message":"请求成功"})

其中https://huyaimg.msstatic.com/avatar/1098/f5/f1d0e63d36c8ce1eb1e428c6306173_180_135.jpg?1565133598 这个就是个人头像信息

 

④ 构造一个html,当用户去访问这个页面时,就能获取到用户的头像信息(个人信息)

src=目标地址:https://user.huya.com/user/getUserInfo?callback=jQuery17205956628992364452_1649121318647&uid=1259515769956

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>JSONP劫持测试</title>
</head>
<body>
<script type="text/javascript">
    function callbackFunction(result)
    {
        alert(result.avatar);
    }
</script>
<script type="text/javascript" src="https://user.huya.com/user/getUserInfo?callback=jQuery17205956628992364452_1649121318647&uid=1259515769956"></script>
</body>
</html>

 

三、子域名接管-个人子域名劫持接管

域名接管:
  test.baidu.com 设置域名时,“记录类型”选择了cname,指向另一个域名test.xxxx.com
  如果这个时候 test.xxxx.com过期或者失效等
  我们是不是注册这个域名,从而实现对test.baidu.com控制

在域名解析的时候,CNAME的记录类型是将一个域名指向另外一个域名

 

【例】:

① test.xiaodi8.com 在设置域名时,“记录类型”选择了cname,指向另一个域名www.testxiaodi.fun

设置后,访问test.xiaodi8.com和www.testxiaodi.fun,都是同一页面

 

② 现在攻击者发现www.testxiaodi.fun这个域名过期了,就注册了这个域名

 ③ 等待域名解析成功后,

这个意思是:假如test.mumuxi8.com设置了cname,指向www.mumuxi666.com

而www.mumuxi666.com指向了地址47.100.167.248,这个时候,test.mumuxi8.com->www.mumuxi666.com-->47.100.167.248 相当于test.mumuxi8.com访问就是访问47.100.167.248这个域名。
假如这个www.mumuxi666.com过期了,然后攻击者注册了这个域名(这个域名被攻击者所有)然后在网页中制作与test.mumuxi8.com这个相识的钓鱼页面,那么访问test.mumuxi8.com这个域名,相当于访问了攻击者的域名。实现了对test.mumuxi8.com的控制。

需要留意这个www.mumuxi666.com这个域名有没有过期。

 

四、检测工具-CORS&JSONP&子域名接管

1、检测CORS的工具:CORScanner-1.0.1

  项目地址:https://github.com/chenjj/CORScanner

  python cors_scan.py -i top_100_domains.txt -t 100   # -i top_100检测全球排名前100的网站

       

  有允许来自不同域名的资源的调用,这里设置是固定的网站,如果设置为*,表示可以接受任意域名的调用,就存在CORS的漏洞。


2、人工排查+burpsuite 安装Jsonp_Hunter.py抓包使用

  1. 人工排查:监控数据包,勾选Preserve log,搜索callback,查看哪些接口有回调

  2. 在burpsuite上安装插件Jsonp_Hunter.py,抓包后,就会把所有有回调的接口显示在“JsonpHunter”页面

       

3、dnsub工具,爬取子域名筛选接管

     

 

4、JSONP-Jsonp_Hunter.py插件安装

安装跟上次那个验证码识别差不多,不要再英文路径上安装

安装完成后会出现JsonpHunter这个栏

当访问huya.com的时候,所有的回调会在在这里显示

 

 

 

posted on 2024-07-03 17:08  chenhongl  阅读(130)  评论(0)    收藏  举报