第 4 章 客户端攻击

第 4 章 客户端攻击

客户端(client)或主机(host)是指用来上网的终端设备,比如计算机、平板电脑或是移动设备。客户端可能会为其他客户端提供信息、服务及应用,或是从其他系统(比如服务器)获取信息。通常,术语客户端是指供人使用的终端设备。然而,人的参与可能会引发一系列可能的漏洞。

因此,客户端攻击这种方法就应运而生。由于它跟Web应用具有关联性,所以可以用来找出谁连接到了Web应用,系统上有哪些漏洞,以及这些系统是否可以成为从Web应用获取访问权限或信息的一种途径。本章将集中介绍如何找出访问Web应用的系统,评估这些系统中的漏洞,并对这些漏洞加以利用。另外,本章还将着重介绍破解密码的方法,因为这是最常用的保护主机系统安全的方式。

本章首先会先介绍如何通过社会工程来攻击主机。然后详细阐述如何在主机系统上找到漏洞,这样你就可以使用本书中其他章介绍的工具对这些漏洞加以利用。最后,我们将介绍如何攻击密码,因为密码是最常见的保障安全的形式。

4.1 社会工程

人类总是目标系统安全态势中最薄弱的环节。你越是想对终端用户有更多的约束,他们就越是会试着绕过这些安全政策。而你设立的约束越少,人们就越不会遵照你的安全政策。这就意味着,在决定如何保护终端用户免受网络威胁时,我们面临的是一把双刃剑。而黑客们深知这一点,因此他们通过各种方式瞄准终端用户,试图利用这些用户的一个关键特征——信任。

社会工程是欺骗人们使其泄露信息的艺术。许多客户端攻击都是据此来欺骗终端用户,使他们的系统暴露给攻击。社会工程涉及的范围很广,从拨打电话声称自己是某公司正式员工到在人人网上发个声称是某类服务的链接而实际上是欺骗客户的一种手段都是。

如果想确保发起的社会工程攻击能够成功,那么最佳的方式是花时间充分熟悉你的目标,也就是要学习用户是如何交流的,并尝试融入他们的环境。许多未能成功的社会工程攻击都是因为采用通用的格式,而内容中没有能够吸引被攻击用户的强有力的抓手,比如一些写得很糟糕的电邮总是声称用户获得了无人认领的奖金。使用如人人网这样的社交媒体资源是了解目标用户的一个好方式,比如他有哪些爱好,常用哪种表述方式。举个例子,如果某个目标用户的人人网个人档案上显示了某些球队的队徽,那么利用打折的球赛门票设定圈套效果会更好。

由于大多数客户端攻击都是利用社会工程,下一节我们将会介绍Kali中带的一个流行的社会工程工具库。

4.2 社会工程工具集(SET)

社会工程工具集(SET,Social Engineer Toolkit)是由TrustedSec的创始人创建并开发的。它是一个基于Python的开源工具,主要功能是利用社会工程进行渗透测试。SET深受专业安全人员的欢迎,用于测试某个企业的安全态势。真实攻击者也会利用SET进行主动或恶意攻击。它是最常见的用来进行社会工程攻击的工具。

如果想启动SET,请点击浏览Exploitation Tools > Social Engineering Tools,然后选择se-toolkit

在Kali上首次启动SET时,SET分发会直接从GitHub上更新。它会弹出个选项说自动接收更新。如果同意自动更新,选择yes

图像说明文字

SET会要求你确认是否已安装git。Kali已经预载了git,不过最好的方式还是沿用第1章中介绍的的步骤更新Kali。这一更新将包括获取能确保SET正常工作的git版本。

Kali 1.0不包含.git目录,所以如果想要更新,你需要参照以下步骤:

1.打开终端,切换目录到cd /usr/share。
2.备份老的set目录,输入:mv set backup.set
3.依照下面的命令,重新从GitHub上下载SET:git clone https://github.com/trustedsec/social-engineer-toolkit/set/

图像说明文字

4.找回老的config文件,避免重新设置MSF的路径,使用如下命令:
cp backup.set/config/set_config set/config/set_config

5.使用se-toolkit命令验证SET能否正常工作。

图像说明文字

使用SET来进行克隆和攻击

现在你已经知道了SET的基本工作原理,让我们用一个可能会被信任的网站来攻击一下客户端机器。尽管我们可以用任意网站来举例子,但还是使用一个简单点儿的更好。

这里我们举一个通过克隆企业的SharePoint站点来借助meterpreter对受害者进行利用的例子。实际上,它可以是你想攻击的任何网站。我们选择SharePoint站点是因为作为渗透测试人员,你可能更想选择一个能够达到目的的目标。许多带有邪恶企图的攻击者可能会克隆一个公共站点。

图像说明文字

下一步是浏览Exploitation Tools > Social Engineering Toolkit > se-toolkit来启动SET。

接受所有授权证书和服务条款之后,你就能看到SET的主屏幕。

图像说明文字

我们建议选取选项5) Update the Social-Engineer Toolkit。更新后,选择选项1) Social-Engineering Attacks。下一个截图会显示SET中社会工程攻击下可用的不同的网站攻击向量。Spear-Phishing(鱼叉式网络钓鱼)选项是一种常见的攻击,它能将攻击嵌入到电邮和PDF中。鱼叉式网络钓鱼会直接在SET中将攻击文件伪装成由受害人发出的电邮发送。

图像说明文字

在本例中,我们选择了Website Attack Vectors。前面我们已经克隆了一个网站用于针对网站的攻击。接下来,我们需要决定如何发出攻击载荷。这里有几种可用选项。选择Java Applet Attack,通常也就是第1个选项。

图像说明文字

SET会询问你是想使用SET自带的现有模板,还是想自己克隆一个网站。默认的模板并不好用,我们建议你克隆一个网站,如前面提到的SharePoint的那个例子。

在下一屏内容中,SET会显示若干个有关用户如何复制该网站的选项。在本例中,我们会选取site-cloner选项。选择site-cloner后,SET会提出一系列问题。这些问题可以引导你克隆一个网站,然后让它在Kali中运行。站点克隆器会询问如下设置:

  • NAT/Port forwarding(NAT/端口转发) 这个选项可能会有点令人困惑。SET是在询问受害者是会通过访问你在Kali服务器上配置的IP地址来连接到你的机器,还是会通过其他IP地址(比如NAT地址)连接到你的机器。当你在攻击你的网络外或因特网上的受害者时,它会非常好用。如果你是在攻击你的网络外的受害者,你可以选择yes。如果你是在攻击同一个网络中的受害者(比如内部实验室),选择no
  • IP address/hostname for reverse connection(反向连接的IP地址/主机名) 当SET将它的载荷发送给受害者时,SET需要告诉受害者如何连回Kali。在实验室环境中,你可以输入你的Kali服务器的IP地址。
  • URL you want to clone(你希望克隆的URL) 这是你要复制的网站的链接。
  • Exploit to deliver(要发送的漏洞利用) SET会使用Metasploit框架来发送漏洞利用。最流行的选项时Windows Reverse_TCP Meterpreter。Windows Reverse_TCP Meterpreter的工作原理是让受害者运行一个可执行文件,从而建立一个开放端口,以便供攻击者连回并获取受害者机器的全部shell访问权限。下面的截图显示了可用的载荷。Windows Reverse_TCP Meterpreter是列表中的第二个选项。

图像说明文字你可以导入自己的可执行文件。有自己的工具/恶意软件的攻击者或其他人群喜欢用这种方式。

图像说明文字

SET会询问你希望使用哪种类型的反病毒混淆技术。与此同时,它会在各个选项旁边显示一个评分。我们建议通常情况下,最好选择评分较高的选项,除非你有特定的需要。下面的截图显示了可用的选项。我们选择选项16,因为它的得分排名最高。

图像说明文字

SET会询问你要用哪个监听端口。大多数情况下,请坚持选用默认端口。在回答了最后一个问题之后,SET会启动克隆的网站。

新克隆的网站可以用来攻击目标用户。首先,你要诱导用户使用互联网浏览器来访问我们克隆的网站。然后,访问了克隆的仿冒网站的用户会接收到一个Java弹出框。如果运行了的话,它能提供一个连到你的Kali服务器的Reverse_TCP Meterpreter。作为攻击者,你可以启动一个meterpreter会话,并在访问克隆网站的设备上获得全部的管理员权限。

如下图所示,用户的客户端机器上会出现一个简单的Java弹出消息,这看上去很正常,而且普通用户一般会不假思索的选择运行。

图像说明文字

在终端用户运行克隆网站的Java applet之时,Kali服务器会连接到受害者的机器上,如下面的截图所示:

图像说明文字

在下一个示例截图中可以看到,SET可以和meterpreter会话交互,并直接调用命令在受害者的机器上执行:

图像说明文字

你可以跟meterpreter保持多个会话。在本例中,我们用的是命令sessions -I 1。最重要的是,我们是在跟meterpreter的第一个会话进行交互。如果我们攻陷了多台主机,我们可以有多个meterpreter会话、跟他们交互、在他们之间切换,或是将他们逐个关掉。

现在我们已经了解了使用SET的一些基础知识,让我们再看一个例子。我们将要学习如何克隆一个网站来窃取密码。

这次在到达攻击选项界面时,我们选择凭据收集器攻击(Credential Harvester Attack)。凭据收集器攻击可以通过浏览Social Engineering Attacks > Website Attack Vectors > Credential Harvester Attacks来打开。

图像说明文字

你可以选择克隆网站、使用网站模板或是导入自己的Web文件(HTML、图片及其他文件)。

流行站点如Facebook、Gmail和Twitter都有模板可供利用。其他网站则可以通过输入相应的URL来克隆。但有些情况下,我们会发现网站模板和克隆站点都有一些小问题。这时候,你需要使用定制导入。首先,用Web复制工具或是Web克隆软件在Kali中保存一份某个网站的拷贝。然后,使用定制导入选项指定该站点拷贝所在的目录。你需要试试看哪些选项最适合你的网站。

