.. | ||
ftp-bounce-attack.md | ||
ftp-bounce-download-2oftp-file.md | ||
README.md |
21 - Тестування на проникнення FTP
Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!
- Ви працюєте в кібербезпецівій компанії? Хочете побачити, як ваша компанія рекламується на HackTricks? або ви хочете мати доступ до останньої версії PEASS або завантажити HackTricks у форматі PDF? Перевірте ПЛАНИ ПІДПИСКИ!
- Відкрийте для себе Сім'ю PEASS, нашу колекцію ексклюзивних NFT
- Отримайте офіційний PEASS & HackTricks мерч
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за мною на Twitter 🐦@carlospolopm.
- Поділіться своїми хакерськими трюками, надсилайте PR до репозиторію hacktricks та репозиторію hacktricks-cloud.
Try Hard Security Group
{% embed url="https://discord.gg/tryhardsecurity" %}
Основна інформація
Протокол передачі файлів (FTP) служить стандартним протоколом для передачі файлів по комп'ютерній мережі між сервером та клієнтом.
Це текстовий протокол, який використовує як символ нового рядка 0x0d 0x0a
, тому іноді вам потрібно підключатися за допомогою telnet
або nc -C
.
Порт за замовчуванням: 21
PORT STATE SERVICE
21/tcp open ftp
Активне та Пасивне Підключення
У Активному 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
можуть бути використані для перегляду як відбувається комунікація.
Перелік
Захоплення Банера
nc -vn <IP> 21
openssl s_client -connect crossfit.htb:21 -starttls ftp #Get certificate if any
Підключення до FTP за допомогою starttls
lftp
lftp :~> set ftp:ssl-force true
lftp :~> set ssl:verify-certificate no
lftp :~> connect 10.10.10.208
lftp 10.10.10.208:~> login
Usage: login <user|URL> [<pass>]
lftp 10.10.10.208:~> login username Password
Неавтентифікована перевірка
За допомогою nmap
sudo nmap -sV -p21 -sC -A 10.10.10.10
Ви можете використовувати команди HELP
та FEAT
, щоб отримати деяку інформацію про FTP-сервер:
HELP
214-The following commands are recognized (* =>'s unimplemented):
214-CWD XCWD CDUP XCUP SMNT* QUIT PORT PASV
214-EPRT EPSV ALLO* RNFR RNTO DELE MDTM RMD
214-XRMD MKD XMKD PWD XPWD SIZE SYST HELP
214-NOOP FEAT OPTS AUTH CCC* CONF* ENC* MIC*
214-PBSZ PROT TYPE STRU MODE RETR STOR STOU
214-APPE REST ABOR USER PASS ACCT* REIN* LIST
214-NLST STAT SITE MLSD MLST
214 Direct comments to root@drei.work
FEAT
211-Features:
PROT
CCC
PBSZ
AUTH TLS
MFF modify;UNIX.group;UNIX.mode;
REST STREAM
MLST modify*;perm*;size*;type*;unique*;UNIX.group*;UNIX.mode*;UNIX.owner*;
UTF8
EPRT
EPSV
LANG en-US
MDTM
SSCN
TVFS
MFMT
SIZE
211 End
STAT
#Info about the FTP server (version, configs, status...)
Анонімний вхід
anonymous : anonymous
anonymous :
ftp : ftp
ftp <IP>
>anonymous
>anonymous
>ls -a # List all files (even hidden) (yes, they could be hidden)
>binary #Set transmission to binary instead of ascii
>ascii #Set transmission to ascii instead of binary
>bye #exit
Brute force
Тут ви можете знайти гарний список зі стандартними ftp обліковими даними: https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt
Автоматизовано
Перевірка FTP з можливістю анонімного входу та переадресації виконується за замовчуванням за допомогою nmap з опцією -sC або:
nmap --script ftp-* -p 21 <ip>
Підключення браузера
Ви можете підключитися до FTP-сервера за допомогою браузера (наприклад, Firefox), використовуючи URL-адресу:
ftp://anonymous:anonymous@10.10.10.98
Зверніть увагу, що якщо веб-застосунок надсилає дані, котрі контролює користувач, прямо на FTP-сервер, ви можете надіслати подвійне кодування URL %0d%0a
(у подвійному кодуванні URL це %250d%250a
) байтів і змусити FTP-сервер виконувати довільні дії. Однією з можливих довільних дій є завантаження вмісту з сервера, котрим керує користувач, виконання сканування портів або спроба спілкування з іншими службами на основі простого тексту (наприклад, http).
Завантажити всі файли з FTP
wget -m ftp://anonymous:anonymous@10.10.10.98 #Donwload all
wget -m --no-passive ftp://anonymous:anonymous@10.10.10.98 #Download all
Якщо ваш логін/пароль містить спеціальні символи, можна використати наступну команду:
wget -r --user="USERNAME" --password="PASSWORD" ftp://server.com/
Деякі 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 МБ як мінімум. Наприклад:
{% file src="../../.gitbook/assets/posts (1).txt" %} posts.txt {% endfile %}
- Спробуйте заповнити запит "сміттям" даних відносно протоколу (спілкуючись з FTP можливо просто сміттєві команди або повторення інструкції
RETR
для отримання файлу) - Просто заповніть запит багатьма нульовими символами або іншими (розділені на рядки або ні)
У будь-якому випадку, ось старий приклад того, як зловживати цим, щоб зробити FTP-сервер завантажити файл з іншого FTP-сервера.
Вразливість сервера Filezilla
FileZilla зазвичай прив'язується до локального адміністративного сервісу для FileZilla-Server (порт 14147). Якщо ви можете створити тунель з вашого комп'ютера, щоб отримати доступ до цього порту, ви можете підключитися до нього за допомогою порожнього пароля і створити нового користувача для служби FTP.
Файли конфігурації
ftpusers
ftp.conf
proftpd.conf
vsftpd.conf
Післяексплуатаційний етап
Конфігурацію за замовчуванням 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
{% embed url="https://discord.gg/tryhardsecurity" %}
Автоматичні команди HackTricks
Protocol_Name: FTP #Protocol Abbreviation if there is one.
Port_Number: 21 #Comma separated if there is more than one.
Protocol_Description: File Transfer Protocol #Protocol Abbreviation Spelled out
Entry_1:
Name: Notes
Description: Notes for FTP
Note: |
Anonymous Login
-bi <<< so that your put is done via binary
wget --mirror 'ftp://ftp_user:UTDRSCH53c"$6hys@10.10.10.59'
^^to download all dirs and files
wget --no-passive-ftp --mirror 'ftp://anonymous:anonymous@10.10.10.98'
if PASV transfer is disabled
https://book.hacktricks.xyz/pentesting/pentesting-ftp
Entry_2:
Name: Banner Grab
Description: Grab FTP Banner via telnet
Command: telnet -n {IP} 21
Entry_3:
Name: Cert Grab
Description: Grab FTP Certificate if existing
Command: openssl s_client -connect {IP}:21 -starttls ftp
Entry_4:
Name: nmap ftp
Description: Anon login and bounce FTP checks are performed
Command: nmap --script ftp-* -p 21 {IP}
Entry_5:
Name: Browser Connection
Description: Connect with Browser
Note: ftp://anonymous:anonymous@{IP}
Entry_6:
Name: Hydra Brute Force
Description: Need Username
Command: hydra -t 1 -l {Username} -P {Big_Passwordlist} -vV {IP} ftp
Entry_7:
Name: consolesless mfs enumeration ftp
Description: FTP enumeration without the need to run msfconsole
Note: sourced from https://github.com/carlospolop/legion
Command: msfconsole -q -x 'use auxiliary/scanner/ftp/anonymous; set RHOSTS {IP}; set RPORT 21; run; exit' && msfconsole -q -x 'use auxiliary/scanner/ftp/ftp_version; set RHOSTS {IP}; set RPORT 21; run; exit' && msfconsole -q -x 'use auxiliary/scanner/ftp/bison_ftp_traversal; set RHOSTS {IP}; set RPORT 21; run; exit' && msfconsole -q -x 'use auxiliary/scanner/ftp/colorado_ftp_traversal; set RHOSTS {IP}; set RPORT 21; run; exit' && msfconsole -q -x 'use auxiliary/scanner/ftp/titanftp_xcrc_traversal; set RHOSTS {IP}; set RPORT 21; run; exit'
Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!
- Чи працюєте ви в кібербезпеці компанії? Хочете побачити, як ваша компанія рекламується на HackTricks? або хочете мати доступ до останньої версії PEASS або завантажити HackTricks у форматі PDF? Перевірте ПЛАНИ ПІДПИСКИ!
- Відкрийте Сім'ю PEASS, нашу колекцію ексклюзивних NFT
- Отримайте офіційний PEASS & HackTricks мерч
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за мною на Twitter 🐦@carlospolopm.
- Поділіться своїми хакерськими трюками, надсилайте PR до репозиторію hacktricks і репозиторію hacktricks-cloud.