翻译来自:掣雷小组
成员信息:
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编码的函数,该函数将该值授予发送请求给服务器的客户机。