内网
内网是指一个私有网络,通常是组织或机构内部使用的网络。它与公共互联网相对应,内网通常只在特定的局域范围内有效,如银行、学校、企业工厂、政府机关、网吧、单位办公网等都属于此类。
内网可以提供一些特定的功能和服务,例如内部文件共享、打印机共享、内部网站和应用程序访问等。由于内网是私有的,它可以更好地控制网络安全性,限制对内部资源的访问,并提供更高的数据隐私。
工作组
在一个大的单位内,可能有成百上千台电脑互相连接组成局域网,它们都会列在“网络(网上邻居)”内,如果这些电脑不分组,可想而知有多么混乱,要找一台电脑很困难。
为了解决这一问题,Windows98操作系统之后就引用了“工作组”这个概念,将不同的电脑一般按功能(或部门)分别列入不同的工作组中,如技术部的电脑都列入“技术部”工作组中,行政部的电脑都列入“行政部”工作组中。你要访问某个部门的资源,就在“网络”里找到那个部门的工作组名,双击就可以看到那个部门的所有电脑了。相比不分组的情况就有序的多了,尤其是对于大型局域网络来说。
详细可参考 工作组介绍
域
域是一种网络组织和管理的方式,它通过将计算机、用户和其他网络资源组织成一个逻辑上的集合,方便集中管理和控制。域可以包含多个计算机和用户,并提供单点登录、权限管理和集中的用户认证等功能。
内网和域之间的关系: 域可以在内网中使用,通过域控制器来管理和控制内网中的计算机和用户。域控制器是一个服务器,它负责维护域中的用户帐户、权限和安全策略等信息。在域环境中,用户可以使用域帐户登录到任何连接到该域的计算机,并访问共享资源和服务。
总结: 内网是一个私有网络,而域是一种在内网中组织和管理计算机和用户的方式,提供集中的用户认证和权限控制。通过域,内网可以实现更高级的网络管理和安全控制。
详细可参考 域相关知识整理
Windows认证流程
winlogon.exe -> 接收用户输入 -> lsass.exe -> 认证
- winlogon.exe:当用户尝试登录到Windows操作系统时,Windows会启动winlogon.exe进程,该进程负责处理用户的登录和注销、提供图形化的登录界面等。winlogon.exe接收用户的输入,包括用户名和密码。
- lsass.exe:一旦用户提供了用户名和密码,winlogon.exe将相应的凭据传递给lsass.exe(Local Security Authority Subsystem Service)。lsass.exe是Windows中的一个核心系统进程,它负责处理安全策略、用户身份验证以及安全相关的任务,并产生访问日志。
- 认证:lsass.exe将用户提供的凭据用于认证用户。这个认证可以包括本地认证(如检查本地SAM数据库中的用户信息)、NTLM认证(如果NTLM协议被使用)或其他认证机制,具体取决于系统配置和策略。
SAM
SAM(Security Account Manager)是Windows操作系统中的一个组件,用于管理用户帐户和凭据的安全数据库。它存储了本地计算机上的用户帐户信息,包括用户名、密码散列值(Hash)、安全标识符(SID)和其他安全相关的数据。
当用户输入密码时,操作系统会对输入的密码进行哈希处理,并与存储在SAM文件中的密码Hash值进行比较,以确定是否匹配。这种方式可以防止明文密码的泄露,增加了密码的安全性。
SAM文件通常位于Windows操作系统的C:\Windows\System32\config\SAM
路径下,正常情况下,当Windows系统启动后,为了保护用户帐户的安全性,SAM文件会被操作系统锁定,以防止未经授权的访问和修改,因此普通用户无法直接移动、复制或编辑SAM文件。
[!NOTE]
SAM数据库只存储本地计算机上的用户帐户信息,而在域环境中,域控制器上使用的是Active Directory数据库(NTDS.dit)来管理域中的用户和计算机帐户。
系统密钥实用工具SYSKEY
Windows 10 版本 1607、Windows Server 2016 及更高版本中不再支持 Syskey 实用工具。
SYSKEY是Windows操作系统提供的一个安全功能,用于加密和保护存储在SAM数据库中的密码散列值。它使用一个称为"System Key"的密钥来加密和存储SAM数据库中的密码散列值。
在用户登录时,系统会使用System Key解密SAM数据库中的密码散列值,进行密码验证。只有在解密成功且密码匹配的情况下,用户才能成功登录。
总的来说,SYSKEY可以看作是SAM数据库的一种加密保护机制,用于增加对密码散列值的保护,防止未经授权的访问和恶意攻击。
密码散列值(Hash)
Windows系统为了保证用户明文密码不被泄漏,因此不保存明文密码,会将明文密码转换为Hash值进行保存和身份验证,一些常见的Hash算法如下:
LM Hash(LAN Manager Hash): LM Hash是Windows早期版本中使用的较旧的密码散列算法。它将密码分成7个字符的块,并对每个块进行处理和散列。由于其较弱的安全性,现代的Windows系统通常会禁用LM Hash。(如:
AAD3B435B51404EEAAD3B435B51404EE
)NTLM Hash(NT LAN Manager Hash): NTLM Hash是在Windows NT引入的更强大和安全的密码散列算法。它使用更复杂的处理方式和更强的加密技术来生成散列值。NTLM Hash通常由32个十六进制字符表示。在
SAM
或ntds.dit
中,Windows存储用户的NTLM Hash以进行身份验证。(如:31D6CFE0D16AE931B73C59D7E0C089C0
)- NTLMv2和Kerberos散列: 较新的Windows版本中,如Windows Vista、Windows 7和Windows Server 2008,引入了更高级的密码散列算法,如NTLMv2和Kerberos散列。这些算法提供了更高的安全性和防御能力,以抵御更多类型的密码攻击。
LM HASH和NTLM HASH的相关内容可参考:《LM HASH & NTLM HASH》
SID
SID(Security Identifier)是Windows系统中用于唯一标识用户、组和计算机的安全标识符。在域环境中,SID是由域控制器分配给每个对象的,它包含了对象的唯一标识信息。SID通常由一系列数字和字符组成,用于在整个Windows网络中标识对象的身份和权限,通常还有一个SID固定列表,例如 Everyone这种已经内置的账户,默认拥有固定的SID。
举例:S-1-5-21-1004336348-1177238915-682003330-512
Contoso\Domain Admins
的 SID 具有:
- 修订级别 (1)
- 标识符颁发机构(5,NT Authority)
- 域标识符 (21-1004336348-1177238915-682003330, Contoso)
- 相对标识符(512,Domain Admins)
详细阅读:微软文档-《安全标识符》
SSPI和SSP
SSPI(Security Support Provider Interface),即 安全支持提供程序接口,是Windows操作系统中用于执行各种安全相关操作(如身份验证)的一个Win32 API,需要身份验证的应用程序和基础结构服务使用 SSPI 来提供身份验证。
SSP(Security Service Provider),即 安全服务提供,是可以为应用程序提供一种或多种安全功能包的动态链接库DLL,一些windows预装的SSP如下:
- Kerberos SSP
- NTLM SSP
- 摘要式 SSP
- Schannel SSP
- ......
SSPI的功能就是为各种SSP提供通用接口;允许SSP为不同的身份验证和加密机制提供实现,如NTLM SSP使用Challenge/Response机制,而Kerberos SSP使用基于票据的身份验证机制,理论上也可以编写自己的SSP,并将其注册到操作系统中,以支持自定义的身份验证方法。
NTLM协议
NTLM(NT LAN Manager)协议是Windows操作系统中使用的一种身份验证协议。它用于在网络通信中验证用户的身份,提供对网络资源的访问控制,并确保通信的安全性(为用户提供认证,完整性和机密性的一种网络协议)。
由于它的安全性相对较低。因此在较新的Windows版本中,Microsoft引入了更强大和安全性更高的协议,如NTLMv2和Kerberos,以取代NTLM协议。
NTLM是一种挑战/响应(Challenge/Response)形式的消息,主要包括三类消息类型:协商、挑战和质询。详细可参考《NTLM协议》
Netlogon 远程协议
NetLogon 远程协议(MS-NRPC)是一种在 Windows 域控上使用的 RPC 接口,通常用于域控制器之间和域成员计算机之间的通信,用于处理与用户和计算机身份验证相关的任务;常用于让用户使用 NTLM 协议登录服务器,也用于更新计算机域密码。
安全域划分
安全域划分是将一组具有相同安全等级的计算机划分到同一个网段内的过程。这些计算机共享相同的网络边界,并通过在网络边界上设置防火墙来控制对其他安全域的访问
在渗透测试中,安全域划分对于理解目标网络的结构和限制至关重要。常见的安全域划分包括内网、DMZ(非受限区域)和外网。基于不同的访问控制策略(如NACL(网络访问控制策略)),安全域之间的通信会有所限制
- 内网(安全级别最高):分为核心区(存储企业最重要的数据,只有很少的主机能够访问)和办公区(员工日常工作区,一般能够访问DMZ,部分主机可以访问核心区);内网可以访问DMZ和外网。
- DMZ(Demilitarized Zone,边界网络,隔离区,安全级别中等):是为了解决安装防火墙后外部网络不能访问内部网络服务器的问题,而设立的一个非安全系统与安全系统之间的缓冲区。其作用是将一些需要对外提供服务的服务器(如Web服务器、邮件服务器)部署在这个区域内,以便于对外服务而又不直接接触内网,从而增加网络安全性;DMZ不能访问内网,可以视情况访问外网。
- 外网(Internet,安全级别最低):外网可以访问DMZ,但是不能访问内网。
Kerberos协议
Kerberos是一种网络身份验证协议,旨在提供安全的身份验证服务。它由麻省理工学院提出,基于公私钥加密体制。Kerberos通过使用加密票证实现身份认证,主要由三个部分组成:Key Distribution Center (KDC)、Client和Service。KDC负责发放加密票证,Client使用票证向KDC请求服务凭据,然后向Service提供票证以访问服务。这种协议可用于确保通信双方的身份真实性和通信安全性
可参考 06.Kerberos协议
SPN
SPN(Service Principal Name)是Kerberos身份验证中用于标识特定服务实例的唯一名称。它与服务登录账户相关联,用于将服务实例与其对应的服务登录账户关联起来。在渗透测试中,SPN通常用于服务发现和Kerberoasting攻击的第一步。通过SPN扫描,渗透测试人员可以识别网络中正在运行的重要服务,并利用Kerberoasting攻击获取凭据。
可参考 SPN介绍和利用
委派
在内网渗透中,委派是一种授权机制,在Kerberos认证中涉及,允许将域内用户的权限委派给服务账号,使其能以用户的权限在域内展开活动,为多跳认证提供了便利。简单来说,当用户A访问服务B时,服务B可以使用A用户的凭证去访问其他服务C。
委派攻击通常出现在域环境中,若委派配置不正确或滥用委派能导致域管理员权限的获取,甚至制作深度隐藏的后门。
可参考 委派
ACL
ACL是Access Control List的缩写,是一种用于控制对对象(如文件、文件夹、注册表项等)访问权限的机制。在内网渗透中,ACL通常指代Windows环境下的访问控制列表,它由一系列访问控制条目(ACE)组成,用于定义用户或用户组对对象的访问权限。
可参考 ACL
组策略
Windows组策略(Group Policy)是微软Windows操作系统的一个重要特性,用于管理用户和计算机的工作环境。关键信息包括:
- 功能:提供了集中管理和配置操作系统、应用程序以及活动目录中用户设置的功能.
- 对象:核心对象是组策略对象(GPO),可控制组织单位的系统服务安全性.
- 适用性:主要面向网络管理员,但也可用于调整单台计算机的设置
可参考组策略
DPAPI加密解密
DPAPI由微软从Windows 2000开始发布,全称为Data Protection Application Programming Interface(DPAPI)
,是Windows操作系统提供的一种数据保护应用程序接口,旨在保护用户数据的安全性,其分别提供了加密函数CryptProtectData
与解密函数 CryptUnprotectData
。
其作用范围包括且不限于:
- outlook客户端密码
- window scredential凭据
- chrome保存的密码凭据
- internet explorer密码凭据
DPAPI采用的加密类型为对称加密,存放密钥的文件则被称之为Master Key Files,其路 径一般为%APPDATA%\Microsoft\Protect\{SID}\{GUID}
,其中{SID}
为用户的安全标识 符,{GUID}
为主密钥名称,我们可以利用用户的密码、hash或域备份密钥解密主密钥,然后解密被dpapi加密的数据。
实战过程中,可使用mimikatz进行获取密钥和解密,参考《使用 MimiKatz 读取 DPAPI 加密密钥的几种方式》
Exchange
Exchange是微软开发的消息与协作系统,它提供电子邮件、日历、联系人等功能,用于构建企业或学校的邮件系统以及协作平台,是现今大多数组织所使用的协同运作平台。
Exchange搭建可参考《Exchange搭建》
其他
SMB
SMB (Server Message Block) 是一种用于在计算机间共享文件、打印机、串行端口等资源的协议,又叫网络文件共享系统(CIFS);它是一种客户机/服务器、请求/响应协议,一般使用NetBIOS或TCP协议发送,分别使用不同的端口139或445,当前倾向于使用445端口,因为它提供了更多的安全性和功能。
IPC$
IPC$(Internet Process Connection)是共享“命名管道”的资源,为了让进程间通信而开放的命名管道,通过提供可信任的用户名和口令,连接双方可以建立安全的通道并以此通道进行加密数据的交换,从而实现对远程计算机的访问。从NT/2000开始使用,连接的远程主机的139端口和445端口需要开放。
其实说白了IPC$有点类似于共享目录,但功能比他多得多。通过IPC$与目标机建立连接,不仅可以访问目标机器中的文件,进行上传、下载,还可以在目标机上运行命令。
个人感觉实战上很鸡肋,没有什么用武之地?
NETBIOS
NETBIOS(Network Basic Input Output System)是一种早期的局域网通信协议,用于在局域网内的计算机之间进行通信和资源共享。它提供了一种标准的接口,使不同计算机之间能够进行通信,包括文件共享、打印机共享等功能。NETBIOS操作通过TCP/IP或者其它网络协议进行通信。在内网渗透中,攻击者常常利用NETBIOS来发现内网中的主机和共享资源,进而展开攻击。
NETBIOS协议可以通过UDP 137、138端口进行通信,以及TCP 139端口进行文件共享。它提供了一种简单但有效的方法,使得局域网内的计算机可以相互识别和访问共享资源,但同时也因为其早期设计的安全性较弱,可能存在一些安全风险和漏洞。
LLMNR
LLMNR(Link-Local Multicast Name Resolution)是一种用于局域网中名称解析的协议,特别针对工作组和域设计。它允许同一局域网中的主机通过多播方式解析主机名,以便进行通信和资源共享。在Windows Vista及更高版本的Windows操作系统中,LLMNR成为默认启用的解析协议,攻击者可以利用LLMNR来发起欺骗攻击,诱导目标主机将查询发送到攻击者控制的恶意主机上,从而进行信息收集或横向移动攻击
举例说明如下:
假设有两台计算机A和B在同一局域网中。计算机A想要访问计算机B,但是它只知道计算机B的主机名,而不知道它的IP地址。在这种情况下,计算机A会发送一个LLMNR查询,询问局域网中是否有能够解析该主机名的计算机。
计算机B收到了LLMNR查询,发现自己的主机名与查询匹配。它会向计算机A回复,提供自己的IP地址。随后计算机A可以使用这个IP地址与计算机B建立连接,并进行通信。
这个过程是在局域网内部完成的,不需要使用 DNS 服务器,因此对于本地网络解析非常方便。LLMNR通常用于小型网络环境中,比如家庭网络或小型企业网络。
WMI
WMI(Windows Management Instrumentation)是Windows操作系统中的一项重要管理工具,用于管理本地和远程计算机。它提供了一种标准化的方式来获取和设置操作系统信息、执行管理任务以及监视系统健康状况。在内网渗透中,攻击者可以利用WMI来进行横向移动,获取远程主机的信息并执行命令,而且通常不会留下明显的痕迹。
WinRM
WinRM(Windows Remote Management)是Windows系统中的一项服务,允许管理员通过远程执行管理任务的方式进行管理;支持NTLM和Kerberos身份验证,会话使用AES加密保护;在Windows 2012及以后的版本中默认开启。默认端口为5985(http)或5986(https)。