Unicode Normalization

Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (Ειδικός Ερυθρού Συνεργείου AWS του HackTricks)!

Άλλοι τρόποι υποστήριξης του HackTricks:

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

Ο κύριος στόχος του WhiteIntel είναι η καταπολέμηση των αποκλεισμών λογαριασμών και των επιθέσεων ransomware που προκύπτουν από κακόβουλο λογισμικό που κλέβει πληροφορίες.

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


Αυτό είναι ένα σύνοψη του: https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/. Ρίξτε μια ματιά για περισσότερες λεπτομέρειες (οι εικόνες προέρχονται από εκεί).

Κατανόηση του Unicode και της Κανονικοποίησης

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

  1. Κανονική Ισοδυναμία: Οι χαρακτήρες θεωρούνται κανονικά ισοδύναμοι εάν έχουν την ίδια εμφάνιση και νόημα όταν εκτυπώνονται ή εμφανίζονται.

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

Υπάρχουν τέσσερις αλγόριθμοι κανονικοποίησης Unicode: NFC, NFD, NFKC και NFKD. Κάθε αλγόριθμος χρησιμοποιεί διαφορετικά τεχνικές κανονικοποίησης κανονικής και συμβατικής ισοδυναμίας. Για μια πιο λεπτομερή κατανόηση, μπορείτε να εξερευνήσετε αυτές τις τεχνικές στο Unicode.org.

Κύρια Σημεία για την Κωδικοποίηση Unicode

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

  • Σημεία Κώδικα και Χαρακτήρες: Στο Unicode, κάθε χαρακτήρας ή σύμβολο αντιστοιχίζεται σε αριθμητική τιμή που ονομάζεται "σημείο κώδικα".

  • Αναπαράσταση Μπάιτ: Το σημείο κώδικα (ή χαρακτήρας) αναπαρίσταται από έναν ή περισσότερους μπάιτ στη μνήμη. Για παράδειγμα, οι χαρακτήρες LATIN-1 (συνηθισμένοι στις αγγλόφωνες χώρες) αναπαρίστανται χρησιμοποιώντας ένα μπάιτ. Ωστόσο, οι γλώσσες με μεγαλύτερο σύνολο χαρακτήρων χρειάζονται περισσότερα μπάιτ για την αναπαράσταση.

  • Κωδικοποίηση: Αυτός ο όρος αναφέρεται στον τρόπο με τον οποίο οι χαρακτήρες μετατρέπονται σε μια σειρά από μπάιτ. Το UTF-8 είναι ένα διαδεδομένο πρότυπο κωδικοποίησης όπου οι χαρακτήρες ASCII αναπαρίστανται χρησιμοποιώντας ένα μπάιτ και έως τέσσερα μπάιτ για άλλους χαρακτήρες.

  • Επεξεργασία Δεδομένων: Τα συστήματα επεξεργασίας δεδομένων πρέπει να γνωρίζουν την κωδικοποίηση που χρησιμοποιείται για να μετατρέψουν σωστά τη ροή μπάιτ σε χαρακτήρες.

  • Παραλλαγές του UTF: Εκτός από το UTF-8, υπάρχουν άλλα πρότυπα κωδικοποίησης όπως το UTF-16 (χρησιμοποιώντας τουλάχιστον 2 μπάιτ, έως 4) και το UTF-32 (χρησιμοποιώντας 4 μπάιτ για όλους τους χαρακτήρες).

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

Ένα παράδειγμα πώς το Unicode κανονικοποιεί δύο διαφορετικά μπάιτ που αναπαριστούν τον ίδιο χαρακτήρα:

unicodedata.normalize("NFKD","chloe\u0301") == unicodedata.normalize("NFKD", "chlo\u00e9")

Μια λίστα με ισοδύναμους χαρακτήρες Unicode μπορεί να βρεθεί εδώ: https://appcheck-ng.com/wp-content/uploads/unicode_normalization.html και https://0xacb.com/normalization_table

Ανακάλυψη

Αν μπορείτε να βρείτε μέσα σε μια web εφαρμογή μια τιμή που επιστρέφεται, μπορείτε να δοκιμάσετε να στείλετε τον 'ΣΗΜΑ ΚΕΛΒΙΝ' (U+0212A) το οποίο κανονικοποιείται σε "K" (μπορείτε να το στείλετε ως %e2%84%aa). Αν επιστραφεί ένα "K", τότε, κάποια μορφοποίηση Unicode πραγματοποιείται.

