- Инструменты Kali Linux
- Список инструментов для тестирования на проникновение и их описание
- Hydra
- Описание Hydra
- Справка по Hydra
- Руководство по Hydra
- Информация о дополнительных параметрах для модулей Hydra, в которых они требуются
- Примеры запуска Hydra
- Установка Hydra
- xHydra (графический интерфейс для THC-Hydra)
- Программы, входящие в пакет THC-Hydra
- Брутим пароли с Гидрой (hydra)
- Установка
- Словари
- Я есть Грут Брут
- Гидра — фас!
- Basic Authentication
- Веб — авторизация
- Вместо заключения
Инструменты Kali Linux
Список инструментов для тестирования на проникновение и их описание
Hydra
Описание Hydra
Программа hydra поддерживает огромное количество служб, благодаря своей быстроте и надёжности она завоевала заслуженную признательность среди тестеров на проникновение.
Программа прекрасно компилируется и работает на Linux, Windows/Cygwin, Solaris, FreeBSD/OpenBSD, QNX (Blackberry 10) и OSX.
В настоящее время поддерживаются следующие протоколы: Asterisk, AFP, Cisco AAA, Cisco auth, Cisco enable, CVS, Firebird, FTP, HTTP-FORM-GET, HTTP-FORM-POST, HTTP-GET, HTTP-HEAD, HTTP-POST, HTTP-PROXY, HTTPS-FORM-GET, HTTPS-FORM-POST, HTTPS-GET, HTTPS-HEAD, HTTPS-POST, HTTP-Proxy, ICQ, IMAP, IRC, LDAP, MS-SQL, MYSQL, NCP, NNTP, Oracle Listener, Oracle SID, Oracle, PC-Anywhere, PCNFS, POP3, POSTGRES, RDP, Rexec, Rlogin, Rsh, RTSP, SAP/R3, SIP, SMB, SMTP, SMTP Enum, SNMP v1+v2+v3, SOCKS5, SSH (v1 and v2), SSHKEY, Subversion, Teamspeak (TS2), Telnet, VMware-Auth, VNC и XMPP.
Автор: Van Hauser, Roland Kessler
Справка по Hydra
Руководство по Hydra
Поддерживаемые службы (это же название модулей):
- asterisk
- afp
- cisco
- cisco-enable
- cvs
- firebird
- ftp
- ftps
- http-head
- https-head
- http-get
- https-get
- http-post
- https-post
- http-get-form
- https-get-form
- http-post-form
- https-post-form
- http-proxy
- http-proxy-urlenum
- icq
- imap
- imaps
- irc
- ldap2
- ldap2s
- ldap3
- ldap3s
- ldap3-crammd5
- ldap3-crammd5s
- ldap3-digestmd5
- ldap3-digestmd5s
- mssql
- mysql
- nntp
- oracle-listener
- oracle-sid
- pcanywhere
- pcnfs
- pop3
- pop3s
- postgres
- rdp
- redis
- rexec
- rlogin
- rsh
- rtsp
- s7-300
- sip
- smb
- smtp
- smtps
- smtp-enum
- snmp
- socks5
- ssh
- sshkey
- svn
- teamspeak
- telnet
- telnets
- vmauthd
- vnc
- xmpp
Дополнительная информация об опции -x
Сгенерировать пароли длинной от 3 до 5, состоящие из букв нижнего регистра:
Сгенерировать пароли длинной от 5 до 8, состоящие из букв верхнего регистра и цифр:
Сгенерировать пароли длинной от 1 до 3 символов, содержащих только слэши:
Сгенерировать пароли длинной 5 символов, которые состоят только из /%,.-
Информация о дополнительных параметрах для модулей Hydra, в которых они требуются
cisco
Модуль cisco опционально принимает ключевое слово ENTER, затем он отправляет начальное ENTER при подключении к службе.
cisco-enable
Модуль cisco-enable опционально принимает пароль входа для устройства cisco.
Примечание: если используется AAA аутентификация, используйте опцию -l для имени пользователя и опциональный параметр для пароля пользователя.
cvs
Модуль cvs опционально принимает имя репозитория для атаки, по умолчанию это «/root»
firebird
Модуль firebird опционально принимает имя базы данных для атаки, по умолчанию это «C:\Program Files\Firebird\Firebird_1_5\security.fdb»
http-get, https-get, http-post, https-post
Модули требует страницу для аутентификации.
Например: «/secret» или «http://bla.com/foo/bar» или «https://test.com:8080/members»
http-get-form, https-get-form, http-post-form, https-post-form
Модули требует страницу и параметры веб-формы.
По умолчанию этот модуль настроен следовать максимум пяти редиректам подряд. Он каждый раз собирает новое куки с того же URL без переменных. Параметр принимает три разделённых «:» значения, плюс опциональные значения.
(Примечание: если вам нужно двоеточие в строке опций в качестве значения, экранируйте его с «\:», но не экранируйте «\» с «\\».)
- Первое — это страница на сервере (URL) на которую отправляются данные методом GET или POST.
- Второе — это переменные POST/GET получаемые либо из браузера, либо прокси и т. д. Имена пользователей и пароли будут подставлены вместо заполнителей «^USER^» и «^PASS^» (ПАРАМЕТРЫ ФОРМЫ).
- Третье — это строка, которая проверяет неверный вход (по умолчанию). Перед условием неверного входа должна стоять «F=», перед условиям успешного входа должна стоять «S=». Это то место, где больше всего людей ошибаются. Вы должны проверить веб-приложение, на что похожа строка, которую он выдаёт при неуспешном входе и указать её в этом параметре!
Следующие параметры опциональны:
задаёт другую страницу с которой собрать начальные кукиз.
для отправки с каждым запросом заданного пользователем HTTP заголовка
^USER^ и ^PASS^ также могут быть размещены в этих заголовках!
Примечание: ‘h‘ добавит определённый пользователем заголовок в конец, независимо от того, отправила ли уже Hydra заголовок или нет.
‘H‘ заменит значение этого заголовка, если оно существует, тем, которое указал пользователь или добавит заголовок в конец.
Помните, если вы собираетесь разместить двоеточие (:) в ваших заголовках, вам следует их экранировать обратным слэшем (\). Все двоеточия, которые не являются разделителями опций, должны быть экранированы .
Вы можете задать заголовок без экранирования двоеточий, но в этом случае вы не сможете разместить двоеточия в само значения заголовка, поскольку они будут интерпретироваться в hydra как разделители опций.
http-proxy
Модуль http-proxy опционально принимает страницу на которой аутентификация.
По умолчанию это http://www.microsoft.com/)
Поддерживаются и согласовываются автоматически Basic, DIGEST-MD5 и NTLM.
http-proxy-urlenum
Модуль http-proxy-urlenum только использует опцию -L, а не опции -x или -p/-P. После опции -L должно идти имя файла с URL списком, которые нужно пробовать как прокси. Учётные данные прокси могут быть указаны как опциональный параметр, например:
imap, imaps
Модуль imap опционально принимает тип аутентификации: CLEAR or APOP (default), LOGIN, PLAIN, CRAM-MD5, CRAM-SHA1, CRAM-SHA256, DIGEST-MD5, NTLM
Дополнительно опцией TLS может быть принудительно выбрано TLS шифрование через STARTTLS.
irc
Модуль irc опционально принимает общий пароль сервера, если сервер его требует, и если ничего не указано, то будет использоваться пароль из -p/-P.
ldap2, ldap2s, ldap3, ldap3s, ldap3-crammd5, ldap3-crammd5s, ldap3-digestmd5, ldap3-digestmd5s
Модули опционально принимают DN (в зависимости от выбранного метода.
Примечание: вы также можете указать DN как логин, когда используется Простой метод аутентификации).
Ключевое слово «^USER^» заменяется логином.
Специальные указания для Простого метода имеют 3 режима работы: анонимный (без пользователя и пароля), не прошедший проверку подлинности (с пользователем, но без пароля), с проверкой подлинности юзер/пароль (пользователей и пароль).
Поэтому не забудьте установить пустую строку в качестве пользователя/пароля для тестирования всех режимов.
Подсказка: для аутентификации в windows active directy ldap это обычно cn=^USER^,cn=users,dc=foo,dc=bar,dc=com for domain foo.bar.com
mysql
Модуль mysql is опционально принимает базу данных для атаки, по умолчанию это «mysql»
nntp
Модуль nntp опционально принимает один тип аутентификации из: USER (по умолчанию), LOGIN, PLAIN, CRAM-MD5, DIGEST-MD5, NTLM.
oracle-listener
Модуль oracle-listener / tns опционально принимает режим, в котором сохранён пароль, это может быть PLAIN (по умолчанию) или CLEAR.
pop3, pop3s
Модуль pop3 опционально принимает один из типов аутентификации: CLEAR (по умолчанию), LOGIN, PLAIN, CRAM-MD5, CRAM-SHA1, CRAM-SHA256, DIGEST-MD5, NTLM.
Дополнительно опцией TLS можно выбрать принудительное TLS шифрование через STLS.
postgres
Модуль postgres опционально принимает имя базы данных для атаки, по умолчанию это «template1».
rdp
Модуль rdp опционально принимает доменное имя Windows.
s7-300
Модуль S7-300 специально для Siemens PLC. Ему нужен только пароль или отсутствие аутентификации, поэтому просто используйте опцию -p или -P.
smb
По умолчанию модуль smb настроен для тестирования и локального и доменного аккаунта, используя простой пароль с диалектом NTLM.
Примечание: вы можете выбрать тип группы используя ключевое слово LOCAL или DOMAIN или other_domain:
Вы можете задать тип пароля используя ключевое слово HASH или MACHINE (для использования машинное имя NetBIOS в качестве пароля).
Вы можете установить диалект используя ключевое слово NTLMV2, NTLM, LMV2, LM.
smtp, smtps
Модуль smtp опционально принимает тип аутентификации из: LOGIN (по умолчанию), PLAIN, CRAM-MD5, DIGEST-MD5, NTLM.
Дополнительно опцией TLS может быть принудительно выбрано TLS шифрование через STARTTLS.
smtp-enum
Модуль smtp-enum опционально принимает SMTP команду из: VRFY (по умолчанию), EXPN, RCPT (который подключится используя аккаунт «root»)
Параметр входа используются как параметры имени и пользователя и пароля в качестве доменного имени.
Например, для тестирования, существует ли john@localhost на 192.168.0.1:
snmp
Модуль snmp опционально принимает следующие параметры:
Для комбинирования опций используйте двоеточие («:»), например:
sshkey
Модуль sshkey не обеспечивает дополнительных опций, хотя меняется значение опций -p и -P:
- -p ожидает путь до незашифрованного приватного ключа в формате PEM.
- -P ожидает имя файла, содержащего список путей до некоторых незашифрованных ключей в формате PEM.
svn
Модуль svn опционально принимает имя репозитория для атаки, по умолчанию это «trunk»
telnet, telnets
Модуль telnet опционально принимает строку, которая отображается после успешного входа (не зависит от регистра), используйте если та, которая в telnet по умолчанию, выдаёт слишком много ложных срабатываний.
xmpp
Модуль xmpp опционально принимает тип аутентификации из: LOGIN (default), PLAIN, CRAM-MD5, DIGEST-MD5, SCRAM-SHA1.
Помните, что переданная цель должна быть fdqn, так как значение используется в запросе Jabber init, пример: hermes.jabber.org
Примеры запуска Hydra
Попытаться войти как пользователь root (-l root) используя список паролей (-P /usr/share/wordlists/metasploit/unix_passwords.txt) в 6 потоков (-t 6) на данный SSH сервер (ssh://192.168.1.123):
Попытаться войти как пользователь user (-l user) используя список паролей (-P passlist.txt) на данный FTP сервер (ftp://192.168.0.1):
Попытаться войти на SSH сервера (ssh) из списка (-M targets.txt) используя список пользователей (-L logins.txt) и список паролей (-P pws.txt):
Попробовать зайти на FTP сервера в указанной подсети (ftp://[192.168.0.0/24]/) с именем пользователя admin (-l admin) и паролем password (-p password):
Зайти на почтовый сервер (imap://192.168.0.1/), использующий протокол IMAP с именам пользователей из списка (-L userlist.txt) и паролем defaultpw (-p defaultpw), в качестве типа аутентификации выбран PLAIN:
Зайти на почтовый сервер с протоколом POP3S, размещённом указанном на IPv6 (-6) адресе 2001:db8::1, на порту 143 со списком учётных данных в формате «логин:пароль» размещённом в файле defaults.txt (-C defaults.txt) с использованием типа аутентификации DIGEST-MD5 и принудительным TLS шифрованием через STLS:
Установка Hydra
Программа предустановлена в Kali Linux.
Установка в BlackArch
Программа предустановлена в BlackArch.
Установка в Debian, Ubuntu, Linux Mint
Информация об установке в другие операционные системы будет добавлена позже.
xHydra (графический интерфейс для THC-Hydra)
Для запуска графического интерфейса xHydra выполните команду:
Программы, входящие в пакет THC-Hydra
В пакет Hydra входит программа pw-inspector — инструмент для уменьшения списка паролей за счёт отфильтровывания их по заданным параметрам.
Брутим пароли с Гидрой (hydra)
Paramtamtam · 2015.8.12 · 13 min
Статья носит носит строго познавательный характер, за применение кем либо описанных в статье методик автор ответственности не несет.
В тот момент, когда пинтест заходит в тупик — одним из крайних аргументов в тесте на проникновение является подбор паролей. Сервисы, к которым можно применить данный метод атаки — самые различные. А как следствие — различны и протоколы, и форматы обращений. Надо бы как то унифицировать инструменты для решения этой задачи — не хорошо под каждый новый случай писать новый брутер своими ручками.
И такой инструмент уже имеет место быть. Быстрый, сочный, достойный внимания — THC-Hydra. Версия 7.5 (из репозитория epel) поддерживает подбор по/для: asterisk cisco cisco-enable cvs firebird ftp ftps http[s]-
http[s]-Установка
Пользователям CentOS будет достаточно подключить репозиторий epel и выполнить:
Или для сборки из сорсов (актуально для linux, *bsd, solaris и т.д., а так же MacOS и мобильных системах, базирующихся на Linux):
По умолчанию бинарники гидры будут в директории /usr/local/bin/ , ежели что пропиши этот путь в
/.bash_profile , дописав его в переменной PATH .
При сборке из сорсов мы разумеется получаем самую свежую и сочную версию. В репах как правило лежит уже несколько устаревшая.
И ещё более простой вариант — использовать дистрибутив Kali Linux — там уже всё есть.
Словари
Брутить можно как с помощью подбора посимвольно, так и с помощью подготовленного словаря наиболее часто используемых паролей. Таки рекомендую первым делом попытаться подобрать пароль со словарем, и уже если и этот способ не увенчался успехом — переходить к прямому бруту посмивольно.
Где взять словари? Например, можно пошариться на этой странице или глянуть сразу здесь — имена архивов более чем говорящие. От себя лишь скажу, что использую в основном 3 словаря:
- Очень маленький и очень популярный (топ первые 500 паролей)
- Второй побольше — на 5000 паролей
- Третий от Cain & Abel на
И в таком же порядке их применяю во время теста. Второй словарь — это слитые воедино несколько других не менее популярных списков (отсортированный с удалением дубликатов и комментариев) который можно получить, например, так:
В качестве бонуса можешь забрать готовые списки паролей (top500; top4000; cain&abel (300k); пароли от яндекса (700k); пароли от маил.ру (2740k); маил.ру + яндекс (3300k)):
В общем, считаем что словари у тебя готовы к применению. Как пользоваться гидрой?
Я есть Грут Брут
Какие настройки и возможности предоставляет нам гидра? Давай рассмотрим флаги запуска по порядку:
Флаг | Описание |
---|---|
-R | Восстановить предыдущую сессию, которая по какой-либо причине была прервана |
-S | Использовать SSL соединение |
-s PORT | Указание порта (отличного от дефолтного) сервиса |
-l LOGIN | Использовать указанный логин для попытки аутентификации |
-L FILE | Использовать список логинов из указанного файла |
-p PASS | Использовать указанный пароль для попытки аутентификации |
-P FILE | Использовать список паролей из указанного файла |
-x | Генерировать пароли для подбора самостоятельно, указывается в формате -x MIN:MAX:CHARSET , где MIN — это минимальная длинна пароля, MAX — соответственно, максимальная, а CHARSET — это набор символов, в котором a означает латиницу в нижнем регистре, A — в верхнем регистре, 1 — числа, а для указания дополнительных символов — просто укажи их как есть. Вот несколько примеров генерации паролей: -x 3:5:a — длинной от 3 до 5 символов, состоящие только из символов латиницы в нижнем регистре; -x 5:8:A1 — длинной от 5 до 8 символов, состоящие из символов латиницы в верхнем регистре + цифр; -x 1:3:/ — длинной от 1 до 3 символов, состоящие только из символов слеша / ; -x 5:5:/%,.- — длинной в 5 символов, состоящие только из символов /%,.- |
-e nsr | Укажи n для проверки пустых паролей, s для попытки использования в качестве пароля — логин, и (или) r для попытки входа под перевернутым логином |
-u | Пытаться подобрать логин а не пароль |
-C FILE | Использовать файл в формате login:pass вместо указания -L / -P |
-M FILE | Файл со списком целей для брутфорса (можно с указанием порта через двоеточие), по одному на строку |
-o FILE | Записать подобранную пару логин/пароль в файл, вместо того чтоб просто вывести в stdout (будет указан с указанием сервера, к которому подобран — не запутаешься) |
-f / -F | Прекратить работу, как только первая пара логин:пароль будет подобрана. -f только для текущего хоста, -F — глобально |
-t TASKS | Количество параллельных процессов (читай — потоков). По умолчанию 16 |
-w | Таймаут для ответа сервера. По умолчанию 32 секунды |
-W | Таймаут между ответами сервера |
-4 / -6 | Использовать IPv4 (по умолчанию) или IPv6 адреса (при указании с -M всегда заключай в [] ) |
-v | Более подробный вывод информации о процессе |
-V | Выводить каждый подбираемый логин + пароль |
-d | Режим дебага |
-O | Использовать старый SSL v2 и v3 |
-q | Не выводить сообщения об ошибках подключения |
-U | Дополнительная информация о использовании выбранного модуля |
-h | Вывод справочной информации |
Гидра — фас!
Теперь давай рассмотрим пример работы на определенных целях. Все IP — вымышленные, соответствие с реальными — чистейшей воды совпадение 😉
Ахтунг! Юзай proxy/socks/vpn для безопасности собственной задницы. Так, сугубо на всякий случай
Basic Authentication
Например, сканируя диапазон адресов мы натыкаемся на некоторый интерфейс, доступный по http протоколу, но закрытый для доступа при помощи Basic Authentication (пример настройки с помощью nginx):
И у нас стоит задача вспомнить наш же забытый пароль 😉 Давай определимся с тем, какие данные у нас есть:
- IP сервера 192.168.1.2
- Сервис http
- Путь, который закрыт для нас запросом пары логин:пароль /private/
- Порт, на котором работает http сервер 80 (стандартный)
Предположим (или любым доступным путем выясним), что логин используется admin , и нам неизвестен лишь пароль. Подбирать будем с помощью заранее подготовленного словаря и с использованием модуля http-get :
Пабам — и через 1 секунду стандартный пароль admin успешно сбручен!
Другой пример — случайно находим в сети роутер MikroTik, да с открытыми наружу портами 80 (http) и 21 (ftp). Решаем сообщить его владельцу о наличии данной неприятности, но для этого нужно сперва получить доступ к этому самому микротику.
Брутить вебморду микротика можно, но проходит это значительно медленнее, чем например брутить ftp. А мы знаем, что стандартный логин на микротиках admin , и используется один пароль ко всем сервисам. Получив пароль для ftp — получим доступ ко всему остальному:
- IP сервера 178.72.83.246
- Сервис ftp
- Стандартный логин admin
- Порт, на котором работает ftp сервер 21 (стандартный)
И наблюдаем процесс подбора (
900 паролей в минуту):
Спустя каких то 30 секунд ещё один словарный пароль adminadmin был успешно подобран. После этого успешно логинимся в веб-панель:
Выясняем контакты администратора, сообщаем ему о наличии уязвимости, и больше ничего не делаем 😉
Веб — авторизация
Например — мы забыли пароль к роутеру, который использует веб-авторизацию. Т.е. не просто “выплывающее окошко браузера”, а полноценные поля для ввода пары логин:пароль. Давай попытаемся подобрать пароль и к нему. В рассматриваемом примере это OpenWrt:
Открываем панель отладки браузера ( F12 в Chromium-based браузерах), вкладка Network и отмечаем галочкой Preserve log . После этого вводим пароль, например, test_passw0rd (логин у нас уже введен), жмем кнопку “Login”, и смотрим в консоли что и куда уходит:
Отлично, теперь давай подытожим те данные, которыми мы располагаем:
- IP сервера 178.72.90.181
- Сервис http на стандартном 80 порту
- Для авторизации используется html форма, которая отправляет по адресу http://178.72.90.181/cgi-bin/luci методом POST запрос вида username=root&password=test_passw0rd
- В случае не удачной аутентификации пользователь наблюдает сообщение Invalid username and/or password! Please try again.
Приступим к запуску гидры:
И тут надо кое-что пояснить. Мы используем http-post-form потому как авторизация происходит по http методом post . После указания этого модуля идет строка /cgi-bin/luci:username=^USER^&password=^PASS^:Invalid username , у которой через двоеточие ( : ) указывается:
- Путь до скрипта, который обрабатывает процесс аутентификации. В нашем случае это /cgi-bin/luci
- Строка, которая передается методом POST, в которой логин и пароль заменены на ^USER^ и ^PASS^ соответственно. У нас это username=^USER^&password=^PASS^
- Строка, которая присутствует на странице при неудачной аутентификации. При её отсутствии гидра поймет что мы успешно вошли. В нашем случае это Invalid username
Подбор в моем случае идет довольно медленно (
16 паролей в минуту), и связано это в первую очередь с качеством канала и способностью железки обрабатывать запросы. Как мы видим — ей довольно тяжело это делать:
Подбор пароля по словарю ничего нам не дал, поэтому мы запустим посимвольный перебор. Длину пароля возьмем от 5 до 9 символов, латиницу в нижнем регистре с цифрами и символами [email protected]# :
И видим что процесс успешно запустился:
И понимая безысходность данного подхода останавливаем процесс, возвращаясь к перебору по большому словарю.
Кстати, для запуска hydra в фоне с продолжением её работы после того, как ты отключишься от ssh можно поступить следующим образом:
Вместо заключения
Не ленись настраивать на своих сервисах/железках защиту от брутфорса. Не используй фуфлыжные пароли. Не расценивай данный материал как призыв к каким-либо действиям. Используй для тестирования своих сервисов.