Μετάβαση στο περιεχόμενο
  • ChatBox

    ChatBox

    Chatroom Rules

    • Το GreekHacking.Gr είναι ένα ελληνικό forum και επιτρέπεται μόνο η χρήση της Ελληνική Γλώσσας (ούτε greeklish).
    • Δεν επιτρέπονται οι βρισιές και γενικά η χρήση χυδαίας γλώσσας.
    • Απαγορεύεται αυστηρά το πορνογραφικό, προσβλητικό και βίαιο περιεχόμενο.
    • Μην χρησιμοποιείτε κεφαλαία γράμματα η σύμβολα.
Mata

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

Recommended Posts

Mata
Διαχειριστής

Επειδή ό,τι λέω το κάνω κάποια στιγμή, σας είχα πει όταν έκανα τον οδηγό για το POST METHOD ότι θα κάνω και οδηγό για το πως να προστατευτούμε από ένα SQL INJECTION attack σε GET METHOD. Τι εννοούμε GET? Εννοώ η πληροφορία που Παίρνω και όχι που δίνω στον Server όπως είναι το POST με login, register κ.τ.λ. Όπως έχουμε πει με τα google dorks inurl:.php?id=1 , που δίνουμε στην google να καταλάβει ότι θέλουμε να ψάξουμε στην αναζήτη ΜΟΝΟ ιστοσελίδες και σελίδες που έχουν ΜΟΝΟ παράμετρο ID στο URL τους... Ε αυτό θα κάνουμε σήμερα. Θα μάθουμε πως να μην τρώει MYSQL ERROR η σελίδα όταν βάζουμε το quote "   '   " δίπλα από την παράμετρο. Π.Χ id=1' .

Αφήνω λοιπόν την πολλή εξήγηση και πάμε να μπούμε στο ψητό.

 

getid.PNG.903463db1d215d450ee51b9a1fa46f9b.PNG

 

Εδώ του λέμε να πάρει το ID το οποίο το έχουμε ορίσει και user_id και μετά φτιάχνουμε ένα query με users όπου id=$user_id.

 

start.thumb.PNG.7b7d061322ca6e3e0919c04bad4bae4d.PNG

editphprow.PNG.e60d9e7e6c39aa38d168abfe0b5f3ff1.PNG

 

Πρώτα απ' όλα βλέπουμε τον κώδικά μας. Έχουμε χτίσει ένα table γράφοντας κώδικα HTML ΜΕΣΑ ΣΤΗΝ PHP, και με τα $row που έχουμε ορίσει πιο πάνω από το foreach και $sql_run, του δείχνουμε να καταλάβει πως θέλουμε στα tables να εμφανίζετε ΚΑΘΕ χρήστης μέσα από την βάση. (θα δείτε παρακάτω σε screenshot).

