渗透测试是通过模拟黑客攻击的方式,主动发现网络设备、服务器、Web应用等存在的安全漏洞,并评估其风险的过程。它主要分为白盒测试与黑盒测试。白盒测试在知晓目标源码等内部信息的情况下进行,类似于代码审计;黑盒测试则仅告知目标URL,完全模拟外部攻击者的视角。
本文将基于黑盒测试场景,梳理一次完整的渗透测试所涉及的核心步骤与关键思路。标准的渗透测试流程通常包含以下几个阶段:
- 确定目标
- 信息收集
- 漏洞探测
- 漏洞利用
- 内网转发
- 内网横向渗透
- 痕迹清除
- 撰写渗透测试报告

一、 确定目标
明确渗透测试的对象与范围,例如某个具体的域名、IP地址或应用系统。
二、 信息收集
信息收集是渗透测试的基石,直接决定了后续攻击的深度与广度。收集的信息越全面,攻击路径就越清晰,成功率也越高。
1. 主机与端口扫描
- 主机扫描:使用如 Nessus 等工具,扫描目标主机开放的端口、运行的服务及存在的系统漏洞。
- 端口扫描:利用 Nmap(精准但慢)或 Masscan(快速但可能有误报)等工具探测开放端口。常见高危端口包括:
- 22 – SSH弱口令
- 3306 – MySQL弱口令
- 6379 – Redis未授权访问
- 873 – Rsync未授权访问
2. Web目录与敏感文件探测
扫描网站目录结构,寻找可能泄露敏感信息的路径或文件。
- 后台管理目录:可能存在的弱口令或爆破点。
- 安装目录/文件:可能包含数据库配置文件或网站源码。
- 上传目录:可能的上传漏洞利用点。
robots.txt文件:该文件通常会列出不想被搜索引擎收录的目录,反而可能泄露后台 (/admin/)、数据 (/data/) 等重要路径。
- 常用工具:御剑、DirBuster、dirmap等。
3. 旁站与C段探测
- 旁站:攻击同一服务器上的其他网站,以此为跳板获取目标服务器权限。
- C段扫描:针对目标所在IP的C段地址进行探测,在内网渗透中寻找更多攻击入口。
4. 网站指纹识别与漏洞扫描
- 指纹识别:识别网站使用的CMS(如 WordPress、ThinkPHP)、中间件、Web服务器版本等,便于查找对应的已知漏洞。工具如 WhatWeb。
- 漏洞扫描:使用AWVS、AppScan、Nessus等工具进行自动化漏洞扫描。注意:未经授权的漏洞扫描可能违法并对目标业务造成影响。
5. 社会工程与信息搜集
- 公司信息:搜集目标公司的邮箱格式、员工姓名、组织架构等。
- 代码仓库:在Github、GitLab等平台搜索与目标相关的源码、配置信息,可能意外泄露API密钥、数据库密码等敏感数据。
- 域名信息:查询WHOIS信息、子域名,并判断是否使用CDN,以寻找真实IP。
掌握扎实的网络与系统知识(如TCP/IP、HTTP协议)是进行有效信息收集的前提。
三、 漏洞探测
基于收集的信息,有针对性地探测目标可能存在的安全漏洞。常见的Web漏洞包括:
- SQL注入
- 跨站脚本(XSS)
- 跨站请求伪造(CSRF)
- 服务端请求伪造(SSRF)
- 文件上传与包含漏洞
- 反序列化漏洞
- 越权访问
四、 漏洞利用
发现漏洞后,需使用特定工具或方法进行利用,以获取系统权限(如Webshell)。
- SQL注入:常用 Sqlmap 进行自动化注入与数据获取。
- 文件上传:上传Webshell(如一句话木马),连接后获取服务器控制权。
- 工具集成:Burp Suite 常用于抓包、改包、重放攻击;MSF(Metasploit Framework)、Cobalt Strike 用于生成后门、提权及维持访问。
获得初始立足点(如Webshell)后,往往权限较低,需要进行权限提升(提权)。
五、 内网转发
获取外网服务器权限后,通常需要借助该服务器作为跳板,与无法直接访问的内网其他主机进行通信。这需要搭建代理或隧道,如使用 reGeorg、Frp 等工具。
六、 内网横向渗透
进入内网后,目标是扩大战果,获取更多主机的控制权或核心数据。
1. 信息收集
- Windows主机:翻查文件、桌面备忘录、浏览器保存的密码、数据库连接配置文件等。
- Linux主机:查看历史命令、进程、网络连接、敏感配置文件等。
- 制作密码字典:收集到的各类密码可用于对内网其他服务的爆破攻击。
2. 内网资产探测与攻击
通过代理对内网存活主机及开放端口进行扫描。针对特定服务展开攻击:
- 445端口:尝试 MS17-010(永恒之蓝)漏洞。
- 3389端口:尝试 RDP 相关漏洞。
- 数据库/缓存服务端口(1433,3306,6379等):进行密码爆破。
3. 权限维持
为了长期控制目标,需要部署后门或创建隐蔽账户。
- Web后门:隐藏后门文件、编写不死马、在正常页面中插入后门代码。
- Windows系统:创建隐藏用户(用户名后加
$)、部署计划任务、利用MSF的persistence模块。
- Linux系统:SSH后门、crontab定时任务、设置SUID特权文件。
自动化渗透测试和漏洞利用脚本的编写常常依赖Python等脚本语言。
七、 痕迹清除
为增加溯源难度,需清理部分攻击痕迹。注意:完全清除痕迹极其困难,此举仅为增加对方调查成本。
- Windows:使用
clearev(MSF)清除事件日志;手动删除远程桌面连接记录及Web日志。
- Linux:清空命令历史(
export HISTFILE=/dev/null; export HISTSIZE=0);删除 /var/log 下的相关日志文件。
渗透测试与运维/DevOps领域紧密相关,了解系统的日常运维习惯有助于更好地隐藏行踪。
八、 撰写渗透测试报告
渗透测试的最终产出是一份详尽的报告,需包含:
- 发现的漏洞详情(位置、类型)
- 漏洞危害等级评估
- 漏洞复现步骤与证明(截图)
- 具体的修复建议
附录:漏洞挖掘所需基础知识体系
要系统地进行漏洞挖掘,需要构建跨学科的知识体系:
理论基础
编程能力
- 前端(HTML/CSS/JavaScript)、后端(PHP/Java/Python)、数据库(SQL)等,至少精通一门脚本语言(如Python)用于编写工具。
漏洞原理
- 深入理解各类Web漏洞(SQL注入、XSS、反序列化等)及二进制漏洞(缓冲区溢出)的形成机制、利用与防御方法。
工具链
- 熟练掌握主流的安全工具,如扫描器、爆破工具、代理工具、漏洞利用框架等。
Web架构与协议
- 深刻理解Web前后端交互、HTTP/HTTPS协议、常见服务器与数据库的配置与架构。
以下是一份常见网络安全学习路径的知识模块概览:

此外,系统化的学习资料(如靶场、实验环境、知识图谱)对于提升实战能力至关重要。

漏洞挖掘(SRC)注意事项
- 细致分析:深入理解目标业务逻辑,不急于求成。
- 关注范围:严格遵守目标厂商的漏洞收录范围。
- 法律合规:仅在授权范围内进行测试,保护漏洞细节不对外泄露。
- 逻辑漏洞:在SRC挖掘中,逻辑漏洞(如业务越权、流程缺陷)往往是高价值漏洞的主要来源。
|