Unicode Normalization

Nauka hakowania AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

WhiteIntel to silnik wyszukiwania zasilany przez dark web, który oferuje darmowe funkcje sprawdzania, czy firma lub jej klienci zostali skompromitowani przez złośliwe oprogramowanie kradnące informacje.

Ich głównym celem WhiteIntel jest zwalczanie przejęć kont i ataków ransomware wynikających z złośliwego oprogramowania kradnącego informacje.

Możesz sprawdzić ich stronę internetową i wypróbować ich silnik za darmo pod adresem:


To jest streszczenie: https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/. Sprawdź szczegóły (zdjęcia pochodzą z tej strony).

Zrozumienie Unicode i Normalizacji

Normalizacja Unicode to proces zapewniający, że różne reprezentacje binarne znaków są standaryzowane do tego samego wartości binarnej. Proces ten jest kluczowy w pracy ze stringami w programowaniu i przetwarzaniu danych. Standard Unicode definiuje dwa rodzaje równoważności znaków:

  1. Równoważność Kanoniczna: Znaki są uważane za równoważne kanonicznie, jeśli mają taki sam wygląd i znaczenie podczas drukowania lub wyświetlania.

  2. Równoważność Zgodności: Słabsza forma równoważności, gdzie znaki mogą reprezentować ten sam abstrakcyjny znak, ale mogą być wyświetlane inaczej.

Istnieją cztery algorytmy normalizacji Unicode: NFC, NFD, NFKC i NFKD. Każdy z algorytmów stosuje techniki normalizacji kanonicznej i zgodności w inny sposób. Aby uzyskać bardziej szczegółowe zrozumienie, możesz zgłębić te techniki na stronie Unicode.org.

Kluczowe Punkty dotyczące Kodowania Unicode

Zrozumienie kodowania Unicode jest kluczowe, zwłaszcza przy rozwiązywaniu problemów interoperacyjności między różnymi systemami lub językami. Oto główne punkty:

  • Punkty Kodowe i Znaki: W Unicode każdemu znakowi lub symbolowi przypisana jest wartość numeryczna zwana "punktem kodowym".

  • Reprezentacja w Bajtach: Punkt kodowy (lub znak) jest reprezentowany przez jeden lub więcej bajtów w pamięci. Na przykład znaki LATIN-1 (powszechne w krajach anglojęzycznych) są reprezentowane za pomocą jednego bajta. Jednak języki z większym zbiorem znaków wymagają więcej bajtów do reprezentacji.

  • Kodowanie: Termin ten odnosi się do sposobu, w jaki znaki są przekształcane w serię bajtów. UTF-8 to powszechne standardowe kodowanie, w którym znaki ASCII są reprezentowane za pomocą jednego bajta, a do czterech bajtów dla innych znaków.

  • Przetwarzanie Danych: Systemy przetwarzające dane muszą być świadome używanego kodowania, aby poprawnie przekształcić strumień bajtów na znaki.

  • Warianty UTF: Oprócz UTF-8 istnieją inne standardy kodowania, takie jak UTF-16 (używający co najmniej 2 bajtów, aż do 4) i UTF-32 (używający 4 bajtów dla wszystkich znaków).

Zrozumienie tych pojęć jest kluczowe dla skutecznego radzenia sobie z potencjalnymi problemami wynikającymi z złożoności Unicode i jego różnych metod kodowania.

Przykład normalizacji Unicode dwóch różnych bajtów reprezentujących ten sam znak:

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

Lista równoważnych znaków Unicode można znaleźć tutaj: https://appcheck-ng.com/wp-content/uploads/unicode_normalization.html oraz https://0xacb.com/normalization_table

Odkrywanie

Jeśli znajdziesz w aplikacji internetowej wartość, która jest odsyłana z powrotem, możesz spróbować wysłać 'ZNAK KELWINA' (U+0212A), który normalizuje się do "K" (możesz wysłać go jako %e2%84%aa). Jeśli otrzymasz z powrotem "K", to oznacza, że jest wykonywana normalizacja Unicode'a.

Inny przykład: %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 po normalizacji Unicode'a to Leonishan.

Przykłady podatności

Ominięcie filtra wstrzykiwania SQL

Wyobraź sobie stronę internetową, która używa znaku ' do tworzenia zapytań SQL z wejścia użytkownika. Ta strona, jako środek bezpieczeństwa, usuwa wszystkie wystąpienia znaku ' z wejścia użytkownika, ale po tej usunięciu i przed utworzeniem zapytania, normalizuje wejście użytkownika za pomocą Unicode'a.

W takim przypadku złośliwy użytkownik mógłby wstawić inny znak Unicode równoważny z ' (0x27) jak %ef%bc%87, gdy wejście zostanie znormalizowane, pojedynczy cudzysłów zostanie utworzony, co prowadzi do pojawienia się podatności na wstrzyknięcie SQL:

Kilka interesujących znaków 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

Szablon sqlmap

XSS (Cross Site Scripting)

Możesz użyć jednego z poniższych znaków, aby oszukać aplikację internetową i wykorzystać XSS:

Zauważ, że na przykład pierwszy proponowany znak Unicode może być wysłany jako: %e2%89%ae lub jako %u226e

Fuzzing Regexes

Kiedy backend sprawdza dane wejściowe użytkownika za pomocą regexa, możliwe jest, że dane wejściowenormalizowane dla regexa, ale nie dla miejsca, gdzie są używane. Na przykład, w przypadku przekierowania otwartego lub SSRF regex może normalizować wysłany URL, a następnie uzyskiwać do niego dostęp w oryginalnej postaci.

Narzędzie recollapse pozwala na generowanie wariacji danych wejściowych do testowania backendu. Aby uzyskać więcej informacji, sprawdź github i ten post.

Referencje

WhiteIntel to wyszukiwarka zasilana dark-webem, która oferuje darmowe funkcjonalności do sprawdzania, czy firma lub jej klienci nie zostali skompromitowani przez złośliwe oprogramowanie kradnące informacje.

Ich głównym celem jest zwalczanie przejęć kont i ataków ransomware wynikających z złośliwego oprogramowania kradnącego informacje.

Możesz sprawdzić ich stronę internetową i wypróbować ich silnik za darmo pod adresem:

Dowiedz się, jak hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Last updated