Добро пожаловать обратно, мои начинающие кибервоины!
В целом, можно сказать, что решением многих атак с использованием инъекций в веб-приложениях является «проверка входных данных». Она гарантирует, что входными данными являются только те данные, для обработки которых разработано приложение, а не вредоносные команды или скрипты, маскирующиеся под данные.
Некоторые приложения позволяют или даже побуждают нас загружать фотографии, аватары или другие изображения себя (например, Facebook, Twitter, LinkedIn, другие социальные сети или сайт вашей компании или учебного заведения). Что мешает злоумышленникам просто загрузить вредоносный скрипт? Обычно решение заключается в проверке и подтверждении типа входных данных перед их загрузкой.
В предыдущей публикации мы смогли загрузить вредоносный шелл на сайт DVWA, не проверив входные данные. В этом руководстве мы обойдем слабую проверку входных данных и всё равно загрузим вредоносный скрипт.
Шаг №1: Запуск Kali и Burp Suite
Для начала запустите Kali Linux и откройте BurpSuite.
Включите BurpSuite для проксирования ваших запросов и ответов из браузера. Подробнее о том, как это сделать с помощью Mozilla, читайте в моей предыдущей статье о BurpSuite.
Шаг №2: Запуск OWASP BWA
Теперь запустите сервер OWASP Broken Web App (BWA), перейдите в приложение DVWA и войдите в систему (администратор/пароль).
После входа в DVWA нажмите левую нижнюю кнопку и установите уровень безопасности DVWA на «средний». Убедитесь, что в прокси-сервере BurpSuite включена функция перехвата.
Шаг №3: Попытайтесь загрузить вредоносный файл
Теперь нажмите кнопку «Загрузить». Представьте, что это ваша страница в LinkedIn или профиль в Twitter. В обоих случаях вам нужно загрузить свою фотографию или аватар.
Обратите внимание, что на снимке экрана ниже приложение сообщает: «Выберите изображение для загрузки:».
Теперь вместо изображения мы пытаемся загрузить вредоносный скрипт Python. Я создал файл, назвал его «malicious_python_script.py» и попытался загрузить его. Вы можете создать любой текстовый файл, вредоносный или нет, и попытаться загрузить его.
Как видите ниже, приложение отклонило наш вредоносный скрипт, поскольку оно использует проверку входных данных, чтобы убедиться, что загружаемый файл является изображением. Можно ли обойти эту проверку?
Шаг №4: Обход проверки входных данных с помощью BurpSuite
Давайте перейдём в наш BurpSuite и посмотрим на POST-запрос, перехваченный перехватчиком. Как видно из строк 19 и 20, он определил имя файла и его тип как «text/x-python». Отлично, всё верно. Приложение было разработано так, чтобы разрешать загрузку только изображений, поэтому оно отклонило наш вредоносный файл.
Теперь перейдём к перехваченному POST-запросу и немного его отредактируем. Проверка входных данных производилась внутри формы на стороне клиента. Теперь, когда мы перехватили его по пути на сервер, мы можем изменить код, чтобы он отображал «безопасный» файл перед отправкой на сервер. Это можно сделать, изменив Content -Type в строке 20 на «image/jpeg». Таким образом, сервер примет этот файл, полагая, что это JPEG-файл.
Теперь в BurpSuite перешлите POST на сервер.
Файл успешно загружен, и наш скрипт Python готов к выполнению своей грязной работы!
Краткое содержание
В целом, валидация входных данных — это решение проблемы инъекционных атак на веб-приложения и другие приложения. В данном случае веб-приложение выполняло валидацию входных данных только на стороне клиента , и, следовательно, злоумышленник мог манипулировать POST-ответом в BurpSuite, чтобы изменить тип файла и заставить сервер принять наш вредоносный контент!
В целом, можно сказать, что решением многих атак с использованием инъекций в веб-приложениях является «проверка входных данных». Она гарантирует, что входными данными являются только те данные, для обработки которых разработано приложение, а не вредоносные команды или скрипты, маскирующиеся под данные.
Некоторые приложения позволяют или даже побуждают нас загружать фотографии, аватары или другие изображения себя (например, Facebook, Twitter, LinkedIn, другие социальные сети или сайт вашей компании или учебного заведения). Что мешает злоумышленникам просто загрузить вредоносный скрипт? Обычно решение заключается в проверке и подтверждении типа входных данных перед их загрузкой.
В предыдущей публикации мы смогли загрузить вредоносный шелл на сайт DVWA, не проверив входные данные. В этом руководстве мы обойдем слабую проверку входных данных и всё равно загрузим вредоносный скрипт.
Шаг №1: Запуск Kali и Burp Suite
Для начала запустите Kali Linux и откройте BurpSuite.
Включите BurpSuite для проксирования ваших запросов и ответов из браузера. Подробнее о том, как это сделать с помощью Mozilla, читайте в моей предыдущей статье о BurpSuite.
Шаг №2: Запуск OWASP BWA
Теперь запустите сервер OWASP Broken Web App (BWA), перейдите в приложение DVWA и войдите в систему (администратор/пароль).
После входа в DVWA нажмите левую нижнюю кнопку и установите уровень безопасности DVWA на «средний». Убедитесь, что в прокси-сервере BurpSuite включена функция перехвата.
Шаг №3: Попытайтесь загрузить вредоносный файл
Теперь нажмите кнопку «Загрузить». Представьте, что это ваша страница в LinkedIn или профиль в Twitter. В обоих случаях вам нужно загрузить свою фотографию или аватар.
Обратите внимание, что на снимке экрана ниже приложение сообщает: «Выберите изображение для загрузки:».
Теперь вместо изображения мы пытаемся загрузить вредоносный скрипт Python. Я создал файл, назвал его «malicious_python_script.py» и попытался загрузить его. Вы можете создать любой текстовый файл, вредоносный или нет, и попытаться загрузить его.
Как видите ниже, приложение отклонило наш вредоносный скрипт, поскольку оно использует проверку входных данных, чтобы убедиться, что загружаемый файл является изображением. Можно ли обойти эту проверку?
Шаг №4: Обход проверки входных данных с помощью BurpSuite
Давайте перейдём в наш BurpSuite и посмотрим на POST-запрос, перехваченный перехватчиком. Как видно из строк 19 и 20, он определил имя файла и его тип как «text/x-python». Отлично, всё верно. Приложение было разработано так, чтобы разрешать загрузку только изображений, поэтому оно отклонило наш вредоносный файл.
Теперь перейдём к перехваченному POST-запросу и немного его отредактируем. Проверка входных данных производилась внутри формы на стороне клиента. Теперь, когда мы перехватили его по пути на сервер, мы можем изменить код, чтобы он отображал «безопасный» файл перед отправкой на сервер. Это можно сделать, изменив Content -Type в строке 20 на «image/jpeg». Таким образом, сервер примет этот файл, полагая, что это JPEG-файл.
Теперь в BurpSuite перешлите POST на сервер.
Файл успешно загружен, и наш скрипт Python готов к выполнению своей грязной работы!
Краткое содержание
В целом, валидация входных данных — это решение проблемы инъекционных атак на веб-приложения и другие приложения. В данном случае веб-приложение выполняло валидацию входных данных только на стороне клиента , и, следовательно, злоумышленник мог манипулировать POST-ответом в BurpSuite, чтобы изменить тип файла и заставить сервер принять наш вредоносный контент!