Unicode Injection

Support 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を達成したこのレポートで起こったことです。

この場合、サーバーが悪意のある文字を削除した後、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;

Emojiリスト:

HackTricksをサポートする

Last updated