21 - Pentesting FTP
Try Hard Security Group
Основна інформація
Протокол передачі файлів (FTP) служить стандартним протоколом для передачі файлів по комп'ютерній мережі між сервером та клієнтом.
Це текстовий протокол, який використовує як символ нового рядка 0x0d 0x0a
, тому іноді вам потрібно підключатися за допомогою telnet
або nc -C
.
Порт за замовчуванням: 21
Активне та Пасивне Підключення
У Активному FTP FTP клієнт спочатку ініціює контрольне підключення зі свого порту N до порту команд FTP-сервера - порту 21. Після цього клієнт слухає порт N+1 та відправляє порт N+1 на FTP-сервер. FTP сервер потім ініціює підключення даних зі свого порту M до порту N+1 FTP-клієнта.
Проте, якщо у FTP-клієнта налаштований брандмауер, який контролює вхідні підключення даних ззовні, то активний FTP може бути проблемою. І можливим рішенням для цього є Пасивний FTP.
У Пасивному FTP клієнт ініціює контрольне підключення зі свого порту N до порту 21 FTP-сервера. Після цього клієнт видає команду passv. Сервер потім відправляє клієнту один зі своїх номерів портів M. І клієнт ініціює підключення даних зі свого порту P до порту M FTP-сервера.
Джерело: https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/
Налагодження Підключення
Команди FTP debug
та trace
можуть бути використані для перегляду як відбувається комунікація.
Перелік
Захоплення Банера
Підключення до FTP за допомогою starttls
Неавтентифікована перевірка
За допомогою nmap
Ви можете використовувати команди HELP
та FEAT
, щоб отримати деяку інформацію про FTP-сервер:
Анонімний вхід
anonymous : anonymous anonymous : ftp : ftp
Тут ви можете знайти гарний список зі стандартними ftp обліковими даними: https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt
Автоматизовано
Перевірка FTP з можливістю анонімного входу та переадресації виконується за замовчуванням за допомогою nmap з опцією -sC або:
Підключення браузера
Ви можете підключитися до FTP-сервера за допомогою браузера (наприклад, Firefox), використовуючи URL-адресу:
Зверніть увагу, що якщо веб-застосунок надсилає дані, котрі контролює користувач, прямо на FTP-сервер, ви можете надіслати подвійне кодування URL %0d%0a
(у подвійному кодуванні URL це %250d%250a
) байтів і змусити FTP-сервер виконувати довільні дії. Однією з можливих довільних дій є завантаження вмісту з сервера, котрим керує користувач, виконання сканування портів або спроба спілкування з іншими службами на основі простого тексту (наприклад, http).
Завантажити всі файли з FTP
Якщо ваш логін/пароль містить спеціальні символи, можна використати наступну команду:
Деякі FTP-команди
USER username
PASS password
HELP
Сервер вказує, які команди підтримуються**
PORT 127,0,0,1,0,80
** Це вказує FTP-серверу встановити з'єднання з IP 127.0.0.1 на порті 80 (потрібно встановити 5-й символ як "0" і 6-й як порт у десятковому або використовувати 5-й і 6-й для вираження порту у шістнадцятковій системі).**
EPRT |2|127.0.0.1|80|
** Це вказує FTP-серверу встановити з'єднання TCP (позначене як "2") з IP 127.0.0.1 на порті 80. Ця команда підтримує IPv6.LIST
Це відправить список файлів у поточній папціLIST -R
Рекурсивний перелік (якщо дозволено сервером)APPE /path/something.txt
Це вказує FTP зберегти отримані дані з пасивного з'єднання або з'єднання з PORT/EPRT у файл. Якщо ім'я файлу існує, дані будуть додані.STOR /path/something.txt
Те ж саме, що йAPPE
, але перезапише файлиSTOU /path/something.txt
Те ж саме, що йAPPE
, але якщо файл існує, нічого не зробить.RETR /path/to/file
Потрібно встановити пасивне або портове з'єднання. Потім FTP-сервер відправить вказаний файл через це з'єднанняREST 6
Це вказує серверу, що наступного разу, коли він відправить щось за допомогоюRETR
, він повинен почати з 6-го байту.TYPE i
Встановити передачу у бінарному режиміPASV
Це відкриє пасивне з'єднання та покаже користувачеві, куди він може підключитисяPUT /tmp/file.txt
Завантажити вказаний файл на FTP
Атака FTPBounce
Деякі FTP-сервери дозволяють команду PORT. Цю команду можна використовувати для вказівки серверу, що ви хочете підключитися до іншого FTP-сервера на певному порті. Потім ви можете використовувати це для сканування відкритих портів хоста через FTP-сервер.
Дізнайтеся тут, як зловживати FTP-сервером для сканування портів.
Ви також можете зловживати цим поведінкою, щоб зробити FTP-сервер взаємодіювати з іншими протоколами. Ви можете завантажити файл, що містить запит HTTP, і змусити вразливий FTP-сервер відправити його на довільний HTTP-сервер (можливо, щоб додати нового адміністратора?) або навіть завантажити запит FTP і змусити вразливий FTP-сервер завантажити файл для іншого FTP-сервера. Теорія проста:
Завантажте запит (у текстовому файлі) на вразливий сервер. Пам'ятайте, що якщо ви хочете спілкуватися з іншим HTTP- або FTP-сервером, вам потрібно змінити рядки на
0x0d 0x0a
Використовуйте
REST X
, щоб уникнути відправлення символів, які ви не хочете відправляти (можливо, для завантаження запиту всередині файлу вам потрібно було додати деякий заголовок зображення на початку)Використовуйте
PORT
, щоб підключитися до довільного сервера та службиВикористовуйте
RETR
, щоб відправити збережений запит на сервер.
Дуже ймовірно, що це викине помилку Socket not writable через те, що з'єднання не триває достатньо довго, щоб відправити дані за допомогою RETR
. Рекомендації для спроб уникнути цього:
Якщо ви відправляєте запит HTTP, повторюйте той самий запит один за одним до ~0.5 МБ як мінімум. Наприклад:
Спробуйте заповнити запит "сміттям" даних відносно протоколу (спілкуючись з FTP можливо просто сміттєві команди або повторення інструкції
RETR
для отримання файлу)Просто заповніть запит багатьма нульовими символами або іншими (розділені на рядки або ні)
У будь-якому випадку, ось старий приклад того, як зловживати цим, щоб зробити FTP-сервер завантажити файл з іншого FTP-сервера.
Вразливість сервера Filezilla
FileZilla зазвичай прив'язується до локального адміністративного сервісу для FileZilla-Server (порт 14147). Якщо ви можете створити тунель з вашого комп'ютера, щоб отримати доступ до цього порту, ви можете підключитися до нього за допомогою порожнього пароля і створити нового користувача для служби FTP.
Файли конфігурації
Післяексплуатаційний етап
Конфігурацію за замовчуванням vsFTPd можна знайти в /etc/vsftpd.conf
. Тут можна знайти деякі небезпечні налаштування:
anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_root=/home/username/ftp
- Директорія для анонімного користувача.chown_uploads=YES
- Змінити власника анонімно завантажених файлівchown_username=username
- Користувач, якому надається власність анонімно завантажених файлівlocal_enable=YES
- Увімкнути можливість входу локальних користувачівno_anon_password=YES
- Не запитувати анонімного користувача про парольwrite_enable=YES
- Дозволити команди: STOR, DELE, RNFR, RNTO, MKD, RMD, APPE та SITE
Shodan
ftp
port:21
Try Hard Security Group
Автоматичні команди HackTricks
Last updated