Πως να προστατευτούμε από επίθεση SQLi [POST METHOD]

Ένα διαφορετικό θέμα για σήμερα με σχέση το Cyber Security και την ασφάλεια συστημάτων διότι είναι πολύ σημαντικό να γνωρίζουμε και την ασφάλεια, παρά να ξέρουμε μόνο να κάνουμε επιθέσεις.

Σήμερα σε αυτόν τον οδηγό θα δούμε πως μπορούμε να προστατέψουμε την Βάση δεδομένων μας και τα απόρρητα αρχεία από κάποιον κακόβουλο hacker με επίθεση SQL INJECTION σε POST method. Όσοι θέλετε να μάθετε και πως γίνεται μία τέτοιου είδους επίθεση, υπάρχουν κάποιοι οδηγοί. Ας μπούμε όμως στο θέμα μας.

Το παράδειγμα θα σας το δείξω σε μία δική μου manual ιστοσελίδα η οποία τρέχει local με την βοήθεια του xampp. Να πω λοιπόν πως άνοιξα έναν apache server και ένα phpmyadmin από πίσω για database. (db = egasiasxol, host = localhost, table = users, columns = username-password). Μπορείτε να δείτε τους κώδικες html και php παρακάτω.

1

 

Τι έχουμε στον κώδικα;

Στον κώδικα έχουμε απλά input στην html τα οποία είναι textboxes για τον χρήστη έτσι ώστε να εισχωρήσει το username και το password και άλλο ένα input το οποίο είναι type=submit δηλαδή ένα button έτσι ώστε να γίνει η σύνδεση σε περίπτωση που είναι σωστά τα στοιχεία (Όλα αυτά βρίσκονται σε ένα form στο οποίο χρησιμοποιούμε method=post.

2

Στον php κώδικα επιτρέπουμε στην βάση να επικοινωνήσει μαζί του. Τι σημαίνει αυτό; να διαβάζει μέσα από την βάση το username και το password έτσι ώστε ελέγξει αν είναι σωστά τα στοιχεία για να πάρει πρόσβαση ο χρήστης στο λεγόμενο Dashboard, ή να μην πάρει.

 $sql = "select * from users where username='$user' and password='$passwd'";

Πάμε λοιπόν να δούμε που είναι το λάθος σε αυτόν τον κώδικα. Η απάντηση είναι πως δεν υπάρχει κάποιο λάθος, απλώς δεν υπάρχουν φίλτρα και έτσι ο hacker μπορεί να πάρει πρόσβαση στο σύστημα επειδή ο κώδικας μας δεν έχει φιλτράρει τα Symbols τα οποία μπορεί να χρησιμοποιηθούν ( ‘  κ.τ.λ).

  Windows 10 γιατί λένε ότι το δίκτυο Wi-Fi "δεν είναι ασφαλές"

Πάμε λοιπόν να δούμε Live την επίθεση αλλά και την ασφάλεια. Πρώτα θα ξεκινήσουμε από την επίθεση.

Ανοίγουμε το Burpsuite στο Linux μας, ανοίγουμε και έναν browser στον οποίο έχουμε βάλει σωστά τα proxies για να επικοινωνούν με το burp. proxy -> intercept

3

Να προσέξετε το intercept να είναι στο “ON”. Βάζουμε λοιπόν κάποια τυχαία cedentials με ένα “αυτάκι” στο τέλος και στο username και στο password. (π.χ username’ , password’). Αφού πατήσουμε το κουμπί σύνδεση το burpsuite θα μας εμφανίσει κάποια αποτελέσματα με POST method.

4
Πατάμε δεξί κλικ στα αποτελέσματα και επιλέγουμε copy to file έτσι ώστε να τα αποθηκεύσουμε σε αρχείο.

5

Αφού πατήσουμε-ονομάσουμε το αρχείο (στην περίπτωσή μας grhacking) και πατήσουμε save έτσι ώστε να αποθηκεύσει το αρχείο στο path το οποίο έχουμε επιλέξει, ανοίγουμε το sqlmap το οποίο είναι ένα απίστευτο κατά την γνώμη μου tool  το οποίο θα μας βοηθήσει να κάνουμε αυτοματοποιημένα την επίθεση sql injection. Ανοίγουμε sqlmap και γράφουμε “sqlmap -r (για το αρχείο) grhacking –dbs (για να βρει το database)

sqlmap -r grhacking --dbs

6

POST parameter ‘username’ might be injectable (Πιθανή Βάση mysql). Για όσους δεν καταλάβατε βρήκε ευάλωτη την βάση μας κάτι το οποίο είναι πάρα πολύ σημαντικό.

Γιατί; πάμε να δούμε παρακάτω.

7

 

Αφού λοιπόν γράψουμε κάποιες εντολές για να βρούμε τα κατάλληλα tables και columns έτσι ώστε να τα κάνει dump, βλέπουμε τα αποτελέσματα… Με τα οποία ο hacker θα χαρεί αλλά εμείς θα κλαίμε… διότι με αυτά τα στοιχεία παίρνει πρόσβαση στο dashboard. username: mata , password = greekhacking

Πάμε λοιπόν να δούμε πως μπορούμε να προστατέψουμε τα προσωπικά μας δεδομένα από αυτήν την επίθεση. Ξαναπάμε στον κώδικα τον οποίο έδειξα σε προηγούμενο screenshot, και βάζουμε τα φίλτρα. Θα σας εξηγήσω αφού δείτε την εικόνα.

  Τι είναι το Dark Web Scan; Πρέπει να το χρησιμοποιήσετε;

8

 

Εκεί που έχω βάλει τα slashes είναι το λεγόμενο comment το οποίο ο κώδικας δεν το βλέπει. Οπότε το προσπερνάμε. Δημιουργούμε ένα νέο variable το οποίο είναι το $userprevent και μέσα σε αυτό βάζουμε το φίλτρο mysqli_real_escape_string. Στις παρενθέσεις είναι το connection που το έχω ορίσει ως $conn και το $usr το οποίο έχω ορίσει για το POST του username πιο πάνω “$usr = $_POST[‘username’];”

Κάνουμε το ίδιο και για το password.

Αφού λοιπόν γίνει αυτό, το αμέσως επόμενο βήμα είναι να εφαρμοστούν τα variables για να δουλέψουν τα φίλτρα για να προστατευτεί η βάση μας. τα εφαρμόζουμε πηγαίνοντας στο $sql variable που έχουμε ορίσει για την επικοινωνία των στοιχείων με το POST method στα textbox τα οποία θα πληρκτρολογήσει ο χρήστης. Σας το έχω δείξει και με βελάκια. (Μπορείτε να δείτε τις διαφορές στο πάνω σκριν που έδειξα με κώδικα και σε αυτό το σκριν).

Πάμε λοιπόν να ξανακάνουμε επίθεση για να δούμε τι θα γίνει πάλι.

9

Όπως βλέπουμε το sqlmap δεν μπορεί να ανταποκριθεί διότι έχουμε πλέον βάλει φίλτρα και μας πετάει POST parameter does not seem to be injectable. [WARNING].

Και εννοείται παρακάτω μας πετάει CRITICAL error και μας απορρίπτει.

10

 

Αυτός ήταν ο οδηγός για το πως μπορείτε να προστατευτείτε από μία επίθεση SQL INJECTION σε POST method.

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

 

Συντάκτης άρθρου: Βασίλης Μπουραντάνης

Ακολουθήσετε μας στο Google News iGuRu.gr at Google news

SQLi,POST METHOD

Written by Anastasis Vasileiadis

Οι μεταφράσεις είναι σαν τις γυναίκες. Όταν είναι ωραίες δεν είναι πιστές και όταν είναι πιστές δεν είναι ωραίες.

Αφήστε μια απάντηση

Η ηλ. διεύθυνση σας δεν δημοσιεύεται.

Το μήνυμα σας δεν θα δημοσιευτεί εάν:
1. Περιέχει υβριστικά, συκοφαντικά, ρατσιστικά, προσβλητικά ή ανάρμοστα σχόλια.
2. Προκαλεί βλάβη σε ανηλίκους.
3. Παρενοχλεί την ιδιωτική ζωή και τα ατομικά και κοινωνικά δικαιώματα άλλων χρηστών.
4. Διαφημίζει προϊόντα ή υπηρεσίες ή διαδικτυακούς τόπους .
5. Περιέχει προσωπικές πληροφορίες (διεύθυνση, τηλέφωνο κλπ).


  +  68  =  70