盲注
0x00 盲注
与显错注入对应,注入时页面不会返回错误信息,如报错语句、回显点等。
盲注分为布尔盲注和时间盲注两大类型
盲注常用到的函数:
if() 条件判断
length() 判断长度
substr() 字符串截取
ascii() 获取字符ascii码
sleep() 延时
0x01 布尔盲注
页面只能返回两种状态,Ture和False,如页面状态正常或不正常。
代码审计:
第20行,获取了GET传参,并赋值给变量id。
第29行拼接进SQL语句中,直接执行,中间没有任何过滤,存在SQL注入。
但是在第33-50行的if语句,当存在id传参时,只会返回两种情况,并不会返回错误信息,可以看到当SQL语句错误时,else分支中返回空,所以是布尔盲注。
靶场复现
SQL语句执行正常时:
SQL语句存在错误时:
所以可以根据length()、ascii()、substr()等函数,通过页面返回情况获取我们想要的信息
如获取数据库名长度为8
获取表名第一个字符的ascii值
ascii()函数获取对应字母的ascii值
subtr()函数中间加上执行的SQL语句,截取出返回结果的指定字符
0x02 时间盲注
代码审计
第21行获取GET传参,第30行拼接进SQL语句中执行,中间没有做任何过滤,因此存在SQL注入。但是在第34-50行的if语句中,无论SQL语句是否出错,都返回的是相同的界面。所以虽然属于盲注,但是并不能根据返回页面来进行判断。
这时可以用sleep()函数,根据页面返回时间来判断语句是否闭合。
靶场复现
如sleep(5),若页面返回有明显延迟5秒左右,就可以判断sleep()语句生效
语句闭合后,结合if()函数,获取数据库信息
if()语句用法:
if(a,b,c)
如果满足条件a,就执行b,否则执行c。
此时可以在条件a处输入布尔盲注的语句,进行注入。
如获取数据库名长度
评论