Skip to main content
Advanced Search
Search Terms
Content Type

Exact Matches
Tag Searches
Date Options
Updated after
Updated before
Created after
Created before

Search Results

161 total results found

子域名接管

企业基础设施攻击与红队行动 章节3:外部侦查

子域名接管漏洞可以被攻击者用来创建可信的钓鱼方案、恶意软件分发、CSP 绕过、读取父域 Cookie 等。对于企业来说,子域名有更高的可能性直接绕过邮件过滤器,因此钓鱼攻击的成功率大大增加。 子域名接管意思是攻击者对目标域的一个子域有了完全的控制权,通常在以下情况出现 1:在 DNS 记录中,一个子域 (www.azuresky.live) 的 CNAME 所指向另一个域 (dlersec.azureedge.net),但是 dlersec.azureedge.net 在某个时间点过期了并且重新开放给任何人注册...

本地侦查思路

企业基础设施攻击与红队行动 章节5:本地侦查以及特权提升

在成功的利用之后,我们已经拿到了服务器本地的访问了,根据服务器配置的不同,此时我们可能已经是最高权限了,也可能是低权限用户。我们需要充分利用现有的访问,对本地信息进行详尽的侦查,包括但不局限于网络配置、本地文件、用户和群组、分配的权限、系统版本、存储的凭证等。 对于提权,不一定是必要的,但是提权能让我们访问到更多的信息,从而提高入侵更多主机的成功率。我这里强调一个思想:侦查的目标不是 (本地)提权,而(本地)提权的目标是侦查更多信息。对于企业的域网络,我们即便拿到了当前主机的最高权限,也是远远不够的,所做的一切都...

Linux 持久化

企业基础设施攻击与红队行动 章节6:本地持久化

在之前,我们主要讨论了 Windows 平台的持久化技术,但是在实战中我们也会遇到大量的 Linux 边界主机,我们同样要学会持久化技术。持久化的表现形式可以有本地后门,即可以瞬间实现提权,例如给特定文件设置 SUID。还可以是远程控制的形式,即受害主机会以规律或不规律的间隔向 C2 服务器连接。作为从外部突破的红队操作员以及渗透测试人员角度,我们需要的是后者,即能直接提供 C2 会话。 SSH id_rsa 在用户的 .ssh 文件夹中,id_rsa 是用户的私钥,默认权限是 600,即只有用户自己以及 r...

Windows 架构、API 与编程调用

企业基础设施攻击与红队行动 章节14:恶意软件开发基础

从这个章节起,我们将学习一些有关编程与二进制的技能,为下个章节的恶意软件以及安全工具开发奠定基础。学习恶意软件开发的原因有多种,从进攻型安全的角度来看,我们通常需要针对客户的环境执行某些恶意任务,当涉及到参与中使用的工具类型时,通常有三个主要选择。第 1 种是开源工具,这些工具通常由安全供应商签名甚至没有签名,并且会在安全性相对任何成熟的组织中被检测到,因此在执行攻击的时候,它们并不总是可靠的。第 2 种是购买工具,预算较大的团队通常会选择购买工具,以便在项目期间节省宝贵的时间。这些工具通常是闭源的,并且具备更加出...

PE 文件

企业基础设施攻击与红队行动 章节14:恶意软件开发基础

可移植可执行 (PE) 文件格式与 Windows 操作系统上能实现代码执行的文件类型所使用,常见的拓展名有 exe、dll、sys 等。PE 格式描述了文件必须遵循的标准结构,以便定位其内容并在执行的各个阶段使用其信息。了解这种格式对于恶意软件分析人员来说尤为重要,因为检查可执行文件的 PE 内容可以提供有关文件的大量信息,可能包括文件的作用。对于我们开发恶意软件的攻击者也同样重要,因为一些免疫检测的技术需要对 PE 文件十分熟悉。 PE 文件结构 PE 格式包含多种文件类型,在最高层次可以分为 COFF...

x64架构汇编

企业基础设施攻击与红队行动 章节14:恶意软件开发基础

掌握汇编语言对于恶意软件开发有着很大的作用,例如可以编写自定义 Shellcode、在木马加载器中插入汇编代码以实现混淆以及底层的指令操作等。 基本概念 汇编语言是我们可以用来为给定 CPU 编写程序的最底层的编程语言,汇编可以被翻译为 CPU 操作码,即 CPU 可以直接执行的机器码。 通常,汇编指令与操作码具有 1:1 的关系,但在 C 等高级语言中情况并非如此,它们有多种方法将书面代码编译或转换为机器代码。接下来,我们分别来讨论汇编中设计的名词与概念。 字节顺序 字节顺序指的是数据在计算机内存...

Shellcode 编写 - 1

企业基础设施攻击与红队行动 章节14:恶意软件开发基础

