1. 这些漏洞靶场到底解决什么问题
很多刚入门Web安全的朋友,最常问的一个问题就是:我理论看了一大堆,OWASP Top 10能倒背如流,SQL注入、XSS、文件上传的原理也看得懂,可一打开真正的网站,却完全不知道从哪下手。
这里面的核心障碍在于:真实的业务系统太重了,有登录、有权限、有WAF、有各种过滤,甚至还有前后端分离和云防护。你拿它练手,先别说能不能挖到漏洞,光是搭建环境、绕过机制就能劝退一大半新手。而漏洞靶场就是专门为了解决这个问题存在的——它把常见的Web漏洞从真实业务里剥离出来,做成一个又一个目标明确、难度可控、部署简单的练习环境。
靶场的作用,说白了就是给安全学习者一个合法的、可复现的“练枪靶子”。你在靶场里把SQL注入、命令注入、文件上传这些漏洞打得滚瓜烂熟,把各种绕过姿势和防御手法都摸透了,再去面对真实系统或者SRC项目,心里才真正有底。
这篇文章我挑了我自己实际部署过、也带过很多新人跑过的六个知名Web安全靶场,把它们各自的特点、部署方式、适合谁、有哪些坑,都整理出来。无论你是刚入门的萌新,还是有一定基础想进阶的从业者,这里面总有一款适合你。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 部署前的环境准备
不管选哪个靶场,一套干净好用的基础环境能帮你省掉后面大半的麻烦。我自己前前后后部署过十几套靶场,踩过不少坑,这里先把我最推荐的一套组合方案说清楚。
2.1 Docker是首选方案
如果你要问我靶场部署用什么方式最省心,我的答案永远是Docker。
大部分知名靶场都有现成的Docker镜像,一条docker run命令就能把整个环境拉起来。你不需要自己在服务器上折腾PHP版本、MySQL配置、Apache的mod_rewrite这些乱七八糟的依赖关系,也不怕把系统环境搞坏。一个容器就是一个隔离的靶场,用完直接销毁重建,干干净净。
注意:如果你的机器上还没有Docker,可以先安装Docker Desktop(Windows/Mac)或docker-ce(Linux)。安装完成后记得把Docker镜像源配置成国内的加速地址,否则从Docker Hub拉取镜像的速度会让你怀疑人生。
2.2 本机部署的备用方案
有些靶场可能因为年代久远,或者你网络受限拉不动镜像,这时候就需要手动部署。以PHP类靶场为例,最常见的组合是:PHP 5.x/7.x + Apache + MySQL。这里特别提醒一句,很多老靶场在设计时用的是PHP 5的语法和特性,拿PHP 8来跑很容易报错。如果要在本机跑老靶场,PHP版本尽量选5.6或7.4,能少掉很多兼容性问题。
另外,如果你用Windows做本机部署,对目录的读写权限、Apache的DocumentRoot配置要格外留意。尤其是文件上传类靶场,权限不对会导致上传功能直接失败,你连漏洞都触发不了。
2.3 浏览器和辅助工具
靶场建好之后,浏览器建议准备Chrome或者Firefox,搭配一个代理抓包工具像Burp Suite,这是做Web安全的基础装备。抓包不是为了刷存在感,而是当你需要观察请求细节、修改参数、重放请求时会用到的东西。靶场练习的很多题目,单纯靠肉眼在浏览器里看页面是看不出名堂的,必须看请求和响应才能定位问题。
3. 六大知名Web安全漏洞靶场逐个拆解
下面的内容是我对这六个靶场的实际使用感受和分析。每个靶场我都会聊清楚它是什么、里面有什么、适合谁、怎么部署、以及我实际踩过的坑。
3.1 DVWA——新手绕不开的第一个靶场
先说DVWA,全称Damn Vulnerable Web Application,中文常叫“该死的脆弱Web应用”。它是目前全网知名度最高、教程最全、新手入门必做的靶场,没有之一。
DVWA是一个基于PHP+MySQL的Web应用,自带了SQL注入、XSS、命令注入、文件包含、文件上传、CSRF等十大类常见漏洞。它最大的特点是把每一个漏洞都分成了四个难度等级:Low、Medium、High、Impossible。这个设计非常妙,它等于给新手铺了一条循序渐进的学习坡道——你可以在Low级别先搞懂漏洞的完整攻击流程,然后逐级提高难度,体验同一种漏洞在不同防护强度下的绕过思路。而Impossible级别实际上展示的是完全安全的写法,你把它看完,等于同时学了一遍防御方案。
部署方面,DVWA有官方Docker镜像,命令很简单:
bash复制docker run --rm -it -p 8080:80 vulnerables/web-dvwa
跑起来之后,浏览器访问http://localhost:8080,默认账号admin,密码password,就能直接进主界面。首次进去需要点击“Create/Reset Database”按钮初始化数据库,等一秒再登录。这个初始化动作容易被忽略,我刚带人入门时就遇过好几次,进去后白白报错半天,其实只要点一下按钮就好。
DVWA适合什么人?我认为是所有刚接触Web安全的人。它的代码是开源放在GitHub上的,每个漏洞文件的源码可以直接看,你可以一边看漏洞代码,一边理解攻击payload为什么会生效,这对建立“代码视角”非常有帮助。我个人的建议是,DVWA不要只把它当一个打靶工具,而是当成一本“带实操的漏洞教科书”来用,每做完一个漏洞,就把源码打开读一遍。
3.2 WebGoat——从学院派视角系统学漏洞
如果说DVWA更像一个“动动手就能打”的实战训练场,那WebGoat就是OWASP官方出品的“Web安全课程”。它的全称是Web Goat,目标用户很明确:想系统学习Web应用安全知识的开发者、安全测试人员。
WebGoat和DVWA最大的区别在于,它内置了课程体系。每打开一个漏洞专题,页面里都会有对应的知识点讲解、漏洞原理说明,然后才是让你动手完成的练习任务。它就像一门线上课的课后实验,不是纯粹的“打靶”,而是“边学边练”。加上它里面有很多偏逻辑性的题目,比如访问控制绕过、越权操作、XXE等,覆盖面比DVWA更广,难度曲线也更长。
部署WebGoat,官方推荐直接用Docker:
bash复制docker run -d -p 8080:8080 -p 9090:9090 webgoat/goatandwolf
这里注意,我用的命令把两个端口都映射出来了。8080端口是WebGoat主应用的访问入口,访问http://localhost:8080/WebGoat就能看到登录页,首次注册一个账号就能进去。9090端口是WebWolf的,它是配套用来模拟攻击者服务器的工具,在做一些需要接收外部请求、伪造回调地址的题目时会用到,千万别只映射一个端口。
WebGoat适合谁?适合已经有一定的Web基础,或者跟着DVWA把常见漏洞过了一遍、想再系统进阶一轮的人。它的题目有些确实比较绕,卡住的时候别硬扛,去网上搜题目通关思路,理解了解题逻辑再继续,收获会更大。
3.3 bWAPP——覆盖面最广的漏洞百科全书
bWAPP全称是A Buggy Web Application,它是我个人非常偏爱的一个靶场,核心原因就一个:覆盖面实在太全了。
bWAPP内置了超过100个漏洞练习场景,包括但不限于SQL注入、XSS、命令注入、文件上传、SSRF、XXE、反序列化、弱口令、信息泄露、越权访问等等。它同样按照Low、Medium、High三个等级划分,但比DVWA多了一个很实用的功能——每个漏洞练习页面都配了一个“Hint”(提示),你实在没思路的时候点一下,它会给你指个方向,这对学习者太友善了。
bWAPP是一个PHP应用,部署方式有两种。一种是直接用现成的Docker镜像,比如raesene/bwapp,跑起来之后访问首页,先点击“Install”安装一下,再用默认账号bee/bug登录。另一种方式是我更推荐初学者尝试的:下载bWAPP源码,放到PHP集成环境里跑。为什么?因为bWAPP本身需要开启一些PHP扩展和配置选项,比如allow_url_include、allow_url_fopen这些,手动配置一遍,你对漏洞触发条件背后的环境因素会有更直观的理解。
举一个实际例子,bWAPP里的SSRF和远程文件包含题目,如果PHP配置里禁用了远程文件访问,你压根触发不了漏洞。很多人遇到这种情况就开始怀疑自己操作错了,其实只是环境配置不到位。手动部署一遍,你就能搞清楚这些漏洞生效的前提条件,到了真实环境排查问题时也会更有方向感。
3.4 Pikachu——本土化靶场中的良心之作
Pikachu是国内安全圈非常有名的一个靶场,名字取自宝可梦的皮卡丘,由国内安全从业者开发,整个界面和题目说明都是中文。对英文不好的学习者来说,它是绝对的福音。
Pikachu的漏洞覆盖面很广,包括RCE、SQL注入、XSS、CSRF、SSRF、文件上传、越权、目录遍历、敏感信息泄露等等,而且它的代码设计明显更贴近国内实际开发中的常见问题。很多国内业务系统的漏洞形态,比如拼接SQL、拼接Shell命令、直接信任前端传来的文件名,都能在这里找到原型。对以后想挖国内SRC、走实战路线的朋友来说,这个靶场的练习价值非常高。
部署Pikachu也很简单,它是个基于PHP的应用,推荐用Docker跑:
bash复制docker run -d -p 8081:80 area39/pikachu
启动后访问http://localhost:8081,点“初始化”按钮就能开始使用。它的初始化过程比DVWA还顺滑,几乎不会出问题。
Pikachu特别适合两类人:一类是英文阅读有障碍、被DVWA和WebGoat的全英文界面劝退的纯新手;另一类是已经学完基础、想针对性练国内实战场景的进阶者。我带着新人做靶场时,最喜欢让他们按照DVWA入门、Pikachu进阶这个顺序走,效果非常好。
3.5 Sqli-labs——专攻SQL注入的专题靶场
如果说前面几个靶场是“全科训练”,那Sqli-labs就是单科强化,它的全部内容只有一个主题:SQL注入。
Sqli-labs内置了80多关,从最基础的数字型注入、字符型注入开始,一路覆盖到报错注入、布尔盲注、时间盲注、堆叠注入、二次注入、绕过WAF、绕过过滤规则等高级主题。每一关都是独立的一个PHP页面,页面里直接显示当前的关卡编号和注入点,你只需要对着这个目标构造payload即可。
为什么要专门做一个SQL注入专题靶场?因为SQL注入是Web漏洞中的常青树,直到今天,真实业务系统中的SQL注入依然层出不穷,而它的变体和绕过手法特别多,是真正需要大量刻意练习才能熟练掌握的技能。如果你能把Sqli-labs的80多关全部独立过一遍,你的SQL注入水平基本可以超过一大半初级渗透测试从业者。
部署方式同样推荐Docker:
bash复制docker run -d -p 8082:80 laluz/sqli-labs
进入之后,需要先访问/setup目录完成数据库初始化,然后再进入关卡列表页。这一步很容易踩坑,很多人直接打开首页就往下闯关,结果发现每一关都报数据库连接错误,其实就是没初始化。
我做SQL注入训练时的习惯是:每一关都坚持手写payload,不直接抄现成的通关脚本。哪怕某些关卡思路完全一样,也要自己写一遍,因为注入过程中的payload构造、引号闭合、注释写法,都只有自己亲手试过才能真正形成肌肉记忆。
3.6 Upload-labs——文件上传漏洞的闯关体验
Upload-labs也是国内的经典靶场,和Sqli-labs是同一类思路,只不过把专题聚焦在了文件上传漏洞上。
文件上传漏洞为什么值得单独做一个靶场?因为它在实际渗透测试中太常见了,而且绕过手法极其丰富。前端JS校验、服务端MIME类型检查、扩展名黑名单、白名单、文件内容头校验、二次渲染、解析漏洞、条件竞争……每一种绕过思路都对应一种真实场景下的防御策略。Upload-labs把这些场景做成了一个个独立的关卡,每一关都是一道需要你思考和尝试的题目。
部署Upload-labs可以直接用Docker,也可以下载源码丢进PHP集成环境。它的界面很简单直接,每一关就是一个上传表单,你上传一个文件,页面会告诉你成没成功,以及下一步提示。
这个靶场最锻炼人的地方在于,你必须有“代码审计”的思维。因为每一关都在服务端做了某种校验,你光靠瞎试是过不去的,必须去读它的源码(源码就在同目录下的PHP文件里),搞清楚它到底过滤了什么、没过滤什么,然后对症下药。这个“读代码找绕过点”的过程,恰恰就是真实世界里挖文件上传漏洞的核心能力。
我自己带新手做Upload-labs时,特别强调一点:每一个绕过技巧都要理解它背后的原理,不要只记payload。比如黑名单绕过,你要知道它是只过滤了少数几个危险后缀,而不是危险后缀都过滤了,更要知道Apache解析漏洞为什么会把shell.php.jpg当作PHP执行。这些原理在实战中遇到类似场景时,才是真正能复用和迁移的东西。
4. 从入门到进阶的靶场组合路线
靶场单看是靶场,但把它们串成一条学习路线,价值会立刻翻倍。结合我带人的经验,这里给出一条我验证过多次、效果稳定的学习路线。
第一个阶段,用DVWA打底。先把Low级别的每个漏洞过一遍,再去读一遍对应的源码,理解攻击payload和漏洞代码的对应关系。这个阶段的目标是建立对常见漏洞的基本认知。
第二个阶段,进Pikachu或bWAPP扩展视野。这两个靶场的漏洞场景更全,能让你看到更多漏洞类型,尤其是SSRF、XXE、反序列化这类在DVWA里没有或者很浅的内容。这个阶段的目标是把知识面铺开。
第三个阶段,根据方向做单科强化。如果以后打算走Web渗透或SRC挖掘,重点刷Sqli-labs和Upload-labs这两个专题靶场,把SQL注入和文件上传这两座大山翻过去。如果更偏开发安全方向,则建议把WebGoat的课程完整过一遍。
第四个阶段,开始尝试综合性题目。打靶场练完这些基础之后,可以去尝试一些开源的综合性漏洞平台,比如各类CTF题目里的Web题,或者经典的漏洞环境集合。这个阶段的目标是训练综合分析和逻辑推理能力,因为真实场景的漏洞往往是多步骤、多漏洞组合利用的,单一靶场训练不出来。
5. 建立自己的靶场演练习惯
我个人强烈建议,不要每个靶场都只打一遍就扔到一边,然后换个新靶场继续打。更好的做法是,选定一两个靶场作为“主场”,反复刷反复练,直到你看见一个漏洞场景就能快速反应出它可能的攻击面、绕过思路和验证方式。熟练度这个东西,在网络安全这个行业里很值钱。
再分享一个我自己在用的技巧:用虚拟机或者独立Docker环境把靶场全部部署好之后,每次做安全测试或者面试前,先花半小时到一小时去靶场里热热身。面试问SQL注入时,先在Sqli-labs里过几关找手感;聊文件上传时,先去Upload-labs把几种绕过姿势过一遍。这种“带手感上场”的做法,比临阵磨枪背知识点要管用得多。
还有一点很重要:打靶场时,每做完一关,都花两分钟想一下“这关如果放在真实业务系统里,对应的是哪种功能点?”。比如DVWA里的SQL注入对应真实系统的搜索框、登录框;Upload-labs里的上传漏洞对应真实系统的头像上传、文件附件功能。把靶场和真实世界连起来,你的练习才真正产生了迁移价值,而不是停留在“为了通关而通关”。
6. 常见问题排查速查表
这六个靶场我都实际部署过很多次,把最常见的翻车现场整理成一张速查表,你遇到问题直接照着对号入座就行。
| 现象 | 可能原因 | 解决办法 |
|---|---|---|
| DVWA首页能打开,但功能页报数据库错误 | 没点“Create/Reset Database”初始化按钮 | 登录后点击该按钮,等页面提示完成后再操作 |
| Sqli-labs每一关都提示连接数据库失败 | 未执行初始化脚本 | 先访问/setup目录,完成初始化再打关卡 |
| bWAPP的远程文件包含/SSRF无法触发 | PHP环境禁用了远程文件访问 | 检查并开启allow_url_include和allow_url_fopen |
| 上传类靶场执行不了上传的PHP文件 | 目录权限或解析配置问题 | 检查上传目录写权限,以及Apache/PHP的解析配置 |
| Docker拉取镜像速度极慢或超时 | 使用的是默认境外镜像源 | 配置国内镜像加速地址后重新拉取 |
| WebGoat某些涉及回调的题目连不上 | 只映射了8080端口,漏了WebWolf端口 | 确保启动时同时映射9090端口 |
还有一个通用排查技巧:遇到页面报错时,先打开浏览器的开发者工具,看网络请求的状态码和响应内容。很多部署问题一眼就能从HTTP状态码上看出端倪,比如500基本都是服务端配置问题,404基本是路径不对,比盲目百度高效得多。
7. 聊聊这几年的体会
Web安全这条路,门槛其实不高,难的是把基础打牢。很多人一开始就冲着“挖洞”去,连SQL注入的联合查询原理都没吃透,就急着去找真实站点的漏洞,结果不是什么都测不出来,就是测出问题也不知道怎么利用。这就像还没学会走路就想跑百米,摔跤是必然的。
靶场存在的意义,不只是给你一个“打靶的机会”,而是帮你把已知的漏洞类型在可控环境里反复演练,直到形成条件反射。我在带新人的时候经常说一句话:靶场里的每一个关卡,都对应着真实世界里的某一个功能模块和一处薄弱代码。你今天在Sqli-labs里绕过的每一道过滤规则,明天很可能就是你在某个SRC站点里立足的关键一招。
说回这六个靶场:DVWA适合起步,WebGoat适合系统学习,bWAPP适合开拓眼界,Pikachu适合贴近国内实战,Sqli-labs和Upload-labs则是专门用来死磕两大重点漏洞。如果你现在还处于“不知道从哪开始”的状态,我的建议很简单——先从DVWA的Low级开始,动手打第一关,把它打透,后面的事自然就顺了。
