❶ mysql UDF提權踩坑經驗分享
UDF許可權提升在網路安全領域已非新概念,但在最近的實戰演練中,我遇到了一些之前未留意的挑戰,現分享這些經驗。
首先,版本問題至關重要。盡管許多人文章中提到MySQL 5.1,但如今這個版本的用戶非常稀少。因此,本文主要針對5.1以上的MySQL版本討論。
MySQL通常從安裝目錄下的lib/plugin導入UDF,這個路徑默認不存在,因此需要許可權創建。UDF.dll文件在SQLMap工具中已內置,但需注意版本對應,因為32位與64位指的是MySQL的體系結構,而非操作系統。錯誤選擇可能導致導入失敗,通過命令`mysql -V`可以檢查你的資料庫位數。
比如,我所使用的資料庫是32位,所以導入時務必選擇對應32位的DLL。無法直接上傳或復制文件時,可以採用hex(load_file('udf路徑'))將文件轉換為16進制數據,然後通過`select 0x16進制數據 into mp file '絕對路徑'`寫入指定目錄。
在SQLMap的udf.dll中,執行命令的函數是`sys_eval`。導入DLL文件中的函數步驟如下:
create function sys_eval returns string soname 'udf文件名'
執行這條命令後,你就能成功利用UDF進行許可權提升操作了。
❷ linux udf上傳不了怎麼提權
Linux操作系統自從誕生後,其高效的處理能力和卓越的穩定性受到廣大用戶的親睞,特別是伺服器市場,Linux佔有很大的份額。俗話說:樹大招風。Linux在伺服器領域的廣泛應用使得Linux的安全也受到了前所未有的挑戰。針對Linux的滲透與攻擊手段也越來越多,滲透Linux最常見的手段就是MySQL udf提權。
眾所周知,MySQL是一款免費的、開源的資料庫伺服器軟體。其安全性也十分高,因此很多Linux廠商都將其內建在操作系統,特別是一些livecd或者liveDVD。由於MySQL在Linux上的廣泛應用,使得MySQL也成為安全界重點研究的對象,udf是MySQL的一個共享庫,通過udf創建能夠執行系統命令的函數sys_exec、sys_eval,使得入侵者能夠獲得一般情況下無法獲得的shell執行許可權。這對於伺服器來說是十分危險的。那麼入侵者究竟是怎樣獲得這個許可權的呢?換句話說是如何安裝這個函數的呢?下面我們可以演示一下
操作系統:backtrack5 r2
平台:Apache+MySQL+PHP
安裝這幾個函數,必須用到lib_mysqludf_sys.so(windows是對應的dll文件),為方便大家,我就直接作為附件上傳。lib_mysqludf_sys_0.rar下載之後,你可以選擇通過源代碼建構so文件,也可以直接復制so文件夾下的文件。
首先,開啟bt5上的Apache服務和MySQL服務,鍵入"/etc/init.d/apache2 restart"開啟Apache服務,MySQL服務可以通過開始菜單來啟動,如下圖所示:
其實,Apache也可以通過菜單啟動,上圖中的httpd的子菜單就可以啟動,我比較習慣從命令行啟動而已。
我們可以訪問127.0.0.1來查看Apache是否啟動成功,如下圖:
沒有問題,啟動成功
然後,打開終端,鍵入"mysql -uroot -ptoor"命令連接資料庫(注意,-u和-p參數後都不要帶空格),如果連接成功,將會出現mysql的提示符
緊接著,上傳lib_mysqludf_sys.so到/usr/lib/mysql/plugin,然後鍵入如下命令:
create function sys_eval returns string soname "lib_mysqludf_sys.so" (創建函數)
創建完成之後就可以通過select sys_eval("命令")執行,如下圖
執行ls命令後的結果
看到這里,你也許會說,不過就是執行了一個ls命令嗎?這有什麼大不了呢?的確,一個ls命令確實沒什麼大不了。但是這使入侵者獲得了一個執行shell的許可權,這種許可權可以執行任何可執行的文件,也就是說通過它可以為Linux安裝後門如使用nc等,而這無異於將伺服器拱手讓給他人。一般說來,伺服器會將PHP的sys_exec等函數禁用,但是udf方式繞過了這種限制,輕易獲得了shell。
說完了攻,我們來說說防。可以通過升級MySQL的版本或者禁用udf功能來實現針對udf攻擊的防禦。