你的个人信息是如何被盗走的?MySQL脱库,脱库的原理,怎么脱库,脱库的步骤,一库三表六字段

本文阅读 7 分钟
首页 安全分享,WEB安全 正文

<font color="orange">「作者主页」:</font>士别三日wyx
<font color="orange">「作者简介」:</font>CSDN top200、阿里云博客专家、华为云享专家、网络安全领域优质创作者

「脱库」是指,利用网站的漏洞,获取数据库中的全部用户信息。

比如某银行数据泄露,泄露的信息包括名字、性别、卡号、身份证号、手机号码 、所在城市、联系地址、工作单位、邮编 、工作电话、住宅电话、卡种、发卡行等等。

我们平时接到的诈骗电话,对方知晓我们所有的个人信息,他们的信息来源可能就是某网站的数据泄露;当然,并不是所有的诈骗电话都是源于数据泄露,比如 我……秦始皇……打钱!

脱库有一个前提,那就是网站存在SQL注入漏洞。

我们举个栗子,你暗恋你们校花很久了,这天,你发现你们学校官网存在SQL注入漏洞,你想从你们学校的数据库中查到校花的个人信息,但你不知道个人信息保存在哪个表中,你甚至不知道这个数据库中都有哪些表,这时候你该怎么办?

不要担心,接下来,我将一步一步的教你,如何拿到这些数据!

首先,我们先来认识一下MySQL的「默认数据库」,如下图: img MySQL初始安装时,会携带一些默认的数据库,这些数据库用来存储MySQL的相关信息:

  1. information_schema:保存具体数据库的信息,比如MySQL有哪些数据库,库里有哪些表,表里有哪些字段。
  2. mysql:保存数据库的权限信息,比如哪个用户可以访问哪个表。
  3. performance_schema:保存数据库的性能参数。
  4. sys:数据源自performance_schema,目的在于降低数据库的复杂度。

对我们来说,比较重要的有两个数据库:information_schema、mysql。

这里给大家普及一个非常重要的概念:「一库三表六字段」。 顾名思义,就是一个数据库、三个表、六个字段。

「一库」是指 information_schema 库,这个库是脱库的核心库。 为什么叫它核心库呢?因为它里面有三个非常重要的表。

「三表」是指 information_schema 库里的三个表:

  1. schemata 表:存放所有数据库信息
  2. tables 表:存放所有表信息
  3. columns 表:存放所有字段信息

「六字段」是指 三表中的六个关键字段:

  1. schemata表的 schema_name 字段:存放具体的数据库名
  2. tables表的 table_name 字段:存放具体的表名
  3. tables表的 table_schema 字段:存放表所在的数据库
  4. columns表的 column_name 字段:存放具体的字段名
  5. columns表的 table_name 字段:存放字段所在的表名
  6. columns表的 table_schema 字段:存放字段所在的数据库名

为了方便记忆,我们把它整理成脑图: img 这是个概念性的东西,建议大家牢牢记住,接下来我们来讲解一下脱库的具体步骤。

脱库总共分三步:

  1. 爆库
  2. 爆表
  3. 爆字段

1)爆库

回到文章开头的问题,我们想要查询校花的个人信息,首先得知道这些个人信息存放在哪个数据库吧。 如果我们知道了网站中所有的数据库名字的话,能不能根据库名来判断哪个数据库是存放个人信息的呢? 这个爆破MySQL所有数据库名字的操作,就叫「爆库」。

information_schema 库的 schemata 表的 schema_name 字段存放了所有数据库的名字,我们查询这个表,就能拿到所有库名:

select schema_name from information_schema.schemata;

从下图的查询结果中可以看到,我们查到了所有的库名,其中有个叫 user 的数据库,初步判断这个库用来保存用户信息。 img

2)爆表

确定数据库以后,我们肯定要知道这个库里面有哪些表。 获取数据库中所有表名的操作,就叫「爆表」。

information_schema 库的 tables 表的 table_name 和 table_schema 字段分别保存表名和表所在的库名,我们查询这个表,就能拿到数据库中的所有表名:

select table_name from information_schema.tables where table_schema = 'user';

如图,我们拿到了 user 库中的所有表名。 img

3)爆字段

实际上,拿到表名后,我们就可以查询表中的数据了,但实际注入中,由于一些原因,比如联合查询只能查询固定个数的字段,这时候我们就需要知道表中有哪些字段。

information_schema 库的 columns 表的 column_name、table_name、table_schema 字段分别保存字段名、字段所在表名、字段所在的库名,查询这个表,我们就能拿到表中的所有字段名:

select column_name from information_schema.columns where table_name = 'student' and table_schema = 'user';

如图,我们拿到了表中的所有字段名。 img

4)爆数据

现在库名、表名、字段名我们都知道了。 接下来,我们就可以查询网站数据库中的所有用户信息了,比如,看一下校花的家在哪:

select address from user.student;

img 感谢你的点赞、收藏、评论,我是三日,祝你幸福!

本文为互联网自动采集或经作者授权后发布,本文观点不代表立场,若侵权下架请联系我们删帖处理!文章出自:https://blog.csdn.net/wangyuxiang946/article/details/123027484
-- 展开阅读全文 --
Redis底层数据结构--跳跃表
« 上一篇 04-28
BUUCTF Web [强网杯 2019]随便注
下一篇 » 06-24

发表评论

成为第一个评论的人

热门文章

标签TAG

最近回复