SQL注入中information_schema的作用

为什么网上的SQL注入语句中,数据库名都是用的字符的16进制值?
 
 
 
实验简介

实验所属系列:WEB安全应用

实验对象:WEB安全爱好者

相关课程及专业:渗透测试技术

实验时数:1小时

实验类别:实践实验类

实验目的

通过本次实验,掌握SQL注入中,通过information_schema这个数据库爆库名、表名以及字段名的原理。

实验环境

windows 7、安装wamp环境。

实验内容与步骤
通过浏览器输入localhost/phpmyadmin浏览本地的数据库
 
 
在这里面我们也可以进行表格的删除和修改等等操作
 

 

 

在数据库information_schema中一下所有表

 

 

这上面显示的表,它们实际上是视图,而不是基本表,所以你在数据库的数据保存目录,会看不到这个数据库的实体文件。数据库的数据保存在 C:\wamp\bin\mysql\mysql5.6.17\data 目录,在这个目录下一共有如下4个目录:

     

 

 

查询数据存放位置

执行select @@datadir

 

 

 

 在SQL注入中,我们重点关注的表有如下几个,因为主要的时候主要利用这几个表来获取数据:

      SCHEMATA:提供了当前mysql数据库中所有数据库的信息,其中SCHEMA_NAME字段保存了所有的数据库名。show databases的结果取自此表。

      TABLES:提供了关于数据库中的表的信息,详细表述了某个表属于哪个schema,表类型,表引擎,创建时间等信息,其中table_name字段保存了所有列名信息,show tables from schemaname的结果取自此表。

      COLUMNS:提供了表中的列信息。详细表述了某张表的所有列以及每个列的信息,其中column_name保存了所有的字段信息。show columns from schemaname.tablename的结果取自此表。

 

进入,MySQL控制台

 

 首先切换当前数据库

查看一下当前MySQL的所有数据库

然后查看所有数据库的名称数据库名

 

 

 

这俩结果一样,都是返回了数据库的名称。

 

接下来看一下tables表格的数据结构

 

 查看一下表格中一共有多少数据

同时再查看一下相应表格的一些属性.

 

 

 

 

 通过修改TABLE_SCHEMA 的限制,可以查询任意数据库中的所有表名,网上的通过注入爆表名便是这个原理。

      知道了表名,那么如何获取表中的字段呢?要知道我们没有表名的话,会把所有的数据查询出来,而如果注入没有回显,不能进行union查询,那么想要获取我们的标目数据,无疑效率极低。

      幸运的是,在information_schema数据库中,同样存在一个表,它保存了整个数据中,所有的列名,这个表就是COLUMNS。

 

 

   

 

 

 

 

 

posted @ 2021-10-29 09:42  睿智的小班班长  阅读(99)  评论(0)    收藏  举报