手工sql注入&&繞過waf &&一個實例分析
手工sql注入&&繞過waf &&一個實例分析
來自專欄網安實驗室7 人贊了文章
原創: K 合天智匯
這篇文章,將教大家基本的手工sql注入和繞過waf的知識;分享一個實例,為了效果建議讀者自己去搭建環境,因為真實環境都不怎麼理想。
1. sql注入的基礎2. sql注入繞過waf3. sql注入一個繞過實例手工sql注入的基礎基礎注入,盲注注入(時間和bool),報錯注入,聯合注入(union)
推薦sql-labs資源這個練習平臺,推薦《mysql注入天書pdf》1.base(基礎的語句注入)我們利用該表可以進行一次完整的注入。以下為一般的流程。1)猜資料庫2)猜某庫的數據表3)猜某表的所有列
4)獲取某列的內容2.union注入union注入和基礎的注入相差不大,只需將前面的數據置0,即沒有那個指定欄位即可;當然先要確定欄位,下面的文章有分析3. 時間注入主要用到一些截斷字元對資料庫的字元進行判斷1)先試資料庫的長度,當數字為6時發生了延時,說明資料庫名共五個字元。
2)開始猜資料庫的字(當發生延時,說明當前資料庫第一個字母為m):3)其他的數據只需修改查詢語句即可
4. bool注入是根據回顯,對的查詢是一種回顯,錯的查詢又是一種回顯也是字元截斷函數來操作的if(length(database())>8,1,sleep)其他的不多說了5. 報錯注入
是通過報錯函數來進行操作的https://www.cnblogs.com/wocalieshenmegui/p/5917967.html 十種報錯注入作者常嘗試的是這三個報錯函數updatexml,exp,floorsql注入繞過wafok,這是本篇的重點作者就不填寫那些網上普遍有的,給出幾個記得到並且常用的,但是有些簡單的還是要簡單試下1. 大小寫混寫2. 編碼試下 作者常用url編碼;拿到資料庫名和表名常用16進位替換他們的名字3. 替換
and &&or ||相同函數的替換(這個先要過前面的引號閉合,字元過濾;前面的如果過不了,一般作者都考慮不到這,真要用到時才換)4. 注釋繞過1)內聯/*!50000*/,一般是被殺了的2)/*!50000union/*!50000/*!(select*/~1,2,3) (過安全狗寫法,親測可用,下面實際操作我們將這樣操作)3)句末注釋://, -- , /**/, #, --+,-- -, ;--a作者常用 -- -,屢試不爽(一般+是被過濾了的)實際運用手工操作一波,我的測試過程:
單引號走起這種情況gpc一般是打開了雙引號,同樣如此:ok,其實我們首先應該確定是字元型參數還是數字型當id=2
id=1+1這裡+是被過濾了的,所以我們用-來做個運算一切正常
ok,說明是數字型的參數,那麼就不用引號閉合,可以進行接下來的注入(這裡給大家補充一點小知識:cms審計時,這種id之類的都是inval函數處理的;其他的cms地方sql注入漏洞很有一些是因為數字型參數不需要引號閉合進行操作的)如果是字元型的怎麼辦,字元型的gpc情況確實不好辦,作者遇到的基本是編碼繞過:這裡的編碼是gbk的編碼,sprint函數這類的編碼漏洞繞過;編碼漏洞情況同樣適合xss漏洞,都是繞過waf。這裡,作者是先進行常規注入,id=2 order by 2id=2 order by 1 正常 說明只能顯示一列數據了OK,我們進行union測試發現了什麼,union不見了不急,我們有姿勢雙寫union(作者還真看到過只過濾一次關鍵詞的代碼)嗯,看來是過濾那個單詞大小寫(雖然過時了,現在匹配函數都直接大小通殺,不妨礙隨手試下)看到UNIon被ban了OK,不要著急,我們試下其他的方法用過狗方法,這裡就這樣過了(普通內聯試過無法)但美中不足的是網站的資料庫系統配置出了問題,出現下面這個錯誤作者這樣嘗試不指定庫也是查找當前庫;再嘗試用limit0,1限制,效果也是如此Illegal mix of collations for operation UNION遇到了這個問題,是資料庫的編碼不一樣原因參考:https://www.cnblogs.com/google4y/p/3687901.htmlok,我們繼續,作者直接or來取資料庫被ban了|| 代替orand呢(這比較有意思了,也是經常遇到了情況,waf特定情況才ban字元串,繞過本來就是經驗和猜)我們看到,沒有語法錯誤,是正確的,那我們取下資料庫呢按照mysql的語法,作者原先以為沒有錯(其實是錯的語法)本地測試了下錯誤,再多語句,分號試了下,是對的想當然的給網址來了下分號(sqlmap中根據資料庫的不同也有多語句測試)當然是錯誤的時間注入嘛,測試成功(突破口哦)作者一開始這樣測試嗯,忘記單引號被過濾用mysql的其他函數來解決附上測試代碼(sql時間盲注的代碼除了sql的語句不同,其他的類似;bool盲注,就是修改返回判斷條件,if 「aaa」 in res.content:,bool就沒有去測試了,有興趣自己試一下吧)報錯注入試下:這麼多報錯函數,就沒有一一去測試總結本篇文章較基礎,但對於作者來說,較全面了手工注入知識就這些,更高級的就是各種姿勢了大體也是這個流程,這也是作者的所有乾貨了文章僅用於普及網路安全知識,提高小夥伴的安全意識的同時介紹常見漏洞的特徵等,若讀者因此做出危害網路安全的行為後果自負,與合天智匯以及原作者無關,特此聲明!推薦閱讀: