手工sql注入&&繞過waf &&一個實例分析

這篇文章,將教大家基本的手工sql注入和繞過waf的知識;分享一個實例,為了效果建議讀者自己去搭建環境,因為真實環境都不怎麼理想。

1. sql注入的基礎

2. sql注入繞過waf

3. sql注入一個繞過實例

手工sql注入的基礎

基礎注入,盲注注入(時間和bool),報錯注入,聯合注入(union)

推薦sql-labs資源這個練習平臺,推薦《mysql注入天書pdf》

1.base(基礎的語句注入)

我們利用該表可以進行一次完整的注入。以下為一般的流程。

1)猜數據庫


手工sql注入&&繞過waf &&一個實例分析


2)猜某庫的數據表


手工sql注入&&繞過waf &&一個實例分析


3)猜某表的所有列


手工sql注入&&繞過waf &&一個實例分析


4)獲取某列的內容


手工sql注入&&繞過waf &&一個實例分析


2.union注入

union注入和基礎的注入相差不大,只需將前面的數據置0,即沒有那個指定字段即可;當然先要確定字段,下面的文章有分析

3. 時間注入

主要用到一些截斷字符對數據庫的字符進行判斷

1)先試數據庫的長度,當數字為6時發生了延時,說明數據庫名共五個字符。


手工sql注入&&繞過waf &&一個實例分析


2)開始猜數據庫的字(當發生延時,說明當前數據庫第一個字母為m):


手工sql注入&&繞過waf &&一個實例分析


3)其他的數據只需修改查詢語句即可

4. bool注入

是根據回顯,對的查詢是一種回顯,錯的查詢又是一種回顯

也是字符截斷函數來操作的

if(length(database())>8,1,sleep)

其他的不多說了

5. 報錯注入

是通過報錯函數來進行操作的

https://www.cnblogs.com/wocalieshenmegui/p/5917967.html 十種報錯注入

作者常嘗試的是這三個報錯函數updatexml,exp,floor

手工sql注入&&繞過waf &&一個實例分析

sql注入繞過waf

ok,這是本篇的重點

作者就不填寫那些網上普遍有的,給出幾個記得到並且常用的,但是有些簡單的還是要簡單試下

1. 大小寫混寫

2. 編碼試下 作者常用url編碼;拿到數據庫名和表名常用16進制替換他們的名字

3. 替換

and &&

or ||

相同函數的替換(這個先要過前面的引號閉合,字符過濾;前面的如果過不了,一般作者都考慮不到這,真要用到時才換)

4. 註釋繞過

1)內聯/*!50000*/,一般是被殺了的

2)/*!50000union/*!50000/*!(select*/~1,2,3) (過安全狗寫法,親測可用,下面實際操作我們將這樣操作)

3)句末註釋://, -- , /**/, #, --+,-- -, ;--a

作者常用 -- -,屢試不爽(一般+是被過濾了的)

實際運用

手工操作一波,我的測試過程:

單引號走起

手工sql注入&&繞過waf &&一個實例分析

這種情況gpc一般是打開了

雙引號,同樣如此:

手工sql注入&&繞過waf &&一個實例分析

ok,其實我們首先應該確定是字符型參數還是數字型

當id=2

手工sql注入&&繞過waf &&一個實例分析

id=1+1

手工sql注入&&繞過waf &&一個實例分析

這裡+是被過濾了的,所以我們用-來做個運算

手工sql注入&&繞過waf &&一個實例分析

一切正常

ok,說明是數字型的參數,那麼就不用引號閉合,可以進行接下來的注入

(這裡給大家補充一點小知識:cms審計時,這種id之類的都是inval函數處理的;其他的cms地方sql注入漏洞很有一些是因為數字型參數不需要引號閉合進行操作的)

