新闻详情

新闻详情

首页 / 资讯中心 / 详情

PowerSploit Recon 模块 Get-DomainDFSShare 深度解析:枚举域内分布式文件系统共享

发布时间:2026/11/4 19:38:02来源:尧图网络
PowerSploit Recon 模块 Get-DomainDFSShare 深度解析:枚举域内分布式文件系统共享
PowerSploit Recon 模块 Get-DomainDFSShare 深度解析枚举域内分布式文件系统共享【免费下载链接】PowerSploitPowerSploit - A PowerShell Post-Exploitation Framework项目地址: https://gitcode.com/gh_mirrors/po/PowerSploit导读Get-DomainDFSShare是 PowerSploit 项目 Recon 模块核心实现位于 PowerView.ps1中用于发现域内分布式文件系统DFS共享的命令。它通过 LDAP 查询 Active Directory 中fTDfsDFS 命名空间版本 1与msDFS-Linkv2DFS 命名空间版本 2两类对象解析其中内嵌的服务器目标信息输出一份可直接用于横向移动与内网资产梳理的「域内共享服务器」清单。读完本文你将掌握该命令的全部参数语义、三种典型调用方式默认、指定域、备用凭据以及其背后二进制与 XML 解析的源码级原理。功能概览与适用场景Get-DomainDFSShare用于返回当前域或指定域中所有容错型分布式文件系统共享。在 PowerShell 渗透测试与内网侦察框架 PowerSploit 的语境下它的典型价值在于资产发现一次性枚举域内所有 DFS 根目录与链接link所指向的后端文件服务器信息收集为后续的共享探测、凭据抓取如 SYSVOL 中 GPP 密码或横向移动提供目标清单域拓扑测绘配合Get-DomainShare、Get-DomainComputer等命令还原文件服务分布。命令由 Ben Campbellmeatballs__编写遵循 BSD 3-Clause 许可唯一必需依赖是 Get-DomainSearcher用于构建自定义 AD 搜索器对象。该命令已在 Recon.psd1 中声明为模块导出函数因此导入 Recon 模块后即可直接调用。语法与参数详解命令的完整语法如下Get-DomainDFSShare [[-Domain] String[]] [[-SearchBase] String] [[-Server] String] [[-SearchScope] String] [[-ResultPageSize] Int32] [[-ServerTimeLimit] Int32] [-Tombstone] [[-Credential] PSCredential] [[-Version] String]参数类型位置默认值别名说明-DomainString[]1NoneDomainName、Name要查询的域默认当前域支持管道按属性名/按值传入可一次指定多个域-SearchBaseString2NoneADSPathLDAP 搜索起点如LDAP://OUsecret,DCtestlab,DClocal适合限定 OU 范围查询-ServerString3NoneDomainController指定要绑定的域控制器-SearchScopeString4Subtree—搜索范围合法值为Base/OneLevel/Subtree由ValidateSet约束见 PowerView.ps1-ResultPageSizeInt325200—LDAP 搜索器对象的分页大小取值范围 1–10000ValidateRange约束-ServerTimeLimitInt3260未指定则不传—服务器端搜索耗时上限秒在 Get-DomainSearcher 中该值默认 120 秒取值范围 1–10000-TombstoneSwitchParameterNamedFalse—是否让搜索器同时返回已删除tombstoned对象-CredentialPSCredential7[Management.Automation.PSCredential]::Empty—连接目标域的备用凭据对象-VersionString8All—指定枚举的 DFS 版本All/V1/1/V2/2ValidateSet约束说明-Version与-SearchScope等参数在实现中均有[ValidateSet(...)]校验见 PowerView.ps1传入非法值会直接被 PowerShell 拒绝这是防御参数误用的一道内置防线。典型用法示例示例 1枚举当前域全部 DFS 共享Get-DomainDFSShare默认-Version All同时枚举版本 1 与版本 2 的 DFS 对象并去重合并返回当前域中所有分布式文件系统共享。示例 2枚举指定域Get-DomainDFSShare -Domain testlab.local将搜索范围锁定到testlab.local域。-Domain是String[]类型因此也可以一次传入多个域Get-DomainDFSShare -Domain testlab.local, corp.local示例 3使用备用凭据$SecPassword ConvertTo-SecureString Password123! -AsPlainText -Force $Cred New-Object System.Management.Automation.PSCredential(TESTLAB\dfm.a, $SecPassword) Get-DomainDFSShare -Credential $Cred当当前会话令牌权限不足或需要以域内其他账户身份侦察时可显式构造PSCredential传入。源码中备用凭据会沿Get-DomainSearcher向下传递最终以DirectoryEntry($SearchString, $Credential.UserName, $Credential.GetNetworkCredential().Password)的方式绑定 LDAP 目录入口见 PowerView.ps1。组合用法限定 OU 与绑定指定域控Get-DomainDFSShare -SearchBase LDAP://OUsecret,DCtestlab,DClocal -Server dc01.testlab.local -SearchScope Subtree-SearchBase将查询锚定到指定 OU-Server指定绑定目标域控-SearchScope决定递归深度。输出对象结构命令输出类型为System.Management.Automation.PSCustomObject每个对象描述一个 DFS 目标核心属性为NameDFS 命名空间/链接名称V1 取对象name属性V2 由$DFSroot $ShareName拼接RemoteServerName目标后端服务器名即\\server\share中的server段。V1 与 V2 各自内部先按RemoteServerName去重排序最终统一按(RemoteServerName,Name)排序并去重后输出见 PowerView.ps1。因此结果中同一服务器即使挂载了多个 DFS 链接也会被合并归纳适合直接导出为服务器清单。源码级原理V1 与 V2 的双轨实现版本分派逻辑PROCESS块负责按域与版本分派PowerView.ps1if ($Version -match all|1) { $DFSshares Get-DomainDFSShareV1 SearcherArguments } if ($Version -match all|2) { $DFSshares Get-DomainDFSShareV2 SearcherArguments }由于-Version允许All/V1/1/V2/2这里用正则-match all|1与all|2做宽松匹配指定-Domain时则逐个目标域循环调用否则对当前域执行一次。BEGIN块会按$PSBoundParameters动态组装搜索器参数哈希表PowerView.ps1未显式传入的参数不会透传给底层搜索器。V1 路径fTDfs 对象 remoteservername/pkt 属性Get-DomainDFSShareV1PowerView.ps1先通过Get-DomainSearcher获取搜索器然后将 LDAP 过滤器设为$DFSsearcher.filter ((objectClassfTDfs))fTDfs是 Active Directory 中表示 DFS 命名空间根对象的类对应经典 DFS v1。随后读取每个结果对象的remoteservername属性将形如\\server\share的值切分后提取服务器名读取二进制pkt属性交给内部辅助函数Parse-Pkt解析对解析出的目标进行null过滤——注释明确指出未配置重定向的文件夹会给出\\null\TestNameSpace\folder\.DFSFolderLink之类的目标需要精确匹配字符串null而非$Null才能正确剔除PowerView.ps1。Parse-Pkt手工解码 DFS 二进制 Blobpkt属性是 DFS 命名空间打包的二进制结构Parse-PktPowerView.ps1用[BitConverter]按小端序逐字段手工解码参照的协议文档是 MS-DFSNM注释中引用了 msdn 的 cc227147 与 cc230324 条目头部 8 字节blob_versionUInt32blob_element_countUInt32随后遍历每个元素名称长度UInt16 Unicode 名称 数据长度UInt32 数据仅处理名称匹配\domainroot*的DFSNamespaceRootOrLinkBlob依次读出根/链接 GUID16 字节、前缀长度与前缀、短前缀长度与短前缀、类型UInt32、状态UInt32、注释长度与注释以及三个 FILETIME 时间戳各 8 字节和版本号UInt32继续解析DFSTargetListBlob目标计数UInt32每个目标条目由条目大小、时间戳、状态、类型、服务器名长度/名称、共享名长度/名称组成最终拼装为\\$server_name\$share_name形式的完整 UNC 路径最后从所有目标路径中提取第 3 段split(\)[2]作为服务器名集合返回。这部分纯字节级的解析是 V1 路径中最容易出现兼容性问题的环节源码中为此包了多层try/catch出错时输出Write-Verbose/Write-Warning前缀为[Get-DomainDFSShare]的诊断信息。V2 路径msDFS-Linkv2 对象 XML TargetListGet-DomainDFSShareV2PowerView.ps1面向 Windows Server 2008 引入的 DFS Namespaces v2LDAP 过滤器为$DFSsearcher.filter ((objectClassmsDFS-Linkv2))并显式加载两个属性$Null $DFSSearcher.PropertiesToLoad.AddRange((msdfs-linkpathv2,msDFS-TargetListv2))与 V1 的二进制解析不同V2 的目标列表以 XML 形式存储。代码将msDFS-TargetListv2取为字节数组跳过前两个字节UTF-16 BOM后按 Unicode 解码为 XML再遍历xml.targets的子节点读取每个目标的InnerText$xml [xml][System.Text.Encoding]::Unicode.GetString($target_list[2..($target_list.Length-1)]) $Target $_.InnerText其中$Target.split(\)[3]取出 DFS 根名与msdfs-linkpathv2拼接为输出对象的Name$Target.split(\)[2]取出后端服务器名作为RemoteServerName。底层依赖 Get-DomainSearcher两条路径都依赖Get-DomainSearcher构建System.DirectoryServices.DirectorySearcher。该函数PowerView.ps1按以下优先级决定搜索目标显式传入-Domain优先从$ENV:USERDNSDOMAIN/$ENV:LOGONSERVER推导绑定服务器未传域但传了-Credential调用Get-Domain解析当前域及其 PDC 角色所有者否则从环境变量或Get-Domain兜底取当前域。它会把域名转换为DCxxx,DCyyy形式的 distinguishedNamePowerView.ps1并支持GC://全局编录前缀。理解这一链路有助于排查「为什么-Server没生效」「为什么-Credential没带域时会多一次Get-Domain查询」之类的行为。注意事项与限制LDAP 权限枚举依赖对目录的读取权限fTDfs与msDFS-Linkv2对象通常对域内普通认证用户可读但跨域查询需要相应的信任关系与权限V1 兼容性pkt二进制解析依赖特定协议版本面对非标准实现或数据损坏时会被try/catch吞掉并跳过属预期行为去重语义输出按服务器名去重若需还原「服务器 ↔ 具体 DFS 链接」的完整映射可配合-Verbose观察中间解析过程或直接阅读 PowerView.ps1 中的拼接逻辑运行环境函数基于 .NET 的System.DirectoryServices需在可访问目标域控的 Windows 主机上的 PowerShellWindows PowerShell 5.x 或 PowerShell 7 均可加载脚本运行中执行版本选择对较老域环境Windows 2000/2003 传统 DFS建议-Version V1对现代域优先-Version V2以减少二进制解析带来的不确定性。延伸阅读命令在 Recon 模块中的导出声明Recon/Recon.psd1Recon 模块 README 中的功能索引Recon/README.md完整实现与内部辅助函数PowerView.ps1依赖的搜索器构建函数PowerView.ps1官方文档索引docs/Recon/index.md使用-Version V1/V2时建议先以Get-DomainDFSShare -Version V1 -Verbose观察解析告警再决定是否切换版本枚举。【免费下载链接】PowerSploitPowerSploit - A PowerShell Post-Exploitation Framework项目地址: https://gitcode.com/gh_mirrors/po/PowerSploit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/11/4 15:56:54

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/11/3 12:09:35

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/4 17:01:23

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/11/4 12:33:12

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/11/4 1:25:31

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/11/4 3:51:11

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