Kali Linux Web渗透测试手册(第二版) - 4.3- 使用Hydra对基本身份验证进行暴力破解攻击

2018-12-27 11:48:24 浏览数 (1)

翻译来自掣雷小组

成员信息:

thr0cyte,Gr33k,花花,MrTools,R1ght0us,7089bAt,

这个公众号,一定要关注哦,慢慢会跟上面老哥们一起分享很多干货哦~~

标记红色的部分为今日更新内容。

第四章、测试身份验证和会话管理

4.0、介绍

4.1、用户名枚举

4.2、使用Burp Suite进行登陆页面的字典攻击

4.3、使用Hydra强制进行暴力攻击

4.4、使用Metasploit破解Tomcat的密码

4.5、手工挖掘cookie中的漏洞

4.6、攻击会话固定漏洞

4.7、使用Burp排序器评估会话标识符的质量

4.8、滥用不安全的直接对象引用

4.9、执行跨站点请求伪造攻击


4.3、使用Hydra对基本身份验证进行暴力破解攻击

THC Hydra(简称Hydra)是一个可以进行在线登录验证的工具;这意味着它可以通过暴力的方式来尝试登录密码。在Hydra支持的众多服务中,我们可以找到HTTP登录表单和HTTP基本身份验证。

在HTTP basic身份验证中,浏览器在身份验证头中使用base64编码发送用户名和数据包。例如,如果用户名是admin,密码是password,浏览器将对admin:password进行编码,得到字符串YWRtaW46UGFzc3dvcmQ=,请求头将有这么一行。

Authorization:Basic YWRtaW46UGFzc3dvcmQ=

TIP: 几乎每次我们看到一个看似随机的并且以一两个等号(=)结尾的字符串的时候,该字符都是base64编码的。我们可以使用Burp Suite的解码器或Kali linux中的base64命令轻松解码它,=符号可以进行url编码,即在某些请求和响应中被=替换

在前面的小节中,我们使用Burp Suite截断攻击者发起的一个表单请求;在这个小节中,我们将使用THC Hydra攻击HTTP基本身份验证。

环境准备

除了前面小节中使用的密码列表以外,为了进行字典攻击,还需要一个用户名列表。我们假设已经进行了信息收集获得了几个有效地用户名。创建一个文本文件user_list.txt,在里面输入以下内容:

实战演练

在Kali Linux VM存储用户名密码的字典目录中,我们执行以下操作:

1. 打开终端运行hydra,或者使用Kali Linux应用程序|05中的Applications菜单—密码攻击|在线攻击|hydra。

2. 不输入任何参数时将显示基本帮助信息:

在这里,我们可以看到一些有用的帮助信息。通过-L选项,我们可以使用用户名字典文件。-P允许我们使用密码字典。我们还需要在后面跟上://服务器,以及端口号和服务选项。

3. 在终端中:写入以下命令发动攻击: |hydra -Luser_list.txt -P top25_passwords.txt -u -e ns http-get://192.168.56.11/WebGoat

Hydra找到三个不同的用户名/密码组合,成功登陆到服务器。

原理剖析

与其他身份验证方法(例如基于表单的身份验证方法)不同,基本身份验证在发送到服务器的内容、如何发送以及期望从服务器得到的响应方面是标准的。这允许攻击者和渗透测试人员节省宝贵的分析时间,这些工作涉及的参数包含用户名和密码、如何处理,发送这些参数以及如何区分成功响应和不成功响应。这是基本身份验证不被认为是安全机制的许多原因之一。

在调用Hydra时,我们使用了一些参数:

  • -L userlist.txt 告诉Hydra从userlist.txt寻找username。
  • -P top25_password.txt告诉Hydra从top25_password.txt中获得预期密码。
  • -u—Hydra将首先迭代用户名,而不是密码。这意味着Hydra将首先使用单个密码尝试所有的用户名,然后继续使用下一个密码。这将有助于防止账户锁定。
  • -e ns—Hydra尝试将一个空密码(n)和用户名作为密码添加到密码列表
  • http-get表示Hydra将使用GET方式对HTTP基本身份验证发起请求。
  • 之后是://和目标服务器(192.168.56.11).在下一个/之后,我们放置服务器的应用名,在本例中是请求身份验证的URL。没有指定端口,Hydra将尝试默认端口TCP 80.

更多资料

不建议在生产服务器上使用大量密码执行暴力破解,因为我们可能会中断服务、阻塞正常用户或触发保护机制。

作为渗透测试人员。建议每个用户最多使用四次登录尝试以避免阻塞;例如,我们可以尝试添加-p 123456 -e ns,就像我们在这里所说的,来涵盖三种可能:没有密码,密码与用户名相同,密码是123456,这些是世界上最常见的的密码。

另请参阅

到目前为止,我们已经在web应用程序中看到了两种身份验证方法,即基于表单的身份验证和基本身份验证。这些并不是开发人员使用的唯一方法;鼓励读者进一步调查方法的优点、缺点和方法可能存在的安全问题,例如:

  • 摘要身份验证:这比基本身份验证安全的多。不是发送用户名和密码编码的头,客户端计算MD5哈希值提供给服务器;内涵一个nonce,和他的凭证一起,向服务器发送这个哈希,服务器已经知道这个nonce,用户名和密码,就可以重新计算MD5来比较两个值。
  • NTLM/Windows身份验证:遵循与摘要相同的原则,NTML身份验证使用Windows凭据和NTML散列算法来处理服务器提供的challenge。该方案需要多个请求-响应交换,服务器和任何介入代理必须支持持久连接。
  • Kerberos身份验证:这种身份验证方案使用Kerberos协议对服务器进行身份验证。与NTML一样,它不要求输入用户名和密码,但使用Windows凭证登录。
  • Bearer tokens:Bearer tokens是一个特殊的值,通常是一个随机生成的长字符串或者使用加密散列函数签名的base64编码的函数,该函数将该值授予发送请求给服务器的客户机。

0 人点赞