使用Java进行渗透测试——侦察与映射

202 阅读19分钟

简介

在不断发展的网络安全环境中,深入了解和评估Web应用程序的漏洞至关重要。作为Web应用程序开发中最广泛使用的编程语言之一,Java为渗透测试人员提供了独特的挑战和机会。本章将深入探讨Web应用程序渗透测试的初始阶段,重点介绍适用于基于Java的应用程序的映射和侦察技术。这些技术是识别基础技术、揭示隐藏信息,并为进一步测试构建全面基础的第一步。在这一探索过程中,我们将为你提供成为映射专家所需的知识和工具,以精准熟练地绘制Web应用程序的未知领域。

结构

本章将讨论评估的两个初步阶段:

  • 侦察
  • Web应用程序映射

目标

在本章结束时,你将熟悉侦察和映射Web应用程序的基本步骤。你将学习使用builtwith.com、Wappalyzer浏览器扩展和开源情报(OSINT)来识别技术。我们还将使用OSINT和Gobuster发现隐藏的内容。

侦察

在Java应用程序渗透测试中,有效的侦察工作类似于情报人员在任务开始前收集关键信息的隐秘工作。与直接与目标接触不同,侦察是在没有明显互动的情况下进行的。它不涉及访问网站、打电话、亲自前往地点或与员工接触。相反,目标是积累数据并为后续的测试和评估打下坚实的基础。

侦察阶段是一个安静的信息收集阶段,在直接测试开始之前,需要寻找几项关键的数据。根据工作范围、合同语言和评估目的,这些数据可能会有所不同。以下是通常包含在侦察中的数据列表:

  • 选择目标:第一步是仔细选择目标,确定需要审查的特定Web应用程序或系统。
  • 收集关于技术和配置的信息:侦察的目的是发现支撑目标的技术环境,包括识别操作系统、Web服务器、应用服务器和编程语言。
  • 编制员工名单:了解组织结构至关重要。侦察工作包括编制员工名单、他们的角色及其在系统中的访问权限。
  • 揭示组织信息:侦察工作不仅限于数字领域,还包括收集关于组织的信息。这可能包括业务目标、合作伙伴、供应商、并购、新产品以及其他相关细节。
  • 识别密码重置信息:了解密码重置的处理方式对于后续测试至关重要,尤其是当可以利用其中的弱点或漏洞时。
  • 探索信任关系:侦察旨在揭示与其他系统的信任关系或集成,因为这些可以提供潜在的攻击向量。
  • 收集代码片段:理解应用程序中使用的代码片段可以帮助识别可能从表面上看不到的漏洞或弱点。

通过精心拼凑这些数据,侦察为全面有效的渗透测试奠定了基础。它为渗透测试人员提供了所需的情报,使其能够在目标环境中导航,增加揭示漏洞和加强安全防御的机会。在Java应用程序渗透测试中,侦察是伦理黑客的第一步。

在开始Java应用程序渗透测试的技术部分之前,我们必须使用侦察工具和技术收集尽可能多的信息。这将为我们的测试打下基础。在本节中,我们将探讨侦察的三个基本方面:

  • 目标验证:我们的第一步是确保目标有效,确保我们的努力集中在正确的Web应用程序上。我们将讨论确认所选Web应用程序的存在性和相关性的方法。
  • 开源情报(OSINT)收集:开源情报是公开可用的信息宝库,能为我们的目标提供宝贵的洞察。我们将探索如何有效地收集和利用这些数据。
  • 社交媒体和搜索引擎破解:在数字时代,社交媒体平台和搜索引擎是丰富的信息来源。我们将探索如何从Facebook、LinkedIn和Twitter等平台提取情报。

每个部分将为你提供侦察所需的基本知识和技能。通过这些侦察任务,你将准备好发现目标Web应用程序的隐藏细节,为成功的Java应用程序渗透测试工作铺平道路。让我们开始探索这些重要的侦察基础。

目标验证

第一步是验证我们的目标,确保我们的努力集中在正确的Web应用程序上。目标验证包括确认与我们正在测试的应用程序相关的域名和IP地址的存在性和所有权。本节将探讨进行全面目标验证的各种技术和工具。

了解域名和IP地址的所有权和注册详情是基础。这些信息可以帮助我们验证目标的合法性。使用WHOIS协议是一种方法。WHOIS是检索域名注册信息的有价值资源。可以通过命令行工具来完成,或者许多网站会为你提供这些信息。通过查询WHOIS数据库,我们可以揭示关于域名所有者、注册商、创建日期等的详细信息。在以下示例中,我们将查看域名brackish.io。以下是通过WHOIS返回的brackish.io的原始数据:

image.png

命令行界面提供了强大的目标验证工具。以下是一些常用命令:

  • Dig(在Mac和Linux上使用)dig命令是一个多功能的域名服务器(DNS)查询工具,可以检索有关域名和IP地址的信息。使用命令 dig brackish.io。以下是示例:

image.png

  • Host(在Mac和Linux上使用)host命令执行DNS查询并提供有关域名和IP地址的信息。使用命令 host brackish.io。以下是协议响应的示例:

image.png

  • nslookup(适用于所有平台)nslookup命令是一个跨平台工具,用于查询DNS记录和解析主机名。使用命令 nslookup brackish.io。以下是示例:

image.png

我们可以枚举并识别与目标应用程序相关的主机,超越域名和IP验证。这可以揭示更多的入口点和基础设施细节。

在某些情况下,传输DNS数据有助于深入了解目标的基础设施。然而,需要注意的是,这种技术通常超出范围,可能不被允许,尤其是在像AWS这样的云平台上。

  • dig –t NS host +short:该命令尝试检索一个域的权威名称服务器。以下是示例输出:

image.png

  • dig –t AXFR host @NS:AXFR查询尝试从指定的名称服务器传输DNS区域数据。查看返回的名称服务器显示,我们的主机使用的是AWS DNS。AWS不允许DNS区域传输,因此作为负责任的渗透测试人员,我们应该停止并且不执行此步骤。

注意:在进行目标验证时,必须遵守渗透测试项目中定义的参与规则和范围。虽然DNS数据传输可以提供有价值的信息,但必须在组织和相关法规设定的边界内进行。

开源情报收集

在渗透测试领域,知识就是力量,而这种知识往往从互联网上散布的数字面包屑开始。OSINT(开源情报)收集是从公开可用的来源收集有价值信息的艺术。它是了解目标数字环境的关键阶段。这可以手动完成,也可以使用自动化工具,如harvester和recon-ng。这两种工具功能复杂,有很多选项,探索这些工具将留给读者作为练习。在本节中,我们将探讨手动方法和简单脚本。OSINT收集可以提供大量信息,包括:

  • 联系信息收集
    联系信息收集是指收集联系方式的能力,这些信息为潜在的利用打开了大门,并可以成为揭示诸如弱密码策略或触发账户锁定等漏洞的跳板。最好的起点是LinkedIn。查找公司的资料,这对收集新闻和其他发布的信息非常有帮助。最重要的数据是员工名单。以下是brackish.io的示例:

image.png

这份员工名单是一个很好的起点。OSINT可以扩展到所有社交网络,收集公开和私人资料。我们应该检查这些员工的信息,并尝试找到他们在Facebook或Twitter上的其他社交网络账户。在审查这些信息时,注意寻找可能是他们Facebook朋友或LinkedIn上的联系人,且未更新雇主信息的其他员工。特别关注与目标相关的开发者资料可能会提供有价值的见解。开发者可能会列出他们在当前工作中使用的编程语言和应用服务器。

  • 数据泄露分析
    数据泄露分析是使用在线工具查找已经发生的泄露事件,这些泄露事件可能使你获得访问权限或简化工作。总是有新的泄露事件发生。像haveibeenpwned这样的工具可以帮助识别已被泄露的用户名和密码。找到的员工名单以及从社交媒体收集到的信息可能会提供用户名/电子邮件地址。如果这些在泄露事件中出现,那么用户选择的密码可能已经泄露。人类是习惯的动物,我们经常重复使用密码,并在同一密码上进行变化。像privacyrights.org这样的泄露追踪器可以提供已知问题的全面视图。以下图示展示了在privacyrights.org上的数据泄露搜索:

image.png

信息通常隐藏在文件中。检查文件的元数据可以揭示与调查相关的隐藏细节。当在下一部分关于Google黑客攻击的内容中发现PDF或Word文档时,请记住这一点。

鉴于互联网上的信息量以及许多人公开的程度,掌握如何发现这些信息的人可以获取大量的数字数据。OSINT收集是导航这一环境的途径,揭示的见解可以帮助在渗透测试过程中将漏洞转化为利用点。

技术枚举

虽然OSINT收集主要集中在收集有关个人和组织的信息,但同样重要的是了解底层的数字基础设施。技术枚举在这方面起着关键作用。了解客户端和服务器技术可以揭示潜在的攻击向量,尤其是在处理包含已知漏洞的过时软件时。为了收集这些有价值的情报,我们可以利用各种来源,包括:

  • 技术枚举工具:像builtwith.com这样的专业工具和服务可以扫描网站并提供有关所使用技术的详细报告。这包括Web框架、内容管理系统等。以下是使用builtwith.com与我们的示例Web应用程序的示例:

image.png

  • 招聘信息 检查与目标组织相关的招聘信息可以揭示他们所需的技术专长,从而为我们提供有关使用技术的宝贵见解。这可以提示正在使用的技术。通常,这些信息可以在LinkedIn、公司招聘页面上找到,或者通过其他招聘网站如Glassdoor获取。以下是我们示例公司招聘页面的截图:

image.png

  • 论坛分析 像StackOverflow这样的在线论坛和社区经常讨论技术栈和开发过程中遇到的问题。分析这些讨论可以提供有关目标所使用技术的线索。

了解技术栈不仅仅是出于好奇心,它是识别潜在漏洞并制定针对Java应用程序渗透测试的关键步骤。将技术枚举与更广泛的OSINT收集结合起来,将使你能够有效地评估和保护Web应用程序。

搜索引擎黑客攻击

搜索引擎黑客攻击,也称为Google黑客攻击,是一种利用高级运算符从互联网上庞大的信息中挖掘隐藏或敏感数据的技术。在各种搜索引擎中,Google是这一实践最常用的平台。它允许渗透测试人员使用一系列专业查询,精确定位特定数据点,为Java应用程序渗透测试的侦察阶段提供宝贵的见解。

不同搜索引擎的资源如下:

  • Bing:对于Bing特定的查询和技术,像bishopfox.com这样的资源提供了使用高级运算符进行精准搜索的指导。详细信息请参阅链接:resources.bishopfox.com/resources/t…
  • Google:Google黑客攻击是一个有充分文档记录的艺术,Google黑客攻击数据库在exploit-db.com上提供了大量查询示例和见解。详细信息请参阅链接:www.exploit-db.com/google-hack…

Google黑客攻击查询示例

  • intitle: “Index+of.etc” passwd::查找可能包含敏感文件(如密码文件)的目录。
  • intitle:admin intitle:login::查找可能容易受到攻击的包含登录面板的网页。
  • intitle:index.of.private::定位可能包含敏感内容的私密目录。
  • filetype:asmx inurl:wsdl::专注于可能存在漏洞的Web服务描述文件。
  • site:myhost.comdomain:myhost.com::将搜索范围限定于特定网站或域名,确保相关性并保持在范围内。

在此示例中,我们将使用 site: 查询来检查 brackish.io 上的所有内容。

image.png

接下来,我们可以查找文本文件,但没有找到任何文件。请参见下图:

image.png

搜索引擎黑客攻击不仅限于典型的Web应用程序侦察,它还可以发现存储在云端源代码仓库中的敏感信息。例如,通过使用如 site:github.com 这样的查询,渗透测试人员可以搜索GitHub和其他在线仓库,寻找无意中泄露的调试信息、开发笔记和配置文件。这种方法可以揭示有价值的见解,例如凭证、密钥以及存储在私人仓库中的应用程序信息。此类搜索的来源可能包括Pastes、Gists(通常是公开的并且属于个人)和代码片段。

在像GitHub这样的平台上,先进的搜索功能进一步增强了这一过程,使测试人员能够精确地调整查询,专注于特定的数据点。在进行渗透测试时,搜索引擎黑客攻击是收集情报和识别潜在漏洞的强大工具,这些漏洞在数字环境中可能否则会保持隐藏。

Web应用程序映射

在进行应用程序渗透测试时,映射过程是渗透测试的核心基础。映射是渗透测试的第二个阶段,彻底的映射能够提供更好的结果。它的目的有两个:通过建立HTTP请求和响应的基线来提供坚实的基础,并提供有关目标应用程序的重要信息。作为一个熟练的Web应用程序映射人员,你在这一阶段的任务是揭示关键细节,为后续测试打下基础。你的请求是全面的,涵盖了应用程序的功能和底层的技术环境。你希望弄清楚的一些信息包括:

  • 确定托管应用程序的操作系统是什么。
  • 了解应用程序使用的Web服务器和应用服务器是什么。
  • 确定前端和后端使用的编程语言。

除此之外,映射还延伸到客户端,通过研究在客户端使用的技术来进一步了解。随着你深入了解应用程序的核心,你将揭示顺序处理流程,解开定义其行为的复杂交互网络。通过映射,我们将发现应用程序的隐藏面,将未知转化为一个熟练渗透测试人员可以理解和导航的拓扑结构。

映射的方法是像用户一样使用应用程序,但加入额外的工具和观察,以便我们能够理解它。映射的主要任务包括识别技术、获取HTTP请求和响应的基线、发现隐藏的内容、识别顺序处理流程以及进行功能分析。

识别技术

在映射阶段,识别技术是通过浏览器扩展如Wappalyzer、HTTP响应和可能包含敏感数据的错误信息来完成的。

Wappalyzer是一个可以添加到Firefox或Chrome浏览器中的扩展,它会在你浏览时自动识别技术。只需点击Wappalyzer图标,即可查看我们识别出的技术列表。以下是使用brackish.io的示例:

image.png

使用Wappalyzer的最大优势是,它适用于外部和内部应用程序,因为它是基于浏览器的。

通过使用开发者工具观察HTTP请求和响应,我们可以检查可能泄露的敏感信息。在这个示例中,识别出了Web服务器和版本,以及在头部中显示的操作系统:

image.png

响应头告诉我们,Brackish.io使用Apache 2.4.52在Ubuntu操作系统上托管该应用程序。如果在获取HTTP请求基线时发现任何错误消息,也应检查是否存在敏感信息泄露。

HTTP请求和响应基线

我们的下一步是请求所有可用页面以获取请求基线。这应该使用拦截代理来完成,拦截代理将在下一章中介绍。拦截代理将为你保留确切请求的历史记录。

通常,在浏览Web应用程序时,最好在基线旁边做一些笔记。有很多方法可以做到这一点。一种方法是在浏览时使用电子表格来记录信息。在电子表格中,列出你浏览的每个页面以及可以指导你测试的某些有用信息。以下是一个示例电子表格的样子:

image.png

在这个图表中,注册页面已经填写—图表中的“是”或“否”指向应该运行的具体测试。在这个示例中,由于注册页面与数据库交互,因此需要对其进行SQL注入测试,并且需要绕过客户端验证,以检查是否存在进一步的服务器端验证等。我们还可以在图表中添加一个顺序处理流程的列。

假设这种结构不适合当前的应用程序和团队,另一种方法是使用OneNote或类似工具,并为应用程序的每个部分设置一个章节。在获取基线时,记下你看到的任何可疑内容,以便以后测试。例如,如果应用程序在页面上显示用户名,则记下在该部分测试用户名的XSS漏洞。

发现隐藏内容

在Web应用程序中发现隐藏内容通常像是在猜谜,是否能找到现有的隐藏内容可能取决于运气和你的词表。你应该始终检查一些基本内容。其中之一是检查是否存在robots.txt文件。你可以通过在域名后浏览robots.txt来执行此操作。以下是brackish.io robots.txt文件的示例,如图2.15所示:

image.png

这告诉我们WordPress登录位置,并提供了网站地图,我们应该检查以查看是否遗漏了任何页面。其他不太常见的文件包括humans.txt和security.txt,如果存在,这些文件可能包含有趣的信息。

使用蜘蛛工具(通常包括在拦截代理中)也很有帮助。蜘蛛会跟踪所有链接,为你获取基线请求。验证你的设置,以确保蜘蛛在范围内。

然后,你可以使用内容发现工具来查找隐藏目录。这些工具将使用词表和文件扩展名,并尝试猜测可能存在的内容。OWASP ZAP和Burp Suite都提供了内容发现工具,将在下一部分中介绍。一个简单的命令行内容发现工具是Gobuster。命令和响应如下所示:

gobuster dir -u https://brackish.io -w ~/wordlists/shortlist.txt
===============================================================
Gobuster v3.2.0
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Mode         : dir
[+] Url/Domain   : https://brackish.io/
[+] Threads      : 10
[+] Wordlist     : /home/oj/wordlists/shortlist.txt
[+] Status codes : 200,204,301,302,307,401,403
[+] User Agent   : gobuster/3.2.0
[+] Timeout      : 10s
===============================================================
2023/09/26 11:49:43 Starting gobuster
===============================================================
/wp-admin (Status: 301)
===============================================================
2023/09/26 11:49:44 Finished
===============================================================

功能分析

功能分析与其他步骤同时进行。它指的是了解应用程序如何工作以及可能的漏洞。在这一步,你应该考虑任何顺序处理流程。一些常见的流程包括注册和忘记密码。这些流程需要被识别出来进行测试。

建议在获取基线时同时记录的笔记在这里非常有用。回顾你的笔记和HTTP基线,以了解一切是如何工作的,并做出与分析相关的额外笔记。如果你看到JavaScript被调用用于加密或其他加密目的,记下是否能从控制台调用该函数。如果任何软件版本或技术存在已知漏洞,记录下所有细节,以便稍后进行更多的测试。如果你看到某些内容你不明白如何或为何按照观察的方式工作,那么记下这个组件,稍后进行更多的测试。

结论

本章快速概述了与Web应用程序相关的侦察和映射技术。这些是彻底渗透测试的关键。良好的侦察和映射可以显著增加你在渗透测试中可以执行的漏洞利用数量。记住,在保持在合同范围内的同时尽可能多地获取信息。

在下一章中,你将学习如何使用Web代理,包括设置和选择Web代理以开始映射你的第一个应用程序。