sql注入的學習總結(僅get)

2021-09-05 03:52:01 字數 3388 閱讀 9064

關於sql注入(僅get)的一些方法總結
這是萌新第一次寫部落格,難免有些差錯,望各位大佬們指點和矯正233

終於辛苦肝完了sqli-labs(27~28左右還是有點不太清楚,為什麼我的%a0就不可以啊啊啊啊啊)

好了,進入正題,接下來分享一下我的個人經驗(僅僅涉及get形式且不涉及過濾)

假如我們現在正在做sqli-labs的題(get形式),那麼該如何判斷傳輸過去的id是怎麼處理的呢?

第一節
分享一下我的思路,首先我會讓 id=1 and 1=8(使條件不成立即可),觀察一下反饋,如果介面沒有報錯或者成功顯示相關資訊,那麼說明不是數字型注入(即條件成立)。(原理的話不太清楚,我是這樣理解的,如果為』 '型,或者" "型的話,那麼將我們輸入的值放到裡面就是 』 1 and 1=8 』 或 " 1 and 1=8 ",那麼就相當於乙個字串,所以id僅僅會取開頭的1,感覺類似於字串轉換為數值,當然以上僅僅是我的猜測,還不確定。求大佬解釋 )

當然如果不成功了,(即沒有正常顯示資訊),就及有可能是數字型注入,但也不要立馬下判斷,因為有可能是 ( )型 或者 (( ))型,這個時候就要用到注釋符了, 此時輸入 id=1 and 1=1(使條件成立)–+,觀察一下變化,如果是沒有括號的型別的話那麼就直接會成功顯示資訊,即id=1 and 1=1成立(得出sql注入的型別和方式),但是如果不成功的話,就可能是加了括號的型別,假設此處是乙個括號的型別,那麼在sql語句中則為

id=( 1 and 1=1 --+)
可以看到因為注釋掉了乙個括號導致了不匹配(其實在知道了為數字型後就不用在後面加 and 1=1,這是我的習慣qaq)。那麼不急,這個時候我們在1的後面加上乙個 ) 試試。那麼此處為

id=(1) and 1=1 --+)
可以看到條件匹配,會有相應的資訊出來。也就得到了注入的型別與方法了。

當然如果是 (( ))型的那麼此處還是會報錯,因為

id=((1) and 1=1--+))
此時因為有兩個括號,還是不匹配,那麼接下來再一次往1後面再加乙個)

id=((1)) and 1=1
於是又一次成功得到了其注入型別與方法。

以上前提都是在 id=1 and 1=8 不成功顯示資訊的情況下,如果成功顯示了相關資訊那麼就要考慮到是符號型注入了

第二節
既然成功顯示出了資訊,那我們就來判斷他是那種字元型注入,首先從 』 『型分析(我的習慣),還是令條件不成立 ,只不過換成了 id= 1』 and 『a』='c

如果他是屬於 』 『型或者多加了括號型的那麼就不會顯示資訊(注意:報錯與不顯示資訊的區別,報錯是因為語法錯誤,不顯示資訊是因為條件不成立但語法正確。除非是關閉了報錯資訊的題兩者才看起來區別不大 )

假如這裡是』 '型的,那麼就不會顯示資訊,即

id= '1' and 'a'='c'//加了括號型別的也成立
可以看到條件不成立(語法正確,不會報錯),沒有任何資訊顯示。當然如果是" "型的就會顯示出資訊,因為

id=" 1' and 'a'='c "//成立
因為外面的" " 是配對的,這個時候我們輸入的 1』 and 『a』=『c 整體就被當做字串了。因為不會涉及到外面的雙引號 " 配對,於是又一次型別轉換,再次取1,就有了回顯。

接下來繼續對 id=1』 and 『a』=『c 不顯示資訊分析。

此時我們確定是 』 』 型的,接下來我們讓條件成立,即id=1』 and 『a』='a ,試一試,如果單單只是 』 』 型的話就成立。

id='1' and 'a'='a'//成立,加括號也成立。
可以看到成立,於是就判斷是那種 』 『型的,令id=1』 and 『a』=『a』 --+

如果是單純的 』 』 型的 ,那麼直接成立,即

id='1' and 'a'='a'--+'//得到其注入型別
當然如果是加了括號型別的就會報錯(無論是幾個括號型別的)

id=('1' and 'a'='a'--+') 或者  id=(('1' and 'a'='a'--+'))  //兩者都不成立
於是就又進入了上方的逐個新增括號的情節。。

id=('1') and 'a'='a'--+')    或者  id=(('1')) and 'a'='a'--+'))   //逐個新增括號使其相等判斷出其型別
好了以上都是基於 第二節的id=1』 and 『a』='c 沒有回顯的情況下,若是成功顯示那麼就要考慮 " " 型的情況了。情況與上方的步驟類似。就不一一舉例了。

以上舉例均為有報錯資訊,回顯的情況下,還有許多情況都需要一一嘗試,畢竟熟能生巧。接下來拿一道題來舉例。

接下來拿62題舉例(注意:本題要求我們將它盲注出來,在此我們只將判斷他的型別)

首先還是老話:

http://localhost/master/less-62/?id=1 and 1=8//判斷是否為是數字型
發現

http://localhost/master/less-62/?id=1' and 'a'='c  //判斷是否為 ' ' 型
在次發現

http://localhost/master/less-62/?id=1' and 'a'='a  //判斷條件為真能否成功
然後。。。。

http://localhost/master/less-62/?id=1' and 'a'='a' --+ //用注釋符判斷是那種型別
結果。。。。。。。。

http://localhost/master/less-62/?id=1')  and 'a'='a' --+ //判斷是否是乙個括號的型別
然後。。。

以上是我對sql注入的一些見解,如果有什麼不對的話請各位大佬指教。畢竟學無止境啊!!

共勉!(第一次寫不會排版見諒!)

sql注入總結學習

按http提交方式分 按注入方式分 盲注union注入 boolean注入 cookie注入 堆疊查詢注入 base64注入 注釋編碼問題 mysql 5.0以上和mysql 5.0以下版本的區別 繞過等價函式繞過 http引數汙染 緩衝區溢位繞過 基於floor,updatexml 有長度限制,最...

SQL注入 字元型注入(GET)

實驗準備 皮卡丘靶場 sql injection 數值型注入 get 實驗步驟 當輸入乙個資料庫裡存在的使用者名稱時候,會出現相關郵箱和id 當輸入乙個不存在的字串時,沒有任何資訊 檢視其url,發現請求實在url中提交的,是乙個get請求 猜想資料庫查詢語句 select id,email fro...

SQL注入學習總結 三 SQL注入的思路總結

ctf中的sql注入的思路總結 1.拿到題目之後一般是乙個登陸框 大概率盲注或者是報錯,寫指令碼跑 嘗試輸入使用者名稱 admin 和密碼 隨意 檢視其返回結果這裡一般又分為兩種 有返回是密碼錯誤還是使用者名稱錯誤 只是單一的返回登陸失敗 對於第一種情況就可以直接嘗試在username之後輸入pay...