Категория > Новости > HTB Writer. Ломаем приложение на Django, чтобы захватить веб-сервер - «Новости»
HTB Writer. Ломаем приложение на Django, чтобы захватить веб-сервер - «Новости»15-12-2021, 00:00. Автор: Kendal |
Hack The Box.warningПодключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками. РазведкаСканирование портовДобавляем IP-адрес машины в
10.10.10.101 writer.htb
И запускаем сканирование портов. Справка: сканирование портовСканирование портов — стандартный первый шаг при любой атаке. Он позволяет атакующему узнать, какие службы на хосте принимают соединение. На основе этой информации выбирается следующий шаг к получению точки входа. Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта. ports=$(nmap -p- --min-rate=500 $1 | grep^[0-9] | cut -d '/' -f 1 | tr 'n' ',' | sed s/,$//)nmap -p$ports -A $1 Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное, с использованием имеющихся скриптов (опция Результат работы скрипта Находим четыре открытых порта:
Справка: брутфорс учетокПоскольку в начале у нас нет учетных данных, нет и смысла изучать службы, которые всегда требуют авторизации (например, SSH). Единственное, что мы можем делать здесь, — это перебирать пароли брутфорсом, но у машин с HTB почти всегда есть другое прохождение. В жизни таких вариантов может не быть, к тому же есть шансы подобрать пароль или получить его при помощи социальной инженерии. Служба SMBПосмотрим, что мы сможем узнать об SMB без учетных данных. Для этого достаточно всего одной команды:
enum4linux -awriter.htb
Полученные пользователиИз интересной информации — два имени пользователей Сканирование веб-контентаЗаглянем на главную страницу сайта. Здесь ничего интересного нет, разве что имена авторов над каждым постом. В таких случаях нужно искать дополнительные страницы при помощи слепого перебора. Просканируем директории в корневом каталоге сайта с помощью ffuf.
ffuf -uhttp://writer.htb/FUZZ -fc 403 -t 200 -wdirectory_2.3_medium.txt
Справка: сканирование веба c ffufОдно из первых действий при тестировании безопасности веб‑приложения — это сканирование методом перебора каталогов, чтобы найти скрытую информацию и недоступные обычным посетителям функции. Для этого можно использовать программы вроде dirsearch и DIRB. Я предпочитаю легкий и очень быстрый ffuf. При запуске указываем следующие параметры:
Результат сканирования файлов Помимо известных нам страниц, мы нашли вход в админку. Там нас ждет форма авторизации. Форма авторизации Точка входаТак как сайт самописный, я решил протестировать обход аутентификации для разных технологий. Начал, конечно же, с SQL-инъекции. Переводим запрос в Burp Intruder и подставляем список нагрузок и в поле логина, и в поле пароля (у меня свой список, но их полно на GitHub). В результате находим последовательности, которые возвращают меньше данных, чем все остальные. Перебор нагрузок с помощью Burp Intruder Это работает, так как, скорее всего, на стороне сервера используется SQL-запрос вроде такого (код примерный):
При использовании нагрузки Страница администратора сайта Из интересного на странице лишь форма загрузки файлов. Однако прежде, чем изучать ее, я решил вернуться к SQL-инъекции. Из нее явно можно выжать что‑то еще! Давай потестируем форму авторизации и отправим на перебор словарь с другими нагрузками. Получим несколько результатов. Тестирование boolean based инъекцийТестирование UNION based инъекций Инъекции типа boolean и UNION based дают положительный результат. Опираясь на первую, мы можем построить «вопросительный» запрос и сможем получать ответы о том, верно или неверно какое‑то наше предположение. UNION based инъекции помогают извлекать за один запрос большие объемы данных. Поэтому выбираем второй тип. При этом мы уже знаем количество столбцов в используемой таблице — их шесть. Давай определим, данные из каких столбцов выводятся в ответе. Для этого в каждом столбце передадим уникальную последовательность и поищем ее в получаемой странице. При записи нагрузки в Burp выделим ее и нажмем Ctrl-U для URL-кодирования.
UNION ALL SELECT 888,8888,88888,888888,8888888,88888888 #
Определение целевого столбца таблицыПо количеству восьмерок определяем второй столбец! Теперь проверим тип данных. Например, вот такой строкой:
UNION ALL SELECT 888,"TEST_SQL",88888,888888,8888888,88888888#
Тестирование строчного типа данныхКак мы видим, строка отобразилась в ответе. Получим имеющиеся базы данных. Чтобы объединить несколько строк в одну, используем функции
UNION ALL SELECT 1,concat(':::',schema_name),3,4,5,6 from information_schema.schemata #
Базы данныхТеперь получим таблицы из таблицы
asd' UNION ALL SELECT 1,group_concat(0x7c,table_name,0x7c),3,4,5,6 from information_schema.tableas WHERE table_schema = 'writer'#
ТаблицыПолучаем таблицы. Скорее всего, в
asd' UNION ALL SELECT 1,group_concat(0x7c,column_name,0x7c),3,4,5,6 from information_schema.columns WHERE table_name = 'users'#
Имена столбцов в таблице usersОтлично, имеем username и password. Дампим пароли.
asd' UNION ALL SELECT 1,group_concat(0x7c,password,0x7c),3,4,5,6 from users#
Хеш пароля пользователяПолучаем хеш. Только есть одна загвоздка — он нам ничего не дает. Поэтому нужно снова менять вектор атаки. Попробуем читать файлы с сервера, к примеру из
asd' UNION ALL SELECT 1,LOAD_FILE('/etc/passwd'),3,4,5,6#
Содержимое файла /etc/passwdЗапрос успешно обработан, и мы получаем все содержимое файла. Точка опорыТак как мы можем читать файлы на сервере, следующий наш шаг — получить и проанализировать исходные коды сайта. Чтобы узнать путь к файлам сайта, взглянем на файл конфигураций Apache
asd' UNION ALL SELECT 1,LOAD_FILE("/etc/apache2/sites-enabled/000-default.conf"),3,4,5,6#
Файл конфигураций ApacheПерейти обратно к новости |