从靶场搭建到源码分析:Pikachu+PHPStudy环境下的SQL注入漏洞初探

张开发
2026/4/16 15:09:48 15 分钟阅读

分享文章

从靶场搭建到源码分析:Pikachu+PHPStudy环境下的SQL注入漏洞初探
从靶场搭建到源码分析PikachuPHPStudy环境下的SQL注入漏洞初探在网络安全领域靶场环境是学习漏洞原理和攻防技术的绝佳实验平台。Pikachu靶场以其丰富的漏洞场景和清晰的代码结构成为众多安全初学者的首选。本文将带您从零开始搭建Pikachu靶场环境并深入分析其中最具代表性的SQL注入漏洞模块通过实战演练与源码解读相结合的方式帮助您真正理解漏洞背后的技术原理。1. 环境搭建与初始化搭建Pikachu靶场需要准备两个核心组件Pikachu源码和PHPStudy集成环境。以下是具体步骤下载Pikachu源码git clone https://github.com/zhuifengshaonianhanlu/pikachu.git或直接从GitHub仓库下载ZIP压缩包。安装PHPStudy访问小皮面板官网下载最新版本选择与操作系统匹配的安装包Windows推荐64位版本安装路径避免使用中文或空格环境配置关键点将解压后的Pikachu文件夹放置在PHPStudy的www目录下修改/pikachu/inc/config.inc.php中的数据库配置$dbuser root; //数据库用户名 $dbpass root; //数据库密码 $dbname pikachu; //数据库名在PHPStudy中创建网站PHP版本选择5.6.9注意首次访问必须通过127.0.0.1/install.php完成初始化否则会出现数据库连接错误。2. SQL注入漏洞实战演练Pikachu靶场提供了多种SQL注入场景我们先从最基本的数字型注入开始2.1 数字型注入分析在SQL-Inject模块选择数字型注入提交用户ID查询时观察URL参数变化http://127.0.0.1/vul/sqli/sqli_id.php?id1尝试构造特殊Payload1 AND 11 -- 1 AND 12 --通过返回结果差异判断是否存在注入点。2.2 联合查询获取数据库信息利用UNION SELECT提取敏感信息1 UNION SELECT 1,group_concat(schema_name) FROM information_schema.schemata --关键信息获取Payload示例目标信息SQL语句所有数据库UNION SELECT 1,group_concat(schema_name) FROM information_schema.schemata当前数据库表UNION SELECT 1,group_concat(table_name) FROM information_schema.tables WHERE table_schemadatabase()用户表字段UNION SELECT 1,group_concat(column_name) FROM information_schema.columns WHERE table_nameusers3. 漏洞源码深度解析理解漏洞原理需要分析Pikachu后端处理逻辑主要关注两个文件3.1 数据库连接配置/inc/config.inc.php中定义了数据库连接方式$link mysqli_connect($host,$dbuser,$dbpass) or die(数据库连接失败); mysqli_select_db($link,$dbname) or die(数据库选择失败); mysqli_query($link,set names utf8);3.2 注入点代码分析查看/vul/sqli/sqli_id.php关键代码$id $_GET[id]; $query SELECT username,email FROM member WHERE id$id; $result mysqli_query($link,$query);漏洞成因直接拼接用户输入的$id到SQL语句未对输入参数进行任何过滤或预处理错误信息直接返回给客户端4. 防御方案与安全实践针对发现的SQL注入漏洞我们可以实施多种防护措施4.1 参数化查询改造使用预处理语句修复漏洞$stmt $link-prepare(SELECT username,email FROM member WHERE id?); $stmt-bind_param(i, $id); $stmt-execute(); $result $stmt-get_result();4.2 输入过滤策略实施白名单验证if(!preg_match(/^\d$/, $id)) { die(非法输入参数); }4.3 最小权限原则数据库用户权限配置建议权限级别适用场景风险等级root数据库管理极高读写权限应用常规操作中只读权限查询类操作低在实际项目中应该为Web应用创建专属数据库用户仅授予必要权限。

更多文章