news 2026/9/30 18:23:56

pikachu靶场虚拟机搭建:网络模式与访问链路详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
pikachu靶场虚拟机搭建:网络模式与访问链路详解

1. 为什么我把pikachu靶场装进虚拟机,而不是直接跑在主机上

第一次搭pikachu靶场,卡住人的往往不是漏洞本身,而是物理主机上的浏览器死活打不开虚拟机里那个页面。地址栏敲127.0.0.1,转圈到超时;换成虚拟机的IP,提示无法访问;好不容易首页出来了,CSS和图片全丢,点进模块清一色404。这些问题看着五花八门,根因其实就三类:网络模式选错、端口没放行、站点根目录指向不对。把这三件事理清楚,pikachu靶场搭建就是十几分钟的事。

pikachu(圈内习惯叫皮卡丘靶场)是一套用PHP写的Web漏洞练习平台,把SQL注入、XSS、CSRF、文件包含、反序列化、SSRF这些常见Web安全问题拆成一个个独立模块,每个模块都配了刻意留出缺陷的页面。它的价值不在于"能跑起来",而在于给你一个可以放心乱点的环境——参数改成什么、请求重放多少次,都不影响任何真实业务。

这篇内容面向刚接触网络安全、想在自己机器上把pikachu跑起来的人,也适合装过一遍但总觉得环境"半通不通"的人。整套流程我会拆成两段:虚拟机内部Web环境的搭建,以及物理主机到虚拟机的访问链路打通。后者是很多教程一笔带过、但真正让人放弃的部分。

1.1 靶场本身就是个"脏环境",别让它碰你的日常系统

pikachu的设计目标就是"能被攻破",代码里到处是故意的缺陷,数据库账号密码也常常是弱口令。这种环境放在物理主机上跑,等于把一个没锁门的屋子盖在自己家门口。更现实的问题是:练注入的时候你会反复往数据库里塞奇怪字符,练文件上传的时候会往Web目录丢各种测试文件,练反序列化的时候可能触发一堆PHP报错日志。主机上的开发环境、浏览器保存的密码、甚至一些日常软件的数据,都可能在你不注意的时候被牵连。

放到虚拟机里的好处很直接:它是一个可以被随意弄脏、弄坏了直接删掉重来的盒子。练完一个模块拍张快照,玩崩了回滚,三十秒回到干净状态。这种"随便作"的自由度,才是靶场真正该有的使用姿势。

另外还有一个很实际的考虑——物理主机访问虚拟机这个结构,本身就模拟了真实渗透测试里的位置关系:你的攻击机(主机)和靶机(虚拟机)是两个独立的IP。等你后面想加Burp Suite抓包、想玩arp欺骗、想拿nmap扫端口的时候,这个双机结构不用重建,直接就能用。

1.2 三种网络模式先想明白,再动手装系统

VMware给虚拟机提供了三种主要网络模式,选哪种直接决定了物理主机能不能访问到靶场。很多人装完系统才想起来研究这个,结果发现虚拟机拿不到IP,或者主机ping不通,又回头重装。

网络模式虚拟机IP来源主机能否访问虚拟机虚拟机能否上网适合场景
桥接(Bridged)和主机同网段的独立IP能,双向互通能有线网络、需要被局域网其他机器访问
NATVMware虚拟网段(如192.168.60.x)能,但需要端口映射能无线网络、只想主机自己访问
仅主机(Host-only)VMware虚拟网段能不能完全离线、纯隔离练习

我的建议很直接:如果你用的是笔记本连WiFi,优先选NAT加端口映射;如果是有线连接,桥接最省事。原因后面在第四章会详细展开,这里先记住一个结论——桥接模式在部分无线网卡上会拿不到IP,这是硬件层面的限制,不是配置写错了,换NAT能立刻解决。

虚拟机安装本身没什么技术含量,一路下一步就行。但有两个细节值得注意:一是系统盘给到40GB以上,phpStudy加MySQL加日志,20GB很快见底;二是内存至少给2GB,1GB的虚拟机跑Apache和MySQL会卡到你怀疑人生。

1.3 动手前的清点:软硬件清单与版本取舍

在真正开始之前,把要用的东西列清楚,能省掉后面大量的返工。下面这张清单是我自己常用的组合,实测下来稳定性最好。

  • 虚拟化软件:VMware Workstation 16或17,版本不用追新,稳定优先
  • 靶机系统:Windows Server 2012/2016,或者Windows 7/10精简版;Linux系可选CentOS 7、Ubuntu 20.04
  • Web环境:Windows下用phpStudy(小皮面板),Linux下用LNMP或宝塔
  • PHP版本:7.0到7.3之间最稳
  • 数据库:MySQL 5.5或5.7
  • 靶场源码:pikachu开源仓库打包文件
  • 浏览器:主机侧准备一个独立浏览器或独立配置文件,专门用来访问靶场

这里特别说一句PHP版本。很多教程只写"PHP 5.4以上",实际装的时候你如果装了PHP 8.0,会发现pikachu部分模块直接白屏或者报致命错误——它里面有些写法依赖较老的数据库扩展和语法,PHP 8把一些废弃特性彻底移除了。反过来,PHP 5.3以下会因为语法太老跑不起来。7.0到7.3这个区间是经过大量人验证的甜点区,phpStudy的面板里可以直接切版本,装完先切好再部署代码,能少踩一大半坑。

提示:虚拟机的系统语言建议用中文或英文都可以,但Web目录路径千万别带中文和空格。"D:\我的靶场\pikachu"这种路径在Apache配置里是灾难,后面排查样式丢失问题时能把你绕进去。

2. 虚拟机内部的Web运行环境怎么搭才不返工

环境搭建这一步,Windows和Linux两条路线差别挺大,但核心逻辑是一样的:一个能解析PHP的Web服务器,一个能连上的MySQL,一个指向正确位置的站点根目录。这三件事有一件没弄对,pikachu的安装页就出不来。下面按我的实际操作顺序讲,Windows路线为主,因为用物理主机访问虚拟机的场景里,Windows靶机占比最高,也最容易上手。

2.1 phpStudy与LNMP:两条路线的取舍逻辑

先说结论。如果你只是想快速把pikachu跑起来,Windows加phpStudy是最短路径:图形界面点几下,Apache、MySQL、PHP全装好,站点根目录、端口、PHP版本切换都在面板里操作,不需要碰命令行。缺点是Windows下Apache的权限模型和Linux差别比较大,你练文件包含、文件上传这类模块时,遇到的路径问题和真实Linux服务器不太一样。

如果你的目标是贴近真实生产环境,Linux加LNMP更值。CentOS或Ubuntu装好之后,用宝塔面板或者手写nginx配置,再单独装PHP和MySQL。这条路前期麻烦一点,但练命令执行、权限提升、反弹shell这类模块时,环境更真实,能学到的细节也更多。

我的做法是:先在一台Windows虚拟机上把pikachu跑通,摸清整个部署流程;然后再用Linux虚拟机重建一遍。第一遍熟悉流程,第二遍理解差异。两套环境都拍快照留着,后面写笔记或者做对比的时候随时能切回去。

2.2 PHP版本与模块兼容性:那些装完才发现的报错

phpStudy面板默认可能给你一个比较新的PHP版本,比如7.4或者8.x。装完pikachu之后,你大概率会遇到下面这几类问题:

第一类是白屏或者500错误。访问install.php,页面一片空白,浏览器什么都不显示。这时候不要瞎猜,去看Apache的错误日志(phpStudy的日志目录下),十有八九是PHP的致命错误,比如调用了在当前版本里已经不存在的函数。

第二类是数据库连接失败。错误信息通常是"Access denied"或者"无法连接到MySQL服务器"。这个多半是config.inc.php里的账号密码和实际MySQL的账号密码对不上,或者MySQL根本没启动。

第三类是部分模块能打开、部分模块报错。这种最迷惑人,其实说明版本本身能跑,但个别模块的写法在PHP 7.4以上被判定为废弃。解决办法很简单——在phpStudy里把PHP版本切到7.0或7.3,重启Apache,问题大概率消失。

现象大概率原因处理方式
首页白屏、500PHP版本过高,函数不存在切到PHP 7.0-7.3
提示数据库连接失败账号密码不匹配或MySQL未启动核对config.inc.php并启动服务
个别模块报错语法废弃警告切低版本PHP,或关闭错误显示
页面能开但全是乱码数据库字符集不是utf8建库时指定utf8编码

