SQL语言基础及注入逻辑
一、SQL简介
SQL(Structured Query Language)结构化查询语言是广泛应用于数据库管理软件的语言(非编程语言),根据SQL语言不同功能特性,将其分为三类,分别是DDL(Data Definition Language)数据定义语言,DML(Data Maniputation Language)数据操纵语言,DCL(Data Control Language)数据控制语言。
二、SQL语言基础
1. 数据定义语言
功能:用于数据库,表,视图,函数,存储过程或其他对象的创建(create),修改(alter),删除(drop)
(1)创建数据库并设置默认字符集为UTF-8 create database [数据库名] default charset [字符集];
(2)删除数据库 drop database [数据库名];
(3)创建表 create table [表名](字段名1 字段类型,字段名2 字段类型,...)
(4)删除表 drop table [表名]
(5)修改表-表中增加一行字段 alter table [表名] add column [字段名] [字段类型]
(6)修改表-表中删除一行字段 alter table [表名] drop column [字段名]
(7)修改表-字段类型/位置 alter table [表名] modify [字段名] [字段类型] after [上一个字段名]
(8)修改表-字段名/字段类型/位置 alter table [表名] change [原字段名] [新字段名] [新字段类型] after [上一个字段名]
(9)修改表名 alter table [原表名] [新表名]
补充:
主键:primary key(字段名)
外键:foreign key(字段名) reference [表名](字段名)
主外键可以在创建表时直接加在字段类型后,或者后期通过alter add设置主外键,取消主外键用alter drop
2. 数据操纵语言
功能:用于表,视图等对象的增加(insert),删除(delete),修改(update),查询(select)等操作
1. 表中插入一条数据(INSERT+VALUES/INSERT+SELECT/INSERT+SET)
2. 删除表中的一条数据(根据需要加where条件)
删除表中所有数据
3. 删除多个表中的关联数据
4. 更新表中的一条数据
更新表中的所有数据
5. 查询表
(1) 查询表中所有数据 select * from users;
(2) 根据条件查询表中某条数据 select * from users where uid=1000;
(3) 查询表中某条数据的指定字段 select uname,passwd from users where uid=1000;
(4) 根据第2列进行排序(默认升序),desc控制降序排列 select * from users order by 2;
(5) 子查询
IN的使用:select * from users where uid in(select uid from users2);
等价于select * from users a where exists(select uid from users2 b where a.uid=b.uid)
EXISTS的使用:select * from users where uid exists(select uid from users2);
(6) 关联查询(内查询,左查询,右查询)
select a.uname b.mobile from users a inner/left/right join users2 b on a.uid=b.uid
演示:
users和users2表数据展示
内查询
左查询
右查询
(7)联合查询
select * from users union select * from users2 //去重
select * from users union all select * from users2 //不去重
select uid,uname from users union select 1,’michael’; //数据拼接
3. 数据控制语言
功能:用于用户权限管理等
基本使用:grant [insert/select/update/delete] privileges on *.* to [用户名]@[登陆IP] identified by [密码]
1. 创建一个任意IP登陆的超级管理员权限用户
三、注入逻辑
原理:通过带有SQL代码的参数传递给后台数据引擎,执行显示注入者想要的效果
select * from users where uname='$uname'
正常:$uname='Michael'
select * from users where uname='Michael'
空集逻辑
注入:$uname="' or '1'='2"
网页不报错,但显示页面没有内容等
select * from users where uname='' or '1'='2'
全集逻辑
注入:$uname="' or '1'='1"
select * from users where uname='' or '1'='1'
其他的逻辑待补充