Unicode Injection

Support HackTricks

Introduction

Ανάλογα με το πώς συμπεριφέρεται το back-end/front-end όταν λαμβάνει περίεργους χαρακτήρες unicode, ένας επιτιθέμενος μπορεί να είναι σε θέση να παρακάμψει τις προστασίες και να εισάγει αυθαίρετους χαρακτήρες που θα μπορούσαν να χρησιμοποιηθούν για κατάχρηση ευπαθειών εισαγωγής όπως XSS ή SQLi.

Unicode Normalization

Η κανονικοποίηση Unicode συμβαίνει όταν οι χαρακτήρες unicode κανονικοποιούνται σε χαρακτήρες ascii.

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

Unicode Normalization

\u to %

Οι χαρακτήρες Unicode συνήθως αναπαρίστανται με το πρόθεμα \u. Για παράδειγμα, ο χαρακτήρας είναι \u3c4b(check it here). Εάν ένα backend μετασχηματίσει το πρόθεμα \u σε %, η προκύπτουσα συμβολοσειρά θα είναι %3c4b, η οποία αποκωδικοποιημένη URL είναι: <4b. Και, όπως μπορείτε να δείτε, ένας χαρακτήρας < έχει εισαχθεί. Μπορείτε να χρησιμοποιήσετε αυτή την τεχνική για να εισάγετε οποιονδήποτε τύπο χαρακτήρα εάν το backend είναι ευάλωτο. Δείτε https://unicode-explorer.com/ για να βρείτε τους χαρακτήρες που χρειάζεστε.

Αυτή η ευπάθεια προέρχεται από μια ευπάθεια που βρήκε ένας ερευνητής, για μια πιο λεπτομερή εξήγηση δείτε https://www.youtube.com/watch?v=aUsAHb0E7Cg

Emoji Injection

Τα back-ends συμπεριφέρονται περίεργα όταν λαμβάνουν emojis. Αυτό συνέβη σε αυτή την αναφορά όπου ο ερευνητής κατάφερε να επιτύχει ένα XSS με ένα payload όπως: 💋img src=x onerror=alert(document.domain)//💛

Σε αυτή την περίπτωση, το σφάλμα ήταν ότι ο διακομιστής μετά την αφαίρεση των κακόβουλων χαρακτήρων μετέτρεψε τη συμβολοσειρά UTF-8 από Windows-1252 σε UTF-8 (βασικά η κωδικοποίηση εισόδου και η μετατροπή από κωδικοποίηση δεν ταίριαζαν). Έτσι, αυτό δεν δίνει ένα σωστό < αλλά έναν περίεργο unicode: ``Έτσι πήραν αυτή την έξοδο και μετέτρεψαν ξανά τώρα από UTF-8 σε ASCII. Αυτό κανονικοποίησε το σε < έτσι είναι πώς η εκμετάλλευση θα μπορούσε να λειτουργήσει σε αυτό το σύστημα. Αυτό είναι που συνέβη:

<?php

$str = isset($_GET["str"]) ? htmlspecialchars($_GET["str"]) : "";

$str = iconv("Windows-1252", "UTF-8", $str);
$str = iconv("UTF-8", "ASCII//TRANSLIT", $str);

echo "String: " . $str;

Λίστες Emoji:

Υποστήριξη HackTricks

Last updated