SQL注入漏洞——sql盲注
當前位置:點晴教程→知識管理交流
→『 技術文檔交流 』
1.什么是盲注? 在SQL注入過程中,SQL語句執行查詢后,查詢的數據不能回顯到前端頁面中,而是需要使用一些特殊的方式來判斷,這個過程稱之為盲注 盲注分為三類: 布爾盲注 相較于顯錯注入,反應會更隱晦,比如當執行的惡意語句條件為False時(如and 1=2),頁面會變得異常,如頁面突然沒了數據,當條件為True時,頁面又會恢復正常。并不會看到像顯錯注入那樣明顯的語句回顯,這樣的注入,我們就可以規定為布爾盲注 延時(時間)盲注 不管你輸入什么,頁面都還是那個頁面,不會發生變化。這個時候就要用到延時注入的語句,通過頁面的響應時間判斷條件是否成立,如:如果條件成立則頁面10秒后在響應,條件不成立則正常響應。 報錯盲注 報錯注入就是利用了數據庫的某些機制,人為地制造錯誤條件,使得查詢結果能夠出現在錯誤信息中。報錯注入的前提就是頁面上可以沒有回顯點,但是必須有sql語句執行錯誤的信息 2.靶場案例講解 函數參考: if(條件,5,0) #條件成立 返回5 反之 返回0 sleep(5) #SQL語句延時執行5秒 substr(a,b,c) #從位置b開始,截取字符串a的c長度 left(database(),1) #left(a,b)從左側截取a的前b位 length(database())=8 #判斷數據庫database()名的長度 布爾盲注——sqli-labs第八關 輸入?id=1’之后頁面產生錯誤且沒有錯誤回顯,可以判斷為字符型注入,可以使用布爾盲注 爆數據庫名 1.判斷長度 數據庫名稱長度等于7的時候頁面錯誤,等于8的時候頁面正常,說明數據庫名稱長度為8 還可以使用“>”,“<”判斷 2.爆破數據庫名稱 輸入?id=1′ and left(database(),1)=’a’–+時頁面發生錯誤,輸入?id=1′ and left(database(),1)=’s’–+時頁面正常,說明數據庫名稱第一位為’s’。再次?id=1′ and left(database(),2)=’e’–+即可爆破第二位,依次爆破,爆破到第八位成功爆出完整數據庫名稱。 完整數據庫名稱為:’security‘ 也可以使用substr函數爆破,道理是一樣的。 延時盲注——sqli-labs第9關 第九關會發現我們不管輸入什么頁面顯示的東西都是一樣的。如果頁面一直不變這個時候我們可以使用時間注入,時間注入和布爾盲注兩種沒有多大差別只不過時間盲注多了if函數和sleep()函數。if(a,sleep(10),1)意思是如果a條件成立,那么執行sleep(10)頁面延遲10秒,如果a條件不成立,執行1,頁面不延遲。 因為有前者布爾盲注的鋪墊,基本知識點都已經提到了,所以直接開搞 輸入?id=1′ and if(1=1,sleep(5),1)–+時頁面延遲了五秒返回數據,所以是單引號字符型注入 1.判斷長度 輸入:?id=1’and if(length(database())=7,sleep(5),1)–+ 意思是如果數據庫長度為7,頁面就延時五秒響應數據,否則,就馬上返回數據。 而頁面立馬就返回了數據,說明數據庫名稱長度不等于7,而我們輸入:?id=1’and if(length(database())=8,sleep(5),1)–+頁面延時了五秒返回數據,數據庫名稱長度為:8 延時五秒 2.爆破數據庫名稱 輸入:?id=1′ and if(substr(database(),1,1)=’s’,sleep(5),1)–+(意思是:如果當前庫名從左邊第一位開始截取的一個字符是’s’,就延時5秒返回數據,否則,就馬上返回數據。),頁面延時了五秒才返回數據,說明數據庫名稱第一位是”s“. 依次猜測,當輸入:?id=1′ and if(substr(database(),1,8)=’security’,sleep(5),1)–+(意思是:如果當前庫名從左邊第一位開始截取的8個字符是’security’,就延時5秒返回數據,否則,就馬上返回數據。),頁面延時了五秒返回數據。 數據庫名稱:“security” 該文章在 2024/1/22 8:42:40 編輯過 |
關鍵字查詢
相關文章
正在查詢... |