尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

渗透测试入门指南:从靶场搭建到实战通关全攻略

渗透测试入门指南:从靶场搭建到实战通关全攻略 1. 先搞清楚靶场才是渗透测试入门的正确练习对象经常有朋友在后台问我同一类问题想学渗透测试但不知道第一步该做什么。看教程看到SQL注入XSS这些名词时觉得很有意思想动手练一练又不敢拿真实网站开刀担心触犯法律。我的回答永远是同一句话自己搭一套靶场从环境搭建开始踏踏实实刷通关。这篇文章就想一次性把零基础学习渗透测试的完整路径讲清楚从虚拟机环境、靶场部署到各类漏洞靶场的通关思路全部覆盖。1.1 为什么不能拿真实网站练手这里必须先说一个底线问题。渗透测试本身是合法的职业行为但它有严格的前提要么是对自己拥有或运维的系统做测试要么是在甲方明确授权范围内的测试要么就是在专门设计的靶场里练习。真实互联网上的网站哪怕它漏洞百出你没有授权就去测试一旦产生实际影响轻则被投诉封号重则涉及破坏计算机信息系统类案件这个风险没有任何学习价值值得你去冒。靶场存在的意义就是把这个风险完全隔离掉。所谓靶场你可以理解为专门用来挨打的教学训练场它被设计成包含大量已知漏洞的模拟系统你可以在里面放心大胆地用各种工具、各种手法去尝试。不管你把靶场打成什么样最多就是重启一下容器的事不会带来任何真实世界的后果。这是所有渗透测试学习者的第一个共识练手只打靶场永远不打真实目标。1.2 靶场和真实目标的核心区别我见过不少人有一种错觉靶场是假的练出来的东西到了真实环境没用。这个想法只对了一半。靶场确实简化了很多真实环境里的干扰因素比如没有复杂的网络拓扑、没有流量监控设备、没有WAF但靶场里练的每一个漏洞原理在真实环境中是真实存在的。SQL注入就是SQL注入无论你注入的对象是一个教学表单还是一个银行系统背后的数据库语言原理是同一套。区别在于真实环境的容错率和复杂度。靶场给你的是纯净的漏洞触发条件让你能看清楚漏洞的全貌真实系统则需要在大量代码中定位入口绕过过滤规则处理各种业务逻辑。所以正确的学习路径不是跳过靶场直接上真实项目而是用靶场把每一个漏洞的原理和手法反复练熟让这些操作变成肌肉记忆后面再接触复杂场景才不会心虚。1.3 入门靶场怎么选一张路线图市面上的靶场非常多初学者最容易犯的错误就是什么都想装一遍最后每个都玩了两分钟就放弃。根据我自己的经验零基础到入门只需要按顺序打好这几个靶场就足够了靶场名称定位适合阶段难度DVWA综合漏洞靶场带安全等级设计刚学完基础概念的入门期低Pikachu中文综合靶场模块丰富想系统刷漏洞类型的成长期低-中SQLi-LabsSQL注入专项靶场想深入吃透SQL注入时中XSS-LabsXSS专项靶场想深入吃透跨站脚本时中Vulhub真实CVE漏洞环境集合想接触真实漏洞组件时中VulnHub完整虚拟机靶机想模拟真实渗透流程时中-高红日靶场域环境内网渗透场景有内网渗透基础后高这个路线最大的好处是每一步都只增加一个新的学习变量不会出现环境没搞明白还要同时学三四个漏洞原理的情况。先把 DVWA 打穿你对渗透测试的完整流程就有感觉了后面再逐个深入专项、接触综合场景就顺理成章。2. 环境搭建Kali Linux 虚拟机与 Docker 都不能少2.1 为什么选虚拟机跑 Kali环境搭建是渗透测试入门第一道坎无数人卡在第一步。核心环境其实就是一套 Kali Linux它内置了 Nmap、Burp Suite、sqlmap、John the Ripper 等几百款渗透测试工具省去了大量安装配置的时间。Kali Linux 的安装方式有物理机安装、虚拟机安装、WSL、Docker 等好几种。零基础我强烈建议用虚拟机方式推荐 VMware Workstation 或者 VirtualBox。原因有三点第一虚拟机里的系统跟你的真实系统是隔离的靶场环境跑在虚拟机里即使被打崩了也不影响宿主机第二Kali 系统可以随时做快照打坏了一个快照还原就回到初始状态第三后续打 VulnHub 这类虚拟机靶场时VMware 直接导入运行操作路径一致。安装 Kali 时有个常见误区很多人默认配置只给 2GB 内存、20GB 硬盘结果靶场装多了以后卡到怀疑人生。我建议虚拟机至少分配 4GB 内存如果宿主机内存够大就上 8GB、2 核 CPU、60GB 硬盘空间。硬盘大而不是因为 Kali 本身吃空间而是后续你要在里面运行 Vulhub 的几十个 Docker 容器镜像一多空间消耗很快。2.2 Kali 虚拟机安装与网络设置安装过程这里只讲关键步骤。从官网下载 Kali 的 VMware 镜像或 ISO 文件后新建虚拟机时选择稍后安装操作系统操作系统类型选 Linux 的 Debian 64 位然后按上面说的配置内存和磁盘。装完系统进入桌面后第一件事是执行系统更新sudo apt update sudo apt upgrade -y这里有个经验新装的 Kali 默认可能是双网卡或单网卡 NAT 模式VMware 的 NAT 模式意味着虚拟机通过宿主机共享网络上网这个模式对初学阶段完全够用。不过要注意 NAT 模式下宿主机和虚拟机之间有网络隔离后面访问靶场 Web 页面时直接在 Kali 的浏览器里访问容器的映射端口就行不需要额外配置桥接。等学到后面做内网渗透、横向移动练习时就需要把网卡改成桥接模式或建一个自定义 VMnet 网络模拟内网环境。初学阶段不用纠结这个先让 Kali 和靶场跑起来才是最重要的。装好系统后建议立刻做一个快照命名为初始状态后面不管怎么折腾都能一键恢复。2.3 用 Docker 装靶场环境隔离的一劳永逸方案靶场部署方式很多早期大家都是用 phpstudy 这类集成环境把 Apache、PHP、MySQL 一股脑装上再把靶场源码扔进网站目录。这种方式的问题在于一个靶场需要的 PHP 版本、MySQL 版本、扩展配置各不相同装了两三个靶场后环境冲突就够你折腾一整天的。现在主流做法是用 Docker 跑靶场。Docker 可以把每个靶场连同它的运行环境打包成一个独立容器互不干扰。装一个靶场就是一条命令的事碰坏了删除容器重建也就几十秒。Kali 里安装 Docker 很简单sudo apt install docker.io docker-compose -y sudo systemctl enable --now docker安装完成后后面所有基于 Docker 的靶场部署都是同一个套路先写一个 docker-compose.yml或直接执行 docker pull 拉镜像然后 docker run 或 docker-compose up -d 启动最后浏览器访问对应端口。整个流程里最需要记住的是端口映射这个知识点容器内部程序跑在 80 端口但你访问的是宿主机的映射端口所以 -p 8080:80 就是把容器的 80 端口映射到宿主机的 8080 端口。明白了这个映射关系后面无论访问哪个靶场都不会懵。3. DVWA 通关从安全等级设计理解漏洞本质3.1 DVWA 部署与初始化DVWADamn Vulnerable Web Application是所有渗透测试入门者第一个应该打穿的靶场。它天然支持 Docker 一键启动如果你不想折腾 Docker也可以配合 phpstudy 直接源码部署。我这里给两条路子。Docker 方式最省心直接执行docker run -d -p 8080:80 vulnerables/web-dvwa然后浏览器访问 http://127.0.0.1:8080 就能看到 DVWA 的登录页。需要理解的是这条命令里指定了容器会自动处理 DVWA 所需的所有环境你不需要在容器里再装 PHP 或 MySQL这是 Docker 部署最大的优势。启动后再往下走会碰到一个让很多人困惑的界面点击 Create/Reset Database 按钮初始化数据库。这里需要解释一下DVWA 自带一套数据库初始化脚本帮你建好所有测试用的表和初始数据。点完之后页面会跳到登录页默认账号是 admin默认密码是 password。登录后你会看到左侧有 Brute Force、Command Injection、CSRF、SQL Injection、XSS 等十几个模块这就是 DVWA 的全部内容。3.2 Low 等级SQL 注入与命令注入的完整通关DVWA 最有价值的设计是安全等级设置。在 DVWA Security 页面里你可以把安全等级从 Low 调到 Medium、High、Impossible 四级。这四个等级的代码难度逐级递增Low 等级几乎没有防护百分百贴合代码审计入门的场景Impossible 等级则使用了参数化查询、Token 校验、输入白名单等安全写法是完美的安全编码标准答案。我建议入门阶段先牢牢锁定 Low 等级一门心思理解漏洞触发原理。以 SQL Injection 模块为例Low 等级的实现方式是把用户输入直接拼接到 SQL 语句里你只需要在输入框输入 or 11 -- -就能看到数据库返回所有用户的信息。这个 payload 的原理是单引号闭合了 SQL 语句中的字符串or 11让 WHERE 条件恒为真-- -把后面的 SQL 注释掉。从这一条 payload 开始你可以顺势试验各种变体 union select ...、 and 12 ...逐步理解联合查询注入的语法结构。Command Injection 模块同理Low 等级下用户输入的 IP 地址会被直接拼接到 ping 命令中。输入一个正常的127.0.0.1会返回 ping 结果而输入127.0.0.1 whoami会额外执行 whoami 命令这就是命令注入的核心原理。关键点在于理解拼接这个动作只要开发者把用户输入直接拼进命令字符串你就有办法通过分隔符注入新命令。3.3 等级切换的意义对比代码看修复方案很多初学者不明白为什么要设计四个等级以为只是难度差异。其实这四个等级本质上是漏洞代码的演进史。在 DVWA 页面的 View Source 功能里你可以同时看到四个等级的 PHP 源码。把 Low 和 Medium、High 的代码放在一起看你会发现安全漏洞是怎么一步一步被堵上的Low直接字符串拼接Medium使用 mysql_real_escape_string 转义部分特殊字符High引入预编译语句或更严格的输入处理Impossible使用参数化查询 Token 双重防护从根上杜绝拼接参数化查询这个概念我建议你在看完四个等级代码后认真理解一下。它相当于把 SQL 语句的结构和数据分开传送数据库先编译好语句模板再绑定参数这样即使参数里含有 SQL 语法也不会被当作指令执行。理解了这一步你就明白为什么SQL注入修复的最好办法是预编译这个说法了。我的建议是不要急着把 DVWA 所有模块打穿而是每打一个模块就花 20 分钟对比四个等级的源码差异。这 20 分钟的价值比打完全部模块还大它让你从会打变成了懂原理后面遇到真实系统里的防护手段时你至少知道它在哪个环节做防护、用什么方式防护。4. Pikachu 中文靶场全类型漏洞的刷题训练场4.1 Pikachu 的模块设计好在哪如果你是中文环境下的学习者Pikachu 是比 DVWA 更友好的一个综合靶场。它由国内安全社区维护界面全中文漏洞类型覆盖更全而且每个模块都配了提示功能哪怕遇到完全没接触过的漏洞类型也能顺着提示往下走。Pikachu 部署和 DVWA 类似phpstudy 源码部署或 Docker 都行。Docker 方式一条命令docker run -d -p 8081:80 area39/pikachu然后访问 http://127.0.0.1:8081 就能打开 Pikachu 首页。页面里按漏洞类型分好了章节暴力破解、XSS、CSRF、SQL注入、RCE、文件包含、文件上传、越权、逻辑漏洞等。每个章节下面有若干个独立的小练习比如RCE下面分为exec ping和eval两个练习分别是命令注入和代码注入的独立场景。Pikachu 和 DVWA 最大的不同是它没有安全等级这个维度而是让每个练习都处在一个中等偏实战的水平。这意味着你在 Pikachu 里碰到的漏洞不一定像 DVWA Low 等级那样裸奔有时需要加一点绕过思路。这个设计非常适合作为 DVWA 之后的第二个综合靶场。4.2 RCE 与 SQL 注入模块的通关示范RCE远程代码/命令执行是 Pikachu 的招牌模块。进入 exec ping 练习后你会看到一个类似输入IP地址进行连通性测试的输入框。这个场景模拟的就是运维人员写了个小工具输入 IP 就帮你 ping 一下服务器但代码里直接做了命令拼接。测试方法比 DVWA 更直接在输入框输入127.0.0.1 | whoami注意这里用的是管道符|而不是因为|会把左侧命令的输出作为右侧命令的输入在只显示最终结果的场景中|往往比更隐蔽。如果你不想让页面回显命令内容用;分号也能实现命令顺序执行。多试几种符号组合你就能总结出每种 shell 连接符的区别。这里我给一个非常实用的小建议学习命令注入时把;、|、||、、$()、反引号这六种方式全部在靶场里测试一遍记下各自的执行条件和回显差异实战排查时你会感谢自己做过这个测试。Pikachu 的 SQL 注入模块也和 DVWA 不同它把字符型注入搜索型注入数字型注入分开成了独立练习每个练习都在 URL 参数上传参。比如字符型注入的 URL 长这样http://127.0.0.1:8081/vul/sqli/sqli_str.php?nameadmin测试时把 name 参数改成admin或1 or 11 -- -观察页面报错和返回差异。把这三个注入类型轮一遍后你对注入点闭合方式的判断能力会明显提升。4.3 Pikachu 适合自学的细节设计Pikachu 还有一个值得夸奖的设计是每个模块底部都有提示按钮。点开提示它会用两三句话说清楚这个漏洞的触发点在哪、利用思路是什么。这是其他很多靶场没有的非常贴合自学场景。我的建议是在 Pikachu 里给每个模块写一份自己的通关笔记。格式很简单漏洞名称、触发原理、利用步骤、修复建议、一句话心得。全部模块轮完以后你就拥有了一份覆盖所有主流 Web 漏洞的个人手册。这份笔记在后续面试或实战时都会用到比从网上复制一份大而全的知识清单靠谱得多因为每一个字都是自己打靶场得出的。5. 专项补课SQLi-Labs 与 XSS-Labs 的刷题式路线5.1 SQLi-Labs 从 1 到 65核心不是记 payload综合靶场打完之后你会发现自己在某个漏洞类型上还是不够深入。这时候专项靶场就该上场了。SQLi-Labs 是目前公认最完整的 SQL 注入专项靶场一共 65 个关卡覆盖了数字型注入、字符型注入、报错注入、盲注、堆叠注入、二次注入、绕过 WAF 等几乎所有注入场景。SQLi-Labs 部署有两种方式phpstudy 把源码放到站点目录或者 Docker 直接跑。Docker 镜像有很多版本比较常见的是docker run -d -p 8082:80 muxcc/sqli-labs如果你选择 phpstudy 部署有一个关键坑要特别注意SQLi-Labs 的老代码对 PHP 版本比较敏感PHP 7.x 和 PHP 5.x 下部分关卡行为不同如果遇到某关怎么打都不出结果先检查 php 版本和 php_mysqli 扩展是否启用。从第 1 关开始你会发现前面十几关都是同一个套路URL 里的 id 参数存在注入只是闭合方式不同。关键能力是判断闭合方式——用单引号、双引号、数字、括号去测试观察页面是否报错、报错内容是什么。这里我给一个非常高效的练习方法不要看任何参考答案自己从第 1 关打到第 20 关如果某关超过 30 分钟没思路再去查答案但查完之后要在笔记里记录我当时卡在哪个思路上这样才是有效学习。到第 20 关之后难度会明显上升出现报错注入、布尔盲注、时间盲注等类型。盲注的练习要点是页面不会回显数据只能通过页面内容是否变化或响应时间是否延迟来判断条件真假。这一部分最考验写脚本和手注的能力也是很多人中途放弃的地方。我的建议是自己写一段 Python 脚本或直接用 Burp Suite 的 Intruder 模块来辅助验证既能练 HTTP 交互逻辑也能加深对盲注流程的理解。5.2 XSS-Labs 通关关键绕过过滤的思维方式XSS-Labs 是 XSS 方向的专项靶场关卡数量比 SQLi-Labs 少但对绕过思路的训练非常扎实。它的初始关卡通常直接输入scriptalert(1)/script就能触发弹窗。但后面会逐步增加过滤过滤 script 标签、过滤大小写、过滤括号、过滤特殊字符等。比如某关过滤了script关键字你可以试试大小写混写sCrIpT如果过滤了标签名你可以改用img srcx onerroralert(1)如果过滤了事件属性还可以试试svg/onloadalert(1)、a hrefjavascript:alert(1)等。XSS-Labs 真正训练的不是 payload 记忆而是输入-过滤-绕过的思维方式。每次被过滤拦截时先问自己三个问题它过滤了什么过滤发生在服务端还是浏览器端有没有其他等价写法可以表达同样的执行逻辑沿着这个思路走刷到最后一关你自然就形成了 XSS 绕过的系统方法。5.3 配合 Burp Suite 的练习方法专项靶场刷题阶段Burp Suite 这个工具一定要用起来。它是渗透测试中最核心的抓包改包工具几乎所有的 Web 漏洞测试都需要它配合。Burp Suite 的基本工作逻辑是浏览器配置代理指向 BurpBurp 截获所有 HTTP 请求你可以在请求被发出去之前修改参数再决定转发或丢弃。在用 SQLi-Labs 和 XSS-Labs 练习时我建议每一步都通过 Burp 的 Repeater 模块手动发送请求。这样有几个好处第一你能直接看到请求头和请求体理解参数传输的完整过程第二改参数比在浏览器地址栏操作更灵活也更容易观察注入逻辑第三Burp 的响应区能让你快速对比不同 payload 的返回差异。刷完这两个专项靶场后你对 Burp 的熟练度也顺带练出来了相当于一次投入两份收获。6. 从靶场到实战Vulhub、VulnHub 与红日靶场的进阶选择6.1 VulhubCVE 漏洞环境一键复现Vulhub 是我个人非常推荐的一个中间阶段靶场。它提供的不是教学型漏洞而是真实 CVE 漏洞的复现环境。比如之前热门的 Redis 未授权访问漏洞、Fastjson RCE 漏洞、Apache Log4j 漏洞等都在 Vulhub 里有对应的 docker-compose 配置。Vulhub 使用方法比综合靶场简单也更标准化先进入某个漏洞的目录然后执行docker-compose up -d就会自动创建对应漏洞环境。由于每个环境之间互不影响你可以同时启动多个漏洞环境不用像 phpstudy 时期那样担心端口、依赖、版本冲突。Vulhub 练习的意义在于它把你从教学漏洞带到了真实漏洞的门口。同样是命令执行教学靶场告诉你拼接原理Vulhub 里的 Fastjson 漏洞则要求你理解 Java 反序列化的调用链。这里需要注意Vulhub 涉及的大部分漏洞都需要特定触发条件环境启动后先阅读项目自述文件搞清楚环境结构和复现步骤而不是拿扫描器乱扫一通。6.2 VulnHub把靶机当成一台真实服务器VulnHub 和前面所有 Web 靶场不同它提供的是完整的虚拟机镜像文件通常以 OVA 格式提供。你需要下载镜像后在虚拟机软件里导入启动后它就变成一台未知网络中的服务器。你需要在 Kali 里用它进行完整的渗透流程主机发现、端口扫描、服务识别、漏洞探测、漏洞利用、权限提升。以经典靶机为例部署要点是下载 OVA 后导入 VMware网络模式建议用 VMnet仅主机或 NAT然后从 Kali 执行nmap -sP 192.168.1.0/24找到靶机的 IP再对这个 IP 进行全端口扫描。整个过程完全模拟真实渗透测试的工作流甚至需要你去搜索引擎查某个服务的已知漏洞利用方式。VulnHub 的靶机设计往往还隐藏了作者故意留下的提示信息比如某个页面的注释、某个文件里的字符串这些都需要细心发现。打 VulnHub 是很多人的第一个劝退点因为不像 Web 靶场那样输入 payload 看结果那么简单直接。但只要沉下心走过两三台靶机你就能建立起完整的渗透思路框架信息收集越充分后面利用阶段就越顺利。6.3 红日靶场域渗透场景的硬核挑战红日靶场是进阶路线中比较有分量的一个系列它模拟的是内网域渗透场景。以经典的红日靶场框架为例整个环境包含多台虚拟机模拟了一个带域控制器、多台业务服务器的真实内网拓扑。你要做的事情已经从打一个 Web 漏洞升级为从 Web 入口进入内网、进行内网信息收集、横向移动、最终获取域控权限。这个靶场对环境要求高一般需要至少三台虚拟机协同运作对 VMware 虚拟网络配置有比较高的要求。我不建议零基础直接碰红日靶场至少要先完成 VulnHub 的若干台靶机并掌握基本的 Windows 内网知识比如域的基本概念、Kerberos 认证流程、常见的横向移动方式等再考虑挑战它。6.4 用靶场搭一条可持续的学习路线最后聊一聊我对靶场练习路线的整体看法。入门阶段的顺序应该是DVWA 建立整体认知Pikachu 系统刷漏洞类型SQLi-Labs 和 XSS-Labs 深挖专项Vulhub 接触真实 CVEVulnHub 模拟完整渗透流程最后再探索红日靶场这类综合内网场景。每一步的目标都很明确不会东一榔头西一棒子。我个人打靶场的习惯是每一个靶场都配上笔记记录环境搭建命令、通关过程、踩过的坑和漏洞原理总结。时间久了这些笔记就是最宝贵的学习资产。靶场练的是手熟笔记沉淀的是心熟两者结合才能做到从会打到懂原理、从懂原理到举一反三。渗透测试这个行业没有捷径但有一条确定的路把合法的靶场一个个打穿把踩过的坑一个个记下来技术和认知都会稳步提升。
返回列表