Unicode Injection

Support HackTricks

Introduction

U zavisnosti od toga kako se back-end/front-end ponaša kada primi čudne unicode karaktere, napadač bi mogao da obiđe zaštite i ubrizga proizvoljne karaktere koji bi mogli biti korišćeni za iskorišćavanje ranjivosti injekcije kao što su XSS ili SQLi.

Unicode Normalization

Unicode normalizacija se dešava kada se unicode karakteri normalizuju u ascii karaktere.

Jedan uobičajen scenario ove vrste ranjivosti se dešava kada sistem menja na neki način ulaz korisnika nakon što ga je proverio. Na primer, u nekim jezicima jednostavan poziv za pravljenje ulaza velikim ili malim slovima mogao bi normalizovati dati ulaz i unicode će biti transformisan u ASCII generišući nove karaktere. Za više informacija pogledajte:

\u to %

Unicode karakteri se obično predstavljaju sa \u prefiksom. Na primer, karakter je \u3c4b(proverite ovde). Ako backend transformiše prefiks \u u %, rezultantni string će biti %3c4b, što URL dekodirano daje: <4b. I, kao što možete videti, karakter < je ubrizgan. Možete koristiti ovu tehniku da ubrizgate bilo koji tip karaktera ako je backend ranjiv. Pogledajte https://unicode-explorer.com/ da pronađete potrebne karaktere.

Ova ranjivost zapravo dolazi iz ranjivosti koju je istraživač pronašao, za dublje objašnjenje pogledajte https://www.youtube.com/watch?v=aUsAHb0E7Cg

Emoji Injection

Back-endovi se čudno ponašaju kada primi emojije. To se desilo u ovoj analizi gde je istraživač uspeo da postigne XSS sa payload-om kao što je: 💋img src=x onerror=alert(document.domain)//💛

U ovom slučaju, greška je bila da je server nakon uklanjanja zlonamernih karaktera konvertovao UTF-8 string iz Windows-1252 u UTF-8 (osnovno, kodiranje ulaza i konverzija kodiranja su se neslagali). Tada ovo ne daje pravi < već samo čudan unicode: ``Tako su uzeli ovaj izlaz i ponovo konvertovali sada iz UTF-8 u ASCII. Ovo je normalizovalo u < tako da je ovako eksploatacija mogla da funkcioniše na tom sistemu. To je ono što se desilo:

<?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 liste:

Podržite HackTricks

Last updated