MYSQL自带库和表
在Mysql5.0以上的版本中加入了一个information_schema这个自带库,这个库中包含了该数据库的所有数据库名、表名、列表,可以通过SQL注入来拿到用户的账号和口令,而Mysql5.0以下的只能暴力跑表名;5.0 以下是多用户单操作,5.0 以上是多用户多操作。
在渗透测试中,information_schema库中有三个表对我们很重要
1. schemata 表 中 schema_name 字段存储数据库中所有的库名
2. tables 表 中** table_schema** 字段存储库名 ,table_name 字段存储表名
3. columns 表 中 table_schema 字段存储库名 ,table_name 字段存储表名 ,column_name 字段存储字段名
MYSQL常用语句
--连接-- mysql -h localhost -uroot -proot -P 3306 --创建数据库-- create database liuyanban; create database liuyanban default character set utf8 default collate utf8_general_ci; --短命令-- \c 删除正在输的命令 \s 服务器的状态 \h 帮助 \q 退出 --显示数据库名-- show databases; --删除数据库-- drop database liuyanban; drop database if exists liuyanban1; --切换数据库-- use liuyanban; --创建数据表并指定字段-- create table liuyan(id int auto_increment primary key,title varchar(255),content text); auto_increment # 自增 primary key # 主键 默认不能为空 --显示表结构-- desc liuyan; --删除表-- drop table liuyan; drop table if exists liuyanban; --操作表-- alter table liuyan action; alter table liuyan rename as liuyanban; # 修改liuyan为liuyanban alter table liuyan add time time;(first/after 字段名) # 默认最后 alter table liuyan add primary key (time); # 定义字段为主键 alter table liuyan modify time text; # 修改数据类型 alter table liuyan change time user varchar(255); # 修改字段名及数据类型 alter table liuyan drop time; # 删除字段 --插数据-- insert into tbname(colname1,colname2) values('value1','value2'); insert into liuyan(title,content) values('test1','test1'); # 插入单行数据 insert into liuyan(title,content) values('test1','test1'),('test2','test2'); # 插入多行数据 --更新数据-- update tbname set cloname='value' where id=1; update tbname set title='test1' where id=1; update tbname set title='test1' and content='test 1' where id=1; --删除数据-- delete from liuyan where id =1; delete from liuyan where id >5; --查询数据-- select * from liuyan; select title from liuyan where id=1; select title from liuyan where id=1 order by id; # 使用id排序 select title,content from liuyan where id=1 order by id; select title from liuyan where id=1 order by id asc/desc; # 升序降序 0x01 常用函数总结 名称 功能user() 返回当前使用数据库的用户
version() 返回当前数据库版本
database() 返回当前使用的数据库名
@@datadir 返回数据库数据存储路径
@@basedir 返回数据库安装路径
@@version_compile_os 返回操作系统版本
concat() 拼接字符串
concat_ws() 拼接字符串指定分割符号,第一个参数为分割符号
group_concat() 将多行结果拼接到一行显示
rand() 返回0 ~ 1的随机值
floor() 返回小于等于当前值的整数
count() 返回执行结果的行数
hex 转换成16进制 0x
ascii 转换成ascii码
substr() 截取字符串 substr(字符串,开始截取位置,截取长度) ,例如substr('abcdef',1,2) 表示从第一位开始,截取2位,即 'ab'
substring() 用法和substr()相同
mid() 用法和substr()相同
length() 获取字符串长度,例:select length(database()); 表示获取当前数据库名的长度
if() if(判断条件,为真的结果,为假的结果) 例:if(1>0,'true','false') 1>0条件为真,返回true
sleep() sleep(int1) int1是中断时间,单位是秒。例:sleep(3) 表示中断3秒
benchmark() benchmark(arg1,arg2) 用来测试一些函数的执行速度。arg1是执行的次数,arg2是要执行的函数或者是表达式。与sleep()函数基本一致。在sleep()不能使用时,可用此函数代替
0x02常见注入类型 union联合查询注入