0x00 盲注

与显错注入对应,注入时页面不会返回错误信息,如报错语句、回显点等。

盲注分为布尔盲注时间盲注两大类型

盲注常用到的函数:

if() 条件判断

length() 判断长度

substr() 字符串截取

ascii() 获取字符ascii码

sleep() 延时

0x01 布尔盲注

页面只能返回两种状态,Ture和False,如页面状态正常或不正常。

代码审计:

盲注1.png

第20行,获取了GET传参,并赋值给变量id。

第29行拼接进SQL语句中,直接执行,中间没有任何过滤,存在SQL注入。

但是在第33-50行的if语句,当存在id传参时,只会返回两种情况,并不会返回错误信息,可以看到当SQL语句错误时,else分支中返回空,所以是布尔盲注。

靶场复现

SQL语句执行正常时:

盲注2.png

SQL语句存在错误时:

img:盲注3.png

所以可以根据length()、ascii()、substr()等函数,通过页面返回情况获取我们想要的信息

如获取数据库名长度为8

img:盲注4.png

盲注5.png

获取表名第一个字符的ascii值

ascii()函数获取对应字母的ascii值

subtr()函数中间加上执行的SQL语句,截取出返回结果的指定字符

盲注6.png

0x02 时间盲注

代码审计

盲注7.png

第21行获取GET传参,第30行拼接进SQL语句中执行,中间没有做任何过滤,因此存在SQL注入。但是在第34-50行的if语句中,无论SQL语句是否出错,都返回的是相同的界面。所以虽然属于盲注,但是并不能根据返回页面来进行判断。

这时可以用sleep()函数,根据页面返回时间来判断语句是否闭合。

靶场复现

如sleep(5),若页面返回有明显延迟5秒左右,就可以判断sleep()语句生效

盲注8.png

语句闭合后,结合if()函数,获取数据库信息

if()语句用法:

if(a,b,c)

如果满足条件a,就执行b,否则执行c。

此时可以在条件a处输入布尔盲注的语句,进行注入。

如获取数据库名长度

盲注9.png