滲透學習筆記--情境篇--通過mysql的root帳號來get shell

來源:互聯網
上載者:User

標籤:sqlmap udf   getshell   sqlmap   mysql root   

情境介紹:    
     今天的情境是前一周在內網滲透的時候遇到過的,找到一個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。


1、首先我們對nmap掃描一下常見連接埠,
命令如下:nmap -A -n -T3 192.168.80.128
掃描結果如:

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/77/B5/wKiom1ZsTUnBK6BWAAB5EbJy_iw700.png" border="0" width="700" />

2、第二步主要是通過爆破工具發現了mysql的弱口令,這一步忽略了。
3、現在來講主要內容,我們獲得mysql的root帳號和密碼之後怎樣利用
1)我們先來看一下github上的sqlmap文檔(ClickMe)

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/77/B4/wKioL1ZsTU3BfB2zAACPYI0AZNg063.png" border="0" width="700" />

     我們可以看到這是一個"-d"選項,用法在For example有
     整一個的文法為:" DBMS://USER:[email protected]_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。如:

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/77/B4/wKioL1ZsTU3R2Dz3AAAy7O07SNM493.png" border="0" width="626" />

我們通過查看進程,可以看到在服務啟動的時候,mysqld已經帶上--user=root這個選項了。  
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/77/B5/wKiom1ZsTUqT8mtPAAArBz0ZrP8514.png" border="0" width="700" />

3)現在我開始根據sqlmap的選項在kali裡面對mysql伺服器進行串連。
sqlmap -d "mysql://root:[email protected]:3306/test" -f

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/77/B4/wKioL1ZsTU3jXctOAAA6_slSq4k666.png" border="0" width="700" />

上面-f參數是列印mysql伺服器的版本資訊。如
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/77/B5/wKiom1ZsTUqCsGshAABgzHcE4x4123.png" border="0" width="700" />

我們之後將-f參數更換成--os-shell參數
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/77/B5/wKiom1ZsTUqRbPDWAAA9xssY_eE655.png" border="0" width="700" />

之後sqlmap會讓我們選擇伺服器的位元,要是你不知道就猜一個,反正兩個選項,不是32位就是64位。
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/77/B4/wKioL1ZsTU2wSZLEAADuDL0ufYc067.png" border="0" width="700" />

我這裡選擇64位,然後系統就會替我們上傳對應位元的動態連結程式庫檔案,這個檔案提供system函數以便我們可以執行系統命令。,
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/77/B5/wKiom1ZsTUrjLP32AAAXNtpC26k829.png" border="0" width="700" />

當我們輸入whoami命令時候,系統會詢問我們是否返回命令的輸出。我們這裡選擇"a",代表總是返回命令的輸出。可以看到這裡可以擷取到許可權與我們運行mysql伺服器使用者權限一致。也就是說我們這裡擷取root許可權所有,比如查看/etc/passwd,nc反彈shell、添加使用者等。
ifconfig資訊:

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/77/B4/wKioL1ZsTU3S6wfoAAB1jw0cWTY421.png" border="0" width="700" />

查看/etc/passwd檔案,
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/77/B5/wKiom1ZsTUrw0Z5DAAA7X_JP7Sk469.png" border="0" width="597" />

nc反彈shell
(1)執行nc,在Mysql伺服器上2333連接埠進行監聽。

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/77/B4/wKioL1ZsTU6j8oTyAAAGIvIlF14863.png" border="0" width="498" />

(2)我們查看我們攻擊機的ip,可以看到的確是192.168.80.129。
我們使用ncat 192.168.80.128 2333 來進行串連反彈shell。

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/77/B5/wKiom1ZsTUrRvS7WAABdsz_BCw8061.png" border="0" width="700" />

(4)到這裡,我們已經將怎樣快速利用一個mysql的root帳號來擷取系統許可權的過程示範完畢。
4、局限性是什嗎?
(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運行在管理員權限的帳號上,這個時候我們將擷取到它的許可權。


5、防禦策略
(1)linux的最小許可權原則,不要給mysql資料的plugin檔案夾賦予寫入權限,即使賦予了也要限制好擁有許可權的使用者。我們可以登入資料庫之後,使用
select @@plugin_dir;
來查看plugin的目錄,如,是我在windows上擷取到的plugin_dir

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/77/B4/wKioL1ZsTU6S6OOkAAAVRJpi0Do753.png" border="0" width="433" />

(2)最好只讓root在localhost上運行,而能夠遠端存取的資料庫使用者只分配增刪改查等許可權,不要分配FILE許可權。


6、這一篇文章是根據情境模式來寫的,然後介紹工具以及利用方法。



本文出自 “且行且欣賞” 部落格,請務必保留此出處http://skytina.blog.51cto.com/6834539/1722403

滲透學習筆記--情境篇--通過mysql的root帳號來get shell

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.