SQL注入之騷姿勢小記 & 替換 繞過
https://mp.weixin.qq.com/s/ORsciwsBGQJhFdKqceprSw
1、IN之騷
這個我也偶然發現的,也不知前輩們有沒有早已總結好的套路了。w3school上對in操作符的介紹:
http://www.w3school.com.cn/sql/sql_in.asp
對它的描述:IN操作符允許我們在WHERE子句中規定多個值。也就說可以讓我們依照一或數個不連續(discrete)的值的限制之內抓出資料庫中的值。
舉個例子:
那它是否可用於在過濾等號和過濾like的sql注入情況下呢?
簡單句式舉例:
看來是穩穩的可以的,再組合其他注入句式,豈不有了更不錯的注入姿勢。
那對in的可多個值的特性有沒有什麼好的用法呢?一臉懵逼我的想到千倍爆破一句話木馬的姿勢,在注入get不到欄位時候用它爆破一下欄位也可以很大提高效率呀(好吧,貌似我異想天開了。)。這個特性我先記在小本本上了,以後說不定碰到合適的用處。
2、BETWEEN之騷
同樣也是偶然發現,不過between+and的中and讓人感覺挺雞肋的。在w3chool上對between操作符的介紹:傳送門
對它的描述:BETWEEN操作符在WHERE子句中使用,作用是選取介於兩個值之間的資料範圍。也就說讓我們可以運用一個範圍(range)內抓出資料庫中的值。
舉個例子:
那它是否也可用於在過濾等號和過濾like的sql注入情況下呢?
看圖:
看到了什麼?納尼?還怕單引號被過濾?再看個:
還穩穩的支援十六進位制繞過姿勢。
這個姿勢下換個語句:selectpassword from users where password between ‘a’ and’d’,再配合個指令碼,這樣豈不是能夠直接跑password了?不就又get到一個盲注入姿勢?還是那句話,由於and的限制,用起來就很雞肋。
3、ORDERBY之騷
這個是利用orderby的排序的姿勢進行盲注。利用條件就是要有對應注入出資料同一行的其他欄位的回顯(例如:想注入出password,web端要有username或者id或者……的回顯)。
簡單示例,假如要通過注入得到abcde使用者密碼,web頁面有個username回顯,那麼就可以嘗試這個姿勢:
通過orderby3對查詢到的第三個欄位password進行排序,改變select的第三欄位位置的內容,如:aa時候web頁面顯示username為test,ab時候還是顯示為test,ac時候變成了abcde,就證明password前兩個字元為ab,然後依次再往後猜測……
這個姿勢再結合個指令碼豈不美滋滋。
4、列名構造之騷
注入中有時候會遇到列名被waf的套路,萬里之行只差出資料了,尷尬不已。在這時候,嘗試自行構造一個列名也是很不錯的選擇。
從它:
到它:
不就新構出了列名?
再對它做個別名然後就可以不用列名注入出資料了:
5、臨時變數之騷
臨時變數是什麼想必大家都知道,這個姿勢呢~需要臨時變數結合into語法來進行利用,看個簡單例子:
用into對臨時變數@a賦值,再去查詢@a是可以得到賦值內容的。
注入的時候怎麼用呢?
看起來很好利用的樣子,其實放到web網站上就很雞肋了。同一注入點先web請求進行into的臨時變數賦值,再web請求進行臨時變數查詢時候,會發現它是行不通的。在第一個web連線結束時候,臨時變數釋放掉了,第二次web請求查詢是找不到不到它的。
還有個實用的小利用:
想到了什麼?是不是可以用來orderby進行表的列數判斷?
這樣一來,能用它的情況現有三種場景:一個就是存在堆疊注入時候,另一個就是同web頁面兩個注入漏洞時候,再一個就是當orderby被waf後用來判斷欄位數目時候。
6、運算子之騷
話說sql也是世界上最好的語言……在運算子上的弱型別不僅僅是php的專利。
舉個例子:
反正你鍵盤上數學運算子都有這個特性。
用常用的^舉例下sql注入時候的姿勢及原因,先看下錶的結構:
看好喲,username和password是varchar型。
下面用的查詢語句是這樣的:select* from users where username = ‘一個字串’,然而在where子句後面再加上運算子,再看產生了什麼:
第一個給username=’’^1,’’^1的結果是數字1,相當於username=1,什麼都沒查詢出來,還丟出來5個警告。
第二個給username=’’^0,’’^0的結果是數字0,相當於username=0,然後出來了表中所有資料。
下面向資料庫插入第五條資料,username為1defgh:
再用剛才的語句進行查詢:
再插入個username為ef1ghi的欄位,進行查詢:
說明了什麼?在應該傳入字串型的地方傳入數字型引數後,select查詢時進行了型別轉換:資料庫中該欄位首字母非數字的都被傳入0的時候查詢出來,該欄位首字母是1的會被傳入1的時候查詢出來。
理解了上面所說那就應該理解這個注入姿勢了:
7、大/小於號之騷
這個估計大多數都遇到過過,舉個例子:
這樣估計都明白了,一個可以放在盲注語句中盲打的套路,在過濾嚴格無法盲注的情況下,同樣可以放在where子句後面進行爆破: