TryHackMe - Dodge writeup
Published on by logoseq
Walkthrough
Summary:
Dodge entails skillfully navigating the intricate landscape of virtual hosts, deftly maneuvering through their intricacies. This involves the strategic adjustment of ufw port rules, meticulously fine-tuning access points, and astutely exploiting SUID permissions to unlock hidden pathways, demonstrating a mastery of the digital realm. As I delved into the intricacies of the lab, the ambient backdrop was enriched by the captivating melodies crafted by Matteo Nannini, enhancing my immersive experience with a harmonious fusion of technical exploration and musical delight.
Foothold:
In adherence to my routine procedure, I conducted a thorough Nmap scan, revealing a comprehensive snapshot of the network's configuration and presenting a concise list of the currently accessible ports:
    22/tcp  open  ssh      OpenSSH 8.2p1 Ubuntu 4ubuntu0.3
    80/tcp  open  http     Apache httpd 2.4.41
    443/tcp open  ssl/http Apache httpd 2.4.41
        Subject Alternative Name: 
        DNS:dodge.thm, www.dodge.thm, blog.dodge.thm, dev.dodge.thm, touch-me-not.dodge.thm, netops-dev.dodge.thm, ball.dodge.thm
          
        After adding all the subdomains to my system's host file, I created a simple Python script to check if each subdomain had the same issue as dodge.thm, which showed a `HTTP 403 Forbidden` error. This way, I wanted to see if all the subdomains had a similar restriction for guest users.
        https://www.dodge.thm returned me a web page but nothing interesting was there just a simple web page with some info and no links inside.
Upon visiting https://dev.dodge.thm on port 443, I encountered a PHPinfo page. However, after further exploration, no significant findings or noteworthy information were uncovered.
        Upon accessing https://netops-dev.dodge.thm, I received a 200 HTTP code. While inspecting the page's source code, I stumbled upon an intriguing discovery—an obscured upload form encapsulated within a style="display:none;". By removing the display:none; attribute, the form unveiled itself on the page.
        Furthermore, a JavaScript file named firewall10110.js was appended at the end of the document. Delving into its contents, I unearthed a reference to another page, namely firewall10110.php. Leveraging this newfound insight.
Exploitation:
I managed to manipulate the firewall to open port 21 (ftp). Subsequent re-scanning with Nmap confirmed the successful opening of port 21.
UFW Command: sudo ufw allow 21
        Seizing this opportunity, I established a connection to the FTP server via ftp dodge.thm.
        I downloaded the `.ssh/authorized_keys` file and found that there is a user: ``@thm-lamp, then I downloaded the `` because it was the onyl file with every permission on, I was not able to get any other file because the permissions.
$ ssh chmod 600 id_rsa_backup $ ssh -i id_rsa_backup challenger@dodge.thm
It worked! I logged in via ssh as user challenger@thm-lamp and read the flag.
        System Enumeration:
The initial step I took was to utilize the history command (or cat .bash_history) to inspect whether the user 'challenger' had executed any commands before logging out. Upon executing the command, I discovered that the user had accessed two files, namely `posts.php` and `setup.php` before logging out. To verify their presence on the system, I employed the 'find' command and located 'posts.php' in the directory /var/www/notes/api/.
I observed that 'setup.php' contained MySQL credential connections, although the file appeared to be empty upon inspection, while examining 'posts.php,' I noticed the presence of a variable containing a base64-encoded string. To unveil its content, I duplicated the string and decoded it using the 'base64 -d' command and found that there was ssh credentials for user cobra.
          As I encountered difficulty logging in via SSH using the provided credentials, I attempted to switch directly to the 'cobra' user from the 'challenger' user.
          
        System Exploitation:
The command sudo -l revealed that I had the capability to execute `apt` with elevated sudo permissions.
          To get root priviledges I ran: sudo /usr/bin/apt update -o APT::Update::Pre-Invoke::=/bin/sh
          
* sudo: Runs the subsequent command with elevated privileges, typically requiring the user's password or appropriate permissions. * /usr/bin/apt: Specifies the path to the apt binary, which is the package management command-line tool in Debian-based systems. * update: This is the main action being performed by apt. It updates the local package database by fetching information about available packages from the configured repositories. * -o APT::Update::Pre-Invoke::=/bin/sh: This part sets an option using the -o flag. It's configuring a pre-invoke script to be executed before the actual apt update command. In this case, it's invoking the shell (/bin/sh).