网络安全从入门到精通(第五章-4)盲注

			注入全方位之盲注
本文内容:
			~盲注介绍
			~盲注需要掌握的几个函数
			~延时注入(时间注入)做法
			~我的理解
每日一句:
			谷歌和百度是我们最好的老师

一、盲注介绍

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(条件,成立返回,不成立返回)
发布了24 篇原创文章 · 获赞 3 · 访问量 1743

猜你喜欢

转载自blog.csdn.net/weixin_43970718/article/details/104114510