利用SQL注入进行爆库进阶:云盘服务无法连接服务器

時間:2023-12-28 01:51:45 作者:云盘服务无法连接服务器 熱度:云盘服务无法连接服务器
云盘服务无法连接服务器描述::

这一篇文章如何将MySQL数据库爆库?

上一篇【超级蜘蛛池之何谓为SQL注入?】介绍了SQL注入的根本原理和试验想法!

假如作为一名黑客,基本无法知道系统中有哪些表,表中有哪些字段,那如何将数据库的内容盗取出来呢?

答案就是MySQL数据有一个元数据库,它会描述整个MySQL服务器有哪些数据库,每个数据有哪些表,每个表有哪些字段,这就相当于把自家屋子有什么宝贝统统通知别人了。

那这个元数据库就一个根,只要抓紧了这依据,沿着:元数据库 - 数据库列表-表列表-字段列表-表内容

这个树状分层的检索次序,就可以将整个数据库内容全体盗取出来。

一、元数据库在哪

刚才谈到MySQL里面有个元数据库,但它在藏在哪里呢?别急,请登录MySQL数据库,并运行sho databases;号召,就可以获取所有数据库列表,如下图所示:

图片中标红色的数据库information_schema就是元数据库,里面利用尽有,可以尽兴扩展处女地。

进入information_schema数据库,看看里面有哪些数据表,采用如下号召:

我们所说的根就在SCHEMATA表,它里面描述了整个MySQL 下所有数据库。

然后再应用TABLES表,则可以看到数据下的表名,再应用COLUMNS表,则可以看到每个表下的字段名。下面依次呈现如何察看这些数据。

二、察看所有数据库

SCHEMATA表描述所有数据库信息,只需尺度的select语句:

SELECT * FROM information_schemaSCHEMATA

即可将该表的内容全体显示出来:

图中SCHEMA_NAME字段为数据库名,从查询结局可以知该MySQL服务器有5个数据库。

请留心,从这里开端不再入进入某个数据库之后再拜访表,而是使用数据库名表名的尺度形式来拜访某个数据库下的表。上述的information_schemaSCHEMATA表示查询information_schema数据库下的 SCHEMATA表。

三、察看数据表

有了数据库列表,就可以进一步察看某个数据库下所有表(当前也可以察看所有数据库下的所有表)。比如察看lyt_test数据库下的所有表,采用SQL语句:

SELECT TABLE_SCHEMA, TABLE_NAME FROM information_schemaTABLES WHERE TABLE_SCHEMA = lyt_test

查询结局如下图所示:

TABLE_NAME表示表名,左列TABLE_SCHEMA为数据库名,因为lyt_test数据库下只有accounts这个表,所以输出结局只有一列。

四、察看表中的所有字段

然后采用COLUMNS表可以查询表的所有字段信息,采用下面SQL语句可查询accounts表的所有字段名和类型:

SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE FROM information_schemaCOLUMNS WHERE TABLE_NAME = accounts

查询出accounts表所有字段和类型信息如下图所示:

五、察看表中的所有纪实

察看accounts表中的内容更是小菜一碟了,学过数据库的都知道SQL写成下面这样:SELECT * FROM lyt_testaccounts

那么如何应用SQL注入来盗取整个数据库呢?,这就是要寻找的支点。

还记得上篇文章介绍的试验吗?应用SQL注入专业,可以将userinfo表中的所有数据都盗取出来。但该SQL能注入的部门只是WHERE部门,而SELECT FROM 部门中的字段和表名却是无法注入的,那怎么可以将其它表的数据盗取出来呢?

这个密秘就就是应用UNION语句。是的,尺度SQL提供了UNION语句,可以将两个SELECT结局联盟起来(即对两个SELECT结局作并集)。UNION语句的语法如下:

  1. SELECT column_name1(s) FROM table_name1

  2. UNION

  3. SELECT column_name2(s) FROM table_name2

    1. 唯一的要求就是两个SELECT语句的列数要相等。

      有了UNION语句,就可以将 SELECT * from userinfo WHERE 和 SELECT * from lyt_testaccounts两个结局联盟起来。

      那么在没有拿到源代码的场合,怎么知道 SELECT * from userinfo 查询结局有多少列呢?

      可通过探索想法拿到这个数值:依次注入UNION SELECT 1, N这样的语句来探索。先尝试 SELECT 1, 再SELECT 1,2, 然后SELECT 1,2,3,直到不运行犯错为止。可以先在MySQL上测试一下,结局下图所示:

      从上图测试结局可知UNION后面跟的SELECT结局必要是两列,否则会犯错。

      们在注入时WHERE后是两个条件吗?(name = ‘name′ANDpassd=′passsd ‘),在实际代码中可能会是更复杂的条件,甚至黑客也很难猜测的条件,那这个UNION语然该插在那个变量呢?使得整个SQL还是个正当的查询语句。

      最好安全的做法是将UNION SELECT 注入到第一个变量中,然后注入的尾部增加一个注释符号,将后的语句注释掉,就不会斟酌后面的是什么语句了。在MySQL数据库,采用符号即可实现注释。

      可以做一下注入测试,验证一下:

      在username文本框中输入:ivan union select 1,2,如下图:

      点login 按钮后的运行结局如下图所示:

      union注入结局

      请留注下红框中生成的SQL语句:

      SELECT * FROM userinfo WHERE name = ‘ivan’ union select 1,2 AND passd = ”

      将后面的SQL内容注释掉了,MySQL分析时直接将它干掉,相当于下面的SQL语句:

      SELECT * FROM userinfo WHERE name = ‘ivan’ union select 1,2

      select 1, 2的结局是常数行, 在后面的例中尝试从表中查询数据,而不彻底是常数行。

      好了 ,UNION和就是撬动爆库的那个支点

      七、实践爆库

      以下试验都是基于《SQL注入底层》一文开发的数据库利用demo来试验的,假如读者没有SQL注入的底层知识,建议看看这篇文章;同时建议SQL注入的初学者也按此文搭建雷同的数据利用demo来试验测试一把。

      八、爆数据库列表

      往username中注入:ivan’ union select 1,SCHEMA_NAME from information_schemaSCHEMATA

      即可查询所有数据库列表如下图:

      注入获取所有数据库

      图示标红色框的就是数据库列表。我们在UNION SELECT 语句中第一列为常数1,第二列是information_schemaSCHEMATA表中SCHEMA_NAME这一列,它刚好就是数据库名。

      九、爆某个数据库下的所有表名

      为了精减输出结局,这里只爆lyt_test数据库下的表名,往username中注入:

      ivan’ union select 1,TABLE_NAME from information_schemaTABLES here TABLE_SCHEMA = ‘lyt_test’

      即可查询得lyt_test数据库下所有表,如下图所示:

      注入获取lyt_test数据库下的表

      差异的场所是lyt_test数据库下只有accounts一个表,其它与爆数据库原理雷同。

      十、爆某个表下所有字段

      这里只爆accounts表下的所有字段,往username中注入:

      ivan’ union select 1, COLUMN_NAME from information_schemaCOLUMNS WHERE TABLE_NAME = ‘accounts’

      结局如下图所示:

      注入获取字段名

      标红的是字段名。那么类型呢? 改动注入内容为:ivan’ union select 1, DATA_TYPE from information_schemaCOLUMNS WHERE TABLE_NAME = ‘accounts’

      就可以获取字段类型信息,如下图所示:

      注入获了字段类型

      标红色的差别是前面两个字段的类型,即类型为char, balance类型为float。

      从上面可以发明规律:每个注入可以获取到目的表中的每个列表数据, 假如表中有N表,注入N次可以获取完整的表信息。

      结算

      SQL注入爆数据库就是这么容易的,但有几个必备条件:

      1. MySQL中显露一个元数据库information_schema,它描述整个MySQL服务器所有数据库-表-字段关系树

      2. SQL语言提供了UNION语句,可以新增盗取其它数据合并到被注入SELECT结局

      3. MySQL对SQL做开拓,提供注释符

站長聲明:以上關於【利用SQL注入进行爆库进阶-云盘服务无法连接服务器】的內容是由各互聯網用戶貢獻並自行上傳的,我們新聞網站並不擁有所有權的故也不會承擔相關法律責任。如您發現具有涉嫌版權及其它版權的內容,歡迎發送至:1@qq.com 進行相關的舉報,本站人員會在2~3個工作日內親自聯繫您,一經查實我們將立刻刪除相關的涉嫌侵權內容。