注意:不建议为了"跑起来"去修改pikachu的源码。改一处,后面遇到的所有报错你都会怀疑是不是自己改坏了。版本问题用版本解决,这是最省心的思路。

2.3 MySQL初始化与站点根目录的初始化

phpStudy装好后默认自带MySQL,账号密码通常是root/root。这里要做两件事:确认MySQL服务在运行,以及为pikachu准备一个独立的数据库。

数据库可以先不建,因为pikachu的安装向导会帮你建库建表。但MySQL服务必须能正常启动,否则安装向导走不下去。如果面板里显示MySQL启动失败,最常见的原因是端口冲突——你主机或者虚拟机里已经有一个MySQL占用了3306。处理方式是在phpStudy里改MySQL端口,同时记得config.inc.php里的端口也要跟着改。

站点根目录这块是重点。phpStudy默认的WWW目录通常是D:\phpstudy_pro\WWW,你把pikachu解压后的文件夹整个拖进去,最终路径是D:\phpstudy_pro\WWW\pikachu。访问地址就是http://虚拟机IP/pikachu/。

但这里有个细节,很多人喜欢在phpStudy里新建一个站点,把根目录直接指向D:\phpstudy_pro\WWW\pikachu。这么做的好处是访问时不需要带/pikachu后缀,直接http://虚拟机IP/就到首页。坏处是如果pikachu的代码里有相对路径引用(比如../inc/config.inc.php这种),站点根目录变更后可能引用错位,导致部分页面加载不出来。

我的建议是:先用默认WWW目录加子文件夹的方式跑通,确认所有模块都能打开;之后再考虑要不要配独立站点。先通后优,别一上来就折腾配置。

Apache这边还有两个配置项值得检查。一是监听端口,默认80;如果你主机上IIS或者别的软件占了80,虚拟机里也可能因为其他服务占着,那就改成8080,访问时带端口。二是AllowOverride,pikachu有些模块依赖.htaccess文件,需要把对应目录的AllowOverride设为All,否则这些模块会返回404或者403。

# Linux环境下快速检查80端口是否被占用 netstat -tlnp | grep :80 # Windows靶机命令行下检查 netstat -ano | findstr :80

如果输出里有别的进程占用80,要么停掉那个进程,要么把Apache改到8080。前者更干净,后者更安全(不影响其他服务)。改完端口记得重启Apache,然后在主机侧访问时把端口带上。

3. 把pikachu源码放进去并完成数据库初始化

环境通了之后,接下来的操作就很快了:放代码、改配置、走安装向导、验收。这一步看着简单,但有几个位置改错一个字符,就会让你在"数据库连接失败"这个提示上耗半小时。

3.1 源码的获取与目录摆放

pikachu是开源项目,在代码托管平台上搜项目名就能找到作者维护的仓库,下载打包文件解压即可。解压后你会看到类似这样的目录结构:

pikachu/ ├── inc/ # 配置和公共函数 ├── pkxss/ # XSS相关模块 ├── vul/ # 各类漏洞模块目录 ├── install.php # 安装向导 ├── index.php # 首页 └── ...

把整个pikachu文件夹原样放进Web根目录,不要只挑几个文件复制。很多人为了"干净"只拿了部分目录,结果首页能开、点进模块就404,就是因为模块目录没拷全。

还有一点:解压出来的文件夹名字不要改。有些压缩包解开后是pikachu-master,你手动改成pikachu是可以的,因为访问路径跟着变就行;但如果改成带中文或者带空格的名字,Apache处理路径时容易出问题,尤其是后面配伪静态和.htaccess的时候。

3.2 config.inc.php里真正需要改的字段

配置文件在inc/config.inc.php,用文本编辑器打开,你会看到几个关键变量。我按重要性排序说:

  • $DBHOST:数据库主机地址。因为数据库和网站跑在同一台虚拟机里,这里保持localhost或127.0.0.1就行,不要改成主机的IP,否则会连不上
  • $DBUSER / $DBPW:数据库账号密码,默认root/root,要和phpStudy里MySQL的实际配置一致
  • $DBNAME:数据库名,通常是pikachu,安装向导会自动创建
  • $PIKA_ROOT_DIR:项目根目录的相对路径,一般保持默认的../../即可

这里最容易踩的坑是账号密码。phpStudy某些版本的默认MySQL密码不是root,或者你之前改过却忘了。核对方式很简单:在phpStudy面板的MySQL管理里看当前账号信息,或者在命令行里用mysql -uroot -p试一下能不能登进去。

另一个坑是端口。如果你把MySQL从3306改到了别的端口,config.inc.php里也要对应调整,有些版本用的是$DBHOST="localhost:3307"这种写法。改完保存,别用记事本存成UTF-8带BOM的格式,那会在PHP里产生一个隐藏字符,导致页面顶部多出一行空白,进而引发"headers already sent"这类奇怪报错。用VS Code或者Notepad++,编码选无BOM的UTF-8。

3.3 安装向导走完后的验收动作

浏览器访问http://虚拟机IP/pikachu/install.php,会看到一个初始化页面,点安装按钮,它会自动建库建表并写入初始数据。看到"安装成功"的提示后,做三件事确认环境真的好了:

第一,删掉或改名install.php。这是习惯问题,也是安全意识的一部分——虽然靶场本身是隔离的,但留着安装入口是坏习惯,练手时也该按真实项目的规范来。

第二,逐一点开首页上的模块列表。不要只看首页能开就觉得大功告成。SQL注入、XSS、文件包含、反序列化、SSRF这些模块,各点进去一个页面,确认都能正常显示表单和内容。这一步能提前发现"部分模块404"这类问题。

第三,检查数据库里是否真的写入了数据。在phpStudy的数据库管理工具里打开pikachu库,看看是不是有一堆pk_开头的表。有表有数据,说明初始化完整;只有空库,说明安装向导中途失败了,需要看日志找原因。

4. 打通物理主机到虚拟机的访问链路

到这里,虚拟机内部的靶场已经在http://127.0.0.1/pikachu/能访问了。但物理主机上的浏览器还是打不开——因为你访问的是主机自己的127.0.0.1,而靶场在另一台机器上。这一章讲的就是怎么把这条链路接上,也是整个教程里最关键的部分。

4.1 桥接模式:拿到一个和主机同网段的IP

桥接模式的逻辑很好理解:虚拟机就像你局域网里新接进来的一台电脑,从路由器那里自己拿一个IP,和你的物理主机平起平坐。配置方式是在VMware里把虚拟机的网络适配器设为"桥接模式",然后进虚拟机里确认IP。

在Windows靶机上打开命令提示符,输入ipconfig;Linux靶机输入ip addr。找到IPv4地址,比如192.168.1.105。然后回到物理主机,打开浏览器访问http://192.168.1.105/pikachu/。如果一切正常,页面就出来了。

桥接模式的好处是双向透明:主机能访问虚拟机,虚拟机也能访问主机,局域网里其他设备也能访问这台靶机。方便是方便,但有两个坑要提前知道。

第一个坑是WiFi环境下的桥接不稳定。部分无线网卡的驱动在桥接模式下拿不到DHCP分配的IP,表现就是虚拟机里ipconfig出来的地址是169.254.x.x这种自动私有地址。这不是配置错了,是网卡层面的兼容问题,换有线或者改用NAT模式就好。

第二个坑是IP会变。路由器重启、DHCP租期到了、你换了WiFi,IP都可能变。每次都去虚拟机里查一遍很烦。解决办法是在路由器里给这台虚拟机的MAC地址绑定固定IP,或者干脆改用NAT模式——NAT下虚拟机IP由VMware自己管,相对稳定。

4.2 NAT加端口映射:无线环境下我更推荐的方案

NAT模式下,虚拟机处于VMware创建的一个独立网段(通常是192.168.x.0/24,网关是VMnet8的地址),它能上网,但外部(包括物理主机)默认访问不到它。要让主机能访问,就得做端口映射。

配置路径是:VMware菜单栏"编辑" → "虚拟网络编辑器" → 选中VMnet8(NAT模式那一项) → 点"NAT设置" → 在"端口转发"里添加一条规则:

  • 主机端口:8080(随便选一个没被占用的)
  • 类型:TCP
  • 虚拟机IP地址:靶机的IP,比如192.168.60.128
  • 虚拟机端口:80

保存之后,在物理主机浏览器里访问http://127.0.0.1:8080/pikachu/,流量就会通过主机8080端口转发到虚拟机的80端口。

