HTML Injection - Типы и методы предотвращения
Life-Hack [Жизнь-Взлом]/ХакингВ этой статье мы рассмотрим такой тип атаки на web-приложения, как HTML - Injection.
Что такое HTML-инъекция?
Суть этого типа инъекционной атаки заключается во внедрении HTML-кода через уязвимые части веб-сайта. Злоумышленник отправляет HTML-код через любое уязвимое поле с целью изменить дизайн веб-сайта или любую информацию, отображаемую пользователю.
В результате пользователь может увидеть данные, присланные злоумышленником. Следовательно, в общем случае HTML-инъекция - это просто инъекция кода языка разметки в документ страницы.
Данные, которые отправляются во время этого типа инъекционной атаки, могут сильно отличаться. Это может быть несколько HTML-тегов, которые будут просто отображать отправленную информацию. Также это может быть вся поддельная форма или страница. Когда происходит эта атака, браузер обычно интерпретирует злонамеренные данные пользователя как допустимые и отображает их.
Изменение внешнего вида веб-сайта - не единственный риск, который несет этот тип атаки. Это очень похоже на XSS-атаку, когда злоумышленник крадет личные данные других людей. Следовательно, во время этой инъекции также может произойти кража личных данных пользователя.
Типы HTML-инъекций
Эта атака не кажется очень сложной для понимания или выполнения, поскольку HTML считается довольно простым языком. Однако есть разные способы выполнить этот тип атаки. Мы также можем выделить разные типы этой инъекции.
Во-первых, разные виды можно отсортировать по рискам, которые они несут.
Как уже упоминалось, эта инъекционная атака может выполняться с двумя разными целями:
- Чтобы изменить внешний вид отображаемого веб-сайта.
- Чтобы украсть личные данные других пользователей.
Кроме того, эта атака с использованием инъекций может выполняться через различные части веб-сайта, например, поля ввода данных и ссылку на веб-сайт.
Однако основными видами являются:
- Stored HTML Injection
- Reflected HTML Injection
Stored HTML Injection:
Основное различие между этими двумя типами инъекций заключается в том, что атака Stored HTML Injection происходит, когда вредоносный код HTML сохраняется на веб-сервере и выполняется каждый раз, когда пользователь вызывает соответствующую функцию.
Однако в случае атаки с отраженной инъекцией вредоносный HTML-код не сохраняется на веб-сервере постоянно. Отраженное внедрение происходит, когда веб-сайт немедленно реагирует на злонамеренный ввод.
Reflected HTML Injection:
Это снова можно разделить на несколько типов:
- Reflected GET
- Reflected POST
- Reflected URL
Атака отраженного внедрения может выполняться по-разному в зависимости от методов HTTP, то есть GET и POST. Напомню, что с помощью метода POST данные отправляются, а с помощью метода GET запрашиваются.
Чтобы узнать, какой метод используется для соответствующих элементов веб-сайта, мы можем проверить исходный код страницы.
Например, тестировщик может проверить исходный код формы входа и узнать, какой метод для нее используется. Затем можно выбрать соответствующий метод HTML-инъекции.

Reflected GET происходит, когда наш ввод отображается (отражается) на веб-сайте. Допустим, у нас есть простая страница с формой ввода данных, которая уязвима для этой атаки. Затем, если мы введем любой HTML-код, в качестве параметра, он появится на нашем веб-сайте и в то же время будет вставлен в HTML-документ.

http://mutillidae/index.php?page=user-poll.php&csrf-token=&choice=nmap&initials=%3Ca%22%22+href%3D%22%22onclick%3Dalert%28%22HTML%22%29%3Eprotey%3C%2Fa%3E&user-poll-php-submit-button=Submit+Vote
Полезная нагрузка:
<a"" href=""onclick=alert("HTML")>protey</a>

Результат:

Reflected POST HTML Injection немного сложнее. Это происходит, когда вместо правильных параметров метода POST отправляется вредоносный HTML-код.
Например, у нас есть форма входа, которая уязвима для HTML-атаки. Данные, введенные в форме входа, отправляются методом POST. Затем, если мы введем любой HTML-код вместо правильных параметров, он будет отправлен методом POST и отображаться на веб-сайте.
Для проведения атаки Reflected POST HTML рекомендуется использовать специальный плагин браузера, который будет подделывать отправленные данные. Один из них - плагин Mozilla Firefox «Tamper Data». Плагин принимает отправленные данные и позволяет пользователю изменять их. Затем измененные данные отправляются и отображаются на сайте.
Например, если мы будем использовать такой плагин, мы отправим тот же HTML-код, и он также будет отображаться примерно так же, как в предыдущем примере (зависит от приложения).

Полезная нагрузка:
<h1>PROTEY.NET</h1>

Reflected URL происходит, когда HTML-код отправляется через URL-адрес веб-сайта, отображается на веб-сайте и в то же время вводится в HTML-документ веб-сайта.

Полезная нагрузка:
<a href="data:text/html;base64,PHNjcmlwdD5hbGVydCg5KTwvc2NyaXB0Pg">protey</a>
Результат:

Как выполняется HTML-инъекция?
Чтобы выполнить этот вид инъекции, злоумышленник, во-первых, должен найти уязвимые места веб-сайта. Как уже упоминалось, такими местами сайта могут быть поля для ввода данных и ссылка на сайт.
Вредоносный HTML-код может попасть в исходный код через innerHTML. Напомним, что innerHTML - это свойство документа DOM, и с помощью innerHTML мы можем писать динамический HTML-код. Он используется в основном для полей ввода данных, таких как поля комментариев, анкеты, регистрационные формы и т. Д. Поэтому эти элементы наиболее уязвимы для HTML-атак.
Допустим, у нас есть анкета, где мы заполняем соответствующие ответы и свое имя. И когда анкета заполнена, отображается подтверждающее сообщение. В сообщении подтверждения также отображается имя указанного пользователя или его выбор.

Как мы понимаем, Tester_name - это имя, указанное пользователем. Следовательно, этот код сообщения подтверждения может выглядеть следующим образом:
var user_name=location.href.indexOf(“user=”); document.getElementById(“Thank you for filling our questionnaire”).innerHTML=” Thank you for filling our questionnaire, ”+user;
Продемонстрированный код уязвим для такой атаки. Если в форме анкеты ввести любой HTML-код, его сообщение будет отображаться на странице подтверждения.
То же самое происходит и с полями комментариев. Предположим, что если у нас есть форма для комментариев, и она уязвима для HTML-атаки.

В форме пользователь вводит свое имя и текст комментария. Все сохраненные комментарии перечислены на странице и загружены при загрузке страницы. Следовательно, если вредоносный код был набран и сохранен, он также будет загружен и отображен на сайте.
Например, если в поле комментариев мы сохраним код, как указано ниже, появится всплывающее окно с сообщением «Hello!» будет отображаться при загрузке страницы.
<html><body><script>alert("Hello!");</script></body></html>

Другой способ выполнения инъекции этого типа - переход по ссылке на веб-сайте. Допустим, у нас есть ссылка на сайт PHP.
Как видим, «site» - это параметр, а «1» - его значение. Тогда, если для параметра «site» вместо значения «1» мы укажем любой HTML-код с отображаемым текстом, этот указанный текст будет отображаться на странице «Page Not Found». Это происходит, только если страница уязвима для HTML-атаки.
Предположим, мы набираем текст с тегами <input type="text" name="foo" value=""onmouseover=alert(HTML_Injection)//"> вместо значения параметра.
Тогда мы получим текст, отображаемый на веб-сайте, как показано ниже:

Также, как уже упоминалось, может быть введен не только кусок HTML-кода. Целая вредоносная страница также может быть отправлена конечному пользователю.
Например, если пользователь открывает любую страницу входа и вводит свои учетные данные. В этом случае, если вместо исходной страницы загружается вредоносная страница, и пользователь отправляет свои учетные данные через эту страницу, третья сторона может получить учетные данные пользователя.
Как проверить наличие HTML-инъекции?
Приступая к проверке возможных атак путем инъекций, тестировщик должен сначала перечислить все потенциально уязвимые части веб-сайта.
Напомню, что это могут быть:
- Все поля ввода данных
- Ссылка на сайт
Тогда можно будет проводить ручные тесты.
При тестировании вручную, возможно ли внедрение HTML, можно ввести простой HTML-код - например, чтобы проверить, будет ли отображаться текст. Нет смысла тестировать очень сложный HTML-код, простого кода может быть достаточно, чтобы проверить его отображение.
Например, это могут быть простые теги с текстом:
<h1>HTML Injection testing</h1>
Или код формы поиска, если вы хотите протестировать что-то более сложное:
<form method="post" action="index.html"> <p><input type="text" name="search" value="" placeholder="Search text"></p> <p class="search_text"> <label> <input type="checkbox" name="search_text" id="search_text">
Введите текст для поиска:
</label> </p> <p class="submit"><input type="submit" name="commit" value="Search"></p> </form>
Если отображается HTML-код, который где-то сохраняется, то тестировщик может быть уверен, что эта инъекционная атака возможна. Затем можно попробовать более сложный код - например, для отображения поддельной формы входа.
Другое решение - сканер HTML Injection. Автоматическое сканирование против этой атаки может сэкономить много вашего времени. Хочу отметить, что инструментов для тестирования HTML Injection не так много по сравнению с другими атаками.
Однако одним из возможных решений является приложение WAS. WAS можно назвать довольно сильным сканером уязвимостей, поскольку он тестирует с разными входными данными, а не просто останавливается при выходе из строя первого.
Это полезно для тестирования, возможно, как упоминалось в вышеупомянутом плагине браузера «Tamper Data», он получает отправленные данные, позволяет тестеру изменить их и отправляет в браузер.
Мы также можем найти некоторые онлайн-инструменты сканирования, где вам нужно только предоставить ссылку на веб-сайт, и будет выполнено сканирование на предмет HTML-атаки. По завершении тестирования отобразится сводка.
Хочу отметить, что при выборе инструмента сканирования мы должны обращать внимание на то, как он анализирует результаты, и достаточно ли он точен.
Однако следует иметь в виду, что нельзя забывать о тестировании вручную. Таким образом, мы можем быть уверены, какие именно входные данные используются и какие точные результаты мы получаем. Также таким образом легче анализировать результаты.
Исходя из моего опыта в области тестирования программного обеспечения, я хотел бы прокомментировать, что для обоих способов тестирования мы должны хорошо знать этот тип инъекций. В противном случае было бы сложно выбрать подходящий инструмент автоматизации и проанализировать его результаты. Кроме того, всегда рекомендуется не забывать тестировать вручную, так как это только дает нам больше уверенности в качестве.
Как предотвратить HTML-иньекцию?
Нет сомнений в том, что основная причина этой атаки - невнимательность и незнание разработчика. Этот тип инъекционной атаки происходит, когда ввод и вывод не проверены должным образом. Поэтому основным правилом предотвращения HTML-атаки является соответствующая проверка данных.
Каждый ввод должен быть проверен, если он содержит какой-либо код сценария или любой код HTML. Обычно проверяется, содержит ли код какой-либо специальный скрипт или скобки HTML - <script> </script>, <html> </html>.
Существует множество функций для проверки наличия в коде специальных скобок. Выбор функции проверки зависит от языка программирования, который вы используете.
Следует помнить, что хорошее тестирование безопасности также является частью профилактики. Я хотел бы обратить внимание, что, поскольку атака HTML Injection очень редко встречается, о ней достаточно мало информации, как и об инструментах обнаружения. Однако эту часть тестирования безопасности нельзя пропускать, так как никогда не знаешь, когда это может понадобиться.
Кроме того, и разработчик, и тестировщик должны хорошо знать, как выполняется эта атака. Хорошее понимание процесса атаки может помочь предотвратить ее.
Сравнение с другими атаками
По сравнению с другими возможными атаками, HTML определенно не будет считаться такой опасной, как атака с использованием SQL-инъекции или JavaScript-инъекции или даже XSS. Она не уничтожит всю базу данных или не украдет все данные из базы. Однако её не следует рассматривать как незначительную.
Как упоминалось ранее, основной целью этого типа внедрения является изменение внешнего вида отображаемого веб-сайта с злонамеренной целью, отображение отправленной вами информации или данных конечному пользователю. Эти риски можно считать менее важными.
Изменение внешнего вида веб-сайта может нанести ущерб репутации вашей компании. Если злоумышленник испортит внешний вид вашего сайта, это может изменить мнение посетителей о вашей компании.
Следует помнить, что еще один риск, связанный с этой атакой на веб-сайт, - это кража личных данных другого пользователя.
Как уже упоминалось, с помощью HTML-инъекции злоумышленник может внедрить всю страницу, которая будет отображаться для конечного пользователя. Затем, если последний пользователь укажет свои данные для входа на поддельную страницу входа, они будут отправлены злоумышленнику. Этот случай, конечно, является наиболее рискованной частью атаки.
Следует отметить, что для кражи данных других пользователей этот тип атаки выбирается реже, так как существует множество других возможных атак.
Однако она очень похожа на XSS-атаку, которая крадет файлы cookie пользователя и личные данные других пользователей. Существуют также XSS-атаки, основанные на HTML. Поэтому тестирование против XSS и HTML-атак может быть очень похожим и выполняться вместе.
Вывод
Поскольку внедрение HTML не так популярно, как другие атаки, его можно считать менее рискованным. Поэтому тестирование на наличие данного вида инъекций иногда пропускается.
Так же стоить отметить малое количество информации об HTML Injection. Поэтому тестировщики могут решить не проводить этот тип тестирования. Однако в этом случае риски HTML-атаки могут быть недостаточно оценены.
Как мы проанализировали в этом руководстве, с помощью этого типа внедрения может быть уничтожен весь дизайн вашего веб-сайта или данные для входа пользователя могут быть украдены. Поэтому настоятельно рекомендуется включать HTML-инъекцию в тестирование безопасности.
Рекомендуемая литература
- In-Depth Eclipse Tutorials For Beginners
- SQL Injection Testing Tutorial (Example and Prevention of SQL Injection Attack)
- Python DateTime Tutorial with Examples
- Cross Site Scripting (XSS) Attack Tutorial with Examples, Types & Prevention
- JavaScript Injection Tutorial: Test and Prevent JS Injection Attacks on Website
- Unix Shell Scripting Tutorial with Examples
- Selenium Find Element By Text Tutorial with Examples
- Python Main Function Tutorial with Hands-on Examples