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

今天進行了MySQL手工注入實戰,分享一下本身的實戰過程和總結,這裏環境使用的是墨者學院的在線靶場。話很少說,我們直接開始。數據庫

第一步,判斷注入點函數

經過 ' 和構造 and 1=1 和 and 1=2 查看頁面是否報錯。這裏經過and 1=1 發現頁面正常。以下圖。測試

 

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

 

第二步,判斷字段數3d

經過 order by 語句,若是後面輸入的數字大於數據庫的字段數,頁面就會報錯,經過這個,我們先輸入 order by 4 發現頁面正常。以下圖。orm

 

接下來,我們輸入 order by 5,發現頁面報錯,說明數據庫中存在四個字段。以下圖blog

 

第三步,爆庫it

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

 

 

第四步,爆表table

在上一步我們已經爆出了數據庫名,接下來我們爆表名,在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 表名。就能夠直接獲得兩個帳號和密碼。第六步 解密密碼,登錄。​

相關文章
相關標籤/搜索