Pikachu 是一款国产轻量化 Web 漏洞靶场,由国内安全从业者开发,专为 Web 安全初学者设计,尤其适合入门学习 SQL 注入、XSS、CSRF 等常见漏洞。它的特点是界面简洁、场景贴近实战,且每个漏洞模块都附带原理说明和测试步骤,非常适合边学边练。
一、Pikachu 的核心特点
- 漏洞覆盖全面:包含 SQL 注入、XSS(反射型/存储型/ DOM 型)、CSRF、文件上传漏洞、命令注入、密码破解、敏感信息泄露等 20+ 常见 Web 漏洞场景。
- 新手友好:每个漏洞页面都有"漏洞原理""测试步骤""修复建议",配合直观的操作界面,降低入门门槛。
- 部署简单:支持 Docker 一键部署、PHP 环境直接搭建,无需复杂配置,几分钟即可启动。
- 开源免费:代码完全开源,可本地部署后查看源码,理解漏洞产生的底层原因(如 SQL 注入的字符串拼接、XSS 的未过滤输出等)。
二、核心漏洞模块详解
1. SQL 注入(重点模块)
Pikachu 的 SQL 注入模块细分场景丰富,覆盖了入门到进阶的核心类型:
- 数字型注入 :参数为数字(如
id=1),后端 SQL 语句直接拼接(例:select * from users where id=1),可通过1 or 1=1等 payload 测试。 - 字符型注入 :参数为字符串(如
name='pikachu'),需用单引号闭合(例:' or 1=1 --)。 - 搜索型注入 :模拟搜索框场景(如
select * from articles where title like '%关键词%'),注入时需闭合%和引号(例:%' or 1=1 --)。 - 盲注(布尔型/时间型) :无直接数据回显,需通过页面是否显示内容(布尔盲注)或响应时间(时间盲注,如
sleep(5))判断注入结果。 - 堆查询注入 :支持同时执行多条 SQL 语句(如
1; drop table users --),测试数据库权限。
学习价值:通过不同场景的对比,理解"参数类型""闭合方式""回显情况"对注入思路的影响,掌握手动构造 payload 的核心逻辑。
2. XSS(跨站脚本攻击)
XSS 模块分为 3 种核心类型,直观展示不同场景的利用差异:
- 反射型 XSS :恶意脚本通过 URL 参数传入(如
?name=<script>alert(1)</script>),仅在当前请求中生效,无持久化存储。 - 存储型 XSS:恶意脚本被存入数据库(如留言板、评论区),所有访问该页面的用户都会触发,危害更大。
- DOM 型 XSS :漏洞存在于前端 JavaScript 代码中(如通过
document.write直接输出 URL 参数),无需与后端交互,仅在客户端解析时触发。
测试技巧 :输入 <script>alert(document.domain)</script> 等基础 payload,观察是否弹出对话框;进阶可尝试窃取 Cookie(document.cookie)、构造钓鱼页面等。
3. CSRF(跨站请求伪造)
模拟"利用用户已登录状态,诱导用户点击恶意链接,执行非预期操作"的场景,如:
- 伪造转账、修改密码的请求链接,当用户登录目标网站后点击,会在不知情的情况下执行操作。
- 页面提供"正常操作"和"CSRF 测试"按钮,对比两者的请求差异(如是否验证 Referer、是否需要 Token),理解防御原理。
4. 文件上传漏洞
模拟文件上传功能的常见漏洞,如:
- 仅前端 JS 验证文件类型(可绕过,直接修改文件后缀为
.php上传)。 - 后端仅验证文件后缀(可通过
webshell.php.jpg等畸形文件名绕过)。 - 未限制文件内容(可直接上传
webshell.php并执行)。
学习重点:理解"前端验证不可靠""后端验证需结合文件类型、内容、路径"的防御原则。
三、部署与使用步骤
1. 快速部署(Docker 方式,推荐)
bash
# 拉取镜像
docker pull area39/pikachu:latest
# 启动容器(映射本地 8000 端口到容器 80 端口)
docker run -d -p 8000:80 area39/pikachu:latest
打开浏览器访问 http://localhost:8000,点击"初始化"完成数据库配置,即可开始使用。
2. 基本使用流程
- 首页点击左侧漏洞分类(如"SQL 注入""XSS"),进入具体场景。
- 每个场景页面包含"漏洞描述""测试步骤",按提示可先阅读原理,再动手测试。
- 测试时结合 Burp Suite 抓包分析请求,或直接在输入框构造 payload,观察页面响应。
四、学习建议
- 结合源码学习 :部署后可查看
pikachu目录下的 PHP 源码(如vul/sqli/sqli_num.php对应数字型注入),分析漏洞产生的代码原因(如 SQL 语句直接拼接参数$id = $_GET['id']; $sql = "select * from users where id=$id";)。 - 对比防御方案 :部分场景提供"修复建议",可对比"漏洞代码"和"修复代码"(如 SQL 注入的修复用
PDO 预处理,XSS 的修复用htmlspecialchars()过滤)。 - 从手动到工具 :先用手动方式构造 payload(如 SQL 注入的
order by、XSS 的<script>),理解原理后,再用工具(如 sqlmap、XSS 平台)提高效率。
Pikachu 作为入门靶场,能帮助新手快速建立对 Web 漏洞的认知,建议逐个模块练习,重点掌握"漏洞原理→利用方法→防御措施"的完整逻辑,为后续学习更复杂的漏洞打下基础。