Hydra tool 사용하기

2019-06-08

Dictionary Attack 이나 Brute force와 같은 공격을 수행할 때 사용하는 공격 툴이다.
https와 post 까지 지원해서, 잘 사용하면 유용한 툴인듯하다!

소개에 따르면 다음과 같은 프로토콜을 지원한다고 한다.

Currently this tool supports the following protocols: 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, MEMCACHED, MONGODB, 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 and XMPP.

현재 9.0 버전까지 나와있다 ㅎㅎ

hydra-9.0 버전 사용하려면 다음 링크에서 다운로드가 가능하다.

https://github.com/vanhauser-thc/thc-hydra/releases

kali에 기본적으로 장착되어 있는 툴인듯 하지만, 최신버전을 위해서 나도 깃에서 9.0 버전을 다운받아 사용했다. JQuery로 보내야 했는데, 최신버전이어야 JQuery까지 지원해 주기 때문이당 ㅠ

hydra-gtk라고 해서 GUI 모드로도 제공해주고 있지만, 나는 그냥 커멘드 형식으로 사용할 것이다.

위 링크에서 다운로드 받아, 압축을 풀거나 git clone을 하면 여러 파일들이 들어있다.

그리고 https://github.com/vanhauser-thc/thc-hydra 여기에서 설치방법에 대해서도 소개해 주고 있다.

./configure –help를 하면 compile 옵션들을 볼 수 있다.

root@kali:~/hydra/thc-hydra-9.0# ./configure --help 
Options:
  --prefix=path              path to install hydra and its datafiles to
  --fhs                      install according to the File System Hierarchy Standard
  --with-oracle=prefix       prefix for oracle include dir
  --with-oracle-lib=prefix   prefix for oracle lib dir
  --with-ssl=prefix          prefix for SSL headers
  --with-ssl-lib=prefix      prefix for SSL libraries
  --disable-xhydra           disable compilation of hydra GUI
  --nostrip                  do not per default strip binaries before install
  --debug                    show debug output to trace errors
  --help                     this here

If the CC environment variable is set, this is used as the compiler for the configure tests. The default is "gcc" otherwise.

나는 https-post-form 옵션을 사용해야 했기 때문에 다음과 같은 ./configure --with-ssl=prefix --with-ssl-lib=prefix 2가지 옵션을 사용하여 컴파일하였다.

hydra를 실행하는 명령어의 구성은 다음과 같다.

root@kali:~/hydra/thc-hydra-9.0# hydra -h
Hydra v9.0 (c) 2019 by van Hauser/THC - Please do not use in military or secret service organizations, or for illegal purposes.

Syntax: hydra [[[-l LOGIN|-L FILE] [-p PASS|-P FILE]] | [-C FILE]] [-e nsr] [-o FILE] [-t TASKS] [-M FILE [-T TASKS]] [-w TIME] [-W TIME] [-f] [-s PORT] [-x MIN:MAX:CHARSET] [-c TIME] [-ISOuvVd46] [service://server[:PORT][/OPT]]

Options:
  -R        restore a previous aborted/crashed session
  -I        ignore an existing restore file (don't wait 10 seconds)
  -s PORT   if the service is on a different default port, define it here
  -l LOGIN or -L FILE  login with LOGIN name, or load several logins from FILE
  -p PASS  or -P FILE  try password PASS, or load several passwords from FILE
  -x MIN:MAX:CHARSET  password bruteforce generation, type "-x -h" to get help
  -y        disable use of symbols in bruteforce, see above
  -e nsr    try "n" null password, "s" login as pass and/or "r" reversed login
  -u        loop around users, not passwords (effective! implied with -x)
  -C FILE   colon separated "login:pass" format, instead of -L/-P options
  -M FILE   list of servers to attack, one entry per line, ':' to specify port
  -o FILE   write found login/password pairs to FILE instead of stdout
  -b FORMAT specify the format for the -o FILE: text(default), json, jsonv1
  -f / -F   exit when a login/pass pair is found (-M: -f per host, -F global)
  -t TASKS  run TASKS number of connects in parallel per target (default: 16)
  -T TASKS  run TASKS connects in parallel overall (for -M, default: 64)
  -w / -W TIME  wait time for a response (32) / between connects per thread (0)
  -c TIME   wait time per login attempt over all threads (enforces -t 1)
  -4 / -6   use IPv4 (default) / IPv6 addresses (put always in [] also in -M)
  -v / -V / -d  verbose mode / show login+pass for each attempt / debug mode 
  -O        use old SSL v2 and v3
  -q        do not print messages about connection errors
  -U        service module usage details
  -h        more command line options (COMPLETE HELP)
  server    the target: DNS, IP or 192.168.0.0/24 (this OR the -M option)
  service   the service to crack (see below for supported protocols)
  OPT       some service modules support additional input (-U for module help)

Supported services: adam6500 asterisk cisco cisco-enable cvs ftp http-{head|get|post} http-{get|post}-form http-proxy http-proxy-urlenum icq imap irc ldap2 ldap3[s] mssql mysql(v4) nntp pcanywhere pcnfs pop3 redis rexec rlogin rpcap rsh rtsp s7-300 smb smtp smtp-enum snmp socks5 teamspeak telnet vmauthd vnc xmpp

Hydra is a tool to guess/crack valid login/password pairs. Licensed under AGPL
v3.0. The newest version is always available at https://github.com/vanhauser-thc/thc-hydra
Don't use in military or secret service organizations, or for illegal purposes.
These services were not compiled in: afp firebird memcached mongodb mysql5 ncp oracle postgres radmin2 sapr3 ssh sshkey svn SSL-services (ftps, sip, rdp, oracle-services, ...) and regex support.

Use HYDRA_PROXY_HTTP or HYDRA_PROXY environment variables for a proxy setup.
E.g. % export HYDRA_PROXY=socks5://l:p@127.0.0.1:9150 (or: socks4:// connect://)
     % export HYDRA_PROXY=connect_and_socks_proxylist.txt  (up to 64 entries)
     % export HYDRA_PROXY_HTTP=http://login:pass@proxy:8080
     % export HYDRA_PROXY_HTTP=proxylist.txt  (up to 64 entries)

Examples:
  hydra -l user -P passlist.txt ftp://192.168.0.1
  hydra -L userlist.txt -p defaultpw imap://192.168.0.1/PLAIN
  hydra -C defaults.txt -6 pop3s://[2001:db8::1]:143/TLS:DIGEST-MD5
  hydra -l admin -p password ftp://[192.168.0.0/24]/
  hydra -L logins.txt -P pws.txt -M targets.txt ssh

ID와 PW가 전송되는 포맷과 로그인 실패 시 나타나는 문구를 알아야 한다.

그래서 테스트를 하기위해 테스트 페이지를 하나 만들었다.

로그인할때를 burp suite로 보면 전송되는 포맷을 알 수 있다.

따라서 필요한 옵션들을 주고, ID 사전 weakuser와 PW 사전 weakpass 파일을 만들어서 다음과 같은 명령어를 사용할 수 있다.

root@ubuntu:/home/ubuntu/thc-hydra# ./hydra -f -v -V -I -L "weakuser.txt" -P "weakpass.txt" -s 443 192.168.209.138 https-post-form "/ajax.php:ACCESS=true&id='^USER^'&pw=^PASS^':fail"  

명령어를 실행하면 다음과 같이 대입을 시작한다!!

일치하는 결과를 찾았을때는 어떤식으로 보이는지는 추후 추가 예쩡!ㅎㅎ