hacktricks/pentesting-web/unicode-injection/README.md
2024-02-10 21:30:13 +00:00

5.5 KiB
Raw Blame History

유니코드 인젝션

htARTE (HackTricks AWS Red Team Expert)를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요!

HackTricks를 지원하는 다른 방법:

소개

백엔드/프론트엔드가 이상한 유니코드 문자를 받을 때, 공격자는 보호 기능을 우회하고 임의의 문자를 삽입하여 XSS 또는 SQLi와 같은 인젝션 취약점을 악용할 수 있습니다.

유니코드 정규화

유니코드 정규화는 유니코드 문자를 ASCII 문자로 정규화하는 과정입니다.

이 유형의 취약점의 일반적인 시나리오는 시스템이 사용자의 입력을 확인한 후에 입력을 수정하는 경우입니다. 예를 들어, 언어에 따라 입력을 대문자 또는 소문자로 변환하는 간단한 호출은 주어진 입력을 정규화하고 유니코드가 ASCII로 변환되어 새로운 문자가 생성될 수 있습니다.
자세한 내용은 다음을 참조하세요:

{% content-ref url="unicode-normalization.md" %} unicode-normalization.md {% endcontent-ref %}

\u%로 변환

유니코드 문자는 일반적으로 \u 접두사로 표시됩니다. 예를 들어, 문자 \u3c4b입니다(여기에서 확인하세요). 백엔드가 접두사 \u%로 변환하면 결과적으로 문자열은 %3c4b가 되며, 이를 URL 디코딩하면 **<4b**가 됩니다. 그리고 보시다시피 < 문자가 삽입됩니다.
백엔드가 취약하다면 이 기술을 사용하여 임의의 종류의 문자를 삽입할 수 있습니다.
필요한 문자를 찾으려면 https://unicode-explorer.com/를 확인하세요.

이 취약점은 실제로 연구원이 발견한 취약점에서 나온 것입니다. 더 깊은 설명은 https://www.youtube.com/watch?v=aUsAHb0E7Cg에서 확인할 수 있습니다.

이모지 인젝션

백엔드는 때때로 이모지를 받을 때 이상하게 동작합니다. 이는 이 writeup에서 발생한 것으로, 연구원은 💋img src=x onerror=alert(document.domain)//💛와 같은 페이로드로 XSS를 성공적으로 수행했습니다.

이 경우, 문제는 악성 문자를 제거한 후 서버가 UTF-8 문자열을 Windows-1252에서 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;

이모지 목록:

htARTE (HackTricks AWS Red Team Expert)를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요!

HackTricks를 지원하는 다른 방법: