Unicode Normalization

Tip

AWS ν•΄ν‚Ή 배우기 및 μ—°μŠ΅ν•˜κΈ°:HackTricks Training AWS Red Team Expert (ARTE)
GCP ν•΄ν‚Ή 배우기 및 μ—°μŠ΅ν•˜κΈ°: HackTricks Training GCP Red Team Expert (GRTE) Azure ν•΄ν‚Ή 배우기 및 μ—°μŠ΅ν•˜κΈ°: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks μ§€μ›ν•˜κΈ°

이 λ‚΄μš©μ€ λ‹€μŒμ˜ μš”μ•½μž…λ‹ˆλ‹€: https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/. μΆ”κ°€ μ„ΈλΆ€μ •λ³΄λŠ” 확인해 λ³΄μ„Έμš” (μ΄λ―Έμ§€λŠ” κ±°κΈ°μ„œ κ°€μ Έμ˜¨ κ²ƒμž…λ‹ˆλ‹€).

Understanding Unicode and Normalization

μœ λ‹ˆμ½”λ“œ μ •κ·œν™”λŠ” μ„œλ‘œ λ‹€λ₯Έ 문자 이진 ν‘œν˜„μ΄ λ™μΌν•œ 이진 κ°’μœΌλ‘œ ν‘œμ€€ν™”λ˜λ„λ‘ ν•˜λŠ” κ³Όμ •μž…λ‹ˆλ‹€. 이 과정은 ν”„λ‘œκ·Έλž˜λ° 및 데이터 μ²˜λ¦¬μ—μ„œ λ¬Έμžμ—΄μ„ λ‹€λ£° λ•Œ 맀우 μ€‘μš”ν•©λ‹ˆλ‹€. μœ λ‹ˆμ½”λ“œ ν‘œμ€€μ€ 두 κ°€μ§€ μœ ν˜•μ˜ 문자 동등성을 μ •μ˜ν•©λ‹ˆλ‹€:

  1. Canonical Equivalence: λ¬Έμžκ°€ μΈμ‡„λ˜κ±°λ‚˜ ν‘œμ‹œλ  λ•Œ λ™μΌν•œ λͺ¨μ–‘κ³Ό 의미λ₯Ό κ°€μ§€λ©΄ μ •κ·œ λ™λ“±ν•œ κ²ƒμœΌλ‘œ κ°„μ£Όλ©λ‹ˆλ‹€.
  2. Compatibility Equivalence: λ¬Έμžκ°€ λ™μΌν•œ 좔상 문자λ₯Ό λ‚˜νƒ€λ‚Ό 수 μžˆμ§€λ§Œ λ‹€λ₯΄κ²Œ ν‘œμ‹œλ  수 μžˆλŠ” μ•½ν•œ ν˜•νƒœμ˜ λ™λ“±μ„±μž…λ‹ˆλ‹€.

λ„€ κ°€μ§€ μœ λ‹ˆμ½”λ“œ μ •κ·œν™” μ•Œκ³ λ¦¬μ¦˜μ΄ μžˆμŠ΅λ‹ˆλ‹€: NFC, NFD, NFKC, NFKD. 각 μ•Œκ³ λ¦¬μ¦˜μ€ μ •κ·œ 및 ν˜Έν™˜μ„± μ •κ·œν™” κΈ°μˆ μ„ λ‹€λ₯΄κ²Œ μ μš©ν•©λ‹ˆλ‹€. 더 깊이 μžˆλŠ” 이해λ₯Ό μ›ν•˜μ‹œλ©΄ Unicode.orgμ—μ„œ 이 κΈ°μˆ μ„ 탐색할 수 μžˆμŠ΅λ‹ˆλ‹€.

Key Points on Unicode Encoding

