Σύμφωνα με το Open Web Application Security Project (OWASP), το command injection είναι μια από τις πιο σοβαρές και πολυάριθμες επιθέσεις για web εφαρμογές.
Επιπλέον, οι επιθέσεις αυτές συνεπάγονται συνήθως με σοβαρή οικονομική ζημία για τις εταιρείες και άλλους φορείς, καθώς αποτελούν επιθέσεις κατά της βάσης δεδομένων, όπου περιέχει πολύτιμες πληροφορίες, όπως αριθμοί πιστωτικών καρτών και προσωπικά αναγνωρίσιμες πληροφορίες (PII).
OWASP Top 10
Αν και υπάρχουν πολυάριθμοι τύποι επίθεσης κατά των βάσεων δεδομένων, ο πιο συνηθισμένος είναι το SQL injection. Το SQL injection στέλνει εντολές SQL από τη web φόρμα στη backend βάση δεδομένων.
Εάν αυτές οι εντολές SQL δεν καθαριστούν στο επίπεδο του προγράμματος-πελάτη (πρόγραμμα περιήγησης), μπορούν να μεταφερθούν στη βάση δεδομένων και να προκαλέσουν χάος, όπως,
-
Exfiltrate data
-
Delete data
-
Add data
-
Update data
Κατά τη δοκιμή για ευπάθειες SQL injection, αυτές είναι μερικές από τις πιο συνηθισμένες εντολές και ειδικούς χαρακτήρες. Όσο καλύτερα κατανοείτε την SQL, τόσο πιο επιτυχημένοι θα είστε με την επίθεση SQL injection.
Σημειώσεις
Μονό εισαγωγικό (‘): Συχνά χρησιμοποιείται για τον τερματισμό αλφαριθμητικών.
Διπλό εισαγωγικό (“): Μπορεί επίσης να χρησιμοποιηθεί για τον τερματισμό των αλφαριθμητικών σε ορισμένες βάσεις δεδομένων.
Table of Contents
Ακολουθίες σχολίων:
Διπλή παύλα (–): Αυτό είναι ένα σχόλιο SQL και μπορεί να χρησιμοποιηθεί για να ακυρώσει το υπόλοιπο ενός ερωτήματος.
Hash (#): Στη MySQL, είναι ένας εναλλακτικός τρόπος για να σχολιάσετε το υπόλοιπο του ερωτήματος.
Slash-αστέρι (/* … */): Σχόλιο πολλών γραμμών.
Μπορεί να χρησιμοποιηθεί για το σχολιασμό τμημάτων ή ολόκληρου του ερωτήματος.
Λειτουργίες και εντολές
Τελεία (;): Αντιπροσωπεύει το τέλος ενός ερωτήματος και την αρχή ενός άλλου.
Λογικοί τελεστές: AND, OR.
Συναρτήσεις ελέγχου: UNION, UNION ALL.
Τιμές Boolean
TRUE ή 1=1: Αποτιμάται πάντα σε true και μπορεί να χρησιμοποιηθεί για τον χειρισμό των ρητρών WHERE.
FALSE ή 1=0: Αποτιμάται πάντα σε false.
Συναρτήσεις χρονοκαθυστέρησης
SLEEP(x): Στην MySQL, προκαλεί καθυστέρηση για x δευτερόλεπτα.
WAITFOR DELAY ‘hh:mm:ss’: Στον SQL Server, προκαλεί καθυστέρηση.
pg_sleep(x): Στην PostgreSQL, προκαλεί καθυστέρηση για x δευτερόλεπτα.
Ανάκτηση πληροφοριών
@@version: (λειτουργεί σε πολλές βάσεις δεδομένων).
CURRENT_USER: Ανακτά τον τρέχοντα χρήστη.
Κωδικοποίηση Hex
Οι επιτιθέμενοι ενδέχεται να κωδικοποιήσουν τα payloads τους σε δεκαεξαδική μορφή για να παρακάμψουν τα λανθασμένα φίλτρα.
Wildcards
Ποσοστιαίο πρόσημο (%): Αντιπροσωπεύει μηδέν ή περισσότερους χαρακτήρες στις ρήτρες LIKE της SQL. Αυτό χρησιμοποιήθηκε στην πρόσφατη επίθεση MoveIT από τον C|op.
Ειδικές λειτουργίες
CONCAT(): Χρησιμοποιείται για τη συνένωση συμβολοσειρών στην SQL.
CAST(), CONVERT(): Χρησιμοποιούνται για τη μετατροπή τύπου.
ASCII(), CHAR(): Συναρτήσεις για τη λήψη τιμών ή χαρακτήρων ASCII, μπορούν να χρησιμοποιηθούν σε blind SQLi.
Υποεπιλογές και ερωτήματα μεταδεδομένων
SELECT … FROM information_schema.tables: Χρησιμοποιείται σε βάσεις δεδομένων όπως η MySQL και η PostgreSQL για τη συλλογή μεταδεδομένων σχετικά με πίνακες.
SELECT … FROM sysobjects …: Χρησιμοποιείται στον SQL Server για τη συλλογή μεταδεδομένων.
Σύνοψη
Τα Injection attacks σε φόρμες ιστού που οδηγούν σε διαρροή της βάσης δεδομένων είναι από τις πιο σοβαρές επιθέσεις που θέτουν σε κίνδυνο την ασφάλεια της σελίδας.
Αυτές οι επιθέσεις κατά της βάσης δεδομένων χρησιμοποιούνται με τη μορφή επιθέσεων SQLi, όπου εντολές SQL αποστέλλονται στην backend βάση δεδομένων από μη σαρωμένη είσοδο από τον πελάτη (πρόγραμμα περιήγησης).
Παρόλο που οι επιθέσεις SQLi γίνονται όλο και πιο δύσκολες, η ενδελεχής και βαθιά κατανόηση της SQL είναι απαραίτητη για να πραγματοποιήσει κανείς μια τέτοιου είδους επίθεση.