1. 靶场环境概述
网络安全学习离不开实战环境,Pikachu靶场作为国内知名的Web漏洞练习平台,包含了SQL注入、XSS、CSRF等20余种常见漏洞类型。与DVWA相比,Pikachu的中文操作界面和漏洞分类更适合国内初学者。我最早在2018年接触这个靶场时,就被其清晰的漏洞演示逻辑所吸引,后来在多个企业内训中都将它作为入门教学的首选环境。
搭建Pikachu需要准备以下基础组件:
- PHP 5.4+运行环境(推荐PHP 7.0)
- MySQL 5.5+数据库服务
- Apache/Nginx Web服务器
- 操作系统不限(Windows/Linux均可)
注意:PHP 8.0+版本可能存在兼容性问题,建议使用PHP 7.x系列。我在CentOS 7和Windows 10 21H2上都成功部署过,过程略有差异但核心步骤相同。
2. 环境准备与依赖安装
2.1 基础服务部署
以CentOS 7为例,使用yum快速安装LAMP环境:
bash复制yum install httpd mariadb-server php php-mysql php-gd php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-snmp php-soap curl
启动服务并设置开机自启:
bash复制systemctl start httpd mariadb
systemctl enable httpd mariadb
2.2 数据库配置
执行mysql_secure_installation初始化数据库安全设置后,创建专用数据库:
sql复制CREATE DATABASE pikachu CHARACTER SET utf8mb4;
GRANT ALL PRIVILEGES ON pikachu.* TO 'pikachu'@'localhost' IDENTIFIED BY 'your_strong_password';
FLUSH PRIVILEGES;
实操心得:建议单独创建数据库用户而非使用root账户,密码复杂度需满足8位以上含大小写字母和特殊字符。曾遇到学员使用简单密码导致靶场被入侵的情况。
3. 靶场部署与初始化
3.1 源码获取与部署
从GitHub官方仓库下载最新release版本:
bash复制wget https://github.com/zhuifengshaonianhanlu/pikachu/archive/refs/tags/v2.0.zip
unzip v2.0.zip -d /var/www/html/
chown -R apache:apache /var/www/html/pikachu-2.0
关键目录结构说明:
code复制/pikachu
├── inc/ # 配置文件目录
├── pkxss/ # XSS漏洞模块
├── sql/ # SQL注入模块
└── install.php # 安装向导
3.2 安装向导配置
访问http://your_server_ip/pikachu-2.0/install.php,按提示填写:
- 数据库地址:localhost
- 数据库名:pikachu
- 用户名/密码:前文创建的凭证
- 表前缀:保持默认pkx_
安装完成后务必删除install.php:
bash复制rm -f /var/www/html/pikachu-2.0/install.php
4. 安全加固与优化
4.1 基础防护措施
修改默认后台路径(/pikachu/admin):
- 重命名admin目录
- 修改inc/config.inc.php中的对应配置项
添加基础.htaccess防护:
code复制<FilesMatch "\.(inc|sql|bak)$">
Order allow,deny
Deny from all
</FilesMatch>
4.2 性能调优建议
调整PHP配置(/etc/php.ini):
ini复制max_execution_time = 90
memory_limit = 256M
post_max_size = 32M
upload_max_filesize = 16M
5. 模块使用与教学建议
5.1 典型漏洞演示流程
以SQL注入为例的教学路线:
- 手工注入演示(字符型/数字型)
- 工具辅助注入(Sqlmap)
- 防御方案对比(预处理/过滤)
5.2 常见报错排查
- 页面空白:检查PHP错误日志(/var/log/php_errors)
- 数据库连接失败:验证MySQL用户权限
- 功能异常:确认session.save_path可写
典型问题记录表:
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 500错误 | 目录权限不足 | chmod -R 755 /var/www/html |
| 数据库表不存在 | 导入失败 | 重新执行install.php |
| 中文乱码 | 字符集不匹配 | 确认数据库为utf8mb4 |
6. 扩展开发与二次定制
6.1 添加自定义漏洞模块
- 在根目录创建新文件夹(如xxe)
- 编写漏洞演示页面(参考现有模块结构)
- 在inc/config.inc.php中添加菜单项
6.2 集成Docker部署
编写Dockerfile示例:
dockerfile复制FROM centos:7
RUN yum install -y httpd mariadb-server php php-mysql
COPY pikachu-2.0 /var/www/html/
EXPOSE 80
CMD ["httpd", "-DFOREGROUND"]
构建命令:
bash复制docker build -t pikachu .
docker run -d -p 8080:80 --name pikachu_lab pikachu
7. 教学场景实践建议
在企业内训中,我通常这样安排课程:
- 第一天:环境搭建+SQL注入专题
- 第二天:XSS+CSRF组合攻击
- 第三天:文件上传+反序列化
- 第四天:综合渗透测试演练
每个模块建议配备:
- 漏洞原理说明(15分钟)
- 靶场实操演示(30分钟)
- 防御方案编码(45分钟)
- 小组挑战赛(60分钟)
经验之谈:建议关闭服务器的自动更新,避免组件版本变化导致实验环境不一致。曾因yum自动更新PHP导致多个模块失效,后来改用固定版本仓库解决问题。