背景 一般来说,如果我们需要执行 Shellcode,会通过各自的 C2 或者 msfvenom 来生成,但因为这些工具大部分都是开源的,即便是商业工具,也会因为样本的提交导致 Shellcode 的特征被标记。 因此,编写自定义的 Shellcode 可以实现更多的灵活性以及特征规避,同时也很有趣。 测试方法 使用 Keystone 引擎,可以让 Shellcode 的编写更加流畅。Keystone 是一个汇编框架,可以与多种语言绑定,包括 Python。这样的话,我们可以在 Python 脚...

第14章课后作业

企业基础设施攻击与红队行动 章节14:恶意软件开发基础

练习 1:分析 OpenProcess 的调用链 2:使用 C++ 调用 CreateProcess API,运行 calc.exe 程序 3:使用 P/Invoke 通过序数调用 OpenProcess,运行 calc.exe 程序 4:使用 D/Invoke 调用 OpenProcess,运行 calc.exe 程序 5:D/Invoke 还有其他方式获得对模块以及 API 的句柄,例如通过方法 GetPebLdrModuleEntry 来获得对 DLL 的句柄。请查看 D/Invoke 的仓库 RE...

Windows 认证理论

企业基础设施攻击与红队行动 章节9:Windows凭证理论

我们在之前已经讨论了 NTLM 认证、Kerberos 认证、LSA 与 LSASS、SAM 等概念。在这小节,我们将对 Windows 认证理论做一个整合、归纳以及延伸。 本章节所使用的原理示意图和部分理论来自 https://attl4s.github.io/assets/pdf/Understanding_Windows_Lateral_Movements_2023.pdf 。  Windows 认证类型与形式 发生在 Windows 环境中的认证过程,可以是本地认证,以及域认证。 本地认证 本地认...

域缓存凭证

企业基础设施攻击与红队行动 章节9:Windows凭证理论

当域用户曾经登陆过域主机,便会将凭证缓存下来,以防联系不上域控制器的时候也能实现本地登陆。一个实际的情景可以是,某员工携带着笔记本出差。域缓存凭证不能直接地用于认证,但是可以将其离线破解,尝试还原出明文密码。 我们之前在使用 Impacket 导出 LSA 机密的时候,发现了下图所标注出来的域缓存凭证。实际上,这些缓存凭证存在于 HKLM\SECURITY 注册表 Hive。 我们还可以通过 Mimikatz 的命令 lsadump::cache 来提取。 但我们发现 mimikatz 提取出来的缓存...

其他应用

企业基础设施攻击与红队行动 章节11:横向移动

还有一些其他常用的应用与协议也可以被攻击者用于横向移动,可以通过安装特定的软件或运行特定的服务器实现。虽然并不是原生的,但在特定的网络环境中具有一定的使用率。 VNC VNC 是一个提供远程 GUI 访问的服务,类似于 RDP。但与 RDP 略有不同的是,VNC 是平台无关的,也就是不仅 Windows 支持 VNC 服务,Linux 主机、手机、OT 设备等都支持 VNC 服务,并且其他用户访问 VNC 并不会把当前用户挤下去,而是共享同一个控制台会话。VNC 服务默认端口是 5900 或者 5901。 ...

杀毒软件与EDR原理

企业基础设施攻击与红队行动 章节15:安全控制突破与防御规避

背景 如今,渗透测试人员和红队操作员在红队行动中面临着重大挑战,因为杀毒软件和 EDR (终端检测与响应) 等安全产品会阻止许多载荷与工具的执行。在本章节中,我们将讨论攻击者用来规避检测的一些技术。 恶意软件检测 杀毒软件采用多种技术组合来检测恶意软件,这些技术包括静态分析、动态分析、基于特征的检测、启发式分析、行为分析以及机器学习等。而 EDR 则更加复杂,维度更多。 杀毒软件 静态分析 静态分析是在不实际运行代码的情况下分析恶意软件二进制代码的过程。它涉及文件指纹 (例如哈希)、字节序列模式...

父进程欺骗

企业基础设施攻击与红队行动 章节15:安全控制突破与防御规避

父进程欺骗是一种允许攻击者使用任意父进程启动程序的技术,这有助于使攻击者的程序看起来是由另一个进程生成的,有助于规避基于父子进程关系的检测,尤其是当我们的 Beacon 在非常规的进程下运行,进程的创建事件会引发警告。默认情况下,交互式用户启动的大多数程序都将为 explorer.exe 的子进程。 父进程欺骗可以由以下步骤实现: 指定父进程的名称或者 PID。这里,我们是指定的名称,如果相同名称的进程存在多个实例,那么取第一个。这里用到 CreateToolhelp32Snapshot 函数,用于创建给定进程...

用户态Hooking介绍

企业基础设施攻击与红队行动 章节15:安全控制突破与防御规避

Hook,即钩子,在网络安全用语中,指的是拦截并且修改特定的 API 执行流程,通常用于 Debugging,逆向工程,游戏作弊,检测恶意软件行为。API Hook 将原有的 API 替换为自定义的以进行额外的检视,如果非恶意,则继而调用原有的 API,否则会被拦截。 安全产品,例如 EDR,可能会实施 SSDT Hooking,IAT Hooking,内联 Hooking。不过对于 SSDT Hooking,因为是内核层的,虽然安全产品可以实施 SSDT Hooking 从而实现更彻底的检视,但也会被恶意软件用...

调用syscall实现用户态Hook绕过

企业基础设施攻击与红队行动 章节15:安全控制突破与防御规避

在上个小节,我们主要是通过对 ntdll 模块进行覆盖或者补丁来移除 hook 实现用户态 hook 的绕过。但是这些方法涉及到对 ntdll 的纂改,以及对内存权限的修改,具有一定的风险。实际上,我们还有其他途径来实现 hook 的绕过。 提取 syscall 号码 我们可以在 C 项目里定义汇编函数,来实现 NTAPI。我们知道,只需要最少 4 条指令,我们便能成功执行 syscall。但在执行 syscall 之前,我们需要获得目标函数的 SSN。我们可以从磁盘中读取一份干净的 ntdll 并解析得到...

代码注入与进程操纵

企业基础设施攻击与红队行动 章节15:安全控制突破与防御规避

代码注入是一项恶意软件的常见技术,将恶意代码,如 shellcode,乃至 PE 文件,输入到目标进程,实现提高稳定性以及寄居在看起来良性的进程之中以规避检测。 代码注入的方法有很多,有着各自的优缺点,以及所需的 API 组合,我们接下来一起看看一些常见和先进的技术。 代码注入 经典进程注入 首先我们要说的是经典的进程注入。步骤有以下这些: 根据我们需要,通过 PID 或者进程名来指定要注入的进程,我们需要用到 CreateToolhelp32Snapshot 函数创建进程列表的快照。 HANDLE...

使用 WinDBG 调试

企业基础设施攻击与红队行动 章节14:恶意软件开发基础

在这小节,我们将学习调试程序的技能,这对于恶意软件开发领域有这些帮助:理解当下的恶意软件的技术、功能、原理,分析恶意软件并且改进,开发漏洞利用以及 Shellcode,理解安全产品的原理以规避检测等。 我们将主要使用 WinDBG 作为动态调试工具,WinDBG 可以在微软商店中获取: 调试器是插入在目标应用程序和 CPU 之间的计算机程序,充当类似代理的角色。使用调试器使我们能够查看应用程序的内存和执行流程并与之交互。接下来的课程内容中,我们将与用户模式交互。 CPU以二进制级别处理代码,这对人类来说很...

黄金证书攻击

企业基础设施攻击与红队行动 章节13:支配域与森林

背景 在具有 ADCS 的环境里,CA 的私钥在 CA 服务器上受到 DPAPI 或硬件解决方案 (HSM/TPM) 的保护。 此外,证书被发布在 NTAuthCertificates 森林对象,该对象定义了启用 AD 身份验证的 CA 证书。 总之,证书存在于 NTAuthCertificates 中的 CA 使用其私钥签署来自请求客户端的 CSR。 CA 私钥的安全性至关重要,如果私钥不受 TPM 或 HSM 等硬件解决方案的保护,则密钥将使用 DPAPI 加密并存储在 CA 服务器的文件系统中。...

跨域理论

企业基础设施攻击与红队行动 章节13:支配域与森林

当我们最终接管了当前域,接下来要做的便是占领更多的域,主要通过利用域信任以及其他的不当配置来实现。在那之前,我们需要熟悉一些跨域理论相关的名词,因为跨域理论较为复杂,涉及到的理论知识比较多。 概念与名词 域信任 域信任是 AD 的一个关键组件,它使一个域中的用户能够对另一个域中的系统和资源进行身份验证和访问。理解域信任的几个方面很重要,包括信任的方向和对资源的访问。信任的方向可以是单向的,也可以是双向的。单向信任是在两个域之间创建的单向身份认证路径,如果域 A 信任域 B,则域 B 中的用户可以访问域 A...

进程与线程

企业基础设施攻击与红队行动 章节14:恶意软件开发基础

在恶意软件开发领域,诸多代码注入、防御规避技术是围绕着进程与线程展开的,因此我们首先需要理解进程与线程的相关概念。 进程与线程 Windows 进程是指当前运行在 Windows 主机上的程序或者应用的实例,每个进程都与其他进程隔离,并拥有由操作系统分配的私有资源。进程可以是用户或者操作系统开启的,消耗着如内存、磁盘空间等资源。 线程是进程内的最小执行单元,每个 Windows 进程由 1 个或多个线程并发运行。进程中运行的每个线程共享进程的内存和资源。 与进程不同,线程之间不是相互隔离的,可以直接与进程中的...