***學習筆記--場景篇--經過mysql的root帳號來get shell

場景介紹:    
     今天的場景是前一週在內網***的時候遇到過的,找到一個mysql數據庫弱口令。
     帳號和密碼分別是root,也就是mysql中的dba。
     這裏其實權限很大了,首先mysql的root用戶具備文件寫權限,同時mysql5.0以上,提供一個system函數,而這個函數一般被***者用做shell的接口。
     那時在遇到這個弱口令時,我就在想怎樣快速的拿下這臺主機,經過mysql的root帳號。是否有比較快速的方法,這時候,我固然想到了sqlmap。通過查詢github上的文檔,我發現了這樣的參數。
     下面,讓咱們一塊兒來學習一下這個場景吧!


環境:
     兩臺機器,一臺是kali linux,做爲mysql服務器,開放ssh服務以及mysql服務,ip地址爲192.168.80.128。

                     另一臺是ubuntu,做爲***主機,安裝有nmap、sqlmap,ip地址爲192.168.80.129。


一、首先咱們對nmap掃描一下常見端口,
命令以下:nmap -A -n -T3 192.168.80.128
掃描結果以下圖:




二、第二步主要是經過爆破工具發現了mysql的弱口令,這一步忽略了。
三、如今來說主要內容,咱們得到mysql的root帳號和密碼以後怎樣利用
1)咱們先來看一下github上的sqlmap文檔(ClickMe)




     咱們能夠看到這是一個"-d"選項,用法在For example有
     整一個的語法爲:" DBMS://USER:PASSWORD@DBMS_IP:DBMS_PORT/DATABASE_NAME"或者是" DBMS://DATABASE_FILEPATH"。
     [1]DBMS:表明所使用的數據庫,如咱們這裏是mysql
     [2]USER:對應咱們數據庫的用戶,如咱們這裏是root
     [3]PASSWORD:對應咱們數據的密碼,如個人服務器爲3erver
     [4]DBMA_IP:數據庫服務器對應的ip地址,如我這裏爲192.168.80.128
     [5]DBMS_PORT:數據服務器所使用的端口,不能省略。默認咱們寫3306
     [6]DATABASE_NAME:你要使用的數據庫名,由於mysql通常會有test數據庫,如我這裏使用test。假如沒有test,咱們能夠本身使用create database test;建立一個
2)下面咱們開始利用,服務器上我首先以root身份運行mysql數據庫。看看會發生什麼事情。在Mysql中,以什麼身份運行數據庫,會在/etc/mysql/my.cnf這個配置文件設置。因此下面我將用戶mysqld節點中的user修改成root。以下圖:




咱們經過查看進程,能夠看到在服務啓動的時候,mysqld已經帶上--user=root這個選項了。  


3)如今我開始根據sqlmap的選項在kali裏面對mysql服務器進行鏈接。
sqlmap -d "mysql://root:3erver@192.168.80.128:3306/test" -f




上面-f參數是打印mysql服務器的版本信息。以下圖


咱們以後將-f參數更換成--os-shell參數


以後sqlmap會讓咱們選擇服務器的位數,要是你不知道就猜一個,反正兩個選項,不是32位就是64位。


我這裏選擇64位,而後系統就會替咱們上傳對應位數的動態連接庫文件,這個文件提供system函數以便咱們能夠執行系統命令。如圖,


當咱們輸入whoami命令時候,系統會詢問咱們是否返回命令的輸出。咱們這裏選擇"a",表明老是返回命令的輸出。能夠看到這裏能夠獲取到權限與咱們運行mysql服務器用戶權限一致。也就是說咱們這裏獲取root權限全部,好比查看/etc/passwd,nc反彈shell、添加用戶等。
ifconfig信息:




查看/etc/passwd文件,


nc反彈shell
(1)執行nc,在Mysql服務器上2333端口進行監聽。




(2)咱們查看咱們***機的ip,能夠看到的確是192.168.80.129。
咱們使用ncat 192.168.80.128 2333 來進行鏈接反彈shell。




(4)到這裏,咱們已經將怎樣快速利用一個mysql的root帳號來獲取系統權限的過程演示完畢。
四、侷限性是什麼?
(1)咱們這裏提到過,運行mysql的用戶須要是root帳號。由於這裏整個利用流程是這樣的
[1]sqlmap經過root的帳號和密碼鏈接上遠程的數據庫
[2]sqlmap將udf文件夾下對應系統平臺的64位或者32位的動態連接庫文件上傳到遠程數據庫的
/usr/lib/mysql/plugin/目錄下
[3]sqlmap用過已經上傳的動態連接庫文件來調用system函數來執行用戶輸入的命令。
(2)在上面提到,咱們要將動態連接庫傳到/usr/lib/mysql/plugin/目錄下,可是這個目錄只有root帳號具備寫權限。也就是說,要是運行mysqld的用戶不是root,那麼咱們便沒法經過這種方法來執行系統命令。
(3)通常windows上的mysql root帳號能執行系統命令的比較多,由於須要專門創建一個非管理員權限的用戶去運行mysql,因此有一部分系統管理員將mysql運行在管理員權限的帳號上,這個時候咱們將獲取到它的權限。


五、防護策略
(1)linux的最小權限原則,不要給mysql數據的plugin文件夾賦予寫權限,即便賦予了也要限制好擁有權限的用戶。咱們能夠登入數據庫以後,使用
select @@plugin_dir;
來查看plugin的目錄,以下圖,是我在windows上獲取到的plugin_dir




(2)最好只讓root在localhost上運行,而可以遠程訪問的數據庫用戶只分配增刪改查等權限,不要分配FILE權限。


六、這一篇文章是根據場景模式來寫的,而後介紹工具以及利用方法。
mysql

相關文章
相關標籤/搜索