Hydra

Очень часто самым началом или концом теста приложения на безопасность является подбор паролей. Сервисы, к которым можно применить данный метод атаки - самые различные. А как следствие - различны и протоколы, и форматы обращений. Для унификации этой задачи есть отичный инструмент - THC-Hydra. Версия 7.5 (из репозитория epel) поддерживает подбор по/для: asterisk cisco cisco-enable cvs firebird ftp ftps http[s]-{head|get} http[s]-{get|post}-form http-proxy http-proxy-urlenum icq imap[s] irc ldap2[s] ldap3[-{cram|digest}md5][s] mssql mysql nntp oracle-listener oracle-sid pcanywhere pcnfs pop3[s] postgres rdp rexec rlogin rsh sip smb smtp[s] smtp-enum snmp socks5 ssh sshkey svn teamspeak telnet[s] vmauthd vnc xmpp.

В качестве примера работы - предположим следующие исходные данные:

  • IP сервера 178.72.90.181;
  • Сервис http на стандартном 80 порту;
  • Для авторизации используется html форма, которая отправляет по адресу http://178.72.90.181/cgi-bin/luci методом POST запрос вида username=root&password=test_password;
  • В случае не удачной аутентификации пользователь наблюдает сообщение Invalid username and/or password! Please try again.;

Тогда запрос к гидре будет выглядеть примерно так:

hydra -l root -P ~/pass_lists/dedik_passes.txt -o ./hydra_result.log -f -V -s 80 178.72.90.181
http-post-form "/cgi-bin/luci:username=^USER^&password=^PASS^:Invalid username"
                
Мы используем 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;