你可曾知道:每当你在网站上输入用户名和密码后敲回车键,实际上将你的密码发送出去。这个你当然知道。毕竟,除此之外,又有什么办法可以向网站验证自己的身份?可是,如果网站允许你使用HTTP(明文格式)验证身份,捕获该流量,之后通过局域网(甚至通过互联网)从任何机器来分析此流量其实很简单。这意味着,只有网站使用HTTP协议用于验证身份,有人就能解使用该网站的密码。要想通过互联网来破解网站密码,你就需要能够位于网关或中央集线器上(如果你获得访问权,流量通过其来转发,BGP路由器也可以)。
但是从局域网来破解密码很容易;与此同时,你不由得想:HTTP到底有多不安全。你可以针对室友、办公网络或者甚至学校、学院或大学网络,试着破解密码,假设网络允许广播流量,你的网卡又可以设置成混杂模式。
所以我们不妨针对一个简单的网站试一下。我将隐藏网站名称的一部分(完全出于尊重对方的隐私)。出于本文的需求,我将在一台机器上演示每一步过程。至于你,可以在两台VirtualBox/VMWare/物理机器之间试一下。
请注意:一些路由器并不广播流量,所以该方法对那些路由器而言可能不管用。
第1步:开启Wireshark,捕获流量
在Kali Linux中,你只要依次进入到Application > Kali Linux > Top 10 Security Tools > Wireshark,即可开启Wireshark。
在Wireshark中,进入到Capture > Interface,勾选适用于你的接口。以我为例,我使用了无线USB卡,于是我选择了wlan0。
理想情况下,你在这里只要按Start(开始)按钮,Wireshark就会开始捕获流量。万一你错过了这一步,总是可以回到Capture > Interface > Start,捕获流量。
#p#
第2步:过滤已捕获流量,找出POST数据
至此,Wireshark在侦听并捕获所有的网络流量。我打开了浏览器,使用我的用户名和密码登录到某个网站。身份验证过程完毕、我登录到网站后,回过去停止用Wireshark捕获流量。
通常,你会在Wireshark中看到许多数据。不过,我们只对POST数据有兴趣。
为何唯独对POST数据有兴趣?
因为你键入用户名和密码,按登录按钮后,它会生成一个POST方法(简而言之――你将数据发送到网站远程服务器)。
为了过滤所有流量、找出POST数据,在过滤器部分键入下列部分
http.request.method == "POST"
屏幕截图如下所示。它显示了1个POST事件。
#p#
第3步:分析POST数据,寻找用户名和密码
现在鼠标右击这一行,选择Follow TCP Steam
这会打开一个新的窗口,窗口里面含有像这样的内容:
HTTP/1.1 302 Found Date: Mon, 10 Nov 2014 23:52:21 GMT Server: Apache/2.2.15 (CentOS) X-Powered-By: PHP/5.3.3 P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM" Set-Cookie: non=non; expires=Thu, 07-Nov-2024 23:52:21 GMT; path=/ Set-Cookie: password=e4b7c855be6e3d4307b8d6ba4cd4ab91; expires=Thu, 07-Nov-2024 23:52:21 GMT; path=/ Set-Cookie: scifuser=sampleuser; expires=Thu, 07-Nov-2024 23:52:21 GMT; path=/ Location: loggedin.php Content-Length: 0 Connection: close Content-Type: text/html; charset=UTF-8
我高亮显示了用户名和密码这个字段。
所以在这里
用户名:sampleuser
密码:e4b7c855be6e3d4307b8d6ba4cd4ab91
不过等一下,e4b7c855be6e3d4307b8d6ba4cd4ab91不可能是真实的密码。它肯定是个散列值。
请注意:即便在登录期间,有些网站也根本不对密码进行散列处理。针对这样的网站,你已经搞到了用户名和密码。而在这里,我们先要找到这个散列值。#p#
第4步:找出散列类型
我将使用散列识别符(hash-identifier),找出那是哪种类型的散列。打开终端,键入hash-identifier,然后粘贴散列值。散列识别符会给出可能匹配的结果。
屏幕截图如下所示:
现在有一点可以肯定,我们知道它不是域缓存凭据(Domain Cached Credential)。所以,它肯定是个MD5散列值。
我可以使用hashcat或cudahashcat来破解该值。
第5步:破解MD5散列密码
我可以使用hashcat或类似软件,轻而易举就能破解这个简单密码。
root@kali:~# hashcat -m 0 -a 0 /root/wireshark-hash.lf /root/rockyou.txt (or) root@kali:~# cudahashcat -m 0 -a 0 /root/wireshark-hash.lf /root/rockyou.txt (or) root@kali:~# cudahashcat32 -m 0 -a 0 /root/wireshark-hash.lf /root/rockyou.txt (or) root@kali:~# cudahashcat64 -m 0 -a 0 /root/wireshark-hash.lf /root/rockyou.txt
由于这个简单的密码位于我的密码列表中,hashcat不费吹灰之力就破解了它。
破解密码散列
使用Hashcat,破解MD5、phpBB、MySQL和SHA1密码,详见http://www.darkmoreops.com/2014/08/14/cracking-md5-phpbb-mysql-and-sha1-passwords-with-hashcat/。
最后结果类似这样:
用户名:sampleuser
密码:e4b7c855be6e3d4307b8d6ba4cd4ab91:simplepassword
结束语
坦率地说,每一个网站所有者都实现SSL技术来保护密码安全是不可能的,因为采用标准的SSL技术需要每个URL高达1500美元的费用。但是网站所有者(谁都可以注册的公共网站)起码应该在登录过程中实施散列机制。那样一样,起码密码已经过散列处理,那就增添了一道障碍,以免别人轻轻松松就能破解网站密码。
这篇指南文章纯属供学习之用,请勿用于歪道。
原文地址:http://www.darkmoreops.com/2014/11/11/hack-website-password-using-wireshark/