本文内容:
- 盲注介绍
- 盲注需要掌握的函数
- 盲注的具体流程
- 延时注入(时间注入)
- 延时注入的具体流程
- 使用工具sqlmap进行盲注和延时注入
1,盲注介绍:
千篇一律要提的,注入攻击的本质,是把用户输入的数据当做代码执行。
两个关键条件:
1.用户能够控制输入。
2.原本程序要执行的代码,拼接了哟用户输入的数据。
盲注所对应的是显错注入,有很多时候,Web服务器关闭了错误回显,这时候就没有办法进行SQL注入了吗?
实际上:盲注就是在服务器没有错误回显的时候完成的注入攻击,服务器没有错误回显,对于攻击者来说缺少了非常重要的调试信息。
类型:
1.布尔盲注:
布尔盲注很明显Ture和Fales,也就是它只会根据注入信息返回Ture和False,也就没有了之前的报错信息。
2.时间盲注:界面返回一种,Ture无论输入任何值,返回情况都会按正常的来处理。加入特定的时间函数,通过查看web页面返回时间差来判断注入的语句是否正确。
2.盲注需要掌握的函数
length()函数返回字符串的长度。
举例:返回当前数据库长度:select length(database())
substr()截取字符串,语法:substr(str,start,len)
解释:
str:为字符,
start:为起始位置
len:为长度
ascii():返回字符串ASCII码[将字符变为数字]
举例:(substr(database()),1,1)>x,sleep(5),'a')
3,盲注的具体流程:
可以一个sleep()函数,打进去,我们就可以判断是否具有SQL注入了,在观看,是否有数据返回,如果没有数据返回,我们就可以使用盲注了。
1.判断数据库名字的长度:
length(database())>x
2.判断数据库名字的每个字母。
ascii(substr(database(),1,1))>x
3.依次这样判断下去,判断出库名,表名,字段名,数据内容,可以使用group_concat()或者limti n,m
解释:substr(database(),1,1)>1,的意思就是判断数据库第一个字母是否大于1
ascii(substr(database()),1,1)>1 的意思是判断数据库第一个字符的ASCII码是否大于,通过ASCII码我们就可以得到数据库的名字了。
4,延时注入:也就是时间盲注
需要掌握:if(exprl1,exprl2,exprl3)判断语句,如果第一个语句正确就执行第二个语句,如果错误,就执行第三个语句。
举例:
if(ascii(suustr(database(),1,1))>x,sleep(5),'a')
具体流程:
使用sleep判断是否存在SQL注入
将if函数打进去,判断正确,浏览器就会休眠5秒,判断错误,浏览器直接返回。然后像做布尔盲注一样,逐次判断,最后的出库名、表名、字段名、数据内容。
我们可以感受到,盲注的人工注入,很麻烦,很麻烦,所以在做盲注时,优先考虑使用工具。
5,使用sqlmap跑盲注
1.使用burpsuite抓包,存入到txt文档,
2.然后使用sqlmap -r 打开文件,开始跑,然后爆库、爆表、爆字段、爆数据。
3.爆库:
sqlmap -r /root/桌面/1.txt --dbs
4.爆表:
sqlmap -r /root/桌面/1.txt --tables -D 库名
5.爆字段:
sqlmap -r /root/桌面/1.txt --columns -T 表名 -D 库名
6.爆内容:
sqlmap -r /root/桌面/1.txt --dump -C 字段名 -T 表名 -D 库名
使用工具,我们就发现,盲注简单多了,但是我们不能太依赖,工具,关于注入的原理等知识,我们还是要了解的。
与君共勉:
失败者,
往往是热度只有五分钟的人;
成功者,
往往是坚持最后五分钟的人;