網絡安全從入門到精通(第五章-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(條件,成立返回,不成立返回)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章