攻击性安全工具

1 阅读7分钟

Hydra

Hydra 是一款在线暴力破解(Brute Force)密码工具,能够快速尝试大量用户名和密码组合,以测试各种网络服务的登录凭据。

根据 Hydra 官方仓库,它支持对许多网络协议进行密码测试,包括:

  • SSH
  • FTP
  • HTTP/HTTPS(GET、POST、表单登录)
  • Telnet
  • SMB
  • RDP(远程桌面)
  • MySQL
  • PostgreSQL
  • MongoDB
  • LDAP
  • SMTP
  • POP3
  • IMAP
  • SNMP(v1、v2、v3)
  • VNC
  • SIP
  • XMPP
  • Oracle
  • MS SQL
  • VMware
  • 以及许多其他协议

因此,Hydra 的用途非常广泛,可以针对不同类型的认证服务进行安全测试。

Hydra 命令

Hydra 使用的参数取决于要攻击的服务(协议)。

FTP

如果需要对 FTP 服务进行密码测试,用户名为 user,密码字典为 passlist.txt,可以使用:

hydra -l user -P passlist.txt ftp://MACHINE_IP

SSH

对 SSH 服务进行密码测试的基本命令:

hydra -l <username> -P <full path to pass> MACHINE_IP -t 4 ssh

选项描述
-l指定用于登录的(SSH)用户名
-P表示密码列表
-t设置要生成的线程数

Web Form

也可以使用 Hydra 对网页表单进行暴力破解。必须知道它发出的是哪种类型的请求;常用的方法是 GET 或 POST 方法。

hydra -l <username> -P <wordlist> MACHINE_IP http-post-form "<path>:<login_credentials>:<invalid_response>"

选项描述
-l用于(网页表单)登录的用户名
-P要使用的密码列表
http-post-form表单类型为 POST
<path>例如,登录页面网址login.php
<login_credentials>例如,用于登录的用户名和密码username=^USER^&password=^PASS^
<invalid_response>登录失败时的部分响应
-V每次尝试都会输出详细信息

下面是一个更具体的 Hydra 命令示例,用于暴力破解 POST 登录表单:

hydra -l <username> -P <wordlist> MACHINE_IP http-post-form "/:username=^USER^&password=^PASS^:F=incorrect" -V

  • 登录页面仅/显示主 IP 地址。
  • username是输入用户名的表单字段。
  • 指定的用户名将替换^USER^
  • password是输入密码的表单字段。
  • 提供的密码将被替换^PASS^
  • 最后,F=incorrect这是一个在登录失败时出现在服务器响应中的字符串

另外,如果 Web 服务器监听的是非默认端口号,您可以使用以下方式显式指定端口号 -s <port>,例如:

hydra -l <username> -P <wordlist> MACHINE_IP http-post-form "/:username=^USER^&password=^PASS^:F=incorrect" -s <port> -V

实验

使用 Hydra 对 Molly 的网站密码进行暴力破解

启动 Burp 代理 获取表单参数usernamepassword

登录失败页面出现Your username or password is incorrect. 作为登录失败的提示

hydra -l molly -P /usr/share/wordlists/rockyou.txt 10.49.170.238 http-post-form "/login:username=^USER^&password=^PASS^:Your username or password is incorrect."

image.png 结果:

Hydra 对 Molly 的 SSH 密码进行暴力破解

hydra -l molly -P /usr/share/wordlists/rockyou.txt 10.49.170.238 ssh

结果:


Gobuster

Gobuster 是一款使用 Go(Golang) 编写的开源渗透测试工具。它主要通过字典爆破(Brute Force) 的方式,配合特定的字典(Wordlist),枚举目标的各种资源,并根据服务器返回的响应判断资源是否存在。

它可以枚举网站目录,DNS子域名、虚拟主机、Amazon S3 存储桶、Google Cloud Storage 存储桶。许多安全专家使用此工具进行渗透测试、漏洞赏金猎取和网络安全评估。

本实验使用的是一个局域网环境,DNS 服务器运行在 Web 服务器上。为了能够解析本实验中使用的域名, 需要修改以下/etc/resolv-dnsmasq文件:

  • 在攻击机上打开终端并输入命令:sudo nano /etc/resolv-dnsmasq
  • nameserver MACHINE_IP作为第一行插入。
  • 按 CTRL+O 保存文件,然后按 ENTER 键,最后按 CTRL+X 退出编辑器。
  • 输入命令/etc/init.d/dnsmasq restart重启 Dnsmasq 服务。

在本实验中,将重点学习 Gobuster 的三个命令:

  • dir:枚举 Web 目录和文件
  • dns:枚举 DNS 子域名
  • vhost:枚举虚拟主机(Virtual Host)
