- Регистрация
- 23.09.18
- Сообщения
- 12.347
- Реакции
- 176
- Репутация
- 0

Сегодня рассмотрим самое противоречивое задание
You must be registered for see links
: первая его часть является рекордсменом по количеству прошедших его участников, а вторая часть покорилась лишь единицам. Что же в нем такого особенного? Разбираемся под катом!Тебе когда-нибудь приходилось исследовать дамп оперативной памяти? А знаешь ли ты, сколько всего интересного можно оттуда извлечь? (спойлер: все, включая результаты работы запущенных скриптов, недавние фотографии, а также историю браузера).
А как насчет экзотичных SQL-инъекций? Ты загружаешь определенную картинку на сайт, а тебе выдается информация из закрытой базы данных — разве это не идеальное преступление?
В первой части статьи мы рассмотрим средства для анализа дампа оперативной памяти и научимся извлекать оттуда нужную нам информацию, а во второй части статьи наглядно покажем процесс манипуляции тегами картинки для проведения хитрой инъекции
Итак, задании предлагается скачать
You must be registered for see links
, который содержит бинарный файл размером 1 Гб с говорящим названием memdump.bin, исходя из чего можно предположить, что это дамп оперативной памяти. Для его исследования будем использовать
You must be registered for see links
. Volatility поддерживает различные плагины, которые упрощают поиск и извлечение из дампа различной полезной для 
Судя по выводу команды imageinfo, мы имеем дело с дампом памяти Windows 7. Далее посмотрим список запущенных процессов в системе на момент снятия дампа с помощью команды pslist:

В полученном списке можно заметить несколько интересных процессов. Начнем исследование с процесса chrome.exe — в браузере всегда можно найти что-нибудь интригующее. Для volatility существуют дополнительные плагины, которые автоматизируют извлечение информации из процессов. Например, плагин
You must be registered for see links
позволит нам извлечь из дампа оперативной памяти историю посещений браузера:
В истории хрома можно заметить сразу несколько интересных вещей. Во-первых, ссылка
You must be registered for see links
, а также поисковые запросы про метаданные в PNG изображениях, что также является подсказкой ко второй части, но к этому обратимся позже. На текущем же этапе для нас интересны запросы про промокод 
Удача! Похоже, в дампе присутствует некий promo.pdf. Попробуем вытащить его, используя команду dumpfiles:

На этом этапе могут возникнут небольшие сложности из-за того, некоторые программы просмотра pdf-документов могут не распознать только что извлеченный файл (необходимо просто удалить лишние байты в конце файла). Но разве страшны нам какие-то лишние байты?

Далее попробуем получить второй флаг. Вернемся к сайту, ссылку на который нашли в истории браузера. Для доступа на сайт требуется ввести промокод. Вспоминаем историю поиска в браузере и описание самого документа (USE THIS TO JOIN), из чего можно предположить, что первый флаг и является нужным нам промокодом. Вводим его в поле и попадаем на сайт, где нам предлагают загрузить картинку:

Судя по тому, как часто сайт зависал, наши участники решили опытным путем проверить загрузку всех возможных типов документов. Энное количество времени спустя понимаем, что на сайт можно загружать только изображения в формате PNG. Следующей головоломкой является сообщение «Not enough data to store this image, sorry!», возникающее при попытке загрузить какую-нибудь картинку.
Возвращаясь к истории браузера, вспоминаем про запросы вида «add metadata to png file». Путем несложных умозаключений делаем вывод, что, скорее всего, для загрузки изображения на сайт в его метаданные должны быть внесены определенные значения. Начать можно с изучения формата PNG (описание есть, например,
You must be registered for see links
). Сначала проверяем список стандартных ключевых слов для метаданных PNG изображений, например: «Author», «Description» и т.д. Используя, например, утилиту convert из набора ImageMagick, добавим метаданные тестовому изображению:convert test.png -set 'Title' '1' -set 'Author' '2' -set 'Description' '3' -set 'Copyright' '4' -set 'Creation Time' '5' -set 'Software' '6' -set 'Disclaimer' '7' -set 'Warning' '8' -set 'Source' '9' -set 'Comment' '0' out.png
Пробуем загрузить полученное изображение на сайт и радуемся успеху:

Оказывается, что необходимыми полями метаданных являются Title, Description, Author и Copyright.
Подсказку к этому, к слову, можно отыскать и в дампе памяти: можно найти упоминание файла mr_cat.png, используя volatility.

Наши участники решили, что именно с помощью мистера Кота нужно провести инъекцию на сайт (на нашу почту приходила куча сообщений с мистером Котом в сжатом, перевернутом, отраженном и иных

Идем дальше: теперь мы можем загружать файлы на сайт; однако что это дает и как искать флаг? Логично предположить, что раз для загрузки требуются метаданные, то, возможно, они каким-то образом используются для хранения загруженных файлов (например, как ключи в базе данных). Ура! Мы приближаемся к десерту: необходимо проверить сайт на возможность проведения SQL-инъекции. Выясняем, что если в один из параметров подставить двойную кавычку ("), то сайт вместо загрузки изображения оповестит нас об ошибке:

Теперь мы видим сам SQL-запрос и понимаем, какими полями можем оперировать, чтобы сконструировать инъекцию для извлечения данных из используемой БД. Что касается местоположения флага, то в данном случае логично проверить самое первое изображение, которое было загружено в базу данных. Также при эксплуатации инъекции следует обратить внимание на то, что в запросе выполняется INSERT. Это заставляет конструировать специфичные запросы, потому что нельзя одновременно с операцией вставки (INSERT) явно выполнять операцию выбора (SELECT) из той же таблицы, в которую производится вставка.
Составим запрос, с помощью которого вытащим описание (Description) первого изображения в базе данных:
convert test1.png -set 'Title' '1' -set 'Author' '",(SELECT description FROM (SELECT * FROM picture) AS x limit 0,1) ) — -' -set 'Description' '3' -set 'Copyright' '4' test.png
Загрузим полученное изображение на сайт и получим в поле Copyright описание, которое представляет собой флаг:

Ура, задание пройдено! Надеемся, что мы убедили всех в миллионный раз перепроверять пользовательский ввод данных, а также беречь как зеницу ока от создания дампа свою оперативную память
Закончим статью цитатой великих мудрецов:
