WechatIMG350

0X00 前言

众所周知,XSS有反射型XSS、存储型XSS、DOM型XSS,而本文重点讲述的持久化XSS是属于存储型XSS中的漏洞利用

持久化XSS

0x00 Service Worker

Service Worker 是谷歌浏览器在2014年提出的 WEB API 用于WEB应用提供高级的可持续的后台处理工具。目前市面上主流浏览器都已支持该工具。详细来说Service Worker 就是JavaScript的API,运行于浏览器后台,不受页面刷新的影响,可以监听和拦截作用域范围内所有页面的 HTTP 请求。并提供离线功能。而对于安全界来说,可使用Service Worker进行持久化的XSS攻击。

使用条件:

  • HTTPS
  • 同源下的JS
  • Content-Type必须是JS

本地调试可使用localhost和127.0.0.1。

注册使用Service worker

index.html

<html>
<head>
<script>
const SERVICE_WORKER_API = 'serviceWorker';
const SERVICE_WORKER_FILE_PATH = '/xss/sw.js';//service worker文件路径

const isSupportServiceWorker = () => SERVICE_WORKER_API in navigator;

if (isSupportServiceWorker()) {
navigator
.serviceWorker
.register(SERVICE_WORKER_FILE_PATH)
.then(() => console.log('Load service worker Success.'));//注册成功返回提示
} else {
console.info('Browser not support Service Worker.');
}
</script>

</head>

</html>

sw.js

//监控install事件
self.addEventListener('install', function(event){
console.log("install")
})
// 当serviceWorker注册之后,会首先安装一下。再次加载时,如果serviceWorker有更新,则会重新下载安装serviceWorker,否则不会安装。

//监控activate事件
self.addEventListener('activate', function(event){
console.log("activate")
})

//监控fetch事件
self.addEventListener('fetch', function(event){
event.respondWith(new Response('<script>alert(document.cookie)</script>', {headers: {'Content-Type': "text/html"}}))
})

注册成功

image-20210222010617968

chrome://serviceworker-internals/?devtools //查看是否注册成功

image-20210222011237971

chrome://inspect/#service-workers

image-20210222011157073

以上几种均可查看Service Worker是否注册成功

Service Worker XSS 利用