短参数长参数说明
-t--threads设置扫描线程数。 每个线程负责发送请求,默认值为 10。如果使用大型字典,可以适当增加线程数以提高扫描速度;如果机器性能较低或目标服务器较敏感,也可以降低线程数。
-w--wordlist指定字典文件。 Gobuster 会把字典中的每一项依次拼接到目标 URL 上进行尝试。
(无短参数)--delay设置请求之间的间隔时间。 某些网站会根据短时间内大量请求判断是否有人在枚举目录,因此可以增加请求间隔,使扫描流量更接近正常用户访问。
(无短参数)--debug开启调试模式。 当命令出现异常或报错时,可输出更多调试信息,便于排查问题。
-o--output将扫描结果保存到指定文件。

示例:

gobuster dir -u "http://www.example.com/" -w /usr/share/wordlists/dirb/small.txt -t 64

  • gobuster dir: 使用目录和文件枚举模式
  • -u "http://www.example.thm/": 目标 URL
  • -w /usr/share/wordlists/dirb/small.txt: 使用small.txt字典
  • -t 64: 设置线程数

dir

输入以下命令即可显示帮助:gobuster dir --help

下面这些是 Gobuster 在目录枚举、子域名枚举等场景中常用的参数。

短参数长参数说明
-c--cookies携带 Cookie 发起请求。 例如登录后的 Session ID、JWT Cookie 等。当目标网站需要登录后才能访问时,可以使用此参数。
-x--extensions指定要扫描的文件扩展名。 例如扫描 .php.js.html 等文件。
-H--headers添加自定义 HTTP 请求头。 例如 AuthorizationUser-AgentHost 等。
-k--no-tls-validation忽略 HTTPS 证书验证。 在 CTF、TryHackMe 等实验环境中,经常使用自签名证书(Self-signed Certificate),开启此参数可以避免 TLS 验证错误。
-n--no-status不显示 HTTP 状态码。 让输出更加简洁。
-P--password指定登录密码。-U(用户名)一起使用,执行需要身份认证的请求。
-s--status-codes仅显示指定状态码的响应。 例如 200,或者状态码范围 300-400
-b--status-codes-blacklist隐藏指定状态码。 例如隐藏 404。使用该参数时,会覆盖 -s 的设置。
-U--username指定登录用户名。 通常配合 -P 使用。
-r--followredirect自动跟随 HTTP 重定向(301、302 等)。 当服务器返回跳转时,Gobuster 会继续访问新的 URL。

示例:

枚举目录和文件的实际示例:

gobuster dir -u "http://www.example.com" -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -t 64 --exclude-length 1055 -o gobuster -n

用该-x标志来指定要枚举的文件类型:

gobuster dir -u "http://www.example.com" -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x .php,.js

dns

输入以下命令即可显示帮助:gobuster dns --help

短参数长参数说明
-c--show-cname显示 CNAME(规范名称)记录。(不能与 -i 同时使用。)
-i--show-ips显示域名及其子域名解析得到的 IP 地址
-r--resolver指定自定义 DNS 服务器进行解析。
-d--domain指定要枚举的目标域名。

DNS 模式下运行 Gobuster,使用以下命令语法:

gobuster dns -d example.thm -w /path/to/wordlist

示例:

gobuster dns -d example.thm -w /usr/share/wordlists/SecLists/Discovery/DNS/subdomains-top1million-5000.txt

vhost

输入以下命令即可显示帮助信息:gobuster vhost --help

vhost(Virtual Host,虚拟主机)模式使用的参数与 dir 模式类似,下面是最常用的几个参数。

短参数长参数说明
-u--url指定目标 URL(基础域名),Gobuster 会基于该 URL 爆破虚拟主机。
(无短参数)--append-domain自动将基础域名追加到字典中的每个单词后面,例如 adminadmin.example.com
-m--method指定 HTTP 请求方法,例如 GETPOST。默认使用 GET
(无短参数)--domain为字典中的每个单词追加指定域名,生成完整的主机名。如果没有在 URL 中明确提供域名,可使用此参数。
(无短参数)--exclude-length根据响应内容长度过滤结果,用于排除默认页面或误报。
-r--follow-redirect自动跟随 HTTP 重定向(301、302 等),适用于虚拟主机发生跳转的情况。

运行 Gobuster vhost,使用以下命令语法:

gobuster vhost -u "http://example.thm" -w /path/to/wordlist

示例:

gobuster vhost -u "http://10.49.184.99" -w /usr/share/wordlists/SecLists/Discovery/DNS/subdomains-top1million-5000.txt --append-domain --domain example.thm --exclude-length 250-320