21 - Pentesting FTP
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Протокол передачі файлів (FTP) слугує стандартним протоколом для передачі файлів через комп'ютерну мережу між сервером і клієнтом.
Це протокол у відкритому тексті, який використовує символ нового рядка 0x0d 0x0a
, тому іноді вам потрібно підключитися за допомогою telnet
або nc -C
.
Порт за замовчуванням: 21
В 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/
Команди FTP debug
та trace
можуть бути використані для того, щоб побачити як відбувається комунікація.
З nmap
Ви можете використовувати команди HELP
та FEAT
, щоб отримати деяку інформацію про FTP-сервер:
anonymous : anonymous &#xNAN;anonymous : &#xNAN;ftp : ftp
Тут ви можете знайти гарний список з типовими ftp обліковими даними: https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt
Анонімний вхід та перевірки bounce FTP виконуються за замовчуванням nmap з опцією -sC або:
Ви можете підключитися до FTP-сервера, використовуючи браузер (наприклад, Firefox), за допомогою URL, як-от:
Зверніть увагу, що якщо веб-додаток надсилає дані, контрольовані користувачем, безпосередньо на FTP-сервер, ви можете надіслати подвоєне URL-кодування %0d%0a
(в подвоєному URL-кодуванні це %250d%250a
) байти і змусити FTP-сервер виконувати довільні дії. Однією з цих можливих довільних дій є завантаження вмісту з сервера, контрольованого користувачем, виконання сканування портів або спроба зв'язатися з іншими сервісами на основі простого тексту (наприклад, http).
Якщо ваш логін/пароль містить спеціальні символи, можна використовувати наступну команду:
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
Деякі 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-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
ftp
port:21
Вивчайте та практикуйте Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Вивчайте та практикуйте Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)