μœ λ‹ˆμ½”λ“œ 인코딩을 μ΄ν•΄ν•˜λŠ” 것은 특히 μ„œλ‘œ λ‹€λ₯Έ μ‹œμŠ€ν…œμ΄λ‚˜ μ–Έμ–΄ κ°„μ˜ μƒν˜Έ μš΄μš©μ„± 문제λ₯Ό λ‹€λ£° λ•Œ 맀우 μ€‘μš”ν•©λ‹ˆλ‹€. μ£Όμš” 사항은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:

  • Code Points and Characters: μœ λ‹ˆμ½”λ“œμ—μ„œ 각 문자 λ˜λŠ” κΈ°ν˜ΈλŠ” β€œμ½”λ“œ ν¬μΈνŠΈβ€œλΌκ³  ν•˜λŠ” 숫자 값이 ν• λ‹Ήλ©λ‹ˆλ‹€.
  • Bytes Representation: μ½”λ“œ 포인트(λ˜λŠ” 문자)λŠ” λ©”λͺ¨λ¦¬μ—μ„œ ν•˜λ‚˜ μ΄μƒμ˜ λ°”μ΄νŠΈλ‘œ ν‘œν˜„λ©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, LATIN-1 λ¬ΈμžλŠ”(μ˜μ–΄ μ‚¬μš© κ΅­κ°€μ—μ„œ 일반적) ν•˜λ‚˜μ˜ λ°”μ΄νŠΈλ₯Ό μ‚¬μš©ν•˜μ—¬ ν‘œν˜„λ©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 더 λ§Žμ€ 문자 집합을 κ°€μ§„ μ–Έμ–΄λŠ” ν‘œν˜„μ„ μœ„ν•΄ 더 λ§Žμ€ λ°”μ΄νŠΈκ°€ ν•„μš”ν•©λ‹ˆλ‹€.
  • Encoding: 이 μš©μ–΄λŠ” λ¬Έμžκ°€ 일련의 λ°”μ΄νŠΈλ‘œ λ³€ν™˜λ˜λŠ” 방식을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€. UTF-8은 ASCII λ¬Έμžκ°€ ν•˜λ‚˜μ˜ λ°”μ΄νŠΈλ‘œ ν‘œν˜„λ˜κ³ , λ‹€λ₯Έ λ¬ΈμžλŠ” μ΅œλŒ€ λ„€ 개의 λ°”μ΄νŠΈλ‘œ ν‘œν˜„λ˜λŠ” 일반적인 인코딩 ν‘œμ€€μž…λ‹ˆλ‹€.
  • Processing Data: 데이터λ₯Ό μ²˜λ¦¬ν•˜λŠ” μ‹œμŠ€ν…œμ€ λ°”μ΄νŠΈ μŠ€νŠΈλ¦Όμ„ 문자둜 μ˜¬λ°”λ₯΄κ²Œ λ³€ν™˜ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λœ 인코딩을 인식해야 ν•©λ‹ˆλ‹€.
  • Variants of UTF: UTF-8 외에도 μ΅œμ†Œ 2λ°”μ΄νŠΈ(μ΅œλŒ€ 4λ°”μ΄νŠΈ)λ₯Ό μ‚¬μš©ν•˜λŠ” UTF-16 및 λͺ¨λ“  λ¬Έμžμ— λŒ€ν•΄ 4λ°”μ΄νŠΈλ₯Ό μ‚¬μš©ν•˜λŠ” UTF-32와 같은 λ‹€λ₯Έ 인코딩 ν‘œμ€€μ΄ μžˆμŠ΅λ‹ˆλ‹€.

μœ λ‹ˆμ½”λ“œμ˜ λ³΅μž‘μ„±κ³Ό λ‹€μ–‘ν•œ 인코딩 λ°©λ²•μ—μ„œ λ°œμƒν•  수 μžˆλŠ” 잠재적인 문제λ₯Ό 효과적으둜 μ²˜λ¦¬ν•˜κ³  μ™„ν™”ν•˜κΈ° μœ„ν•΄ μ΄λŸ¬ν•œ κ°œλ…μ„ μ΄ν•΄ν•˜λŠ” 것이 μ€‘μš”ν•©λ‹ˆλ‹€.

μœ λ‹ˆμ½”λ“œκ°€ λ™μΌν•œ 문자λ₯Ό λ‚˜νƒ€λ‚΄λŠ” 두 개의 λ‹€λ₯Έ λ°”μ΄νŠΈλ₯Ό μ •κ·œν™”ν•˜λŠ” λ°©λ²•μ˜ 예:

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

μœ λ‹ˆμ½”λ“œ 동등 문자 λͺ©λ‘μ€ μ—¬κΈ°μ—μ„œ 찾을 수 μžˆμŠ΅λ‹ˆλ‹€: https://appcheck-ng.com/wp-content/uploads/unicode_normalization.html 및 https://0xacb.com/normalization_table

λ°œκ²¬ν•˜κΈ°

μ›Ήμ•± λ‚΄μ—μ„œ λ°˜ν™˜λ˜λŠ” 값을 찾을 수 μžˆλ‹€λ©΄, **β€˜KELVIN SIGN’ (U+0212A)**λ₯Ό λ³΄λ‚΄λ³΄μ„Έμš”. μ΄λŠ” β€œKβ€œλ‘œ μ •κ·œν™”λ©λ‹ˆλ‹€ (이λ₯Ό %e2%84%aa둜 보낼 수 μžˆμŠ΅λ‹ˆλ‹€). β€œKβ€œκ°€ λ°˜ν™˜λœλ‹€λ©΄, μ–΄λ–€ μ’…λ₯˜μ˜ μœ λ‹ˆμ½”λ“œ μ •κ·œν™”κ°€ μˆ˜ν–‰λ˜κ³  μžˆλŠ” κ²ƒμž…λ‹ˆλ‹€.

λ‹€λ₯Έ μ˜ˆμ‹œ: %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λŠ” μœ λ‹ˆμ½”λ“œ 후에 Leonishanμž…λ‹ˆλ‹€.

μ·¨μ•½ν•œ μ˜ˆμ‹œ

SQL μΈμ μ…˜ ν•„ν„° 우회

μ‚¬μš©μž μž…λ ₯으둜 SQL 쿼리λ₯Ό μƒμ„±ν•˜λŠ” 데 문자 'λ₯Ό μ‚¬μš©ν•˜λŠ” μ›Ή νŽ˜μ΄μ§€λ₯Ό 상상해 λ³΄μ„Έμš”. 이 웹은 λ³΄μ•ˆ 쑰치둜 μ‚¬μš©μž μž…λ ₯μ—μ„œ 문자 **'**의 λͺ¨λ“  λ°œμƒμ„ μ‚­μ œν•˜μ§€λ§Œ, κ·Έ μ‚­μ œ ν›„ 및 쿼리 생성 전에 μ‚¬μš©μž μž…λ ₯을 μœ λ‹ˆμ½”λ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μ •κ·œν™”ν•©λ‹ˆλ‹€.

κ·Έλ ‡λ‹€λ©΄, μ•…μ˜μ μΈ μ‚¬μš©μžλŠ” ' (0x27)에 ν•΄λ‹Ήν•˜λŠ” λ‹€λ₯Έ μœ λ‹ˆμ½”λ“œ 문자 %ef%bc%87을 μ‚½μž…ν•  수 있으며, μž…λ ₯이 μ •κ·œν™”λ  λ•Œ 단일 μΈμš©λΆ€ν˜Έκ°€ μƒμ„±λ˜κ³  SQL μΈμ μ…˜ 취약점이 λ°œμƒν•©λ‹ˆλ‹€:

https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/

ν₯미둜운 μœ λ‹ˆμ½”λ“œ λ¬Έμžλ“€

  • 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 ν…œν”Œλ¦Ώ

GitHub - carlospolop/sqlmap_to_unicode_template

XSS (ꡐ차 μ‚¬μ΄νŠΈ μŠ€ν¬λ¦½νŒ…)

λ‹€μŒ 문자 쀑 ν•˜λ‚˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 속이고 XSSλ₯Ό μ•…μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€:

https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/

예λ₯Ό λ“€μ–΄, μ œμ•ˆλœ 첫 번째 μœ λ‹ˆμ½”λ“œ λ¬ΈμžλŠ” %e2%89%ae λ˜λŠ” %u226e둜 전솑될 수 μžˆμŠ΅λ‹ˆλ‹€.

https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/

퍼징 μ •κ·œ ν‘œν˜„μ‹

λ°±μ—”λ“œκ°€ μ •κ·œ ν‘œν˜„μ‹μœΌλ‘œ μ‚¬μš©μž μž…λ ₯을 확인할 λ•Œ, μž…λ ₯이 μ •κ·œ ν‘œν˜„μ‹μ— λŒ€ν•΄ μ •κ·œν™”λ˜μ§€λ§Œ μ‚¬μš©λ˜λŠ” 곳에 λŒ€ν•΄μ„œλŠ” μ •κ·œν™”λ˜μ§€ μ•Šμ„ 수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, Open Redirect λ˜λŠ” SSRFμ—μ„œ μ •κ·œ ν‘œν˜„μ‹μ΄ μ „μ†‘λœ URL을 μ •κ·œν™”ν•  수 μžˆμ§€λ§Œ, κ·Έ ν›„ μžˆλŠ” κ·ΈλŒ€λ‘œ μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€.

도ꡬ recollapseλŠ” λ°±μ—”λ“œλ₯Ό νΌμ§•ν•˜κΈ° μœ„ν•΄ μž…λ ₯의 λ³€ν˜•μ„ 생성할 수 있게 ν•΄μ€λ‹ˆλ‹€. 더 λ§Žμ€ μ •λ³΄λŠ” github와 이 κ²Œμ‹œλ¬Όμ„ ν™•μΈν•˜μ„Έμš”.

μœ λ‹ˆμ½”λ“œ μ˜€λ²„ν”Œλ‘œμš°

이 λΈ”λ‘œκ·Έμ—μ„œ, λ°”μ΄νŠΈμ˜ μ΅œλŒ€ 값은 255이며, μ„œλ²„κ°€ μ·¨μ•½ν•˜λ‹€λ©΄ μ˜€λ²„ν”Œλ‘œμš°λ₯Ό λ§Œλ“€μ–΄ νŠΉμ •ν•˜κ³  μ˜ˆμƒμΉ˜ λͺ»ν•œ ASCII 문자λ₯Ό 생성할 수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, λ‹€μŒ λ¬ΈμžλŠ” A둜 λ³€ν™˜λ©λ‹ˆλ‹€:

  • 0x4e41
  • 0x4f41
  • 0x5041
  • 0x5141

μ°Έκ³  λ¬Έν—Œ

Tip

AWS ν•΄ν‚Ή 배우기 및 μ—°μŠ΅ν•˜κΈ°:HackTricks Training AWS Red Team Expert (ARTE)
GCP ν•΄ν‚Ή 배우기 및 μ—°μŠ΅ν•˜κΈ°: HackTricks Training GCP Red Team Expert (GRTE) Azure ν•΄ν‚Ή 배우기 및 μ—°μŠ΅ν•˜κΈ°: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks μ§€μ›ν•˜κΈ°