Πολεμικά Παίγνια: OTW Natas #6

Σε αυτό το επίπεδο τα πράγματα γίνονται αρκετά πιο δύσκολα. Γι’αυτό είναι πολύ σημαντικό να έχουμε κατανοήσει απόλυτα όλα όσα έχουμε ήδη μάθει από τα προηγούμενα επίπεδα. Επίσης, όπως αναφέρουμε κάθε φορά είναι πολύ σημαντικό να προσπαθείτε πρώτα να λύνετε μόνοι σας αυτά τα παιχνίδια προτού μελετήσετε λύσεις όπως οι δικές μας. Με αυτά ως δεδομένα, οι λύσεις μας για όλα τα επίπεδα μέχρι αυτό το σημείο είναι οι ακόλουθες.

Πηγή: Proeducis.com
Πηγή: Proeducis.com

Συνδεόμαστε όπως πάντα με τα στοιχεία πρόσβασης που έχουμε λάβει από το προηγούμενο επίπεδο και για πρώτη φορά βλέπουμε μία φόρμα εισαγωγής δεδομένων. Η φόρμα αναγράφει «Input secret» (Εισαγωγή μυστικού κωδικού). Βλέπετε την εν λόγω σελίδα στη παρακάτω εικόνα.

Πηγή: OverTheWire.org
Πηγή: OverTheWire.org

Όπως βλέπετε, αυτή τη φορά υπάρχει και ένας σύνδεσμος που ονομάζεται «View sourcecode» (Προβολή πηγαίου κώδικα). Πατώντας αυτό το κουμπί το παιχνίδι μας δείχνει το κώδικα της σελίδας σε γλώσσα προγραμματισμού PHP. Κάτι το οποίο υπό κανονικές συνθήκες δε θα μπορούσαμε να το δούμε καθώς αυτός ο κώδικας εκτελείται στον εξυπηρετητή και το αποτέλεσμα του αποστέλλεται στο πελάτη. Ωστόσο, εφόσον έχουμε αυτή τη δυνατότητα ας το μελετήσουμε. Ο κώδικας είναι σχετικά απλός και αφορά τη φόρμα που βλέπουμε παραπάνω. Βλέπετε τον κώδικα στη συνέχει και θα τον αναλύσουμε αμέσως για το τι ακριβώς κάνει.

<?

include "includes/secret.inc";

    if(array_key_exists("submit", $_POST)) {
        if($secret == $_POST['secret']) {
        print "Access granted. The password for natas7 is <censored>";
    } else {
        print "Wrong secret";
    }
    }
?>

<form method=post>
Input secret: <input name=secret><br>
<input type=submit name=submit>
</form>

θα ξεκινήσουμε από το κάτω μέρος. Δηλαδή τη μορφοποίηση HTML για τη δημιουργία της φόρμας εισαγωγής δεδομένων. Όπως βλέπετε στο σχετικό απόσπασμα παρακάτω, δημιουργεί μία φόρμα (form) που χρησιμοποιεί τη μέθοδο επικοινωνίας POST και αποτελείται από ένα πεδίο εισαγωγής με όνομα «secret». Στη συνέχεια έχει ένα κουμπί τύπου καταχώρησης (submit) το οποίο ονομάζεται «submit». Άρα πρακτικά, αυτό που γράφει είναι πως όταν πατήσουμε το κουμπί submit, τότε το περιεχόμενο του πεδίου secret θα σταλεί στη σελίδα στην οποία βρισκόμαστε μέσω της μεθόδου POST.

<form method=post>
Input secret: <input name=secret><br>
<input type=submit name=submit>
</form>

Για να μας βοηθήσει σε αυτό το παιχνίδι, ο δημιουργός του μας δείχνει τον κώδικα PHP που επεξεργάζεται αυτό το αίτημα από τη πλευρά του εξυπηρετητή. Ας το δούμε γραμμή προς γραμμή. Αρχικά ανοίγει τις αγκύλες εισαγωγής κώδικα PHP και στη συνέχεια φορτώνει (include) τα περιεχόμενα του αρχείου includes/secret.inc. Για να το κατανοήσετε καλύτερα, στη γλώσσα προγραμματισμού PHP κάθε εντολή ολοκληρώνεται με το χαρακτήρα του ελληνικού ερωτηματικού.

<?

include "includes/secret.inc";

Στη συνέχεια, βλέπουμε μία συνθήκη ‘if’ (εάν) η οποία με απλά λόγια μπορεί να μεταφραστεί ως, εάν το κουμπί submit περιλαμβάνει δεδομένα στη μεταβλητή $_POST τότε εκτέλεσε οτιδήποτε είναι εντός από τις αγκύλες, αλλιώς προχώρησε παρακάτω. Στη γλώσσα προγραμματισμού PHP όλες οι μεταβλητές ξεκινάνε με τον χαρακτήρα του δολαρίου, άρα η $_POST είναι μία μεταβλητή που περιέχει οτιδήποτε αποστέλλεται στη σελίδα με τη μέθοδο POST.

    if(array_key_exists("submit", $_POST)) {

Μέσα σε αυτή τη συνθήκη υπάρχει μία δεύτερη συνθήκη που γράφει αν το περιεχόμενο της μεταβλητής $secret είναι ίδιο με αυτό που περιέχει το πεδίο secret που εστάλη μέσω της $_POST, τότε γράψε στην οθόνη «Access granted. The password for natas7 is «censored»» (Πρόσβαση επετράπη. Ο κωδικός για το natas7 είναι «λογοκριμένο»).

        if($secret == $_POST['secret']) {
        print "Access granted. The password for natas7 is <censored>";

Και συνεχίζει ο κώδικας με τη περίπτωση, else (αλλιώς). Εάν η παραπάνω συνθήκη δεν είναι αληθής τότε θα εκτελέσει ότι υπάρχει στο μέρος του else (αλλιώς) το οποίο πρακτικά λέει, γράψε στην οθόνη το μύνημα «Wrong secret» (λάθος μυστικός κωδικός) και στη συνέχεια κλείνει τις αγκύλες από τις συνθήκες if και το κώδικα PHP που είχαν ανοιχτεί νωρίτερα.

    } else {
        print "Wrong secret";
    }
    }
?>

Άρα τώρα γνωρίζουμε ότι ο κωδικός είναι μέσα στη μεταβλητή $secret αλλά δε γνωρίζουμε από που παίρνει τη τιμή της αυτή η μεταβλητή. Αν παρατηρήσουμε ξανά τον κώδικα, θα δούμε ότι το πρώτο πράγμα που κάνει είναι να φορτώνει οτιδήποτε υπάρχει στο αρχείο includes/secret.inc. Ίσως εκεί να βρίσκεται αυτό που αναζητούμε. Ας δοκιμάσουμε να δούμε τα περιεχόμενα αυτού του αρχείου μεταβαίνοντας στη σελίδα http://natas6.natas.labs.overthewire.org/includes/secret.inc θα δούμε αυτό που βλέπετε παρακάτω.

<?
$secret = "FOEIUWGHFEEUHOFUOIU";
?>

Όπως βλέπουμε, η μεταβλητή $secret ορίζεται σε αυτό το αρχείο και πλέον γνωρίζουμε το περιεχόμενο της. Άρα, αν δοκιμάσουμε αυτό το κωδικό στη σελίδα τότε θα δούμε ότι μας επιστρέφει τον κωδικό πρόσβασης για το επόμενο επίπεδο, το natas7, όπως φαίνεται και από την επόμενη εικόνα.

Πηγή: OverTheWire.org
Πηγή: OverTheWire.org

Σε αυτό το επίπεδο μάθαμε και πάλι αρκετά πράγματα. Κάναμε μία εισαγωγή στη γλώσσα προγραμματισμού PHP, είδαμε ότι αν από λάθος (ή σε αυτή τη περίπτωση επίτηδες) κάποιος δώσει τον κώδικα της σελίδας είναι πολύ πιο εύκολο να κατανοήσουμε τι κάνει και να εκμεταλλευτούμε κάποια τέτοια κενά ασφαλείας, και τέλος, είδαμε ότι αρχεία με ευαίσθητες πληροφορίες όπως κωδικούς πρόσβασης δε θα πρέπει να είναι διαθέσιμα για ανάκτηση από μη εξουσιοδοτημένους χρήστες. Ελπίζουμε να βρήκατε και εσείς αυτό το επίπεδο εξίσου χρήσιμο με εμάς.

Γράψτε τα σχόλια σας εδώ...

Εισάγετε τα παρακάτω στοιχεία ή επιλέξτε ένα εικονίδιο για να συνδεθείτε:

Λογότυπο WordPress.com

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό WordPress.com. Αποσύνδεση / Αλλαγή )

Φωτογραφία Twitter

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Twitter. Αποσύνδεση / Αλλαγή )

Φωτογραφία Facebook

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Facebook. Αποσύνδεση / Αλλαγή )

Φωτογραφία Google+

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Google+. Αποσύνδεση / Αλλαγή )

Σύνδεση με %s