注入全方位之盲注
本文内容:
~盲注介绍
~盲注需要掌握的几个函数
~延时注入(时间注入)做法
~我的理解
每日一句:
谷歌和百度是我们最好的老师
一、盲注介绍
1,注入攻击的本质:
把用户输入的数据当作代码去执行
2,条件:
~用户可以控制输入
~原本程序要执行的代码,拼接了用户输入的内容,然后执行
3,定义:
盲注所对应的就是显错注入,显错注入我们之前讲过,但是很多时候,
web服务器关闭了错误回显,这时候就没有办法实行sql注入了吗?
非也!
盲注就是在服务器没有错误回显的时候完成注入攻击,由于没有错误回显,
对于攻击者来说缺少了非常重要的“调试信息”
4,分类:
~布尔盲注[true,false]
根据注入信息返回true和false,也就没有了之前的报错信息
~时间盲注
界面返回值只有一种true,无论输入任何值 返回情况都会按正常的来处理。
加入特定的时间函数,通过查看web页面返回的时间差来判断注入的语句是否正常
二、盲注需要掌握的几个函数
1,length() 返回字符串的长度
应用:select length(database()); //获取当前数据库名的长度
应该:url id=1 and length(database())=12 //判断当前数据库名的长度是否是12位
2,substr() 截取字符串
用法:substr(操作的字符串,第几位开始,分割几位)
应用:select substr(database(),1,1) //截取当前数据库名的第一位
3,ascii() 返回字符的ascii码,在这的目的是将字符变成数字
用法:select ascii('n') //返回110,这是n的ascii编码数
应用:where id=1 and ascii(substr(database(),1,1))>120
//判断当前数据库名的第一个字符的ascii码是否大于120
//利用二分法,很快就可以判断出当前数据库名的第一个字符是什么
补充:手工很累,可以利用burp的爆破功能,很快就可以爆出当前当前数据库的名称
这就是盲注的原理,后边基本都一样
sqlmap跑盲注如果没跑出来,可能是等级的问题,提高测试等级试试:
sqlmap -u "url" --level 3
如果知道格式,可以手动帮助闭合,
sqlmap -u "url" " //这个额外的 " 出错可以换成url编码试试(%22)
直接补充 " 貌似会因为无法闭合而造成问题,应该这样:
如sqlmap -u url%22 或者 sqlmap -u "url"%22
额外提一句,如何清理sqlmap的缓存,--flush-session
三、延时注入(时间注入)做法
0,前言:
有的页面,输入and 1=1正常,输入and 1=2也正常。这种情况下是不是没有注入了呢,可能没有,
也可能存在延时注入!
补充:
1,注释问题:
锚点,即锚链接,超链接的一种。做sql注入要避免锚点带来的影响。
建议一般注释的时候,避免# 改为%23
或者-- SuiBian,这的“-- ”是注释的意思,但是空格往往被忽略,所以在空格后边随便补充点东西
反正会被注释掉,所以加什么都行
2,函数:
sleep(n) //n为秒数,
应用:id=1 and sleep(10) -- suibian //如果页面停止10秒,在正常返回,即存在延时注入
提示:不要sleep(几千,几万)有风险!
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')
//接下来就正常操作
补充:这种延时注入是最不愿意干的,关于注入,能简单就不要用麻烦的
四、我的理解:
显错注入与盲注是两大类。
之前的post与get与head都是显错注入的一种,区别就是注入地方不同或者传参方式不同。
本质上是,利用服务器的回显(输出点),不断测试。
而盲注则相当于显注麻烦了一些。
本期关键字:
显错注入:关闭回显
布尔型: true false
函数:
substr(字符串,第几位开始,取几个字符)
利用burp的爆破加上substr()函数 爆出数据库
ascill码的含义
if(条件,成立返回,不成立返回)