T1590-win-DNS记录获取
来自ATT&CK的描述
在攻击受害者之前,攻击者可能会收集有关受害者DNS的信息,这些信息可在目标确定期间使用。
在域渗透中,对域环境的信息搜集很关键,如果我们获得了域内管理员的权限,那么如何能够快速了解域内的网络架构呢?DNS记录无疑是一个很好的参考。
测试案例
本文包含以下内容:
- 通过dnscmd获取DNS记录
dnscmd:用来管理DNS服务器的命令行接口,支持远程连接
默认安装的系统:
- Windows Server 2003
- Windows Server 2008
- Windows Server 2003 R2
- Windows Server 2008 R2
- Windows Server 2012
- Windows Server 2003 with SP1
- …
参考资料:
Win7系统在使用时需要安装Remote Server Administration Tools (RSAT)
参考地址:
RSAT下载地址:
https://www.microsoft.com/en-us/download/details.aspx?id=7887
检测日志
Windows安全日志
测试复现
常用命令
未能实现三好学生大佬说的效果,同样我的Windows server 2008R2并不支持dnscmd这个命令。很无奈。在Windows server 2016中并没有".",值得注意。
C:\Users\12306br0>dnscmd ./ZoneInfo 361a.com
指定了未知的命令“361a.com” -- 键入 DnsCmd -?。
在将来的 Windows 版本中,Microsoft 可能会删除 dnscmd.exe。
如果你当前使用 dnscmd.exe 配置和管理 DNS 服务器,
Microsoft 建议你过渡到 Windows PowerShell。
若要查看 DNS 服务器管理命令列表,请在
Windows PowerShell 提示符处键入 "Get-Command -Module DnsServer"。
有关适用于 DNS 的 Windows PowerShell 命令的详细信息,请参阅
http://go.microsoft.com/fwlink/?LinkId=217627。
用法: DnsCmd <ServerName> <Command> [<Command Parameters>]
<ServerName>:
IP 地址或主机名 -- 远程或本地 DNS 服务器。
. -- 本地计算机上的 DNS 服务器
<Command>:
/Info -- 获取服务器信息
/Config -- 重置服务器或区域配置
/EnumZones -- 枚举区域
/Statistics -- 查询/清除服务器统计信息数据
/ClearCache -- 清除 DNS 服务器缓存
/WriteBackFiles -- 写入所有区域或根提示数据文件
/StartScavenging -- 开始服务器清理
/IpValidate -- 验证远程 DNS 服务器
/EnumKSPs -- 枚举可用的密钥存储提供程序
/ResetListenAddresses -- 将服务器 IP 地址设置为服务 DNS 请求
/ResetForwarders -- 将 DNS 服务器设置为转发递归查询
/ZoneInfo -- 查看区域信息
/ZoneAdd -- 在 DNS 服务器上创建新区域
/ZoneDelete -- 从 DNS 服务器或 DS 删除区域
/ZonePause -- 暂停区域
/ZoneResume -- 恢复区域
/ZoneReload -- 从其数据库(文件或 DS)重新加载区域
/ZoneWriteBack -- 将区域写回到文件
/ZoneRefresh -- 强制刷新主机的辅助区域
/ZoneUpdateFromDs -- 使用来自 DS 的数据更新 DS 集成区域
/ZonePrint -- 显示区域中的所有记录
/ZoneResetType -- 更改区域类型
/ZoneResetSecondaries -- 重置区域的辅助\通知信息
/ZoneResetScavengeServers -- 重置区域的清理服务器
/ZoneResetMasters -- 重置辅助区域的主服务器
/ZoneExport -- 将区域导出到文件
/ZoneChangeDirectoryPartition -- 将区域移动到另一目录分区
/ZoneSeizeKeymasterRole -- 占用区域的密钥主机角色
/ZoneTransferKeymasterRole -- 传送区域的密钥主机角色
/ZoneEnumSKDs -- 枚举区域的签名密钥描述符
/ZoneAddSKD -- 为区域创建新的签名密钥描述符
/ZoneDeleteSKD -- 删除区域的签名密钥描述符
/ZoneModifySKD -- 修改区域的签名密钥描述符
/ZoneValidateSigningParameters -- 验证区域的 DNSSEC 联机签名参数
/ZoneSetSKDState -- 为区域的签名密钥描述符设置活动和/或待机密钥
/ZoneGetSKDState -- 检索区域的签名密钥描述符的动态状态
/ZonePerformKeyRollover -- 在区域的签名密钥描述符中触发密钥滚动更新
/ZonePokeKeyRollover -- 在区域的签名密钥描述符中触发密钥滚动更新
/ZoneSign -- 使用 DNSSEC 联机签名参数为区域签名
/ZoneUnsign -- 从已签名的区域中删除 DNSSEC 签名
/ZoneResign -- 在已签名的区域中重新生成 DNSSEC 签名
/EnumRecords -- 枚举同一名称的记录
/RecordAdd -- 在区域或根提示中创建记录
/RecordDelete -- 从区域、根提示或缓存中删除记录
/NodeDelete -- 删除同一名称的所有记录
/AgeAllRecords -- 对区域中的节点进行强制老化
/TrustAnchorAdd -- 在 DNS 服务器上创建新的信任密钥区域
/TrustAnchorDelete -- 从 DNS 服务器或 DS 删除信任密钥区域
/EnumTrustAnchors -- 显示信任定位点的状态信息
/TrustAnchorsResetType -- 更改信任密钥区域的区域类型
/EnumDirectoryPartitions -- 枚举目录分区
/DirectoryPartitionInfo -- 获取有关目录分区的信息
/CreateDirectoryPartition -- 创建目录分区
/DeleteDirectoryPartition -- 删除目录分区
/EnlistDirectoryPartition -- 将 DNS 服务器添加到分区复制作用域
/UnenlistDirectoryPartition -- 从复制作用域中删除 DNS 服务器
/CreateBuiltinDirectoryPartitions -- 创建内置分区
/ExportSettings -- 将设置输出到 DNS 服务器数据库目录中的 DnsSettings.txt
/OfflineSign -- 脱机签名区域文件,包括密钥生成/删除
/EnumTrustPoints -- 显示所有信任点的有效刷新信息
/ActiveRefreshAllTrustPoints -- 立即对所有信任点执行有效刷新
/RetrieveRootTrustAnchors -- 通过 HTTPS 检索根信任定位点
<Command Parameters>:
DnsCmd <CommandName> /? -- 有关特定命令的帮助信息
在将来的 Windows 版本中,Microsoft 可能会删除 dnscmd.exe。
如果你当前使用 dnscmd.exe 配置和管理 DNS 服务器,
Microsoft 建议你过渡到 Windows PowerShell。
若要查看 DNS 服务器管理命令列表,请在
Windows PowerShell 提示符处键入 "Get-Command -Module DnsServer"。
有关适用于 DNS 的 Windows PowerShell 命令的详细信息,请参阅
http://go.microsoft.com/fwlink/?LinkId=217627。
测试留痕
已创建新进程。
创建者主题:
安全 ID: 361A\12306br0
帐户名: 12306br0
帐户域: 361A
登录 ID: 0x36D7FD
目标主题:
安全 ID: NULL SID
帐户名: -
帐户域: -
登录 ID: 0x0
进程信息:
新进程 ID: 0x111c
新进程名称: C:\Windows\System32\dnscmd.exe
令牌提升类型: %%1938
强制性标签: Mandatory Label\Medium Mandatory Level
创建者进程 ID: 0xb40
创建者进程名称: C:\Windows\System32\cmd.exe
进程命令行: dnscmd /ZoneInfo 361a.com
检测规则/思路
建议
最简单的办法就是检测相关命令行及进程,但这似乎不是很靠谱。
参考推荐
MITRE-ATT&CK-T1590
https://attack.mitre.org/techniques/T1590/
域渗透——DNS记录的获取