Οι Ιστοσελίδες συχνά δέχονται επιθέσεις που σκοπό έχουν να βλάψουν ή να ανακτήσουν δεδομένα τα οποία υπό φυσιολογικές συνθήκες δεν θα έπρεπε να μπορούν. Το Burp Suite θα μας βοηθήσει να δοκιμάζουμε τέτοιες SQL Injection επιθέσεις σε Ιστοσελίδες / Web apps.

Ένας από τους απλούστερους, αλλά και πιο διαδεδομένους τύπους επιθέσεων σε κενά ασφαλείας που τα εντοπίζουμε στις σύγχρονες εφαρμογές ιστού (Web apps) είναι το SQL injection.

Μια τυπική εφαρμογή Ιστού δεν αποθηκεύει στην πραγματικότητα καμία πληροφορία στην ίδια την εφαρμογή, αλλά επικοινωνεί με μια βάση δεδομένων όπου αποθηκεύονται οι πληροφορίες. Για παράδειγμα ο χρήστης συμπληρώνει το username και το password του και μόλις πατήσει login, αυτό αντιμετωπίζεται ως ερώτημα / αίτημα SQL το οποίο η εφαρμογή μεταβιβάζει στη βάση δεδομένων, επιστρέφοντας έτσι τα ζητούμενα δεδομένα στην εφαρμογή.

Επίθεση σε Web Application με το Burp Suite και SQL Injection

Τι είναι ένα SQL Injection;

Το SQL Injection είναι μια τεχνική που χρησιμοποιείται για την επίθεση σε εφαρμογές που χρησιμοποιούν μια βάση δεδομένων στην οποία αποστέλλοντας κακόβουλο κώδικα ο σκοπός είναι η πρόσβαση ή η τροποποίηση πληροφοριών στη βάση δεδομένων.

Υπάρχουν πολλοί λόγοι για τους οποίους υπάρχει αυτή η ευπάθεια, συμπεριλαμβανομένης της ακατάλληλης διήθησης και αποχέτευσης εισροών. Δεν θα αναλύσουμε εκτενώς τι είναι η μια SQL Injection και πως δουλεύει μιας και ήδη έχουμε αναφερθείς σε αυτό:

Σε αυτόν τον οδηγό ο στόχος μας θα είναι το Mutillidae, μια σκόπιμα ευάλωτη Web εφαρμογή που περιλαμβάνεται στο Metasploitable 2 το οποίο είναι ευάλωτη εικονική μηχανή Linux (VM). Αυτά έχουν σχεδιαστεί να είναι ευάλωτα για δοκιμές, εξάσκηση και διδασκαλία pentesting. Επομένως έχουμε

Βήμα 1: Λήψη και εγκατάσταση του Metasploitable 2 σε Virtual Machine

Το Burp Suite είναι ένα δημοφιλές εργαλείο που μπορεί να χρησιμοποιηθεί για την αυτοματοποίηση δοκιμών για ευπάθειες των Web Applications και θα το βρούμε στο Kali. Πριν φτάσουμε σε αυτό, όμως, πρέπει να δημιουργήσουμε τη μηχανή-θύμα μας. Οπότε κατεβάστε το

Advertisements

Αφού το κατεβάσετε κάντε το εγκατάσταση σε μια εικονική μηχανή χρησιμοποιώντας το VirtualBox ή VirtManager.

Αφού εγκατασταθούν τα πάντα, συνδεθείτε στο Metasploitable 2 (user: msfadmin, pass: msfadmin) και βρείτε τη διεύθυνση IP του χρησιμοποιώντας το ifconfig. Αυτό που ψάχνετε στο eth0 είναι η διεύθυνση «inet», η οποία θα είναι η διεύθυνση IP στην οποία θα επιτεθούμε.

Βήμα 2: Ρυθμίστε το Mutillidae στον περιηγητή επίθεσης

Μετά την εύρεση της διεύθυνσης IP του Metasploitable 2, ανοίξτε το Firefox στο Kali και μεταβείτε σε αυτήν την διεύθυνση IP για να συνδεθείτε με τον web server.

Κάντε κλικ στο «Mutillidae» για να εισέλθετε στην εφαρμογή ιστού, στη συνέχεια μεταβείτε στο «OWASP Top 10.» Τώρα, επιλέξτε «Injection (SQL)», έπειτα «Extract Data» και στη συνέχεια «User Info». Θα σας ανοίξει μια οθόνη σύνδεσης.

Θα σας ανοίξει μια οθόνη σύνδεσης.

Βήμα 3: Ρυθμίστε τον περιηγητή επίθεσης για το Burp Suite

Στη συνέχεια, πρέπει να ρυθμίσουμε τον Firefox ώστε να λειτουργεί το Burp Suite ως διακομιστής μεσολάβησης για να παρακολουθεί και να τροποποιεί τα αιτήματα.

Ανοίξτε «Preferences» στο Firefox, κάντε κλικ στην επιλογή «Advanced» και στην καρτέλα «Network» επιλέξτε «Settings» δίπλα στο σημείο σύνδεσης και στη συνέχεια βεβαιωθείτε ότι έχει οριστεί σε «Manual proxy configuration» για να εισαγάγετε 127.0.0.1 ως Proxy HTTP και 8080 ως Θύρα. Στη συνέχεια, επιλέξτε «Use this proxy server for all protocols», βεβαιωθείτε ότι δεν υπάρχει τίποτα που παρατίθεται στο No Proxy και στη συνέχεια κάντε κλικ στο «OK». Τώρα είμαστε έτοιμοι να ξεκινήσουμε το Burp Suite.

Use this proxy server for all protocols

Βήμα 4: Ανίχνευση του αιτήματος με το Burp Suite

Ανοίξτε την εφαρμογή Burp Suite στο Kali, ξεκινήστε ένα νέο project και στη συνέχεια μεταβείτε στην καρτέλα «Intercept » και βεβαιωθείτε ότι πατήσατε το «Intercept is on». Αυτό θα μας επιτρέψει να τροποποιήσουμε το αίτημα από την ιστοσελίδα και να εισαγάγουμε διαφορετικές τιμές για να δοκιμάσουμε το SQL injection.

Πίσω στη οθόνη σύνδεσης που είχαμε ανοίξει νωρίτερα στον Firefox, εισάγουμε ένα αυθαίρετο όνομα χρήστη και προσπαθούμε να συνδεθούμε. Αν πάτε στο Burp Suite θα δείτε το αίτημα καθώς και παραμέτρους, headers και ακόμα και hex πληροφορίες.

στο Burp Suite θα δείτε το αίτημα καθώς και παραμέτρους, headers και ακόμα και hex πληροφορίες

Μας ενδιαφέρει πρωτίστως το πεδίο username, αφού αυτό είναι αυτό που θα τροποποιήσουμε για να δοκιμάσουμε τις ευπάθειες SQL injection της βάσης δεδομένων. Κάντε κλικ στο κουμπί «Action», έπειτα «Send to Intruder». Εναλλακτικά, κάντε δεξί κλικ οπουδήποτε στην περιοχή της αίτησης και κάντε το ίδιο.

Βήμα 5: Ρύθμιση Positions και Payloads στο Burp Suite

Στη συνέχεια, μεταβείτε στην καρτέλα «Intruder» και κάντε κλικ στην επιλογή «Positions». Το Burp Suite ρυθμίζει αυτόματα τις θέσεις όπου εισάγονται Payloads όταν αποστέλλεται ένα αίτημα στον εισβολέα, αλλά επειδή ενδιαφερόμαστε μόνο για το πεδίο ονόματος χρήστη, μπορούμε να καθαρίσουμε όλες τις θέσεις πατώντας το πλήκτρο «Clear» στα δεξιά.

Επισημάνετε την τιμή που καταχωρίσατε για το όνομα χρήστη και κάντε κλικ στο κουμπί «Add». Θα χρησιμοποιήσουμε τον τύπο επίθεσης «Sniper», ο οποίος θα φορτώσει μια λίστα τιμών στο Payload και θα δοκιμάσει μία κάθε φορά.

θα φορτώσει μια λίστα τιμών στο Payload και θα δοκιμάσει μία κάθε φορά

Τώρα που η θέση μας είναι ρυθμισμένη, είμαστε έτοιμοι να διαμορφώσουμε το Payload. Τα ερωτήματα SQL δουλεύουν αλληλεπιδρώντας με δεδομένα στη βάση δεδομένων μέσω της χρήσης δηλώσεων (statements). Η εντολή SELECT χρησιμοποιείται για την ανάκτηση δεδομένων, έτσι ένα ερώτημα login θα μοιάζει με:

SELECT username, password FROM users WHERE username='myname' AND password='mypassword';

Ας δούμε την κλασική εντολή SQL injection ' or 1 = 1--. Ακολουθεί το παράδειγμα της εντολής SQL όταν εισάγεται το παραπάνω injection στο login page που είχαμε δει νωρίτερα:

SELECT username, password FROM users WHERE username='' or 1=1-- AND password='';

Το ' (single quote) μετατρέπει το πρώτο μέρος σε μια κενή συμβολοσειρά, το 1 = 1 πάντα αξιολογείται ως αληθές, οπότε το ερώτημα ονόματος χρήστη θα τρέξει τώρα ως «blank» ή «true». Οι διπλές παύλες σχολιάζουν το υπόλοιπο ερώτημα, έτσι ώστε το πεδίο κωδικού πρόσβασης να αγνοείται. Δεδομένου ότι το «blank» ή «true» είναι πάντα αληθές, και το πεδίο κωδικού πρόσβασης αγνοείται, η βάση δεδομένων θα επιστρέψει δεδομένα λογαριασμού.

Κάντε κλικ στην καρτέλα «Payloads» και μεταβείτε στην επιλογή «Payload Options» – μπορούμε να αγνοήσουμε τώρα όλες τις προεπιλεγμένες ρυθμίσεις. Εδώ μπορούμε να εισάγουμε τα Payloads μας σε μια απλή λίστα είτε προσθέτοντάς τα μία προς μία είτε φορτώνοντας μια υπάρχουσα λίστα. Το Kali έρχεται με μια ποικιλία απο wordlists, συμπεριλαμβανομένου ενός που είναι ειδικά για δοκιμή τρωτών σημείων με SQL injection.

Πατήστε «Load» και μεταβείτε στο /usr/share/wordlists/wfuzz/injection/SQL.txt.
Τώρα είμαστε έτοιμοι να ξεκινήσουμε την επίθεσή μας.

Τώρα είμαστε έτοιμοι να ξεκινήσουμε την επίθεσή μας.

Βήμα 6: Κάντε μια επίθεση με το Burp Suite

Κάντε κλικ στο κουμπί «Start attack» και θα εμφανιστεί ένα νέο παράθυρο που θα δείχνει την επίθεση σας. Εδώ μπορείτε να δείτε την πρόοδο των αιτημάτων, συν το Payload και την κατάσταση.

Να είστε υπομονετικοί καθώς αυτό μπορεί να πάρει αρκετή ώρα για να ολοκληρωθεί ανάλογα με το μέγεθος της λίστας.

θα εμφανιστεί ένα νέο παράθυρο που θα δείχνει την επίθεση σας

Μόλις ολοκληρωθεί η επίθεση, μπορείτε να δείτε τα στοιχεία οποιουδήποτε αιτήματος απλά κάνοντας κλικ σε αυτό.

Advertisements

Βήμα 7: Ανάλυση αποτελεσμάτων στο Burp Suite

Αυτό που μας ενδιαφέρει εδώ είναι η απάντηση στο αίτημα που στέλνουμε στην βάση δεδομένων.

Κάθε μεμονωμένο αίτημα που επιστράφηκε, επέστρεψε έναν κωδικό κατάστασης (status code) 200, ενώ πολλές φορές όταν ένα Payload είναι επιτυχές, θα δείτε έναν διαφορετικό κωδικό. Συνήθως ένας άλλος τρόπος για να διαπιστώσετε αν ένα ερώτημα επιτεύχθηκε είναι αν η διάρκεια της απάντησης είναι αισθητά διαφορετική από τις άλλες.

Το Burp Suite είναι χρήσιμο επειδή μπορείτε να φορτώσετε την ιστοσελίδα που επιστρέφεται για το συγκεκριμένο αίτημα (SQL Injection), πηγαίνοντας στην καρτέλα «Response» και κάνοντας κλικ στο «Render». Μπορούμε να δούμε παρακάτω ότι το SQL injection ήταν επιτυχές και τώρα έχουμε ονόματα χρηστών και κωδικούς πρόσβασης.

το SQL injection ήταν επιτυχές και τώρα έχουμε ονόματα χρηστών και κωδικούς πρόσβασης.

Εάν αυτό ήταν μια σελίδα με Control Panel ή κάτι παρόμοιο, θα μπορούσαμε να συνδεθούμε με τα στοιχεία του διαχειριστή (admin credentials) και να προκαλέσουμε χάος.

SQL injection σε πραγματικές ιστοσελίδες

Αν και το παραπάνω SQL injection είναι γνωστή επίθεση και πλέον σπάνια θα το συναντήσετε, εξακολουθεί όμως οι γενικές επιθέσεις SQL να είναι μία από τις πιο κοινές μεθόδους εκμετάλλευσης ευπαθειών σήμερα.

Ο λόγος είναι επειδή ο καθένας μπορεί απλώς να φτιάξει μια εφαρμογή Web και να την ανεβάσει στο διαδίκτυο. Ακόμη και οι επαγγελματίες προγραμματιστές λογισμικού αφιερώνουν συχνά αρκετό χρόνο για να ακολουθούν τις αρχές ασφαλούς κώδικα, οπότε δεν αποτελεί έκπληξη όταν ο πρωτάρης προγραμματιστής κάνει μια εφαρμογή που είναι ανασφαλής.

Για να γίνει πραγματικά αποτελεσματική μια επίθεση SQL injection, είναι καλύτερα να μάθετε SQL. Κατά τη διεξαγωγή των δοκιμών σας, αφού βρείτε μια ευπάθεια και ένα Payload που λειτουργεί, μπορείτε να προσαρμόσετε την SQL για να εκτελέσετε τις δικές σας εντολές. Αυτό είναι χρήσιμο για να υπολογίσετε τη διάταξη των πινάκων, να τροποποιήσετε δεδομένα και ακόμη και να ανακαλύψετε άλλους πίνακες μέσα στη βάση δεδομένων. Δεν υπάρχει πραγματικά κανένα όριο σε αυτό που μπορείτε να κάνετε, αφού πετύχετε μια πραγματική κατανόηση της SQL.

Παραπομπές: