當前位置:
首頁 > 新聞 > SQL注入之騷姿勢小記

SQL注入之騷姿勢小記

寫在前面


小記一下CTF那些日子和DROPS隊友學到的SQL注入的騷姿勢。


By 010


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



總結


CTF中的SQL注入就是一個bypass與waf的鬥爭歷程。一個的常用函數,一個的常用套路,經過多個之間巧妙的組合,總會出來bypass的更好更優美的姿勢。


*本文作者:010,轉載請註明來自FreeBuf.COM



喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 FreeBuf 的精彩文章:

TAG:FreeBuf |

您可能感興趣

SQL注入漏洞
Web安全基礎之SQL注入式攻擊
SQL注入最易懂系列教程
注入系列——DLL注入
輕鬆理解什麼是 SQL 注入
HTC VIVE 攜手小松美羽,為 VR 虛擬實境注入新能量
新型滲透手法:利用XSS繞過WAF進行SQL注入
HTC VIVE 攜手小松美羽,將共同創作為 VR 虛擬實境注入新的能量
SYLCOM將精緻生活理念注入家居光影環境中-有榮中國!
常見的 CSRF、XSS、sql注入、DDOS流量攻擊
全局SQL注入防禦代碼
PORTER x TOGA PULLA最新系列!注入年輕新創意!
Bypass 護衛神SQL注入防禦
SQL注入與XSS跨站腳本的基本原理
業績逆勢而上,OPPO注入年輕元素收穫市場好評
雲安全風險(一):Azure CSV注入漏洞
利用CSS注入(無iFrames)竊取CSRF令牌
Switch注入VR功能,任天堂的遊戲策略重心要變?
我該如何向非技術人解釋SQL注入?
SQL注入手工檢測及利用常規攻略