Mysql命令

教程

Posted by 白泽 on September 20, 2024

Mysql相关命令


Mysql基础语法

show databases;   所有数据库
select version();  版本号
select @@basedir;  当前路径
select user();  使用用户
select database();  当前数据库
show tables; 所有表名
use 数据库名; 选择数据库
create database 数据库名;  创造数据库
drop database 数据库名;   删除数据库
desc 表名; 查看结构

Mysql增删改查

创建表
create table 数据库名字(字段 类型 约束[字段,类型,约束])
约束
auto_increment   表示自动增长  
noy null   表示不能为空
primary key  表示主键
default  默认值


增
inset into 表名(字段名1,字段名2)values(id+值1,id+值2);
inset into 表名values(id+值1)可多条;
inset into 表名(字段名1,字段名2) values(id+值1,id+值2); 其他字段默认值;

删
delete from 表名 where 条件判断式;单一
delete from 表名;

更
updata 表名 set 字段名1=值1 where 判断式;
updata 表名 set 字段名=xx;

查

select 字段名 from 表名;
select * from 表名;

带in查询判断id的值   select * from student where id in(1,2,3); 
运算符条件
带between and 属于这个区间  select * from student where id between 1 and 3;
带distinct  去除重复的值  select distinct name from student;
通配符 like %(开头) _(中间);
加and or 或者一起用 and or

函数

count 统计
sum 总和
avg 平均值
max 最大值
min 最小值
使用为字段处
group by 分组 #值
order by 默认升序 asc上 desc下
limit限制结果
ascii()函数/ord()   函数将某个字符串转化为ascii值
sleep()函数     网页延迟n秒后,输出结果
if()函数    if判断句,a为条件,b、c为执行语句;如果a为真就执行b,a为假就执行c;if(a,b.c)
length()函数   返回字段/结果/函数的长度 length(column_name) 常用length(database())即返回当前数据库名长度
rand()函数   随机函数,返回0~1之间的某个值
floor(a)     取整函数,返回小于等于a,且值最接近a的一个整数
count()函数   聚合函数也称作计数函数,返回查询对象的总数
locate()函数   locate(str,string)返回str字符在string字符串中出现的位置,没有返回0
position()函数   position(str in str)返回str字符在string字符串中出现的位置,没有返回0
instr()函数 instr(string,str)返回str字符串在string中出现的位置,与locate相同,只是参数顺序相反


常用

子查询
select name from student where id < (select age from student where name='sunce');
联合查询(union)
select version() union select user();
嵌套查询
select count(*) from users where id=(select id from users where id=1 and username=(select username from users where address='China'));
select count(*) from (select * from student2) as s;

重要

查询数据库:select schema_name from information_schema.schemata;
查询表名:select table_name from information_schema.tables;
查询列名: select column_name from information_schema.columns;
查询数据:select * from students;
concat()函数 连接符 在渗透测试中,通常情况下我们使用这个函数来查询数据库中同个表中的不同字段(列),如
concat(username,0x3a,password0xx1码还有0x7e(~)、0x2c(,逗号)、0x21(!叹号)、0x5c (\斜杠)、0x5f (_下划线)、0x3c62723e(<br>换行标签)等。
concat ws()/group concat()函数
使用分割符将一个或多个字符串连接成一个字符串,是concat()的特殊形式,第一个参数是其它参数的分隔符,分隔符的位置在连接的两个字符串之间,分隔符可以是一个字符串,也可以是其它参数。如果分隔符为 NULL,则结果为NULL。函数会忽略任何分隔符参数后的 NULL 值

updatexml()函数
updatexml()函数与extractvalue()类似,是更新xml文档的函数。
语法updatexml(目标xml文档,xml路径,更新的内容)
注意:xml路径中的位置是可操作的地方,xml文档中查找路径格式是用/xxx/xxx/xxx/这种格式,如果写入其他格式,就会报错,并且会返回写入的非法格式内容,这也是报错的原理之一。

extractvalue()函数
extractvalue() 函数是对XML文档进行查询的函数
其实就是相当于HTML文件中用<div><p><a>标签查找元素一样
语法:extractvalue(目标xml文档,xml路径)
注意:xml路径中的位置是可操作的地方,xml文档中查找路径格式是用/xxx/xxx/xxx/这种格式,如果写入其他格式,就会报错,并且会返回写入的非法格式内容,这也是报错的原理之一。

hex()&unhex()函数   
渗透中有些注入点因为数据库中对数据字段的类型定义,可能不支持union来显示某些不同类型的内容,所以使用
hex对数据进行十六进制编码:
例如 union+select+hex(password)+from+mysql.user
hex参数可用于任何参数外面,hex(concat(xxoo)), hex(user()),hex(database())
unhex()则是用来将十六进制的内容转换回十进制。

substr()/substring()/mid()函数
此函数是用来截取字符串一部分。substr(column_name,start,[length]),length为可选项。

left()函数
left()得到字符串左部指定个数的字符
语法:left(string, n),string为要截取的字符串,n为截取的位数。
load file()函数
load file()函数是MySQL读取本地/远程文件的函数
用法示例:select load_file('C:/phpstudy/PHPTutorial/MySQL/my.ini');


into outfile()函数
into outfile()函数是用来导出文件的。
用法示例:select "hello word" into outfile 'C:/phpstudy/PHPTutorial/www/1.txt;
在SQL注入时,我们可以利用load_file或者 into outfile()对文件进行读取,或者写入Webshell,但是需要注意以下几点:
1.要能使用union
2.要有secure file_priv权限
3.必须有读取权限
4.必须知道绝对路径,且目录必须是是可读、可写权限
5.必须小于配置文件中设置的文件大小,也就是max allowed_packetde(默认1M)
6.注意:若过滤了单引号,则可以将函数中的字符进行hex编码

关于secure file priv:
查询方法:show variables like '%secure_file_priv%':
查询结果为:secure_file_priv NULL时,表示不允许导入导出
查询结果为:secure_file_priv /xxx/时,表示只允许在当前目录导入导出
查询结果为:secure_file_priv (空白)时,表示可以在任意目录进行导入导出

MySQL5.6.34版本以后secure_file_priv的值默认为NULL。且无法用sql语句对其进行修改,只能够通过下方式修改mysql.ini或 my.cn:
  Windows: mysql.ini中添加secure_file_priv=
  Linux: /etc/my.cnf的[mysqld]下面添加local-infile=0

本文章声明:分享内容仅用于网安爱好者之间的技术讨论,禁止用于违法途径,所有渗透都需获取授权!否则需自行承担,作者不承担相应的后果