MYSQL SQL注入

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联合查询注入

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzjfjy.html