Res
Hack into a vulnerable database server with an in-memory data-structure in this semi-guided challenge!

TryHackMe: Прохождение комнаты Res.
Доступ к комнате доступен только для аккаунтов с премиальной подпиской.
Просканируем с помощью nmap
все порты цели. Для существенного ускорения процесса получим список открытых портов, а потом просканируем только их, но уже более подробно:
-p-
– сканирование полного диапазона портов.-T4
– агрессивный режим сканирования для ускорения (подробнее здесь).--min-rate
– не менее 1000 пакетов в секунду.grep ^[0-9]
– оставить только строки с найденными портами.cut -d '/' -f 1
– разделить строки на столбцы по символу/
и оставить только первый столбец (список портов).tr '\n' ','
– заменить символ новой строки на запятую.sed s/,$//
– удалить последнюю запятую.

Сразу находим ответы на следующие четыре вопроса:
1. Scan the machine, how many ports are open?
2. What’s is the database management system installed on the server?
3. What port is the database management system running on?
4. What’s is the version of management system installed on the server?
Compromise the machine and locate user.txt
Попробуем подключиться к найденному redis
(поскольку используется стандартный порт, ключ -p 6379
можно опустить):
Подключение происходит удачно, никакой авторизации не требуется. Внутри так же нет никаких данных:
10.10.40.30:6379> KEYS *
10.10.40.30:6379> exit
Используя redis
возможно создать файл базы данных в публичной директории сервера в котором разместить, например, php
скрипт как значение ключа. И если сервер поддерживает PHP, то такой файл будет вполне себе успешно обработан php-препроцессором.
Для примера ниже приведен файл базы данных в которой для ключа test
задано значение <?=`$_GET[0]`?>
:
Особо стоит отметить, что необходимо отключить сжатие данных. Для небольших данных как в примере выше, это не обязательно, но если данные сколь либо объёмные, то они будут непригодны для препроцессора.
Вот как будет выглядеть следующий скрипт при включённом сжатии:

Прежде чем сохранять данные, необходимо знать где. Если зайти на сервер, то видно, что это apache2
и корневая директория /var/www/html
.
Теперь можно разместить скрипт, который позволит выполнять команды на сервере (в надежде, конечно, что там работает php):
|
Установим обратное соединение, для этого на атакующей машине запустим netcat в режиме ожидания подключения на 4444 порту:
Теперь с сервера установим соединение с атакующей машиной и получим доступ к первому флагу user.txt
($LHOST
– адрес атакующей машины):

What is the local user account password?
Для поиска путей эскалации привилегий воспользуемся LinPEAS. Поднимем локально веб-сервер который будет предоставлять доступ к linpeas
скрипту:
# linpeas.sh
# Serving HTTP on 0.0.0.0 port 8080 (http://0.0.0.0:8080/) ...
Теперь на атакуемом сервере запустим этот скрипт сразу из памяти ($SRVHOST
– адрес атакующей машины):
|

Судя по работе LinPEAS
, имеется возможность запуска xxd
с правами root
пользователя. А это означает, что можно прочесть shadow
– теневой файл с паролями пользователей:
| |

Если у вас в системе нет словарей, то их можно скачать с репозитория SecLists. В Linux дистрибутивах Parrot и Kali они предустановлены в
/usr/share/wordlist
.
Сохраним запись пользователя vianka
из теневого файла паролей на своей машине. Теперь можно попробовать провести брутфорс атаку с помощью John the Ripper:

Escalate privileges and obtain root.txt
Для доступа к последнему флагу внутри /root
директории аналогично воспользуемся xxd
:
На этом всё.