Άλλο παράδειγμα: %F0%9D%95%83%E2%85%87%F0%9D%99%A4%F0%9D%93%83%E2%85%88%F0%9D%94%B0%F0%9D%94%A5%F0%9D%99%96%F0%9D%93%83 μετά την μορφοποίηση Unicode είναι Leonishan.

Ευάλωτα Παραδείγματα

Παράκαμψη φίλτρου SQL Injection

Φανταστείτε μια ιστοσελίδα που χρησιμοποιεί τον χαρακτήρα ' για να δημιουργήσει ερωτήματα SQL με την είσοδο του χρήστη. Αυτή η ιστοσελίδα, ως μέτρο ασφαλείας, διαγράφει όλες τις εμφανίσεις του χαρακτήρα ' από την είσοδο του χρήστη, αλλά μετά τη διαγραφή και πριν τη δημιουργία του ερωτήματος, κανονικοποιεί χρησιμοποιώντας Unicode την είσοδο του χρήστη.

Έτσι, ένας κακόβουλος χρήστης θα μπορούσε να εισάγει έναν διαφορετικό χαρακτήρα Unicode ισοδύναμο με το ' (0x27) όπως το %ef%bc%87, όταν η είσοδος κανονικοποιείται, δημιουργείται ένα μονό εισαγωγικό και εμφανίζεται μια ευπάθεια SQL Injection:

Μερικοί ενδιαφέροντες χαρακτήρες Unicode

  • o -- %e1%b4%bc

  • r -- %e1%b4%bf

  • 1 -- %c2%b9

  • = -- %e2%81%bc

  • / -- %ef%bc%8f

  • --- %ef%b9%a3

  • #-- %ef%b9%9f

  • *-- %ef%b9%a1

  • ' -- %ef%bc%87

  • " -- %ef%bc%82

  • | -- %ef%bd%9c

' or 1=1-- -
%ef%bc%87+%e1%b4%bc%e1%b4%bf+%c2%b9%e2%81%bc%c2%b9%ef%b9%a3%ef%b9%a3+%ef%b9%a3

" or 1=1-- -
%ef%bc%82+%e1%b4%bc%e1%b4%bf+%c2%b9%e2%81%bc%c2%b9%ef%b9%a3%ef%b9%a3+%ef%b9%a3

' || 1==1//
%ef%bc%87+%ef%bd%9c%ef%bd%9c+%c2%b9%e2%81%bc%e2%81%bc%c2%b9%ef%bc%8f%ef%bc%8f

" || 1==1//
%ef%bc%82+%ef%bd%9c%ef%bd%9c+%c2%b9%e2%81%bc%e2%81%bc%c2%b9%ef%bc%8f%ef%bc%8f

Πρότυπο sqlmap

XSS (Cross Site Scripting)

Μπορείτε να χρησιμοποιήσετε έναν από τους παρακάτω χαρακτήρες για να εξαπατήσετε την εφαρμογή web και να εκμεταλλευτείτε ένα XSS:

Σημειώστε ότι, για παράδειγμα, ο πρώτος Unicode χαρακτήρας που προτείνεται μπορεί να σταλεί ως: %e2%89%ae ή ως %u226e

Fuzzing Regexes

Όταν το backend ελέγχει την είσοδο του χρήστη με ένα regex, είναι πιθανό ότι η είσοδος να κανονικοποιείται για το regex αλλά όχι για το πού χρησιμοποιείται. Για παράδειγμα, σε ένα Open Redirect ή SSRF το regex μπορεί να κανονικοποιεί το σταλθέν URL αλλά στη συνέχεια να το χρησιμοποιεί όπως είναι.

Το εργαλείο recollapse επιτρέπει τη δημιουργία παραλλαγών της εισόδου για να δοκιμάσετε το backend. Για περισσότερες πληροφορίες ελέγξτε το github και αυτήν την ανάρτηση.

Αναφορές

WhiteIntel είναι μια μηχανή αναζήτησης που τροφοδοτείται από το dark web και προσφέρει δωρεάν λειτουργίες για να ελέγξετε αν μια εταιρεία ή οι πελάτες της έχουν διαρρεύσει από κλέφτες malware.

Ο κύριος στόχος του WhiteIntel είναι η καταπολέμηση των ληστειών λογαριασμών και των επιθέσεων ransomware που προκύπτουν από malware που κλέβει πληροφορίες.

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

Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι υποστήριξης του HackTricks:

Last updated