21 - Pentesting FTP
Основна інформація
Протокол передачі файлів (FTP) слугує стандартним протоколом для передачі файлів через комп'ютерну мережу між сервером і клієнтом.
Це протокол у відкритому тексті, який використовує символ нового рядка 0x0d 0x0a
, тому іноді вам потрібно підключитися за допомогою telnet
або nc -C
.
Порт за замовчуванням: 21
Connections Active & Passive
В Active FTP FTP клієнт спочатку ініціює контрольне з'єднання з порту N до командного порту FTP сервера – порту 21. Потім клієнт слухає порт N+1 і надсилає порт N+1 на FTP сервер. FTP сервер потім ініціює з'єднання для передачі даних, з його порту M до порту N+1 FTP клієнта.
Але, якщо у FTP клієнта налаштований брандмауер, який контролює вхідні з'єднання для передачі даних ззовні, тоді активний FTP може бути проблемою. І, доцільним рішенням для цього є Passive FTP.
В Passive FTP клієнт ініціює контрольне з'єднання з його порту N до порту 21 FTP сервера. Після цього клієнт видає команду passv. Сервер потім надсилає клієнту один з його номерів порту M. І клієнт ініціює з'єднання для передачі даних з його порту P до порту M FTP сервера.
Source: https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/
Connection debugging
Команди FTP debug
та trace
можуть бути використані для того, щоб побачити як відбувається комунікація.
Enumeration
Banner Grabbing
Підключення до FTP з використанням starttls
Unauth enum
З nmap
Ви можете використовувати команди HELP
та FEAT
, щоб отримати деяку інформацію про FTP-сервер:
Анонімний вхід
anonymous : anonymous anonymous : ftp : ftp
Тут ви можете знайти гарний список з типовими ftp обліковими даними: https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt
Automated
Анонімний вхід та перевірки bounce FTP виконуються за замовчуванням nmap з опцією -sC або:
Browser connection
Ви можете підключитися до 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.5MB принаймні. Ось так:
Спробуйте заповнити запит "сміттєвими" даними, що стосуються протоколу (говорячи про 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
HackTricks Автоматичні команди
Last updated