参考
https://0range-x.github.io/2021/11/22/CVE-2020-1472
https://cloud.tencent.com/developer/article/1727748
https://blog.csdn.net/Captain_RB/article/details/120643838
1、token窃取
一、Token的作用
1)令牌(token)是系统的临时秘钥,相当于账号和密码,用来决定是否允许这次请求和判断这次请求是属于哪一个用户的。它允许你在不提供密码或其他凭证的前提下,访问网络和系统资源,这些令牌将持续存在于系统中,除非系统重新启动。
2)令牌最大的特点就是随机性,不可预测,黑客或软件无法猜测出令牌。假冒令牌可以假冒一个网络中的另一个用户进行各类操作。所以当一个攻击者需要域管理员的操作权限时候,需要通过假冒域管理员的令牌进行攻击。
二、令牌的种类
访问令牌(Access Token):表示访问控制操作主体的系统对象 。
会话令牌(Session Token):是交互会话中唯一的身份标识符。
密保令牌(Security Token):又叫做认证令牌或硬件令牌,是一种计算机身 份校验的物理设备,例如 U 盾。
Windows 的 AccessToken 有两种类型:
Delegation Token:授权令牌,它支持交互式会话登录 (例如本地用户直接 登录、远程桌面登录访问)
Impresonation Token:模拟令牌,它是非交互的会话 (例如使用 net use 访问共享文件夹)。
注:两种 token 只在系统重启后清除 具有 Delegation token 的用户在注销后,该 Token 将变成 Impersonation,依旧有效。可以这样理解:当前系统中的某个进程或者线程能访问什么样的系统资源,取决于当前令牌的权限。
一开始并不理解为什么非要token 明明目前已经是域管了 这里有个解释我觉得很不错
我们通过exp提权或者永恒之蓝等得到的权限即为System,假如我们利⽤mimikatz和hashdump不能获得 administrator⽤户的密码,那我们只能通过令牌窃取进⾏降权,获得administrator⽤户的shell, 从⽽以 administrator⽤户的身份启动某些服务 ( 某些服务只能通过administrator⽤户启动 )
重要目的就是我们拿到的system权限 system已经是最高的了吧 但是有些服务需要administrator启动 我们还需要administrator的shell 但是我们又拿不到密码 所以通过token降权 这就是一个场景
或者说目标服务器大概率不可能重启 因为token只在重启清除
网上目前我没下载到找个程序 先列一下命令吧 还有其他软件可以替代的
第一种方法 incognito.exe
常用命令:
列举token:incognito.exe list_tokens -u

可以看到因为不是system权限,列举出的token很局限,切换到system权限看下

窃取token: incognito.exe execute -c "SUN\administrator" cmd.exe
incognito.exe execute [options] <token> <command>

第二种方法
https://github.com/PowerShellMafia/PowerSploit/blob/master/Exfiltration/Invoke-TokenManipulation.ps1
原理和功能同incognito类似,能够实际提权和降权
列举token:Invoke-TokenManipulation -Enumerate
提权至system:Invoke-TokenManipulation -CreateProcess "cmd.exe" -Username "nt authority\system"
复制进程token:Invoke-TokenManipulation -CreateProcess "cmd.exe" -ProcessId 500
复制线程token:Invoke-TokenManipulation -CreateProcess "cmd.exe" -ThreadId 500
第三种方法
| |
2、LaZagne.exe
这个非常猛 基本上他不像其他工具获得管理员的密码什么的 他主要是针对某个人物画像来
能获取的密码类型:
- 浏览器保存的密码
- WiFi密码记录
- Windows凭据
- 邮件客户端
- 开发工具配置
| |
3、卷影拷贝(获取域控所有hash)
那什么又是ntds.dit?
Ntds.dit文件是域环境中域控上会有的一个二进制文件,是主要的活动目录数据库,其文件路径为域控的 %SystemRoot%\ntds\ntds.dit,活动目录始终会访问这个文件,所以文件禁止被读取。Ntds.dit包括但不限于有关域用户、组和组成员身份和凭据信息、GPP等信息。它包括域中所有用户的密码哈希值,为了进一步保护密码哈希值,使用存储在SYSTEM注册表配置单元中的密钥对这些哈希值进行加密。
而在非域环境也就是在工作组环境中,用户的密码等信息存储在SAM文件,想要破解SAM文件与Ntds.dit文件都需要拥有一个System文件。和SAM文件一样,Ntds.dit是默认被Windows系统锁定的。这也是使用mimikatz经常需要导出的文件
plain ntds.dit文件位置: C:\Windows\NTDS\NTDS.dit system文件位置:C:\Windows\System32\config\SYSTEM sam文件位置:C:\Windows\System32\config\SAM |
|---|
导出该文件的方法也是有多种
mimikatz-dcsync
前提:高权限
Mimikatz有一个功能(dcsync),它可以利用目录复制服务(Directory Replication Service, DRS)从NTDS.DIT文件中提取密码哈希值。
DCSync是mimikatz在2015年添加的一个功能,利用的这个原理,通过Directory Replication Service(DRS) 服务的GetNCChanges 接口模仿一个域控制器向另一个域控制器发起数据同步请求,能够用来导出域内所有用户的hash。
DCSync的本质:
- 利用DRS复制协议
- 直接请求目标数据
- 不涉及NTDS.dit文件复制
| |


vssadmin卷影拷贝
vssadmin是Windows上的一个卷影拷贝服务的命令行管理工具,可用于创建和删除卷影拷贝、列出卷影拷贝的信息,显示已安装的所有卷影拷贝写入程序和提供程序,以及改变卷影拷贝的存储空间的大小等。
适用机器:Windows 10,Windows 8.1,Windows Server 2016,Windows Server 2012 R2,Windows Server 2012,Windows Server 2008 R2,Windows Server 2008
| |

- Mimikatz主要获取已登录凭据
- SAM获取本地账户hash
- NTDS.dit获取整个域的hash
ntdsutil.exe
Ntdsutil.exe 是一个为 Active Directory 提供管理设施的命令行工具,该工具被默认安装在了域控制器上,可以在域控上直接操作,也可以通过域内机器在域控上远程操作,但是需要管理员权限。使⽤ ntdsutil.exe,可以维护和管理活动⽬录数据 库、控制单个主机操作、创建应⽤程序⽬录分区、删除由未使⽤活动⽬录安装向导(DCPromo.exe)成功降级的 与控制器留下的元数据等。
| |

| |

| |
//将快照中的三个文件拷贝到c盘

//删除刚才创建的快照
| |

除了利用上面那种操作来获取ntds.dit外,还可以利用Ntdsutil.exe创建媒体安装集(IFM)来用于提取NTDS.dit文件。在使用ntdsutil创建创建媒体安装集(IFM)时,会自动进行生成快照、加载、将ntds.dit、计算机的SAM和SYSTEM文件复制到目标文件夹中等操作,我们可以利用该过程获取NTDS.dit文件,需要管理员权限。
Ntdsutil是本地处理 Active Directory 的命令实用程序,并为DCPromo启用IFM集创建。IFM与DCPromo一起用于“从媒体安装”,因此被升级的服务器不需要通过网络从另一个DC复制域数据。
当创建一个IFM时,VSS快照会被自动拍摄,挂载,NTDS.DIT文件和相关数据被复制到目标文件夹中。
在域控制器中执行如下命令即可:
| |

ZeroLogon (CVE-2020-1472) 漏洞利用
影响系统版本:该 Win2008 后的所有版本
| |
利用条件:
| |
注意:域控的机器帐户HASH存储在注册表中,系统启动时会将其加载到lsass,当攻击置空域控HASH后,仅AD (NTDS.DIT) 中的密码会更改,而不是注册表或加载到lsass中的密码,域控存储在域中的凭证与本地的注册表/lsass中的凭证不一致时,这样将会导致域控脱域,无法使用Kerberos进行身份验证,因此要尽快恢复。
第1步 验证漏洞存在
account获取方式

方法一:Mimikatz
下载新版本,需要支持ZeroLogon漏洞利用:https://github.com/gentilkiwi/mimikatz
| |

方法二:工具 https://github.com/SecuraBV/CVE-2020-1472
| |

第2步 置空域控HASH
注意:域控的机器帐户HASH存储在注册表中,系统启动时会将其加载到lsass,当攻击置空域控HASH后,仅AD (NTDS.DIT) 中的密码会更改,而不是注册表或加载到lsass中的密码,这样将会导致域控脱域,无法使用Kerberos进行身份验证,因此要尽快恢复。
方法一:Mimikatz
| |
方法二:工具 https://github.com/risksense/zerologon
| |
方法三:工具 https://github.com/dirkjanm/CVE-2020-1472
| |
第3步 获取域管HASH
方法一:Mimikatz
| |
运行结果如下所示,获取域管 MAIN\Administrator 的HASH为 2b2ddd54e1f78fab85e7c662f672f30e

方法二:Impacket
Impacket工具包地址:https://github.com/SecureAuthCorp/impacket,利用其中的secretsdump.py工具获取域管HASH:
| |
运行结果如下所示,获取域管 MAIN\Administrator 的HASH为 2b2ddd54e1f78fab85e7c662f672f30e,注意此时NTDS.DIT中域控WIN-RITHFS5KHEN$的HASH已是空值 31d6cfe0d16ae931b73c59d7e0c089c0


2b2ddd54e1f78fab85e7c662f672f30e,注意此时NTDS.DIT中域控WIN-RITHFS5KHEN$的HASH已是空值 31d6cfe0d16ae931b73c59d7e0c089c0
第4步 恢复域控HASH
(这一步可以不用 但是留下了痕迹 不恢复可能还会导致域控司机 所以我们要进行恢复)
Mimikatz恢复域控HASH是将NTDS.DIT中的凭证以及注册表/lsass中的凭证同时修改为 (Waza1234/Waza1234/Waza1234),并非是原本值,虽然不影响域运行,但是还是留下了痕迹。
推荐方法是恢复成原始的HASH,首先要获取注册表信息中域控原始HASH,可以利用Impacket包中的wmiexec.py、psexec.py工具获取,以wmiexec.py为例,命令中进行了HASH传递,凭证是刚刚获取的域管HASH:

| |

运行结果如下所示,域控密钥 (HEX) 为: :71e7160142ee4406478d8c3a67566adc1ed91dd97d26c87f4ac97a4af081dadde701370b3d5fdc785a409f6f03ed9d1147163ec8e28db1c12c6a7a39fc036ec5f5db54033c653bed4c888de0ca32fe75fdcc0965daf24049c472d015963b842b982f9807ee45b9eabb94002d69ff0d8e519e9dd3112c248b4db901de95513e682ef142fd15bc97d63a0bf7b2414ad2851a00bf0f9cc356b51f25ccc4fd0f307b609278ef60c4986782b9a46cac7a6f3262eb521c9e0c7bb20dd6218e035c74b04242dcca13c778cbfe53e68901af6c27d11ac09a376a2bf456efd9d3081f95999d3b79818c754f61455c8eacdf5c9e82
NTLM HASH为: aad3b435b51404eeaad3b435b51404ee:21b74da052b94026deb180cf075a5a93,注意这里与上一步抓出来的空HASH不同,因为上一步中获取的是NTDS.DIT中域控HASH记录,而这一步获取的是注册表中HASH记录。
然后用工具恢复,将注册表中HASH记录同步到NTDS.DIT:
方法一:工具 https://github.com/risksense/zerologon
这个项目说得很清楚了 按照步骤来就行
利用NT HASH恢复:
| |
方法二:工具 https://github.com/dirkjanm/CVE-2020-1472
利用密钥 (HEX) 恢复:
| |
方法三:Powershell
首先利用远程执行命令工具 (wmiexec、psexec、smbexec、atexec等) 获取域控shell,然后利用powershell命令重置主机HASH,注意这种方法并不是恢复原HASH,而是将NTDS.DIT中的凭证以及注册表/lsass中的凭证重置 (随机数):
| |
第5步 验证是否恢复域控hash
| |
