Unicode Injection

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 μ§€μ›ν•˜κΈ°

Introduction

λ°±μ—”λ“œ/ν”„λ‘ νŠΈμ—”λ“œκ°€ μ΄μƒν•œ μœ λ‹ˆμ½”λ“œ 문자λ₯Ό 받을 λ•Œ μ–΄λ–»κ²Œ λ™μž‘ν•˜λŠ”μ§€μ— 따라 κ³΅κ²©μžλŠ” 보호λ₯Ό μš°νšŒν•˜κ³  μž„μ˜μ˜ 문자λ₯Ό μ£Όμž…ν•  수 있으며, μ΄λŠ” XSS λ˜λŠ” SQLi와 같은 μ£Όμž… 취약점을 μ•…μš©ν•˜λŠ” 데 μ‚¬μš©λ  수 μžˆμŠ΅λ‹ˆλ‹€.

Unicode Normalization

μœ λ‹ˆμ½”λ“œ μ •κ·œν™”λŠ” μœ λ‹ˆμ½”λ“œ λ¬Έμžκ°€ ASCII 문자둜 μ •κ·œν™”λ  λ•Œ λ°œμƒν•©λ‹ˆλ‹€.

이 μœ ν˜•μ˜ μ·¨μ•½μ μ˜ 일반적인 μ‹œλ‚˜λ¦¬μ˜€λŠ” μ‹œμŠ€ν…œμ΄ μ‚¬μš©μžμ˜ μž…λ ₯을 ν™•μΈν•œ ν›„ μ–΄λ–€ μ‹μœΌλ‘œλ“  μˆ˜μ •ν•  λ•Œ λ°œμƒν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, 일뢀 μ–Έμ–΄μ—μ„œλŠ” μž…λ ₯을 λŒ€λ¬Έμž λ˜λŠ” μ†Œλ¬Έμžλ‘œ λ§Œλ“œλŠ” κ°„λ‹¨ν•œ 호좜이 μ£Όμ–΄μ§„ μž…λ ₯을 μ •κ·œν™”ν•  수 있으며, μœ λ‹ˆμ½”λ“œλŠ” ASCII둜 λ³€ν™˜λ˜μ–΄ μƒˆλ‘œμš΄ 문자λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.
μžμ„Έν•œ λ‚΄μš©μ€ λ‹€μŒμ„ ν™•μΈν•˜μ„Έμš”:

Unicode Normalization

\u to %

μœ λ‹ˆμ½”λ“œ λ¬ΈμžλŠ” 일반적으둜 \u μ ‘λ‘μ‚¬λ‘œ ν‘œν˜„λ©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ 문자 γ±‹λŠ” \u3c4bμž…λ‹ˆλ‹€(μ—¬κΈ°μ—μ„œ 확인). λ§Œμ•½ λ°±μ—”λ“œκ°€ \u 접두사λ₯Ό %둜 λ³€ν™˜ν•˜λ©΄, κ²°κ³Ό λ¬Έμžμ—΄μ€ %3c4bκ°€ 되며, URL λ””μ½”λ”©ν•˜λ©΄: **<4b**κ°€ λ©λ‹ˆλ‹€. 그리고, λ³΄μ‹œλ‹€μ‹œν”Ό, < λ¬Έμžκ°€ μ£Όμž…λ©λ‹ˆλ‹€.
λ°±μ—”λ“œκ°€ μ·¨μ•½ν•˜λ‹€λ©΄ 이 κΈ°μˆ μ„ μ‚¬μš©ν•˜μ—¬ μ–΄λ–€ μ’…λ₯˜μ˜ λ¬Έμžλ„ μ£Όμž…ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
ν•„μš”ν•œ 문자λ₯Ό 찾으렀면 https://unicode-explorer.com/λ₯Ό ν™•μΈν•˜μ„Έμš”.

이 취약점은 μ‹€μ œλ‘œ μ—°κ΅¬μžκ°€ λ°œκ²¬ν•œ μ·¨μ•½μ μ—μ„œ λΉ„λ‘―λœ κ²ƒμœΌλ‘œ, 더 깊이 μžˆλŠ” μ„€λͺ…은 https://www.youtube.com/watch?v=aUsAHb0E7Cgμ—μ„œ ν™•μΈν•˜μ„Έμš”.

Emoji Injection

λ°±μ—”λ“œλŠ” 이λͺ¨μ§€λ₯Ό 받을 λ•Œ μ΄μƒν•˜κ²Œ λ™μž‘ν•˜λŠ” κ²½μš°κ°€ μžˆμŠ΅λ‹ˆλ‹€. μ—°κ΅¬μžκ°€ πŸ’‹img src=x onerror=alert(document.domain)//πŸ’›μ™€ 같은 νŽ˜μ΄λ‘œλ“œλ‘œ XSSλ₯Ό λ‹¬μ„±ν•œ 이 κΈ€μ—μ„œ λ°œμƒν•œ μΌμž…λ‹ˆλ‹€.

이 경우, μ„œλ²„κ°€ μ•…μ„± 문자λ₯Ό μ œκ±°ν•œ ν›„ Windows-1252μ—μ„œ UTF-8둜 UTF-8 λ¬Έμžμ—΄μ„ λ³€ν™˜ν–ˆκΈ° λ•Œλ¬Έμ— 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€(기본적으둜 μž…λ ₯ 인코딩과 λ³€ν™˜ 인코딩이 λΆˆμΌμΉ˜ν–ˆμŠ΅λ‹ˆλ‹€). 그러면 μ œλŒ€λ‘œ 된 <κ°€ μ•„λ‹ˆλΌ μ΄μƒν•œ μœ λ‹ˆμ½”λ“œμΈ β€Ήκ°€ μƒμ„±λ©λ‹ˆλ‹€.
``κ·Έλž˜μ„œ 그듀은 이 좜λ ₯을 κ°€μ Έμ™€μ„œ 이제 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;

이λͺ¨μ§€ λͺ©λ‘:

Windows Best-Fit/Worst-fit

**이 ν›Œλ₯­ν•œ κ²Œμ‹œλ¬Ό**μ—μ„œ μ„€λͺ…λœ 바와 같이, Windowsμ—λŠ” Best-Fitμ΄λΌλŠ” κΈ°λŠ₯이 μžˆμ–΄ ASCII λͺ¨λ“œμ—μ„œ ν‘œμ‹œν•  수 μ—†λŠ” μœ λ‹ˆμ½”λ“œ 문자λ₯Ό μœ μ‚¬ν•œ 문자둜 λŒ€μ²΄ν•©λ‹ˆλ‹€. μ΄λŠ” λ°±μ—”λ“œκ°€ νŠΉμ • 문자λ₯Ό κΈ°λŒ€ν•˜κ³  μžˆμ§€λ§Œ λ‹€λ₯Έ 문자λ₯Ό λ°›κ²Œ 될 λ•Œ μ˜ˆμƒμΉ˜ λͺ»ν•œ λ™μž‘μ„ μ΄ˆλž˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

**https://worst.fit/mapping/**μ—μ„œ best-fit 문자λ₯Ό 찾을 수 μžˆμŠ΅λ‹ˆλ‹€.

WindowsλŠ” 일반적으둜 μ‹€ν–‰μ˜ λ§ˆμ§€λ§‰ λΆ€λΆ„μ—μ„œ μœ λ‹ˆμ½”λ“œ λ¬Έμžμ—΄μ„ ASCII λ¬Έμžμ—΄λ‘œ λ³€ν™˜ν•˜λ―€λ‘œ(보톡 β€œW” 접미사가 μžˆλŠ” APIμ—μ„œ β€œA” 접미사가 μžˆλŠ” API둜 이동, 예: GetEnvironmentVariableA와 GetEnvironmentVariableW) κ³΅κ²©μžλŠ” μœ λ‹ˆμ½”λ“œ 문자λ₯Ό 보내어 보호λ₯Ό μš°νšŒν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이 λ¬ΈμžλŠ” λ§ˆμ§€λ§‰μ— ASCII 문자둜 λ³€ν™˜λ˜μ–΄ μ˜ˆμƒμΉ˜ λͺ»ν•œ λ™μž‘μ„ μˆ˜ν–‰ν•˜κ²Œ λ©λ‹ˆλ‹€.

λΈ”λ‘œκ·Έ κ²Œμ‹œλ¬Όμ—μ„œλŠ” 문자 λΈ”λž™λ¦¬μŠ€νŠΈλ₯Ό μ‚¬μš©ν•˜μ—¬ μˆ˜μ •λœ 취약점을 μš°νšŒν•˜λŠ” 방법, β€œ/β€œ (0x2F)에 λ§€ν•‘λœ λ¬Έμžμ™€ β€œ\β€œ (0x5C)에 λ§€ν•‘λœ 문자λ₯Ό μ‚¬μš©ν•˜μ—¬ 경둜 탐색을 μ•…μš©ν•˜λŠ” 방법, λ˜λŠ” PHP의 escapeshellargλ‚˜ Python의 subprocess.runκ³Ό 같은 μ…Έ μ΄μŠ€μΌ€μ΄ν”„ 보호λ₯Ό μš°νšŒν•˜λŠ” 방법이 μ œμ•ˆλ˜μ—ˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, **전각 λ”°μ˜΄ν‘œ (U+FF02)**λ₯Ό μ‚¬μš©ν•˜μ—¬ μ΅œμ’…μ μœΌλ‘œ 1개의 인수처럼 λ³΄μ΄λŠ” 것이 2개의 인수둜 λ³€ν™˜λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

앱이 μ·¨μ•½ν•˜λ €λ©΄ β€œW” Windows APIλ₯Ό μ‚¬μš©ν•΄μ•Ό ν•˜μ§€λ§Œ β€œA” Windows APIλ₯Ό ν˜ΈμΆœν•΄μ•Ό ν•˜λ―€λ‘œ μœ λ‹ˆμ½”λ“œ λ¬Έμžμ—΄μ˜ β€œBest-fitβ€œμ΄ μƒμ„±λ©λ‹ˆλ‹€.

μ—¬λŸ¬ 발견된 취약점은 이 문제λ₯Ό λˆ„κ°€ ν•΄κ²°ν•΄μ•Ό ν•˜λŠ”μ§€μ— λŒ€ν•œ ν•©μ˜κ°€ μ—†κΈ° λ•Œλ¬Έμ— μˆ˜μ •λ˜μ§€ μ•Šμ„ κ²ƒμž…λ‹ˆλ‹€.

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 μ§€μ›ν•˜κΈ°