MYSQL基础:
MYSQL分级:数据库 --> 数据表 --> 列
基础连接语句和注释:
MySQL
mysql -u用户名 -p密码 -P端口 -h主机名
注释:
show databases;#这是单行注释,不会被执行。下面笔记会使用这个作为注释符
show databases;-- 这是单行注释,杠后面必须跟一个空格
show databases;/*这是
多行
注释*/
一些增删改查的基础语句,不会就没办法查询相关信息构造payload
MySQL
CREATE DATABASE 数据库名; #创建数据库
SHOW DATABASES; #显示现有数据库
DROP DATABASE 数据库名; #删除数据库
use 数据库名; #操作数据库
create 表名; #创建表
show tables; #显示数据库下的表
drop 表名; #删除表
DESC 表名; #查看表的结构
alter table 表名 add 列名 类型(长度) ; #为表增加一个新字段
alter table 表名 drop 列名; #删除列
insert into 表名 (列1,列2,...) values (值1,值2,值3,...),(值1,值2,值3,...),...,...; #创建列并写入值
insert into 表名 values (值1,值2,值3,...),(),...; #为所有列添加值
update 表名 SET 列名 = '值' WHERE 值 = 修改值; #修改列对应数据
delete from 表名 where 条件; #删除符合条件的数据
select 列名 from 表名; #基础查询,列名=*则全部查询,后可跟where查询符合条件的语句
select distinct * from 表; #查询数据并去重
select 列名1,分组列名 from 表名 group by 分组列名; #根据分组列名分组查询
select 列名1,列名2 from 表名 order by 排序方式; #ASC升序(默认),DESC降序,排序方式可为数字,且必须与前面列名数量一致,可根据这一特性构造payload反推开发者写的sql语句,确定列数
select * from 表名 limit 1; #仅查询第一条数据
select * from 表名 limit 5,10; #查询第5条数据之后的10条数据,即跳过前5条数据,查询第6-15条数据
select * from 表 where 字段 like %1; #模糊查询,查询结尾为1的数据,'1%'查询开头为1,'%1%'查询包含1,'_n%'查询第二个字母为n,'a__'查询以a开头并且为3位的字符串,以此类推,若查询的数据本身就是带%则使用_或\进行转义%\%%
select * from 表名 as 别名 #如果表名很长则可使用as起一个短别名,后续条件判断则可使用别名
select * from 表名 where 列名 in (select 列名 from 表名 where 条件); #where子查询,把内层查询结果当作外层查询的比较条件
一些基本参数在mysql中的存储位置:
库名:information_schema --> TABLES --> TABLE_SCHEMA
MySQL
select table_schema from information_schema.tables; #查询所有库名,从中提取想要哪个数据库,通常可以使用database()来查询
表名:information_schema -->COLUMNS --> TABLE_NAME
MySQL
select table_name from information.columns where table_schema = '想要查询的库名'; #查询表
列名:information_schema -->COLUMNS--> COLUMN_NAME
MySQL
select column_name from information.columns where table_name = '想要查询的表名'; #查询列
这3个位置记录了整个mysql的结构,可逐级查询,构造出目标的数据库结构,从而找到关键价值目标
寻找注入点:
分析网站功能结构,思考哪些参数可能会存储在数据库中,并且哪里可以让我们自定义修改,以此来构造payload尝试注入
常见可能存在注入点的位置: