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'

 


其他的逻辑待补充

发布了15 篇原创文章 · 获赞 6 · 访问量 703

猜你喜欢

转载自blog.csdn.net/Sck121/article/details/104667661