Ακριβώς από κάτω από αυτά τα $row, δίνουμε άλλο ένα row και το πιο σημαντικό γι αυτό το topic.  Του λέμε όταν πατηθεί το «κουμπί» EDIT που θα υπάρχει στο table, να μας ανακατευθύνει ( href ) στην σελίδα edit.php (που έχουμε φτιάξει) αλλά όχι μόνο εκεί, αλλά και στην παράμετρο. Δηλαδή για παράδειγμα θέλουμε να κάνουμε edit τα στοιχεία του χρήστη MATA ο οποίος mata μέσα στην βάση σαν ID έχει τον αριθμό 64. Οπότε θα γράψεις στο url edit.php?id= (Και τον αριθμό του id του χρήστη μέσα στην βάση) $row['id']. Προφανώς το ID αν δεν ξέρετε πως το διαβάζει μέσα από την βάση, το διαβάζει διότι κάναμε πριν query "SELECT * FROM users". Δηλαδή; Επέλεξέ τα όλα (*) από το table users. Και αμέσως μετά τρέξαμε το $sql_run = mysqli_query($conn, $sql) (το sql ήταν το variable που είχαμε ορίσει για το query ( $sql = "SELECT * FROM users ).

 

edit.thumb.PNG.b8a3c8ad9dc34f3f5d9c780951f5ad1e.PNG

 

Εδώ έχουμε τα tables που είπα πρίν. Και με ID χρήστη τον αριθμό 64. (όσοι χρήστες υπάρχουν μέσα στην βάση τόσο θα αυξάνεται η λίστα). Πατάμε λοιπόν edit να δούμε τι γίνεται στο url.

 

parameter.thumb.PNG.2ce95cdc2b6ceda4774ce40fc15e0729.PNG

 

Όπως βλέπουμε, το URL δείχνει τον αριθμό 64 στην παράμετρο ID. Αυτό γίνεται επειδή πρίν στο href βάλαμε το $row['id'] όπως σας εξήγησα παραπάνω.

Πάμε λοιπόν να βάλουμε ένα QUOTE στην παράμετρο να δούμε πως και ΓΙΑΤΙ αντιδράει η ιστοσελίδα με ERROR.

 

quote.thumb.PNG.9cbe39fb272fe60b22cfd346ea16ef80.PNG

 

error.thumb.PNG.e1fdc5d03d8174a7bd11b62da1637879.PNG

 

Όσοι έχετε πάει να κάνετε SQL INJECTION επίθεση σίγουρα έχετε παρατηρίσει κάποιο τέτοιο error. To error αυτό ονομάζεται ERROR-BASED SQL INJECTION. Error based ονομάζεται όταν το quote (') «σπάει» το Syntax. Γι αυτό και γράφει "You have an error in your SQL Syntax".

 

Πάμε να το εκμεταλλευτούμε αυτό; Θα είναι πανεύκολο γιατί ο απρόσεκτος Developer ξέχασε να βάλει τα φίλτρα στον κώδικά του οπότε εγώ σαν κακόβουλος θα μπορέσω να τον εκμεταλλευτώ...

 

cookies.thumb.PNG.1f6404657fd4d6a25280f222450bb833.PNG

 

Πάμε και γράφουμε λοιπόν

sqlmap -u "http://<target>.com/edit.php?id=1" --dbs

Το --dbs είναι για να βρεί τις βάσεις δεδομένων.

Μας πετάει cookies και πατάμε Y για να τα χρησιμοποιήσουμε.

 

vuln.thumb.PNG.137921ffcbfaa56d0ab1bc46b329c900.PNG

 

Πόσο ευχάριστο για εμάς ε; Εδώ μας λέει ΄΄οτι ΠΙΘΑΝΟΝ η παράμετρος ID να είναι ευπαθής και η ΠΙΘΑΝΗ Database είναι MySQL.

Θέλουμε να κάνουμε skip τα άλλα payload tests για άλλες dbmses? Και πατάμε Yes. Διότι δεν χρειαζόμαστε κάτι άλλο.

 

based.thumb.PNG.f75ac28062c5a495fe0d5df23d8a5c04.PNG

 

Τι είπαμε πριν; Error-based. Πάμε παρακάτω τα εξήγησα πρίν αυτά.

 

yesno.thumb.PNG.e70df0be5bf7b870ab06e91271e0ef85.PNG

 

Η παράμετρος ID είναι ευπαθής. Θές να τσεκάρεις κι άλλες παραμέτρους; (Δεν χρειάζεται οπότε NO)

 

db.thumb.PNG.87bc8bf95254bccb4cfe15d28d8228d3.PNG 

 

Τι κακό τον βρήκε....... Αν θυμάστε από τον προηγούμενο οδηγό η database λεγόταν ergasiasxol. Πάμε να μπούμε σε αυτήν γράφοντας

sqlmap -u "http://<target>.com/edit.php?id=64" -D ergasiasxol --tables

 

-D ergasiasxol για να μπούμε σε αυτήν την βάση, και το --tables για να μας εμφανίσει τα tables.

 

userstab.PNG.ba58688b3a256d39057bacdf46cf50b1.PNG

 

Βλέπουμε πως υπάρχει το table users. Οπότε πάμε να μπούμε σε αυτό και να δούμε τα columns.

 

sqlmap -u "http://<target>.com/edit.php?id=64" -D ergasiasxol -T users --columns

 

userpass.PNG.64b4476ab3f509002cd6bbc76fa12e95.PNG

 

Εδώ βλέπουμε τα columns. Εμείς χρειαζόμαστε μόνο το username και το password. Πάμε να τα κάνουμε DUMP για να τα δούμε.

 

sqlmap -u "http://<target>.com/edit.php?id=64" -D ergasiasxol -T users -C username,password --dump

 

done.PNG.b85b1746bee583d190cf952e1a711d7b.PNG

 

Φτάσαμε στον στόχο μας. Βέβαια ο κωδικός είναι σε κρυπτογράφηση md5 έχω εξηγήσει εδώ πως το κάνουμε αυτό, οπότε απλά παίρνουμε το hash και το σπάμε (αν δεν υπάρχει σε online tool προτείνω crunch για να φτιάξετε λίστα).

############################################################

ΠΡΟΣΤΑΣΙΑ 

###########################################################

 

Πάμε λοιπόν τώρα να δούμε πως μπορούμε να προστατευτούμε από αυτήν την επίθεση. Πρέπει να πάμε ξανά στον κώδικά μας και να βρούμε που είναι το variable που έχουμε ορίσει για την $_GET['id']; .

 

prevent.thumb.PNG.ccaa64f3c3114558689add08bcfd2e67.PNG

 

To user_id είναι το variable που έχουμε ορίσει για την GET. Το filtered_userid variable υπάρχει για να το προσθέσουμε μετά στο id=$filtered_userid στο query. Επίσης στο variable filtered_userid γράφουμε το εξής

filter_var($user_id, FILTER_SANITIZE_NUMBER_INT);

To filter_var είναι συνάρτηση της php η οποία χρησιμοποιείται για το φιλτράρισμα της μεταβλητής (variable). Στην περίπτωσή μας θέλουμε να φιλτράρουμε το variable $user_id που είναι της GET -> id=$row['id'] -> id=64 (στην προκειμένη περίπτωση).

To FILTER_SANITIZE_NUMBER_INT αποτρέπει χαρακτήρες όπως το QUOTE.

 

Πάμε λοιπόν τώρα να δούμε αν η σελίδα μας αντιδράει σε error.

 

noerror.thumb.PNG.7c64e7cb1f3253e6bcb2b795ef670e76.PNG

 

Απολύτως καμία αντίδραση. Πάμε να κάνουμε πάλι επίθεση λοιπόν

 

falsepositive.thumb.PNG.10e732d17856851396c14ec11a976846.PNG

 

CRITICAL. Δεν μας αφήνει να βρούμε βάση. Πάμε να δοκιμάσουμε και με risk και level  και με v 6

try.thumb.PNG.eac6d33af2769f5ddc88c9c3fd5a3f4b.PNG

 

criticalagain.thumb.PNG.02826acd5422700d80c0213d7295b807.PNG

 

Πάλι critical. Οπότε είμαστε καλυμμένοι.

 

 

Θα βγάλω και οδηγό για το πως να προστατευτούμε από επίθεση XSS (CROSS SITE SCRIPTING) κάποια στιγμή.

 

Be safe. 😀

 

 

 

 

Edited by Mata
 
 
 
dfIK0AV.png.e234aa2149c2b74e2ca0b56e57705d64.png

 

Μοιράσου αυτή την δημοσίευση


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Απάντηση στο θέμα...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



ChatBox

ChatBox

Chatroom Rules

  • Το GreekHacking.Gr είναι ένα ελληνικό forum και επιτρέπεται μόνο η χρήση της Ελληνική Γλώσσας (ούτε greeklish).
  • Δεν επιτρέπονται οι βρισιές και γενικά η χρήση χυδαίας γλώσσας.
  • Απαγορεύεται αυστηρά το πορνογραφικό, προσβλητικό και βίαιο περιεχόμενο.
  • Μην χρησιμοποιείτε κεφαλαία γράμματα η σύμβολα.
×
×
  • Create New...