SQL注入原理---Web渗透学习

SQL注入原理学习总共分三个部分,本文是第一部分。
第二部分是《SQL注入原理(手动SQL注入)—web渗透学习
第三部分《SQL注入原理(自动注入SQLMAP)—web渗透学习》,后续会将学习笔记提交

SQL注入的危害:
1.拖库导致数据库泄露;
2.危害web等应用的安全;
3.失去操作系统的控制权;
4.用户信息被非法买卖;
5.危害企业及国家的安全。

SQL注入的主要方式:
1.基于错误的注入;
2.基于布尔的注入;
3.基于UNION的注入;
4.基于时间的注入。

SQL关注的主要数据库:
information_schema库:其实MYSQL数据库的信息数据库,其保存着MYSQL服务器所维护的所有其他数据库信息,包括库名、表名、列名,及相应的类型和访问权限。再直白点说,被访问的MYSQL服务器上到底有哪些数据库,各个数据库有哪些表格,每个表格都有哪些表头信息,及每个表头的类型,每个数据库需要什么样的访问权限都在information_schema库中保存着。

infromation_schema数据库的表格信息如下:

mysql> show tables;
+---------------------------------------+
| Tables_in_information_schema          |
+---------------------------------------+
| CHARACTER_SETS                        |
| COLLATIONS                            |
| COLLATION_CHARACTER_SET_APPLICABILITY |
| COLUMNS                               |---在这个表格中保存了当前SQL服务器所有表格的所有列信息(表头)信息,包括其归属哪个表格、哪个数据库、类型、权限等。
| COLUMN_PRIVILEGES                     |
| ENGINES                               |
| EVENTS                                |
| FILES                                 |
| GLOBAL_STATUS                         |
| GLOBAL_VARIABLES                      |
| KEY_COLUMN_USAGE                      |
| PARTITIONS                            |
| PLUGINS                               |
| PROCESSLIST                           |
| PROFILING                             |
| REFERENTIAL_CONSTRAINTS               |
| ROUTINES                              |
| SCHEMATA                              |----在这个表格中保存了当前SQL服务器所有数据库信息
| SCHEMA_PRIVILEGES                     |
| SESSION_STATUS                        |
| SESSION_VARIABLES                     |
| STATISTICS                            |
| TABLES                                |----在这个表格中保存了当前SQL服务器所有表格信息,包括归属哪个数据库,表格的名称,表引擎,创建时间等信息
| TABLE_CONSTRAINTS                     |
| TABLE_PRIVILEGES                      |
| TRIGGERS                              |
| USER_PRIVILEGES                       |
| VIEWS                                 |
+---------------------------------------+
28 rows in set (0.00 sec)

查看一下information库columns表格中的信息:

mysql> select * from information_schema.columns limit 5\G;
*************************** 1. row ***************************
           TABLE_CATALOG: NULL
            TABLE_SCHEMA: information_schema ---数据库名称
              TABLE_NAME: CHARACTER_SETS   ---表格名称
             COLUMN_NAME: CHARACTER_SET_NAME ---列名称
        ORDINAL_POSITION: 1
          COLUMN_DEFAULT: 
             IS_NULLABLE: NO
               DATA_TYPE: varchar
CHARACTER_MAXIMUM_LENGTH: 32
  CHARACTER_OCTET_LENGTH: 96
       NUMERIC_PRECISION: NULL
           NUMERIC_SCALE: NULL
      CHARACTER_SET_NAME: utf8
          COLLATION_NAME: utf8_general_ci
             COLUMN_TYPE: varchar(32)
              COLUMN_KEY: 
                   EXTRA: 
              PRIVILEGES: select
          COLUMN_COMMENT: 
*************************** 2. row ***************************
           TABLE_CATALOG: NULL
            TABLE_SCHEMA: information_schema
              TABLE_NAME: CHARACTER_SETS
             COLUMN_NAME: DEFAULT_COLLATE_NAME
        ORDINAL_POSITION: 2
          COLUMN_DEFAULT: 
             IS_NULLABLE: NO
               DATA_TYPE: varchar
CHARACTER_MAXIMUM_LENGTH: 32
  CHARACTER_OCTET_LENGTH: 96
       NUMERIC_PRECISION: NULL
           NUMERIC_SCALE: NULL
      CHARACTER_SET_NAME: utf8
          COLLATION_NAME: utf8_general_ci
             COLUMN_TYPE: varchar(32)
              COLUMN_KEY: 
                   EXTRA: 
              PRIVILEGES: select
          COLUMN_COMMENT: 

根据columns(或tables)的TABLE_SCHEMA(列头或表头)来查询当前数据服务器的所有数据库名称。

mysql> select DISTINCT TABLE_SCHEMA from information_schema.columns;
+--------------------+
| TABLE_SCHEMA       |
+--------------------+
| information_schema |
| bricks             |
| bwapp              |
| citizens           |
| cryptomg           |
| dvwa               |
| gallery2           |
| getboo             |
| ghost              |
| gtd-php            |
| hex                |
| isp                |
| joomla             |
| mutillidae         |
| mysql              |
| nowasp             |
| orangehrm          |
| personalblog       |
| peruggia           |
| phpbb              |
| phpmyadmin         |
| proxy              |
| rentnet            |
| sqlol              |
| tikiwiki           |
| vicnum             |
| wackopicko         |
| wavsepdb           |
| webcal             |
| webgoat_coins      |
| wordpress          |
| wraithlogin        |
| yazd               |
+--------------------+
33 rows in set (0.03 sec)

当我们要渗透一个服务器时,我们并不知道该数据库的当前任何信息,那么我们就可以利用information_schema库去查看我们感兴趣的数据库的内容。
步骤如下:
1.查询该数据库服务器都包含了哪些数据库
2.查询感兴趣数据库所包含的了哪些表格;
3.查询感兴趣数据库下目标表格的列头(或字段)信息;
4.查询目标表格的具体字段或列头的具体信息。

1.查询数据库名:
information_schema.tables保存着所有的库名,TABLE_SCHEMA对应;

select DISTINCT TABLE_SCHEMA from information_schema.tables;

语句注释:显示infromation_schema数据库里所有的数据库信息,将TABLE_SCHEMA重复的去除掉,等价于show databases;
结果显示:

mysql> select distinct table_schema from information_schema.tables;
+--------------------+
| table_schema       |
+--------------------+
| information_schema |
| bricks             |
| bwapp              |
| citizens           |
| cryptomg           |
| dvwa               |
| gallery2           |
| getboo             |
| ghost              |
| gtd-php            |
| hex                |
| isp                |
| joomla             |
| mutillidae         |
| mysql              |
| nowasp             |
| orangehrm          |
| personalblog       |
| peruggia           |
| phpbb              |
| phpmyadmin         |
| proxy              |
| rentnet            |
| sqlol              |
| tikiwiki           |
| vicnum             |
| wackopicko         |
| wavsepdb           |
| webcal             |
| webgoat_coins      |
| wordpress          |
| wraithlogin        |
| yazd               |
+--------------------+
33 rows in set (0.00 sec)

其他查询语句:

select DISTINCT TABLE_SCHEMA,GROUP_CONCAT(TABLE_NAME) from information_schema.TABLES GROUP BY TABLE_SCHEMA limit 5\G;

语句注释:显示infromation_schema.tables数据库中所有的表格信息,将TABLE_SCHEMA重复的去除掉,并将同一数据库的表格放到一个group里。
同时仅显示前5个,按照一个GROUP去显示每一个数据库。
结果显示:

mysql> select DISTINCT TABLE_SCHEMA,GROUP_CONCAT(TABLE_NAME) from information_schema.TABLES GROUP BY TABLE_SCHEMA limit 5\G;
*************************** 1. row ***************************
            TABLE_SCHEMA: bricks
GROUP_CONCAT(TABLE_NAME): users
*************************** 2. row ***************************
            TABLE_SCHEMA: bwapp
GROUP_CONCAT(TABLE_NAME): users,movies,heroes,blog
*************************** 3. row ***************************
            TABLE_SCHEMA: citizens
GROUP_CONCAT(TABLE_NAME): logins
*************************** 4. row ***************************
            TABLE_SCHEMA: cryptomg
GROUP_CONCAT(TABLE_NAME): challenge2_users,challenge2_articles,challenge4_users
*************************** 5. row ***************************
            TABLE_SCHEMA: dvwa
GROUP_CONCAT(TABLE_NAME): guestbook,users
5 rows in set (0.00 sec)

可以看出cryptomg数据库中包含了challenge2_users,challenge2_articels,challenge4_users三个表格。

2.查询指定数据库的表信息:
information_schema.table_name保存着所有数据库的表格名:

select table_name from information_schema.tables where table_schema="cryptomg";

语句注释:显示infromation_schema中的table库为cryptomg的表格名称信息。
显示结果:

mysql> select table_name from information_schema.tables where table_schema="cryptomg";
+---------------------+
| table_name          |
+---------------------+
| challenge2_articles |
| challenge2_users    |
| challenge4_users    |
+---------------------+
3 rows in set (0.00 sec)

3.查询指定表格的列字段信息:
infromation_schema.columns保存了所有数据库的所有表格的列信息。

select table_name,column_name from information_schema.columns where table_schema="cryptomg" and table_name="challenge4_users";

语句注释:显示infromation_schema中的table库为cryptomg的表格名称信息。
显示结果:

mysql> select table_name,column_name from information_schema.columns where table_schema="cryptomg" and table_name="challenge4_users";
+------------------+-------------+
| table_name       | column_name |
+------------------+-------------+
| challenge4_users | id          |
| challenge4_users | username    |
| challenge4_users | password    |
| challenge4_users | email       |
+------------------+-------------+
4 rows in set (0.00 sec)

4.查询指定表格的列表信息:
此时可以根据上面已经获得的信息去针对性的查询表格当前的内容。
主要注意的是:能否查看该数据库的信息,取决于当前用户的权限。

select id,concat(username,' ',password,' ',email) from cryptomg.challenge4_users;

语句注释:显示数据库cryptomg中challenge4_users表格中id,username,password和email信息,其中后面三个信息联合(concat)显示,并由空格分开。
显示结果:

mysql> select id,concat(username,' ',password,' ',email) from cryptomg.challenge4_users;
+----+----------------------------------------------------------+
| id | concat(username,' ',password,' ',email)                  |
+----+----------------------------------------------------------+
|  1 | admin 09cdfd1fdd17cad4c17cfee07835c3f8 admin@example.org |
+----+----------------------------------------------------------+
1 row in set (0.00 sec)
  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值