Unicode Injection

ゼロからヒーローまでAWSハッキングを学ぶ htARTE(HackTricks AWS Red Team Expert)

HackTricksをサポートする他の方法:

はじめに

バックエンド/フロントエンドが奇妙なUnicode文字を受け取ったときの挙動に応じて、攻撃者は保護をバイパスし、任意の文字をインジェクトして、XSSやSQLiなどのインジェクション脆弱性を悪用する可能性があります。

Unicode正規化

Unicode正規化は、Unicode文字がASCII文字に正規化されるときに発生します。

このタイプの脆弱性の一般的なシナリオは、システムがユーザーの入力をチェックした後に何らかの方法で変更している場合です。たとえば、いくつかの言語では、入力を大文字または小文字に変換するだけの呼び出しで、与えられた入力が正規化され、UnicodeがASCIIに変換されて新しい文字が生成される可能性があります。 詳細については、次を参照してください:

pageUnicode Normalization

\u%に変換

Unicode文字は通常、\u接頭辞で表されます。たとえば、文字\u3c4bです(こちらで確認)。バックエンドが接頭辞**\u%に変換すると、結果の文字列は%3c4bになり、URLデコードされると<4bになります。そして、<文字がインジェクトされていることがわかります。 バックエンドが脆弱な場合、このテクニックを使用して任意の種類の文字をインジェクト**できます。 必要な文字を見つけるには、https://unicode-explorer.com/をチェックしてください。

この脆弱性は、実際には研究者が見つけた脆弱性に由来します。詳細な説明については、https://www.youtube.com/watch?v=aUsAHb0E7Cgをチェックしてください。

絵文字インジェクション

バックエンドは絵文字を受け取ったときに何か変な挙動をすることがあります。それが起こったのが、この解説で、研究者が💋img src=x onerror=alert(document.domain)//💛などのペイロードでXSSを達成したことです。

この場合、サーバーが悪意のある文字を削除した後、UTF-8文字列をWindows-1252からUTF-8に変換したことがエラーでした(基本的に入力エンコーディングと変換エンコーディングが一致していない)。その後、これは適切な<ではなく、奇妙なUnicodeのを生成します。 ``そのため、この出力を再度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;

絵文字リスト:

ゼロからヒーローまでのAWSハッキングを学ぶ htARTE(HackTricks AWS Red Team Expert)

HackTricksをサポートする他の方法:

Last updated