一、SQL原理及语句
1.常见数据库
Mysql:Linux Windows
Access:Windows
Oracle:商业级
Mysql的组成:
数据库->若干数据表(table)->若干字段/列名(属性)->若干数据(元组)
2.数据库的查询流程
3.Mysql默认数据库
information_schema:相当于日志数据库,保存了Mysql中所有数据库的数据信息
Sys(5.5之后添加):权限较高
4.基础语言
create database test; #创建数据库
show databases; # 查看数据库
use test; #使用指定数据库
#创建数据表
create table user(
id int(11),
name varchar(255);
)
show tables; # 展示数据表
insert into users values(1,admin),(2,root); # 插入数据
select * from users; #显示所有数据
select * from information_schema.users; #查询到所有数据库中的users的数据
select database(); #查询当前数据库
select version(); #查询版本
select user(); # 查询权限
# 从第a行到b行数据
select * from user limit a,b;
update user set name='admin123' where id =1; # 数据库的更新
delete from user where username= 'dnm'; #删除数据
二、SQL注入的类型
1.原理
由于后端对于用户输入内容没有进行过滤,导致用户提交的代码可以在后端进行执行
2.常见类型
3.非常见类型
无列名注入:对于字段名字未知,通过操作让字段名字可控制
sys数据库注入:需要root权限
堆叠注入:增删改查可以使用
宽字节注入:编码不同,导致不同编码可以绕过WAF
三、字符型注入和数字型注入
1.常规流程
1.尝试闭合sql语句,判断注入类型,过滤类型
2.联合查询返回信息,union(需要满足每个字段的个数要对应,即联合数据前的格式和后面的数据格式一样),相当于查询数据库的名字
select * from test where user='admin123' union select database(),1;
3.在information_schama查询对应的列表名,查询关系(table)的名字
select * from test where user='admin132' union select table_name from information_schema.tables where table_schama = database();
4.找到表名之后,查询每一列的名字
2.常用函数与语句
1. union select
用于联合查询得到多个数据
2.group_concat
打印查询的字符串数据,汇总于一行
4.数字型注入
select * from test where id=1;
5.字符型注入
select * from test where user='admin'
6.注入类型的FUZZ
- 单引号报错很有可能是 id = '1'
- 双引号报错很有可能为 id = "1"