1. 程式人生 > >SQL注入之騷姿勢小記 & 替換 繞過

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子句後面進行爆破: