1. 项目概述与核心价值
1.1 “SQL-inject”模块到底练什么
Pikachu这个名字,玩过漏洞靶场的人应该都不陌生。它是一套基于PHP+MySQL的漏洞练习平台,把Web安全里最常见的漏洞类型做成了一个个小实验,SQL注入、XSS、CSRF、RCE、反序列化、越权这些模块全都有。而“SQL-inject”这个模块,就是专门用来练SQL注入的。
你可能会问:SQL注入都听过八百遍了,有什么好练的?但真上手写payload的时候才会发现,很多东西不是“记得原理”就行的。Pikachu里的SQL注入模块把注入场景拆得很细——数字型、字符型、搜索型、POST型、盲注、宽字节注入等等。每一种背后的触发条件、拼接方式、绕过思路都不一样。在这上面完整走一遍,基本能把手工注入的底子打牢。
这个靶场适合谁?两类人:一类是刚接触Web安全,想找个环境从头理解SQL注入原理的初学者;另一类是已经会跑工具(比如sqlmap),但想搞明白工具背后到底在干什么的进阶学习者。对于前者,Pikachu能让你直接看到漏洞代码和正常代码的差异,理解“为什么这里能注入”;对于后者,它能帮你把注入的类型体系捋清楚,以后遇到工具绕不过去的情况,知道怎么手工补位。
1.2 为什么选Pikachu而不是其他靶场
市面上能练SQL注入的靶场不少——DVWA、SQLi-Labs、SqliLab、PortSwigger Web Security Academy,各有各的优势。但Pikachu有一个很突出的特点:它对“漏洞成因”的展示是最直白的。
DVWA的SQL注入模块偏向“功能演示”,SQLi-Labs偏向“注入技术思路训练”,但Pikachu在每个漏洞页面里会直接标注“漏洞产生的主要原因是什么”“对应的核心代码长什么样”。这对学习者来说特别友好——你不用去翻源码,页面本身就在教你怎么看问题。另外Pikachu是中文界面,模块命名也通俗(比如“字符型注入(get)”),对国内学习者来说门槛低很多。
更关键的一点是,Pikachu的注入点设计很贴近真实站点的常见写法。它不是把SQL拼装放在一个生硬的文件里,而是模拟了正常的业务逻辑——按ID查用户、按名字搜用户、登录表单等。你在这个靶场里的每一步操作,基本对应着真实渗透测试中会遇到的实际场景。练完之后再去做授权测试,不会有一种“靶场会,实战废”的落差感。
注意:Pikachu是漏洞测试平台,只建议在本地或授权的实验环境中使用。写这篇文章也是基于本地搭建的靶场环境,不涉及任何真实目标。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境搭建与靶场部署
2.1 本地环境准备
Pikachu基于PHP+MySQL,最省事的部署方式就是集成环境。Windows上用phpstudy(小皮面板),macOS上用MAMP或者直接Docker,Linux上可以用LAMP或者Docker,看个人习惯。
我本地用的是phpstudy,因为它的PHP版本切换和MySQL管理都比较直观。需要注意一个版本问题:Pikachu有些模块的代码写法比较老,用太高版本的PHP(比如8.x)可能会出现弃用函数警告甚至直接报错。建议PHP版本选5.6或7.x,我自己在7.4下跑得很稳。MySQL方面无所谓,5.x和8.x都能跑,8.x要注意一下认证插件问题,5.x省心一些。
选集成环境的另一个原因,是后续调试方便。比如你注入的时候想看SQL语句到底怎么拼的,可以直接在phpstudy里打开MySQL的通用日志,或者装一个Adminer/phpMyAdmin,现场看数据库里的数据变化,对理解注入逻辑帮助很大。
2.2 Pikachu部署与初始化
部署流程很常规:
- 从官网或GitHub下载Pikachu源码,解压到Web根目录(phpstudy默认是
WWW目录)。 - 修改数据库配置:进入
inc目录,打开config.inc.php,把数据库账号密码改成自己环境的配置。 - 在浏览器访问Pikachu首页,点击“初始化”按钮。它会自动建库建表,并写入基础实验数据。
- 初始化完成后,从首页进入“SQL-Inject”菜单,就能看到各个注入实验入口。
有一个小细节容易踩坑:初始化之后,如果页面显示数据库连接失败,大概率是MySQL账号没有远程权限,或者密码认证方式不对。本地环境直接把host改成127.0.0.1,账号用root,密码留空,基本都能解决。
初始化最大的价值在于:Pikachu自带了几个预设的用户表数据,比如users表里的用户名和密码,还有member表里的会员信息。注入后能不能拿到这些数据,就是你判断“注入是否成功”的依据。建议初始化后先去phpMyAdmin里看一眼这些表的字段结构和数据量,后面验证注入结果时会很有参考价值。
3. SQL注入原理与模块整体设计
3.1 注入的本质:把输入变成代码
理解SQL注入,只需要记住一句话:当应用程序把用户输入直接拼接到SQL语句中,并且没有做任何过滤或参数化处理时,用户输入就“变成”了SQL语句的一部分。你的输入不再只是
