Vulnerability analysis of HFS 2.3
According to the CVE details for this vulnerability (CVE-2014-6287), the findMacroMarker
function in parserLib.pas
in Rejetto HTTP File Server (otherwise known as HFS or HttpFileServer) 2.3x (in versions prior to 2.3c) allows remote attackers to execute arbitrary programs via a %00 sequence in a search action.
Here is the vulnerable function:
function findMacroMarker(s:string; ofs:integer=1):integer;
begin result:=reMatch(s, '\{[.:]|[.:]\}|\|', 'm!', ofs) end;
The function will not handle a null byte safely, so a request to http://localhost:80/search=%00{.exec|cmd.}
will stop regex from parsing the macro, and remote code injection will happen.
Note
Details about the exploit can be found at https://www.rapid7.com/db/modules/exploit/windows/http/rejetto_hfs_exec.
Exploitation and post exploitation
Let us find the relevant exploit module via the search
command in Metasploit in order to load the exploit for the HFS 2.3 server:
We can see we have the exploit/windows/http/rejetto_hfs_exec
module matching the vulnerable target. Let's load this module using the use command and set the RHOST
option to the IP address of the target and RPORT
to 8080
. We must also configure the payload as windows/meterpreter/reverse_tcp
and set HOST
to our IP address and LPORT
to 4444
(or anything usable). Once all the options have been configured, let's see if everything is set properly by issuing the show options
command as follows:
We can see that we have everything set on our module and we are good to exploit the system using the exploit
command, as follows:
Bingo! We breached the server, and we are inside it. Let us perform some post exploitation tasks as follows:
We successfully gained access to a Windows Server 2012 box with Administrator privileges. Let us issue the getsystem command and escalate the privileges to system level. We can see in the preceding screenshot that the privileges are now changed to SYSTEM.
Let's explore more and run some basic post exploitation commands, such as getpid
and ps
, which are used to gather the list of running processes. The getpid
command is used to print the process ID in which meterpreter resides, as shown in the following screenshot:
We can see that we have the process ID 2036
, which corresponds to eIJDRPTHQ.exe
. Therefore, if an administrator kills this particular process, our meterpreter session is gone. We must escalate our access to a better process, which should evade the eyes of the administrator. The explorer.exe process is a good option. We will migrate to explorer.exe
, the main process on Windows-based distributions, as follows:
Once migrated, we can check the current process ID by issuing the getpid command as shown in the preceding screenshot. We can gather password hashes from the compromised system using the hashdump
command, which can be seen in the following screenshot:
After gathering the hashes, we can always execute a pass-the-hash attack and bypass the limitation of not having a plain text password.
Note
Refer to http://www.cvedetails.com/vendor/26/Microsoft.html for more information on various vulnerabilities in Windows based operating systems. Refer to http://www.cvedetails.com/top-50-vendors.php?year=0 for more information on vulnerabilities in the top 50 vendors in the world.