这个方案看起来比桥接多了一步配置,但优势很明显:不受无线网卡影响,虚拟机IP由VMware管理,主机侧的访问地址永远是127.0.0.1加端口,不用每次查IP。对笔记本用户来说,这是最省心的方案。

需要注意的一个细节是:端口转发配好之后,主机侧访问用的是127.0.0.1,但在靶机内部,数据库连接仍然写localhost,这是两个独立的通信路径,不要混为一谈。

4.3 仅主机模式配合主机的转发方案:离线练习的选择

如果你追求的是绝对的隔离——比如你想在一个完全断网的虚拟机里练手,不希望它有哪怕一点访问外网的可能——那就用仅主机模式。这个模式下虚拟机只能和物理主机通信(前提是主机上装了VMnet1虚拟网卡),默认上不了外网。

它的问题在于虚拟机装不上依赖、下不了工具。所以常见的做法是给虚拟机配两张网卡:一张仅主机模式用于主机访问,一张NAT模式用于临时上网。平时把NAT那张网卡禁掉,需要联网时再启用。

这种配置对新手来说有点绕,我的建议是:先用NAT方案把整套流程跑通,等到你需要做严格隔离的实验时,再回来折腾仅主机模式。不要一上来就把自己绕进网络配置的迷宫里。

4.4 三条命令验证链路,比反复刷新浏览器靠谱

很多人排查访问问题的方式是反复刷新浏览器,看页面出不出来。这个方式信息量太少,页面出不来的时候你完全不知道是哪一层断了。更高效的做法是按层次用命令验证。

# 第一步:主机能不能ping通虚拟机(验证网络层) ping 192.168.60.128 # 第二步:目标端口通不通(验证传输层) # Linux/macOS主机 nc -vz 192.168.60.128 80 # Windows主机用PowerShell Test-NetConnection 192.168.60.128 -Port 80 # 第三步:应用层能不能返回内容 curl -I http://192.168.60.128/pikachu/

这三步的排查逻辑是层层递进的。ping不通,说明网络模式或者IP有问题;ping通了但端口不通,说明是防火墙或者Apache没监听;端口通了但curl返回404,说明站点路径配错了。按这个顺序查,你永远知道自己卡在哪一层。

提示:Windows靶机的防火墙默认会拦截外部的80端口访问,这是最常见的"ping得通但端口不通"的原因。在靶场虚拟机里可以直接关闭防火墙(隔离环境下风险可控),或者建立一个入站规则放行TCP 80端口。

5. 页面打不开或者打开不对:一套完整的排查链路

链路打通之后还有些问题会冒出来,而且形态各异:有的是空白页,有的是403,有的是页面能开但样式全丢。这些问题的排查思路不一样,混在一起猜会浪费大量时间。下面按我实际遇到的顺序,把每一类的根因和处理方式讲清楚。

5.1 从ping不通到端口不通:先确定卡在哪一层

假设主机访问http://192.168.60.128/pikachu/,浏览器超时。按上一节的命令逐个走。

ping不通的情况,先看虚拟机里的IP是不是169.254开头——如果是,说明网络适配器没拿到地址,检查VMware的网络设置,或者把网络适配器在NAT和桥接之间切一下再切回来(相当于重新拔插网线)。如果虚拟机IP正常,但主机还是ping不通,检查主机上的VMnet网卡是不是被禁用了,在"网络和共享中心"里看看有没有VMware的虚拟网卡被禁用。

ping通、端口不通的情况,九成是防火墙。Windows靶机上打开"高级安全Windows防火墙",在入站规则里找有没有放行80端口;没有就新建一条。Linux靶机上检查firewalld或者ufw的状态,CentOS 7默认是开的,直接systemctl stop firewalld临时关掉,或者用firewall-cmd --add-port=80/tcp --permanent永久放行。

还有一种情况是端口通了、返回403。这通常是Apache配置里的目录权限问题。检查httpd.conf里站点目录的Require设置,Apache 2.4之后要用Require all granted,写成老版本的Allow from all可能不生效。另外确认目录下确实有index.php,文件名大小写在Linux上是要区分大小写的。

5.2 样式丢失、跳转错乱与URL里的IP不一致

页面能打开,但CSS、图片、JS全加载不出来,页面变成一堆纯文本——这是新手最容易被吓到的问题之一,其实原因特别简单。

打开浏览器的开发者工具,切到Network面板,刷新页面,看那些红色的失败请求的URL是什么。如果URL是http://localhost/xxx.css或者http://127.0.0.1/xxx.css,那就说明问题了:pikachu的部分页面里引用了硬编码的地址,或者用了相对路径但你的访问方式不对。

处理方式分两种。如果是相对路径引起的,检查你访问的URL层级对不对。假设你访问的是http://192.168.60.128/pikachu/vul/sqli/sqli_str.php,页面里引用../../assets/style.css,那么解析出来是http://192.168.60.128/pikachu/assets/style.css,这是对的。但如果你把站点根目录直接配成了pikachu文件夹,访问http://192.168.60.128/vul/sqli/sqli_str.php,两级相对路径就解析到了网站根目录之外,资源自然404。

所以我一直建议用"WWW根目录+pikachu子目录"的方式部署,就是为了让各类相对路径的引用关系保持在作者设计时的样子。

5.3 跳转错乱:URL被写死的几个位置

比样式丢失更烦的是跳转错乱。点一个链接,跳到了http://localhost/pikachu/xxx,浏览器直接找不到地址。这种情况通常是因为页面里用了PHP的$_SERVER['HTTP_HOST']或者硬编码的域名。

如果确认是某个模块页面里有硬编码,最干净的做法是去配置文件里找有没有全局的站点地址变量。pikachu这类靶场通常会把基础URL集中在配置文件里,改一处就全生效。如果确实是散落在各个模块里写死的,那就在访问时保持路径结构一致,尽量少改代码。

这里插一句经验:不要在练习用的靶场上做"美化"和"重构"。你不是在做一个要上线的产品,你是在一个故意留洞的练习场里学东西。改得越多,你后面遇到问题时越分不清是靶场本身的设计如此,还是你自己改出来的新问题。

5.4 为后续抓包测试做准备:代理要指向虚拟机的IP

环境搭好之后,下一步大概率是要用Burp Suite之类的工具抓包做题。这里有一个特别容易忽略的点:如果你在主机浏览器里用127.0.0.1访问靶场,Burp是抓不到流量的,因为对localhost的请求默认不经过代理。

正确做法是用虚拟机的实际IP(桥接模式下)或者主机映射端口(NAT模式下)来访问,同时把浏览器代理指向Burp的监听地址。这样请求就会先到Burp,Burp转发给靶场,你在Burp里就能看到完整的请求和响应。

抓到包之后,做题时记得一个原则:先看原始请求,再动手改。很多人一上来就各种构造payload,结果连正常的请求长什么样都没看清,最后分不清是payload不对还是请求本身发错了。

问题现象排查入口常见根因
浏览器超时主机ping虚拟机网络模式选错、VMnet网卡被禁用
端口不通nc或Test-NetConnection靶机防火墙未放行
返回403Apache错误日志目录权限配置或缺少index
样式全丢浏览器Network面板站点根目录层级不对
跳转到localhost查看页面源码基础URL被硬编码
Burp抓不到包检查访问地址用了127.0.0.1而不是虚拟机IP

6. 用久之后才慢慢明白的几件事

环境搭起来只是开始,用久了会发现一些"文档里不会写,但影响体验"的细节。这些经验没什么高深的技术含量,但能让你少走不少弯路。

6.1 快照是这套环境里最值得用的功能

虚拟机跑通pikachu之后,第一件事是拍一张快照,名字就叫"环境就绪"。之后每做完一个模块、装完一个新工具、改完一份配置,都可以再拍一张。练崩了、手滑删了文件、数据库塞满了垃圾数据,回滚一下就行,比重新装一遍快太多。

我自己的习惯是分层拍:一张"纯净系统"、一张"Web环境就绪"、一张"靶场部署完成"、一张"工具配置完成"。这样不管哪一层出问题,都能精确回滚到最近的一个干净状态,不用从头再来。

6.2 靶场环境的边界感

pikachu是故意留洞的系统,它不属于"可以放在公网上"的东西。桥接模式下虚拟机直接暴露在局域网里,如果你的实验环境不止你一个人用,最好确认一下这个IP不会被别人扫到,或者干脆用NAT模式只让主机自己访问。

另外一点是关于数据。不要用你自己的常用密码去初始化靶场的数据库,也不要在靶场环境里保存任何真实的账号信息。练SQL注入的时候你会往数据库里插各种测试数据,练文件上传的时候会往Web目录丢各种测试文件,这些东西混在一起,将来清理起来很麻烦。给靶场单独建一套假数据,用完直接删虚拟机,这是最干净的方式。

6.3 从pikachu扩到DVWA、sqli-labs时的复用技巧

这套环境搭好之后,你会发现它不止能跑pikachu。把DVWA的源码解压到同一个WWW目录下,访问http://虚拟机IP/dvwa/就能跑;sqli-labs同理。它们的依赖都是PHP+MySQL,环境完全共用。

唯一需要注意的是数据库名和配置文件名不要冲突。DVWA的配置在config/config.inc.php里,sqli-labs的在sql-connections/db-creds.inc里,各自改各自的账号密码就行。三个靶场可以同时在同一个WWW目录下共存,互不影响。

这种"一套环境跑多个靶场"的做法,好处是你只需要维护一份虚拟机快照,练不同类型的漏洞时切模块就行,不用来回启不同的虚拟机。等到你需要练更复杂的场景——比如内网渗透、多层网络拓扑——再考虑用多台虚拟机搭拓扑,那时候这套单机环境的经验会直接派上用场。

6.4 关于"装不上"这件事的另一个视角

最后分享一个心态上的东西。搭靶场这类环境,遇到各种报错是常态,而且这些报错大部分跟你要学的安全知识没有直接关系——它们是运维和网络配置层面的问题。很多人卡在这里就放弃了,觉得"连环境都装不好,还学什么安全"。

其实换个角度看,这套排查过程本身就是很有价值的训练。你为了搞清楚为什么ping不通而去理解网络模式,为了搞清楚为什么403去读Apache配置,为了搞清楚为什么数据库连不上去看日志文件——这些能力在真实渗透测试里天天都在用。靶场搭建不是学习的前置成本,它本身就是第一课。

我个人的习惯是:每搭建一个新环境,都把过程中遇到的报错、排查思路、最终解决方案记在一个文档里。攒到后面你会发现,这份文档比任何教程都有用,因为它是你自己踩过的坑,每一条都带着具体的场景和上下文。pikachu这套环境的记录,我现在还留着,后来换新电脑重建时直接照着走,四十分钟就复现完了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/30 18:22:42

EverRoom子Agent框架揭秘:文件驱动的子Agent调度与权限隔离设计

EverRoom子Agent框架揭秘:文件驱动的子Agent调度与权限隔离设计 【免费下载链接】EverRoom EverRoom - A workspace that remembers your projects, decisions, and sources. 项目地址: https://gitcode.com/gh_mirrors/ev/EverRoom EverRoom 是一个能记住你…

作者头像 李华
网站建设 2026/9/30 18:21:16

FreeRTOS中的FreeRTOSConfig 里那几个必须改的配置项

打开 CubeMX 生成的工程,你会找到一个 FreeRTOSConfig.h(在 CubeMX 里对应 FREERTOS → Config parameters)。这个文件里密密麻麻几十个宏,每个都控制着内核的一个开关或参数。新手通常的做法是:全部保持默认&#xff…

作者头像 李华
网站建设 2026/9/30 18:20:08

MCP详解:从协议原理到 TaoToken 统一 Key 接入的完整配置指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/30 18:19:39

Laya-MLX 端侧推理实战:打字决策延迟压至7.4ms

1. 端侧推理的新变量:Laya-MLX 到底在解决什么问题第一次看到 Laya-MLX 这个组合词,我的直觉是:又一个把大模型往本地塞的尝试。但仔细拆开看,它瞄准的场景其实非常具体——打字决策。不是聊天,不是写文章,…

作者头像 李华
网站建设 2026/9/30 18:12:57

AI投研系统实战指南:从数据治理到模型落地

做投研系统这些年,我见过太多团队一上来就讨论“我们要上哪个大模型”“要让AI自动选股”,结果折腾几个月,系统要么变成一堆模型的实验田,要么成了没人愿意用的摆设。真正的问题从来不在于模型够不够强,而在于你有没有…

作者头像 李华