Αυτό το επίπεδο έχει αρκετά κοινά με τα προηγούμενα αλλά παραμένει ένα ενδιαφέρον μέσο εκμάθησης ασφάλειας για το λειτουργικό σύστημα Linux. Να θυμάστε, το πιο σημαντικό είναι να δοκιμάζετε μόνοι σας κάθε επίπεδο προτού μελετήσετε άλλες λύσεις όπως οι δικές μας. Παρακάτω είναι τα αντίστοιχα άρθρα μας για τα προηγούμενα επίπεδα, και επίσης βλέπετε μία αναπαράσταση του μυθικού τέρατος της Παλαιάς Διαθήκης, Λεβιάθαν, από όπου πήρε το όνομα του το παιχνίδι.
Όπως και με τα προηγούμενα επίπεδα, έτσι και εδώ ξεκινάμε χρησιμοποιώντας το κωδικό πρόσβασης που αποκτήσαμε στο προηγούμενο επίπεδο για να συνδεθούμε μέσω SSH στο πέμπτο επίπεδο του παιχνιδιού. Βλέπετε παρακάτω το τερματικό μετά τη σύνδεση μας σε αυτό το επίπεδο.
Όπως έχουμε συνηθίσει μέχρι τώρα, στο φάκελο του χρήστη μας βλέπουμε ένα πρόγραμμα με όνομα «leviathan5» που έχει κόκκινη υπογράμμιση καθώς έχει το «s» (setuid) στα δικαιώματα του. Έτσι μπορεί να έχει πρόσβαση στο χρήστη leviathan6 (το επόμενο επίπεδο) αν και εκτελείται από το δικό μας χρήστη, το χρήστη leviathan5.
Εάν εκτελέσουμε αυτό το πρόγραμμα θα δούμε ότι μας τυπώνει ένα μήνυμα σφάλματος στην οθόνη λέγοντας ότι δε μπορεί να εντοπίσει το αρχείο «/tmp/file.log» και σταματάει την εκτέλεση.
Το πιο απλό που μπορούμε να δοκιμάσουμε είναι να δημιουργήσουμε αυτό το αρχείο που λείπει και έπειτα να εκτελέσουμε και πάλι το πρόγραμμα «leviathan5». Αυτό και κάνουμε στη συνέχεια χρησιμοποιώντας την εντολή συστήματος «touch». Εδώ όμως βλέπουμε κάτι πολύ περίεργο. Μετά την εκτέλεση του προγράμματος «leviathan5» το αρχείο «/tmp/file.log» που δημιουργήσαμε δεν υπάρχει πια εάν προσπαθήσουμε να διαβάσουμε τα περιεχόμενα του με την εντολή συστήματος «cat».
Για να κατανοήσουμε καλύτερα τι συμβαίνει θα χρησιμοποιήσουμε την εντολή «ltrace» που είχαμε δει και στο παρελθόν. Η εντολή «ltrace» (library trace, εντοπισμός βιβλιοθηκών) θα μας δείξει όλες τις κλήσεις βιβλιοθηκών που κάνει το πρόγραμμα «leviathan5». Πριν από αυτό όμως θέλουμε να δημιουργήσουμε ξανά το αρχείο «/tmp/file.log» που διεγράφη. Άρα θα εκτελέσουμε το συνδυασμό εντολών «touch /tmp/file.log && ltrace ./leviathan5». Το «&&» μεταφράζεται ως «ΚΑΙ». Με απλά λόγια λέμε στη γραμμή εντολών να δημιουργήσει το αρχείο «/tmp/file.log» και εάν αυτό πετύχει να εκτελέσει την εντολή «ltrace ./leviathan5».
Εδώ βλέπουμε μία αρκετά ενδιαφέρουσα λειτουργία του προγράμματος «leviathan5» που εν συντομία γράφει τα εξής.
- fopen(): Άνοιγμα του αρχείου /tmp/file.log για ανάγνωση
- fgetc(): Ανάγνωση των περιεχομένων του αρχείου
- feof(): Εύρεση του τέλους των περιεχομένων του αρχείου
- fclose(): Κλείσιμο του αρχείου /tmp/file.log
- getuid(): Εντοπισμός αναγνωριστικού χρήστη
- setuid(): Αλλαγή σε χρήστη leviathan6
- unlink(): Διαγραφή του αρχείου /tmp/file.log
Άρα εμείς πρέπει κάπως να εξαπατήσουμε το πρόγραμμα «leviathan5» ώστε να νομίζει ότι διαβάζει το αρχείο «/tmp/file.log» αλλά να διαβάσει το αρχείο με το κωδικό πρόσβασης από το επόμενο επίπεδο, το αρχείο «/etc/leviathan_pass/leviathan6». Καθώς το πρόγραμμα «leviathan5» δεν ελέγχει εάν το αρχείο «/tmp/file.log» είναι πραγματικό αρχείο ή συντόμευση αρχείου, θα εκμεταλλευτούμε αυτό το κενό ασφαλείας. Με την εντολή «ln» (link, σύνδεσμος) θα δημιουργήσουμε μία συντόμευση με όνομα «/tmp/file.log» που θα οδηγεί στο αρχείο «/etc/leviathan_pass/leviathan6». Αυτό το κάνουμε με την εντολή που βλέπετε παρακάτω.
Άρα τώρα θα εκτελέσουμε ξανά το πρόγραμμα «leviathan5» το οποίο θα βρει το αρχείο «/tmp/file.log», αλλά όταν θα το ανοίξει για να το διαβάσει θα διαβάζει το αρχείο «/etc/leviathan_pass/leviathan6» που περιέχει το κωδικό που αναζητούμε. Το βλέπετε αυτό στη πράξη παρακάτω.
Και κάπως έτσι ολοκληρώσαμε και αυτό το επίπεδο και πλέον μπορούμε να προχωρήσουμε στο έκτο επίπεδο με το κωδικό πρόσβασης που μόλις ανακαλύψαμε.
Leviathan
#Πολεμικά #Παίγνια #OTW #Λεβιάθαν