如果是字符型的怎麼辦,字符型的gpc情況確實不好辦,作者遇到的基本是編碼繞過:這裡的編碼是gbk的編碼,sprint函數這類的編碼漏洞繞過;編碼漏洞情況同樣適合xss漏洞,都是繞過waf。

這裡,作者是先進行常規注入,id=2 order by 2

手工sql注入&&繞過waf &&一個實例分析

id=2 order by 1 正常

手工sql注入&&繞過waf &&一個實例分析

說明只能顯示一列數據了

OK,我們進行union測試

手工sql注入&&繞過waf &&一個實例分析

發現了什麼,union不見了

不急,我們有姿勢

雙寫union(作者還真看到過只過濾一次關鍵詞的代碼)

手工sql注入&&繞過waf &&一個實例分析

嗯,看來是過濾那個單詞大小寫(雖然過時了,現在匹配函數都直接大小通殺,不妨礙隨手試下)

手工sql注入&&繞過waf &&一個實例分析

看到UNIon被ban了

OK,不要著急,我們試下其他的方法

用過狗方法,這裡就這樣過了(普通內聯試過無法)


手工sql注入&&繞過waf &&一個實例分析


手工sql注入&&繞過waf &&一個實例分析


手工sql注入&&繞過waf &&一個實例分析

手工sql注入&&繞過waf &&一個實例分析



但美中不足的是網站的數據庫系統配置出了問題,出現下面這個錯誤

作者這樣嘗試


手工sql注入&&繞過waf &&一個實例分析


不指定庫也是查找當前庫;再嘗試用limit0,1限制,效果也是如此


手工sql注入&&繞過waf &&一個實例分析


Illegal mix of collations for operation 'UNION'

遇到了這個問題,是數據庫的編碼不一樣

原因參考:

https://www.cnblogs.com/google4y/p/3687901.html

ok,我們繼續,作者直接or來取數據庫

手工sql注入&&繞過waf &&一個實例分析

被ban了

|| 代替or

and呢(這比較有意思了,也是經常遇到了情況,waf特定情況才ban字符串,繞過本來就是經驗和猜)

手工sql注入&&繞過waf &&一個實例分析

我們看到,沒有語法錯誤,是正確的,那我們取下數據庫呢

手工sql注入&&繞過waf &&一個實例分析

按照mysql的語法,作者原先以為沒有錯(其實是錯的語法)

手工sql注入&&繞過waf &&一個實例分析


本地測試了下

手工sql注入&&繞過waf &&一個實例分析

錯誤,再多語句,分號試了下,是對的

手工sql注入&&繞過waf &&一個實例分析

想當然的給網址來了下分號(sqlmap中根據數據庫的不同也有多語句測試)

手工sql注入&&繞過waf &&一個實例分析

當然是錯誤的

時間注入嘛,測試成功(突破口哦)

手工sql注入&&繞過waf &&一個實例分析

作者一開始這樣測試

手工sql注入&&繞過waf &&一個實例分析

嗯,忘記單引號被過濾

用mysql的其他函數來解決

手工sql注入&&繞過waf &&一個實例分析

附上測試代碼(sql時間盲注的代碼除了sql的語句不同,其他的類似;bool盲注,就是修改返回判斷條件,if “aaa” in res.content:,bool就沒有去測試了,有興趣自己試一下吧)


手工sql注入&&繞過waf &&一個實例分析


報錯注入試下:

手工sql注入&&繞過waf &&一個實例分析

這麼多報錯函數,就沒有一一去測試

總結

本篇文章較基礎,但對於作者來說,較全面了

手工注入知識就這些,更高級的就是各種姿勢了

大體也是這個流程,這也是作者的所有乾貨了

文章僅用於普及網絡安全知識,提高小夥伴的安全意識的同時介紹常見漏洞的特徵等,若讀者因此做出危害網絡安全的行為後果自負,與合天智匯以及原作者無關,特此聲明!

手工sql注入&&繞過waf &&一個實例分析


分享到:


相關文章: