Unicode Injection

Support HackTricks

Introduction

В залежності від того, як поводиться бекенд/фронтенд, коли він отримує дивні символи unicode, зловмисник може обійти захист і впровадити довільні символи, які можуть бути використані для зловживання вразливостями ін'єкцій, такими як XSS або SQLi.

Unicode Normalization

Нормалізація Unicode відбувається, коли символи unicode нормалізуються до символів ascii.

Один з поширених сценаріїв цього типу вразливості виникає, коли система модифікує якимось чином вхідні дані користувача після їх перевірки. Наприклад, в деяких мовах простий виклик для перетворення входу на великі або малі літери може нормалізувати дані, і unicode буде перетворено на ASCII, генеруючи нові символи. Для отримання додаткової інформації дивіться:

Unicode Normalization

\u to %

Символи Unicode зазвичай представляються з префіксом \u. Наприклад, символ є \u3c4b(перевірте тут). Якщо бекенд перетворює префікс \u на %, отриманий рядок буде %3c4b, що при декодуванні URL є: <4b. І, як ви можете бачити, символ < впроваджено. Ви можете використовувати цю техніку для впровадження будь-якого символу, якщо бекенд вразливий. Перевірте https://unicode-explorer.com/, щоб знайти потрібні символи.

Ця вразливість насправді походить від вразливості, яку знайшов дослідник, для більш детального пояснення дивіться https://www.youtube.com/watch?v=aUsAHb0E7Cg

Emoji Injection

Бекенди поводяться дивно, коли вони отримують емодзі. Це сталося в цьому звіті, де дослідник зміг досягти XSS з корисним навантаженням, таким як: 💋img src=x onerror=alert(document.domain)//💛

У цьому випадку помилка полягала в тому, що сервер після видалення шкідливих символів перетворив 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;

Списки емодзі:

Підтримайте HackTricks

Last updated