图像说明文字

我们选择了选项2) Site Cloner。之后它会让我们输入一个URL。我们要克隆https://www.facebook.com

图像说明文字我们输入的都是很确切的URL,并且要指定使用的是HTTPS还是HTTP URL。大多数情况下,二者并没什么区别,因为我们不会托管一个安全的网站。但某些情况下,HTTP站点跟HTTPS站点会有所不同。

我们还会被要求输入SET用来托管假冒网站的IP地址。通常这个地址也就是你的Kali Linux环境的IP地址。不过,如果你计划将受害者引导到一个使用NAT转换的地址上(可能通过上游的防火墙),那么输入NAT地址。

在你克隆了网站并将监听端口配置好后,SET会开始等待连接,如下面的截图所示:

图像说明文字

下一步是将用户引导到假冒的站点上。常用的办法是发送一封假冒的电子邮件,也就是所谓的钓鱼电邮。SET可以帮你自动化实现,但在这个例子中,我们打算手动操作。下面这个例子显示了一个链接到我们克隆的Facebook站点的假冒电邮。当用户点击链接www.facebook.com时,他会被引导到我们假冒的位于facebook.secmob.net的网站。

图像说明文字

在下面的截图中你可以看到我们克隆的Facebook很逼真,但URL并不是真的Facebook的URL。这个攻击假设受害者并未注意到URL的细微差异。这也是为什么真实的钓鱼攻击都使用跟真实站点类似的域名。

图像说明文字

当受害者在假冒网站上输入他的或她的名字时,SET会将用户重定向跳转到真实的站点。大多数情况下,用户会在真实站点再次输入他们的密码并登入网站,而不会意识到他们已经被攻击了。在运行SET的Kali Linux上,你能看到密码被截获了。

图像说明文字

除了实时日志,SET还会生成一份该事件的报告,这样攻击者之后就能使用窃取的凭据了。

图像说明文字

在使用如SET这样的工具攻击客户端时,渗透测试人员一定要对客户端的行为进行了解。一种很有效的办法就是使用代理服务器来检查和拦截Web请求。

在第6章中,我们会深入介绍代理服务器。但目前,我们还是需要先简单了解一下,在使用像SET这样的工具进行Web攻击时,如何检查客户端的工作方式。

4.3 MITM代理服务器

MITM Proxy是渗透测试人员用来检查客户端漏洞的一款优秀工具。它允许管理员检查HTTPS的连接,暂停,检查和回复请求,甚至还允许管理员替换来自某个Web服务器的请求或响应。

MITM Proxy有利于渗透测试人员快速检查攻击,摸清有哪些请求或响应是来自或发往该Web浏览器的。如果想启动MITM Proxy,浏览Kali > Sniffing/Spoofing > Web Sniffers,选择mitmproxy即可。

图像说明文字我们建议在搭建SET攻击和分析攻击行为时使用MITM Proxy,在测试环境中最好同时运行SET和MITM Proxy。

MITM代理服务器搭建好后,你需要将客户端Web浏览器指向你的Kali服务器。MITM会显示客户端一边发生的Web请求记录,如下面的截图所示:

图像说明文字

它会将客户端发生的所有浏览器活动都记录到日志中。尽管在典型的Web渗透测试中,MITM Proxy并不是主要的组件,但是在SET投入实际应用前,对SET进行设置和测试时,MITM Proxy是一个绝妙的工具。在后面的章节中,我们还会检验其他类型的代理服务器。不过,渗透测试人员偏爱MitM代理服务器的原因很简单,因为用它测试攻击工具很方便,只需要将工具直接连接到Kali Linux上即可。

4.4 主机扫描

访问主机系统的一个常见方式是找出并利用操作系统的漏洞,以便之后安装应用或其他程序。如Nessus之类的工具可以自动检测系统中是否含有已知的公开漏洞。本节将介绍如何安装Nessus,并针对某个目标系统执行Nessus。通过Nessus找出漏洞之后,可以使用我们在第3章中介绍过的漏洞利用工具,对这些漏洞加以利用。

使用Nessus进行主机扫描

Kali并没有预装Nessus。要使用Nessus,你需要先从Tenable公司获得一个注册码。Tenable提供了一个家庭版订阅选项,但它会限制你最多只能扫描16个IP地址。如果你要扫描更多的IP,那么必须从Tenable购买专业版订阅。

1. 在Kali上安装Nessus

Nessus家庭版订阅仅能用于非商业的个人用途。如果你要在商业环境中使用Nessus,你必须购买Nessus专业版订阅(Nessus ProfessionalFeed)。要获得Nessus的激活码,你可以访问http://www.tenable.com/products/nessus/nessus-homefeed

由于Kali中没有预装Nessus,所以你需要自己去下载并安装。需要注意的是,Nessus并没有Kali Linux专版,但针对Debian 6.0适配的那个版本也能在Kali Linux上使用。

1.下载Nessus的Debian安装包。访问http://www.tenable.com/products/nessus/select-your-operating-system,下载Nessus的Debian-64位版本。

图像说明文字在下载Nessus时,你可以将它复制到/tmp目录中。如果你是在其他目录输入这些命令,你可能需要调整具体的命令。

2.跳到下载Nessus的目录,调用如下命令

ar vx Nessus-5.2.1-debian6\*
tar -xzvf data.tar.gz
tar -xzvf control.tar.gz
ar vx Nessus-5.2.1-debian6\*
tar -xzvf data.tar.gz
tar -xzvf control.tar.gz
最终它会生成一个*etc*目录和一个*opt*目录。 3.将/tmp/opt中的nessus目录复制到/opt目录;然后就当/opt目录不存在。调用如下的命令:
mkdir /opt #它可能会显示一个错误,说/opt目录已经存在;那就跳到下一条命令
 cp -Rf /<安装目录>/opt/nessus /opt
 cp -Rf /<安装目录>/etc/init.d/nessus\* /etc/init.d
  

图像说明文字

4.你可以删除/tmp目录中下载的Nessus的内容。 5.要启动Nessus工具,调用如下命令:

/etc/init.d/nessusd start

6.登录到Nessus的管理界面。打开浏览器,跳转到https://127.0.0.1:8834。

2.使用Nessus

第一次登录Nessus时,它会弹出一些问候语,然后弹出一个SSL警告,说明你正在连接一个使用自签名证书的站点。在跳过一些浅显易懂的页面后,它会要求你输入激活码,并下载最新插件。

图像说明文字

你还要设置一个用户名和密码,用于管理Nessus应用。下面的截图显示的是设置账户以及注册后Tenable发来激活码的过程:

图像说明文字

图像说明文字

插件的初始化下载需要一些时间,请耐心等待。

图像说明文字

在完成所有更新的下载和初始化后,它会显示登录界面。请用你在初始化安装阶段设置的用户名和密码登录。

如果想要开始扫描,那么点击上方横栏的Scan标签,选择New Scan。它会提示你输入目标的详细信息,还会问你想要选择哪个模板。Nessus有一些内置模板。在本例中,我们选用了外部网络扫描。

图像说明文字如果界面上没有Scan标签,你也可以选择Scan TemplatesNew Scan来创建新扫描。

图像说明文字

在选择Create Scan后,扫描会在计划时间启动。默认是立即运行,所以在大多数情况下,扫描会立即运行。

图像说明文字

在扫描完成后,结果可以通过点击Results标签查看。它会为管理员提供一份Nessus发现的漏洞的报告。

图像说明文字

我们可以检查完成的扫描,以及到目前为止所有活动扫描收集的结果,如下图所示:

图像说明文字

作为渗透测试人员,你应该着重注意漏洞。你可以在Metasploit框架中搜索通过Microsoft的补丁或漏洞引用码找出的漏洞,以便能在目标主机上利用这些漏洞。有关如何使用Metasploit的更多信息可参考第3章的内容。

图像说明文字

前面的例子显示了一些极其危险的漏洞(不用担心,我们稍后会给这些系统打补丁的)。所有这些漏洞都可以使用Metasploit或其他攻击工具来加以利用。要了解如何通过Nessus找到的漏洞来进行漏洞利用,你可以参考第3章中介绍的Metasploit。

Nessus提供了一些导出找到的漏洞详细信息的选项。你可以将结果导出为HTML、CSV、PDF和许多其他常见文件类型。要导出结果,你可以先到Results部分,选择一个已经完成的扫描。左侧的第三个标签提供了导出扫描的选项,如下面的截图所示:

图像说明文字

4.5 获取和破解用户密码

根据定义,密码破解是指从计算机系统中存储或传送的数据中还原密码。密码是用来加固各种类型系统的安全,我们在第3章中介绍攻击Web服务器时提到过。

主机系统通常是Windows系统或基于Linux的系统,在存储和保护用户密码方面有自己独特的方式。本节将会着重介绍如何破解主机系统上的密码文件。我们之所以在本书中介绍这部分内容,是因为主机系统是Web应用常见的一种授权客户端。侵入客户端也就意味着开一个门来访问目标Web应用。

获取用户密码最简单的方式是通过社会工程。如前面所介绍的那样,黑客可以将自己伪装成已授权的个体来获取密码或是获取用户创建密码的线索。举个例子,如果知道所有密码都必须是6~10个字符、必须以大写字母开头并以数字结尾这样的规则,那么黑客破解密码所需要做的尝试就会大大减少。(Kali提供了一个名为Crunch的工具来生成用于这类攻击的密码列表,极其简便。)

聪明的渗透测试人员应该通过第2章中介绍的侦察技术来找出系统类型、可能的密码规则、参与管理系统的人员以及其他能够帮助缩减破解密码范围的信息。

黑客破解密码一般都是有几种固定方式。我们列在了下面:

  • 猜测(Guess):通常用收集到的有关目标的信息来进行人工猜测;
  • 字典攻击(Dictionary attack):使用自动化攻击,利用字典中所有可能的单词进行尝试;
  • 暴力破解(Brute-force):使用所有可能的字符组合来试;
  • 混合方式(Hybrid):混合使用字典攻击和暴力破解。

密码必须存储起来,这样系统才能验证用户的身份和访问权限。但系统一般不会将密码以普通文本文件的形式存储,原因显而易见。大多数系统都不会将加密当做保护密码的唯一方式,因为还要一个密文来还原,这样就会在保护加密文件上表现出一定的缺点。

哈希化处理(hashing)会将密文或密码转换成完全不同的值(一般是用算术运算)。哈希化处理是不可逆的,并且会针对输入的同一个密文生成同样的哈希,也就是说哈希可以被存储,并用于针对输入的密码来进行身份验证。修改其中某个因子,比如将某个字母大写或是增加一个空格,都会导致生成完全不同的哈希。

哈希也能像密码一样被暴力破解,如果你知道生成哈希的公式的话。许多密码破解工具如John the Ripper都能对哈希进行检测,并用自动生成的哈希输出来对所有哈希的输出组合进行暴力破解攻击。只要找到了匹配的哈希,John the Ripper就会打印出生成匹配的哈希的普通文本密码。

彩虹表(Rainbow Table)是常见哈希算法的共同敌人。彩虹表是与计算好的所有哈希输出的数据库,可以用来通过搜索来找出哈希输出。如www.freerainbowtables.com之类的网站会提供针对流行的哈希算法的各种版本,如在许多Windows系统中使用的MD5。Kali还提供了如RainbowCrack之类的应用来自动生成彩虹表。

对哈希进行加盐处理会通过增加定制的比特位来将哈希的输出变成在常见彩虹表中无法找到的哈希。不幸的是,许多系统如Windows并未使用哈希加盐的方式。

Windows密码

Windows是世界范围内商业领域使用最广泛的操作系统。在保护密码方面,微软一直不太靠谱。虽然现在微软的产品已经比早期版本安全多了,不过,它们仍然可以被Kali中提供的很多攻击攻陷。

Windows是将密码都存储到系统账户管理(SAM,System Account Management)注册文件中。偶有例外,会使用活动目录(Active )。活动目录是另外一种身份认证系统,它会将密码保存到LDAP数据库中。SAM文件位于C:\<系统根目录>\sys32\config中。

SAM文件会利用LM或NTLM哈希将密码保存成哈希格式,这样文件能够更安全。在Windows运行时,SAM文件不能被移动或复制。但SAM文件可以被转存,也就是说密码的那些哈希能够被移动到离线环境,进而用暴力破解工具里破解。黑客也可以通过启动另外一个操作系统、挂载C:\盘、在硬盘上或是光驱/软盘上启动Linux发行版(如Kali)等方式来获取SAM文件。

有个常见的能找到SAM文件的位置是C:\<系统根目录>\repair目录。默认系统会创建备份用的那份SAM文件,并且通常不会被系统管理员删除。这个备份文件并没有受到任何保护,不过是经过压缩处理的;也就是说,必须先解压文件才能获取哈希文件。你可以用expand工具来解压文件,命令格式是expand [文件名] [目标位置]。这里有个将这个压缩的SAM文件展开成解压后的SAM文件的例子:

C:\> expand SAM uncompressedSAM

为了应对离线破解的威胁,微软的Windows 2000系统和更新的系统添加了一个SYSKEY工具。SYSKEY工具会将SAM文件中哈希化处理的密码用128位的加密密钥来加密,每个不同的安装中这个密钥也不同。

能够物理访问Windows系统的攻击者可以通过以下途径获得SYSKEY(也称为启动密钥):

1.启动另一个操作系统(比如Kali);
2.窃走SAM和SYSTEM文件的老巢(C:\<systemroot>\sys32\config);
3.通过bkreg和bkhive从SYSTEM目录恢复启动密钥;
4.转存那些密码的哈希;
5.用如John the Ripper一类的工具离线破解。

图像说明文字如果访问了Windows中的文件,你会修改MAC(Modify/Access/Create,修改/访问/创建1)信息。Windows会利用这些信息来记录你的痕迹。为了避免留下取证的证据,我们建议你先复制目标主机系统,然后再发起攻击。

1此处作者原文为“modify, access and change”,但这个解释是*nix系列系统的解释。Windows上一般会将MAC理解为“modify, access and create”。——译者注

1.挂载Windows

有很多工具可以用来获取Windows中的SAM和SYSKEY文件。提取这些文件的一个方式是挂载目标系统的Windows系统,这样其他工具就可以访问这些文件,而Windows却没在运行。

第一步是使用fdisk -l命令来找出系统中的分区。你必须找出Windows和分区类型。fdisk输出会显示一个NTFS分区,如下所示:

Device Boot Start End Blocks Id System
/dev/hdb1* 1 2432 19535008+ 86 NTFS
/dev/hdb2 2433 2554 979965 82 Linux swap/Solaris
/dev/hdb3 2555 6202 29302560 83 Linux

你可以用命令mkdir /mnt/windows来创建一个挂载点。

然后用下面例子中的命令来挂载Windows系统:

mount -t <Windows类型> <Windows分区> /mnt/windows

图像说明文字

现在目标的Windows系统已经成功挂载,你可以将SAM文件和SYSTEM文件用下面的命令复制到攻击目录中:

cp SAM SYSTEM /pentest/passwords/AttackDirectory

还有一些工具可以用来转存SAM文件。PwDumpCain and Abel只是其中的两个。Kali还提供了samdump工具,在4.6.3节中我们会再做介绍。

图像说明文字你需要恢复Bootkey和SAM文件。Bootkey文件是用来访问SAM文件的。用来访问SAM文件的工具要用到Bootkey文件。

bkregbkhive是用来获取Bootkey文件的常见工具,如下面的截图所示。

图像说明文字

2.Linux密码

Linux主机系统并不像Windows一样常见,获取ROOT访问权限面临的难度也有所不同。如果启用了自动登录,许多系统可能会将密码以明文的形式存储,比如用于Telnet和FTP的.netrc文件。对于多数攻击,你需要提取passwd和shadow文件。它们通常位于/etc/passwd和/etc/shadow。

shadow文件只有ROOT用户可读,通常以MD5哈希的方式储存。shadow文件要比Windows的SAM文件更难获取。一般获取shadow文件都是通过引导加载程序,如grub。

破解Linux的密码跟破解其他系统如Windows的密码基本类似。许多混合型自动破解程序,如John the Ripper,可以识别哈希的类型,并用正确的字典暴力破解shadow文件中的密码。

4.6 Kali中的密码破解工具

Kali提供了各种各样的工具来绕过密码安全。密码破解工具可以在Password Attacks中找到,具体分为离线破解工具和在线破解工具两大类。本节将会着重介绍在Web应用渗透测试中危害主机系统的工具。Kali中也有其他一些工具,比如用来破解无线协议密码的工具,不过,本书不会涉及这些。

图像说明文字John the Ripper命令行和Hydra工具在第3章中已经做过介绍。

4.6.1 Johnny

Johnny是流行的John the Ripper密码破解工具的一个图形化界面。我们在第3章中介绍了传统的John the Ripper命令行版本。跟命令行版本类似,Johnny有若干个引擎,这样它就能破解不同类型的密码,包括加密过的密码和哈希化处理过的密码。Johnny能够自动检测大多数哈希化的密码和加密过的密码,这点使得这个过程对渗透测试人员来说更简单。攻击者都喜欢这个工具,因为它的可定制性非常强,能以各种方式定制,以便加快破解密码的速度。

图像说明文字有些定制可能在Johnny中不可用。对于大多数攻击,我们推荐使用它的命令行版本,John the Ripper。

John the Ripper按如下方式工作:

  • 尝试用攻击字典来破解密码;
  • 尝试在字典单词的前面或后面加上字母数字字符来破解;
  • 将字典单词放在一起进行攻击;
  • 将字母数字字符放到一起组成新的单词;
  • 在字典单词中混入特殊字符来进行攻击;
  • 当所有其他方法都失败了,尝试暴力破解。

要使用Johnny,你可以浏览Password Attacks > Offline Attacks,然后选择Johnny。点击Open Password File,选择你要破解的密码文件。下面的截图显示了将带有用户BOBmaryjoeyshadow文件作为目标的场景。

随着Johnny开始破解密码,Password列会被逐渐填满。

图像说明文字

左侧面板上有Johnny的配置标签。Options标签是你选择攻击类型的地方。下面的截图显示了默认行为的定义和选择哈希类型的选项。Johnny的自动检测通常能有90%的正确率。

图像说明文字

Statistics标签会显示Johnny已经运行某个活动会话多长时间了。Settings标签则会指定Johnny以何种方式运行,如下图所示。

图像说明文字默认的John the Ripper的路径设置不一定正确。为了保险起见,你最好验证一下Settings中的John the Ripper路径。在早期的BackTrack版本中,我们发现必须手动将此路径改为/pentest/passwords/john/john。Kali 1.0默认的路径是/user/sbin/john。

图像说明文字

Output标签显示的是Johnny正在攻击的目标。在这里你还能看到攻击会话中的错误消息和状态更新。下面的例子显示的是一条状态消息,表明Johnny正在识别密码的哈希类型。

图像说明文字

John the Ripper和它的GUI前端——Johnny——的默认单词列表非常有限。我们推荐用更大的列表,你可以在线搜索找到。要使用定制的单词列表,跳到Options标签,然后选择Wordlist mode。浏览到你期望的定制单词列表,点击Apply

图像说明文字

随着破解密码的进行,Johnny会逐渐填充用户名一列旁边的密码单元格。下面的截图显示三个密码中的两个已经被破解了。

图像说明文字

4.6.2 hashcat和oclHashcat

图像说明文字

hashcatoclHashcat是密码破解工具。oclHashcat是基于GPGPU的版本。hashcat/oclHashcat工具都是多线程工具。它们可以在单个攻击会话中并行处理多个哈希和密码列表。hashcat/oclHashcat工具提供了多个攻击选项,比如暴力破解、密码合成、字典、混合、掩码和基于规则的攻击。

BackTrack在Privilege Escalation > Password Attacks > Offline Attacks下面提供了多个版本的hashcat。“ocl”,或者叫“open cl”(开源cl),是指统一Nvidia和ATI的GPU驱动的开放实现。有些版本在更新BackTrack后就无法工作了,所以你可能需要从www.hashcat.net下载安装最新的版本。

要使用hashcat,打开hashcat应用,或是浏览Password Attacks > Offline Attacks > hashcat即可。

要针对某个文档运行hashcat,你可以输入hashcat [选项] 哈希文件名 [单词文件|目录]。下面的例子演示了hashcat在针对shadow文件运行单词列表中的单词:

图像说明文字

hashcat还会提供给一个GUI,它可以用作命令行版本的前端。有些人会偏好使用图形化界面,因为使用起来方便,在下方的窗口还能显示命令行代码。

图像说明文字

4.6.3 samdump2

samdump2是一个用来转存微软的Windows中密码哈希的SAM文件的工具,这样密码就可以用离线工具进行破解。对于较新版本的Windows,你可能需要借助其他工具来抓取SYSKEY(启动密文)文件,进而访问存在SAM数据库中的哈希。

samdump2位于Password Attacks > Offline Attacks > samdump2。当你启动samdump时,它会弹出一个终端窗口。

图像说明文字

你必须先挂载目标Windows系统,这样samdump才能访问SAM文件。

图像说明文字

下一步,将SAM文件和SYSKEY文件复制到你的攻击目录中。

cp SAM SYSTEM /root/AttackDirectory

切换到攻击目录,调用bkhive SYSTEM bootkey命令来获得启动密文。将启动密文复制到一个文本文件中,这样samdump就拿到了带有启动密文的SAM文件。

cd /root/AttackDirectory /*> windowshashfiles.txt

运行命令samdump SAM bootkey命令,将输出复制到另一个文本文件中。

Samdump2 SAM bootkey > windowshashfiles2.txt

现在你可以用密码破解工具如John the Ripper来破解这些哈希了。

4.6.4 chntpw

chntpw是Kali Linux、BackTrack和其他Linux发行版中带有的一个工具。可以用它重置Windows 8或早期Windows版本中的本地密码,也可以用它修改Windows的密码数据库。不过,主要是用于在不知道密码的情况下侵入Windows系统。

要使用chntpw,需要用Kali Live CD启动Windows机器。你可以从http://www.kali.org/downloads/下载Kali Linux的ISO映像文件。

将ISO文件烧录至CD中,用此Live CD启动Windows机器。在Kali的启动菜单上,选择Forensics选项。

图像说明文字

SAM文件通常位于/Windows/System32/config目录中。你需要在终端中切换到此目录。在你的系统上,情况可能是这样的:

/media/hda1/Windows/System32/config

图像说明文字

每个系统都有轻微的区别。在这个例子中,Kali看起来是将我的硬盘的序列号用作了设备位置地址。这是因为我已经用Kali Live CD启动了一个Windows 7虚拟机。SAM数据库通常位于/media/硬盘名称/Windows/System32/config。

下面的截图列出了我的硬盘上的SAM数据库文件:

图像说明文字

命令chntpw -l SAM会列出Windows系统中含有的所有用户名。下面的截图显示的是运行了chntpw -l SAM命令的输出结果:

图像说明文字

该命令输出了系统中的用户名列表,当我们有要修改的用户名时,我们可以运行命令chntpw -u "用户名" SAM

在这个例子中,我们输入了chntpw -u "Administrator" SAM,然后看到了如下菜单:

图像说明文字

我们还可以选择清除密码、修改密码或是将用户提升为管理员。但是在Windows 7上,修改密码并非总能起作用,所以我们建议使用清除密码。这么操作的话,你可以用一个空密码登录到目标系统。

要访问chntpw,浏览Password Attacks > Offline Attacks > chntpw。它会打开一个终端窗口,显示chntpw的欢迎界面。chntpw有若干种用法,如主启动界面所描述:

图像说明文字

要使用交互模式,输入chntpw -i和SAM文件的路径。如果目标是一个挂载的系统,你需要指定SAM文件在挂载目录中的位置。

它会弹出一个菜单,提供若干种修改SAM文件的选项。你可以选择选项1来清除密码。

图像说明文字

4.6.5 Ophcrack

Ophcrack是一个机遇彩虹表的Windows密码破解器。Kali提供了一个命令行版本和一个图形化界面版本。Ophcrack可以从多种格式中导入哈希,包括直接从Windows的SAM文件中直接转存。下面的截图显示的是可以加载到Ophcrack中的几种格式:

图像说明文字

Ophcrack自带了彩虹表,如下面的例子中所示。我们建议加载最新的彩虹表,而不是用默认的。

彩虹表可以从在线资源中下载,比如开发者网站http://ophcrack.sourceforge.net/tables.php

图像说明文字

要访问ophcrack,浏览Password Attacks > Offline Attacks,并选择命令行或GUI版本。点击Load,选择你要破解的文件的路径(例如Windows的SAM文件)。

图像说明文字

在这个例子中,我们是在Windows机器上使用Kali的ISO文件,并以取证(Forensics)模式启动。我们浏览到/windows/system32/config目录以获取SAM数据库。你可以在本书第7章-防御对策中了解更多有关使用Kali Linux的取证模式的内容。你也可以直接将SAM数据库的离线版本跟Kali一起使用。

图像说明文字

你应该能看到哈希和用户名、用户ID是在一起。点击Crack按钮,等待破解后的密码出现。

图像说明文字

4.6.6 Crunch

Crunch是一个用来生成密码列表的工具。如果你能够收集到有关目标如何创建密码的情报的信息,那么这个工具会非常有用。举个例子,如果你抓取了两个密码并观察到目标都是用一个短语后跟随机数字来作为密码,那么Crunch可以用来快速生成那个短语后跟所有可能的随机数字的密码列表。

图像说明文字

Crunch有一些特殊标记字符,可以翻译成如下:

  • @:插入小写字符;
  • %:插入数字;
  • ,:插入大写字符;
  • ^:插入符号。

举个例子,假定我们已经知道目标在密码中用pass后跟两个不确定的字符。为了针对六位字符密码运行Crunch,我们会先让pass后跟两位不确定的数字。可用%%来代表任意数字。运行这个命令,并将输出放到一个名为newpasswordlist.txt的文本文件中,可用如下示例输入:

图像说明文字

输出的文本文件含有所有可能的数字组合。下面的截图演示了输出文件的首部:

图像说明文字

为了添加所有小写字母到pass后面,我们可以用crunch 6 6 -t pass后跟@@来代表所有小写字母,如下面的截图所示:

图像说明文字

现在文本文件中的密码组合都是pass后跟小写字母和数字了,如下面的截图所示:

图像说明文字

4.7 Kali中的其他可用工具

在Kali中还有其他有用的工具。我们只介绍其中能帮忙危害主机系统、获取Web应用服务器的访问权限的工具。Kali中还有一些其他密码破解工具没有加到这个列表中;不过,对这些工具的介绍不会在这里展开。

4.7.1 Hash-identifier

Hash-identifier(哈希识别工具)是一个用来识别哈希类型的基于Python的工具。大多数密码破解工具如John the Ripper都自带了一个哈希类型自动检测函数,这类函数都非常好用,在90%的情况系都是精确的。而这个工具可以用来手动验证某个哈希类型。要使用Hash-identifier,可以运行这个工具,并粘贴你要识别的哈希。

下面的截图显示的是针对某个哈希的输出:

图像说明文字

4.7.2 dictstat

dictstat是一个用来进行密码破解结果分析或常规单词列表分析的Python脚本工具。dictstat会分析结果,并生成用于屏蔽暴力破解中已经破解了的密码组合的掩码。它可以为一次破解更多密码提供一定的线索。当目标为使用同一密码策略的公司时,这种方法很好用。下面的截图显示的是dictstat工具的主界面:

图像说明文字

要运行dictstat,输入dictstat [选项] passwords.txt。下面的截图显示的是使用dictstat的例子:

图像说明文字

4.7.3 RainbowCrack(rcracki_mt)

RainbowCrack是一个哈希破解程序,它会生成用于密码破解的彩虹表。RainbowCrack跟标准的暴力破解方法有所不同,它使用大量的预计算好的表来减少破解密码需要的时间。RainbowCrack工具已经有点年代了,不过,现在依然可以有大量免费的彩虹表可供下载,比如www.freerainbowtables.com。下面的截图显示的是RainbowCrack的主界面:

图像说明文字

4.7.4 findmyhash

findmyhash是一个用免费的在线服务来破解密码的Python脚本工具。在使用此工具时,你必须先连到因特网。下面的截图显示的是findmyhash在向多个网站进行MD5哈希的查询。

图像说明文字

4.7.5 phrasendrescher

phrasendrescher是一个模块化的多线程密码短语破解工具。phrasendrescher自带了很多插件,同时还提供给了支持新插件开发的API。

4.7.6 CmosPwd

CmosPwd用来破解基本输入输出系统(BIOS,Basic Input/Output System)的密码。Cmospwd允许你擦除/清理、备份和恢复CMOS。

4.7.7 creddump

creddump是一个Python工具,用来从Windows的注册表中提取各种凭据和密码。creddump可以提取LM和NT哈希(SYSKEY保护的)、缓存的域密码和LSA密码。

4.8 小结

主机系统是访问Web应用的授权来源。侵入已授权的主机可以让渗透测试人员拿到访问目标Web应用的授权凭据。这点有时会在对Web应用进行渗透测试时被忽视。

本章介绍了用来获得主机系统非授权访问权限的各种方法,着重介绍了使用社会工程方法、找出带有未修复漏洞的主机以及破解密码。市面上关于侵入主机系统的书已经不少了。读者可以将本章内容跟本书其他章的内容一起使用,这样更有效。我们将本章的内容限制在攻击能够访问Web应用的目标主机。

下一章将会介绍如何攻击主机跟Web应用之间进行身份认证的方式。

目录