Jump to content

Двойной кодирование

Двойное кодирование - это акт кодирования данных дважды под строкой с использованием одной и той же схемы кодирования. Обычно он используется в качестве метода атаки для обхода схем авторизации или фильтров безопасности, которые перехватывают пользовательский ввод. При атаках двойного кодирования против фильтров безопасности символы полезной нагрузки, которые рассматриваются как незаконные этими фильтрами, заменяются их двойной формой.

Двойное ури-кодирование-это особый тип двойного кодирования, в котором данные подписаны дважды подряд . Он использовался для обхода схем авторизации и фильтров безопасности против инъекции кода , обхода каталогов , перекрестных сценариев (XSS) и SQL-инъекции .

Описание

[ редактировать ]

При двойном кодировании данные кодируются дважды в строке с использованием одной и той же схемы кодирования, то есть двойной кодируемой формы данных X является Encode(Encode(X)) где Encode является функцией кодирования. [ 1 ]

Двойное кодирование обычно используется в качестве метода атаки для обхода схем авторизации или фильтров безопасности, которые перехватывают пользовательский ввод. [ 2 ] При атаках двойного кодирования против фильтров безопасности символы полезной нагрузки, которые рассматриваются как незаконные этими фильтрами, заменяются их двойной формой. [ 3 ] Фильтры безопасности могут обрабатывать данные X и его закодированная форма как незаконная. [ 4 ] Однако это все еще возможно для Encode(Encode(X)), которая является двойной формой данных X, чтобы не рассматриваться как незаконные с помощью фильтров безопасности и, следовательно, пройти через них, но позже целевая система может использовать двумя декодированную форму Encode(Encode(X)), что есть X, то, что фильтры рассматривались бы как незаконные. [ 5 ]

Двойной ури-кодирование

[ редактировать ]

Двойное ури-кодирование, также называемое двойным процентным кодированием, представляет собой особый тип двойного кодирования, в котором данные дважды подписаны. [ 6 ] Другими словами, двойной кодируемой формы данных X является URI-encode(URI-encode(X)). [ 7 ] Например, для расчета двойной кодируемой формы <, первый < уриводимен как %3C который тогда, в свою очередь %253C, то есть, double-URI-encode(<) = URI-encode(URI-encode(<)) = URI-encode(%3C) = %253C. [ 8 ] В качестве другого примера для расчета двойной кодируемой формы ../, первый ../ уриводимен как %2E%2E%2F который тогда, в свою очередь %252E%252E%252F, то есть, double-URI-encode(../) = URI-encode(URI-encode(../)) = URI-encode(%2E%2E%2F) = %252E%252E%252F. [ 9 ]

Двойное ури-кодирование обычно используется в качестве техники атаки против веб-приложений и веб-браузеров для обхода схем авторизации и фильтров безопасности, которые перехватывают пользовательский ввод. [ 10 ] [ 11 ] Например, потому что . и его уризаторная форма %2E используются в некоторых атаках прохождения каталогов, они обычно рассматриваются как незаконные фильтры безопасности. [ 12 ] Однако это все еще возможно для %252E, который является двойной кодированной формой ., чтобы не рассматриваться как незаконные с помощью фильтров безопасности и, следовательно, проходить через них, но позже, когда целевая система строит путь, связанный с атакой обхода каталога, она может использовать двойную декорированную форму %252E, что есть ., то, что фильтры рассматривались бы как незаконные. [ 13 ]

Двойные атаки умодимости были использованы для обхода схем авторизации и фильтров безопасности в отношении инъекции кода, прохождения каталога, XSS и инъекции SQL. [ 14 ]

Профилактика

[ редактировать ]

Декодирование некоторого пользовательского ввода дважды, используя одну и ту же схему декодирования, один раз перед мерой безопасности и один раз после этого может позволить атаку двойного кодирования обходить эту меру безопасности. [ 15 ] Таким образом, чтобы предотвратить атаки двойного кодирования, все операции декодирования на пользовательском вводе должны происходить перед схемами авторизации и фильтрам безопасности, которые перехватывают ввод пользователя. [ 16 ]

На языке программирования PHP элементы данных в $_GET и $_REQUEST достаточно ури, и поэтому программисты должны избегать вызовов urldecode функционируйте на них. [ 17 ] Вызов urldecode функционировать в данных, которые были прочитаны из $_GET или $_REQUEST приводит к тому, что данные разбираются в URI раз больше, чем должны, и, следовательно, могут открыть возможность для двойных атак уризации.

Справочник

[ редактировать ]

В следующей программе PHP значение $_GET["file"] используется для создания пути файла, который будет отправлен пользователю. Это открывает возможность для атак каталогов, которые включают их полезную нагрузку в http параметр fileПолем В качестве фильтра безопасности против атаки обхода каталогов, эта программа ищет значение, которое он читает $_GET["file"] Для последовательностей обхода каталогов и выходов, если он находит один. Однако после этого фильтра программа уточняет данные, которые он прочитал $_GET["file"], что делает его уязвимым для удвоения атак по умоданию.

<?php
/* Note that $_GET is already URI-decoded */
$path = $_GET["file"];

/* Security filter */
/* Exit if user input contains directory traversal sequence */
if (strstr($path, "../") or strstr($path,  "..\\"))
{
    exit("Directory traversal attempt detected.");
}

/* URI-decode user input once again */
$path = urldecode($path);

/* Build file path to be sent using user input */
echo htmlentities(file_get_contents("uploads/" . $path));

Этот фильтр предотвращает полезные нагрузки, такие как ../../../../etc/passwd и его уризаторная форма %2E%2E%2F%2E%2E%2F%2E%2E%2F%2E%2E%2Fetc%2FpasswdПолем Однако, %252E%252E%252F%252E%252E%252F%252E%252E%252F%252E%252E%252Fetc%252Fpasswd, который является двойной кодированной формой ../../../../etc/passwd, будет обойти этот фильтр. При двойной полезной нагрузке %252E%252E%252F%252E%252E%252F%252E%252E%252F%252E%252E%252Fetc%252Fpasswd используется, значение $_GET["file"] будет %2E%2E%2F%2E%2E%2F%2E%2E%2F%2E%2E%2Fetc%2Fpasswd который не содержит никакой последовательности обхода каталога и, таким образом, проходит через фильтр и будет передаваться urldecode функция, которая возвращается ../../../../etc/passwd, в результате чего успешная атака.

В следующей программе PHP значение $_GET["name"] используется для создания сообщения, которое будет показано пользователю. Это открывает возможность для атак XSS, которые включают их полезную нагрузку в параметр http nameПолем В качестве фильтра безопасности против атак XSS эта программа продезинфицирует значение, которое он читает $_GET["name"] через htmlentities функция Однако после этого фильтра программа уточняет данные, которые он прочитал $_GET["name"], что делает его уязвимым для удвоения атак по умоданию.

<?php
/* Note that $_GET is already URI-decoded */
$name = $_GET["name"];

/* Security filter */
/* Sanitize user input via htmlentity */
$name = htmlentities($name);

/* URI-decode user input once again */
$name = urldecode($name);

/* Build message to be shown using user input */
echo "Hello " . $name;

Этот фильтр предотвращает полезные нагрузки, такие как <script>alert(1)</script> и его уризаторная форма %3Cscript%3Ealert%281%29%3C%2Fscript%3EПолем Однако, %253Cscript%253Ealert%25281%2529%253C%252Fscript%253E, который является двойной кодированной формой <script>alert(1)</script>, будет обойти этот фильтр. При двойной полезной нагрузке %253Cscript%253Ealert%25281%2529%253C%252Fscript%253E используется, значение $_GET["name"] будет %3Cscript%3Ealert%281%29%3C%2Fscript%3E который не содержит никакого незаконного характера и, таким образом, проходит через htmlentities функционировать без каких -либо изменений и будет передано urldecode функция, которая возвращается <script>alert(1)</script>, в результате чего успешная атака.

Источники

[ редактировать ]
  • CAPEC (2022). «CAPEC-120: двойное кодирование» . capec.mitre.org . 3.7 ​Получено 23 июля 2022 года .
  • CWE (2022). «CWE-174: двойное декодирование тех же данных» . cwe.mitre.org . 4.8 . Получено 23 июля 2022 года .
  • Имперва (2022). «Двойной URL -кодирование» . docs.imperva.com . Получено 23 июля 2022 года .
  • OWASP (2022). «Двойное кодирование» . Owasp.org . Получено 23 июля 2022 года .
  • PHP (2022). "Urldecode" . php.net . Получено 23 июля 2022 года .
  • Портсугер (2022). «Запутывающие атаки с использованием кодировки» . portswigger.net . Запутывание с помощью двойного URL -кодирования . Получено 23 июля 2022 года .
  • Прасад, Прахар (2016). «Двойное кодирование» . Освоение современного тестирования проникновения в Интернет . Packt Publishing. С. 11–14. ISBN  978-1785284588 .
  1. ^ CAPEC 2022 , Описание. «Служба использует повторение процесса кодирования для набора символов (то есть символов, кодирующего символ символа), чтобы запутать полезную нагрузку конкретного запроса».
  2. ^ CAPEC 2022 , описание, поток выполнения. «Это [двойное кодирование] может позволить противнику обходить фильтры, которые пытаются обнаружить незаконные символы или строки, такие как те, которые могут использоваться в обходных или инъекционных атакх [...], например, путем двойного кодирования определенных символов в URL (Например, точки и сутки). противник может попытаться получить доступ к ограниченным ресурсам на веб -сервере или заставлять просмотреть защищенные страницы (таким образом, подрывая службу авторизации) Также попробуйте другие атаки в стиле инъекции, используя эту схему атаки: инъекция команды, инъекция SQL и т. Д. »
  3. ^ CAPEC 2022 , описание, поток выполнения. «Это [двойное кодирование] может позволить противнику обходить фильтры, которые пытаются обнаружить незаконные символы или строки, такие как те, которые могут использоваться в обходе или инъекционных атакх. Приказ попытаться пройти мимо фильтров ».
  4. ^ OWASP 2022 , описание. «Используя двойную кодировку, можно обойти фильтры безопасности, которые только декодируют пользовательский ввод».
  5. ^ OWASP 2022 , описание. «Используя двойную кодировку, можно обойти фильтры безопасности, которые только один раз декодируют пользовательский ввод. Второй процесс декодирования выполняется бэкэнд -платформой или модулями, которые должным образом обрабатывают кодируемые данные, но не имеют соответствующих проверок безопасности».
  6. ^ Prasad 2016 , с. 11. «Двойной процент кодирование одинаково, что процент кодирования с поворотом, который каждый символ кодируется дважды, а не один раз».
  7. ^ Prasad 2016 , с. 11. «Двойной процент кодирование одинаково, что процент кодирования с поворотом, который каждый символ кодируется дважды, а не один раз».
  8. ^ Prasad 2016 , с. 11. «Поэтому, если бы мне пришлось кодировать <с использованием двойного кодирования, я сначала кодирую его в его процентно-кодированный формат, который составляет %3C, а затем снова процент кодирует символ %. Результат этого будет %253C».
  9. ^ OWASP 2022 , описание. "Например, ../ (Dot-dot-slash) символы представляют %2e %2e %2f в шестнадцатеричном представлении. Когда символ %снова кодируется, его представление в шестнадцатеричном коде составляет %25. Результат из процесса двойного кодирования ../ (dot-dot-slash) будет%252e%252e%252f "
  10. ^ Prasad 2016 , с. 11. "Эта техника [двойной процент кодирования] очень удобна при попытке уклониться от фильтров, которые пытаются черному списку определенных кодируемых символов"
  11. ^ CAPEC 2022 , поток выполнения. «Например, путем двойного кодирования определенных символов в URL -адреса (например, точек и ударов), противник может попытаться получить доступ к ограниченным ресурсам на веб -сервере или принудительно обратиться за защищенными страницами (таким образом, подрывает службу авторизации). Стчаний также может также может принять участие в Попытка других атак в стиле инъекции, используя эту схему атаки: инъекция команды, инъекция SQL и т. Д. »
  12. ^ CAPEC 2022 , Описание. «Например, точка (.), Часто используемая в атаках прохождения пути и, следовательно, часто блокируемой фильтрами, может быть кодируется URL как %2e. Однако многие фильтры распознают это кодирование и все равно будут блокировать запрос».
  13. ^ CAPEC 2022 , Описание. «В двойном кодировании %в приведенном выше URL -кодировке будет кодироваться снова как %25, что приведет к %252E, которые некоторые фильтры могут не поймать, но которые все еще можно интерпретировать как точку (.) Столбками на цели. "
  14. ^ CWE 2022 , наблюдаемые примеры.
  15. ^ CWE 2022 , описание. «Программное обеспечение дважды декодирует один и тот же вход, что может ограничить эффективность любого механизма защиты, который происходит между операциями декодирования».
  16. ^ CWE 2022 , Потенциальные смягчения. «Входные данные должны быть декодированы и канониализированы в текущее внутреннее представление приложения, прежде чем будет подтверждено (CWE-180)».
  17. ^ Php 2022 , Примечания. «Предупреждение: суперглобалы $ _get и $ _request уже декодированы. Использование urldecode () на элементе в $ _get или $ _request может иметь неожиданные и опасные результаты».
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 907614a391c33050952f0a59b91ff1bc__1664805660
URL1:https://arc.ask3.ru/arc/aa/90/bc/907614a391c33050952f0a59b91ff1bc.html
Заголовок, (Title) документа по адресу, URL1:
Double encoding - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)