Windows Print Spooler服务最新漏洞CVE-2024-34527详解-程序员宅基地

技术标签: 2024年程序员学习  windows  

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Python全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img



既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Python知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024c (备注Python)
img

正文



近日,有安全研究员在github上公开了"CVE-2021-1675"的exp PrintNightmare,后经验证公开的exp是一个与CVE-2021-1675不同的漏洞,微软为其分配了新的编号CVE-2021-34527。这篇文章记录了CVE-2021-34527的复现过程,并对漏洞成因进行了简单的分析。


0x01 漏洞复现

==================================================================








这里记录域控环境下使用普通权限域账户实现RCE反弹nt authority\system shell的过程。下面的漏洞复现和漏洞分析都是基于Windows server 2019,2021-6补丁的,winver=17763.1999。经笔者测试在无任何补丁的Windows server 2019,winver=17763.107环境下使用以下步骤也可以复现RCE。


0x01.1 环境配置


实现RCE的条件如下:

1.一个普通权限的域账户,用另一台计算机使用该域账户登录加入域环境。其中域账户权限如下

图片

2.域控主机需要能够访问到使用上述配置登录的计算机的一个共享目录,在Windows下可以使用smb实现,用管理员权限的powershell运行以下命令即可

mkdir C:\share icacls C:\share\ /T /grant Anonymous` logon:r icacls C:\share\ /T /grant Everyone:r New-SmbShare -Path C:\share -Name share -ReadAccess 'ANONYMOUS LOGON','Everyone' REG ADD "HKLM\System\CurrentControlSet\Services\LanManServer\Parameters" /v NullSessionPipes /t REG_MULTI_SZ /d srvsvc /f REG ADD "HKLM\System\CurrentControlSet\Services\LanManServer\Parameters" /v NullSessionShares /t REG_MULTI_SZ /d share /f REG ADD "HKLM\System\CurrentControlSet\Control\Lsa" /v EveryoneIncludesAnonymous /t REG_DWORD /d 1 /f REG ADD "HKLM\System\CurrentControlSet\Control\Lsa" /v RestrictAnonymous /t REG_DWORD /d 0 /f

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

运行完命令重启生效。

0x01.2 复现


GitHub上有2个公开的exp,python版本的https://github.com/cube0x0/CVE-2021-1675 和C++版本的https://github.com/afwu/PrintNightmare ,其中C++版本的是从Zhiniang Peng (@edwardzpeng) & Xuefeng Li (@lxf02942370)公开的exp fork来的。

这两个版本的exp原理都是一样的,也都是可用的,其中python版本的exp需要按照说明文档安装exp作者的impacket库,其余不需要修改任何东西。

pip3 uninstall impacket

git clone https://github.com/cube0x0/impacket

cd impacket

python3 ./setup.py install

c++版本的exp需要把第112行UNIDRV.DLL的路径修改为域控主机对应的路径,如笔者这里对应的路径应修改为:

//info.pDriverPath = (LPWSTR)L"C:\Windows\System32\DriverStore\FileRepository\ntprint.inf_amd64_19a3fe50fa9a21b6\Amd64\UNIDRV.DLL";

info.pDriverPath = (LPWSTR)L"C:\Windows\System32\DriverStore\FileRepository\ntprint.inf_amd64_83aa9aebf5dffc96\Amd64\UNIDRV.DLL";

其余不需要修改任何东西,使用vs编译即可。

python版本exp命令及RCE截图:

图片

c++版本exp命令及RCE截图:

图片

0x02 漏洞分析

===============================================================================


0x02.1 漏洞根原


漏洞的关键在于localspl!SplAddPrinterDriverEx中调用InternalAddPrinterDriverEx加载驱动前的验证ValidateObjectAccess是可以被跳过的。如下localspl!SplAddPrinterDriverEx中的汇编代码为存在漏洞可以导致ValidateObjectAccess被绕过的代码。

.text:0000000180085F25 loc_180085F25: ; CODE XREF: SplAddPrinterDriverEx+3F↑j

.text:0000000180085F25 bt esi, 0Fh ; esi=dwFileCopyFlags

.text:0000000180085F29 mov ebx, 0

.text:0000000180085F2E cmovnb ebx, [rsp+58h+arg_30] ; [rsp+0x90]=1

.text:0000000180085F2E ; CF=1,不进行移位

.text:0000000180085F36 test ebx, ebx

.text:0000000180085F38 jz short loc_180085F64

.text:0000000180085F3A mov rax, cs:pLocalIniSpooler

.text:0000000180085F41 xor r9d, r9d

.text:0000000180085F44 and [rsp+58h+var_30], 0

.text:0000000180085F49 xor r8d, r8d

.text:0000000180085F4C xor ecx, ecx

.text:0000000180085F4E mov [rsp+58h+var_38], rax

.text:0000000180085F53 lea edx, [r9+1]

.text:0000000180085F57 call ?ValidateObjectAccess@@YAHKKPEAXPEAKPEAU_INISPOOLER@@W4SERVER_MANAGEMENT_ACCESS_REQUEST@@@Z ; ValidateObjectAccess(ulong,ulong,void *,ulong *,_INISPOOLER *,SERVER_MANAGEMENT_ACCESS_REQUEST)

.text:0000000180085F64 loc_180085F64: ; CODE XREF: SplAddPrinterDriverEx+98↑j

.text:0000000180085F64 ; SplAddPrinterDriverEx+BE↑j

.text:0000000180085F64 and [rsp+58h+var_20], 0

.text:0000000180085F6A mov r9d, esi

.text:0000000180085F6D mov eax, [rsp+58h+arg_28]

.text:0000000180085F74 mov r8, r14

.text:0000000180085F77 mov [rsp+58h+var_28], ebx

.text:0000000180085F7B mov edx, r15d

.text:0000000180085F7E mov [rsp+58h+var_30], eax

.text:0000000180085F82 mov rcx, rdi

.text:0000000180085F85 mov [rsp+58h+var_38], rbp

.text:0000000180085F8A call InternalAddPrinterDriverEx

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

  • 15

  • 16

  • 17

  • 18

  • 19

  • 20

  • 21

  • 22

  • 23

  • 24

  • 25

  • 26

  • 27

  • 28

  • 29

其中esi为dwFileCopyFlags,是一个调用者可控的参数,bt esi,0xf将esi中偏移0xf的比特位保存到CF标志位,即CF标志位与esi的0x10比特位相同,dwFileCopyFlags=0x8014时CF=1。cmovnb ebx, [rsp+58h+arg_30]即mov if not below,cmovnb会检测CF标志位是否为0且当CF为0时进行移位操作,此时[rsp+0x90]=1,CF=1不会将ebx赋值为1。调试现场如下

图片

由于ebx=0,jz short loc_180085F64会跳转到InternalAddPrinterDriverEx处执行后续复制并加载驱动的操作,跳过了0x180085F57处ValidateObjectAccess的检测。

0x02.2 InternalAddPrinterDriverEx

===========================================================================================================


==================================================================

RpcAddPrinterDriverEx会在spoolsv!RpcAddPrinterDriverEx处解析,调用到localspl!LocalAddPrinterDriverEx处的回调,并最终由于localspl!SplAddPrinterDriverEx处的验证ValidateObjectAccess无效导致可以调用到localspl!InternalAddPrinterDriverEx加载驱动并执行。

=================================================================================================================================================================================================================================================================================

调用到localspl!SplAddPrinterDriverEx时的栈回溯如下

0:009> k

# Child-SP RetAddr Call Site

00 0000001f7f83e938 00007ffcfb225852 localspl!SplAddPrinterDriverEx

01 0000001f7f83e940 00007ff66c23ba9f localspl!LocalAddPrinterDriverEx+0xa2

02 0000001f7f83e990 00007ff66c215ffe spoolsv!AddPrinterDriverExW+0x6f

03 0000001f7f83e9d0 00007ff66c212c71 spoolsv!YAddPrinterDriverEx+0x2ce

现在能在网上找到很多很多的学习资源,有免费的也有收费的,当我拿到1套比较全的学习资源之前,我并没着急去看第1节,我而是去审视这套资源是否值得学习,有时候也会去问一些学长的意见,如果可以之后,我会对这套学习资源做1个学习计划,我的学习计划主要包括规划图和学习进度表。

分享给大家这份我薅到的免费视频资料,质量还不错,大家可以跟着学习

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注python)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
有时候也会去问一些学长的意见,如果可以之后,我会对这套学习资源做1个学习计划,我的学习计划主要包括规划图和学习进度表。

分享给大家这份我薅到的免费视频资料,质量还不错,大家可以跟着学习

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注python)
[外链图片转存中…(img-2craX3pM-1713415927839)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_57992300/article/details/137916776

智能推荐

androguard-----python语言中Android恶意软件分析工具-程序员宅基地

文章浏览阅读1.9k次,点赞2次,收藏13次。https://blog.csdn.net/mergerly/article/details/65443821http://www.ijd8.com/topic/33/用python分析apk文件里的androidmanifest.xml-文件获取包信息https://www.jianshu.com/p/1deba8b28cc4_androguard

Hive函数大全-程序员宅基地

文章浏览阅读8.4k次,点赞9次,收藏72次。目录第四章 Hive函数4.1 聚合函数4.2 关系函数4.3 数学运算4.4 逻辑运算4.5 数值运算4.6 条件函数4.7 日期函数4.8 字符串函数4.9 字符串截取函数4.10 去空格函数4.11 正则表达式与解析函数4.12 explode函数4.13 行转列与列转行4.14 基础窗口函数与分析函数4.14.1 窗口函数简介4.14.2 窗口的含义4.14.3 窗口函数分类4.14.4 窗口函数的使用4.14.5._hive函数

VINS-Mono-视觉惯性对齐原理及源码解析_视觉惯性slam理论与源码pdf-程序员宅基地

文章浏览阅读968次,点赞3次,收藏5次。VINS-Mono视觉惯性对齐包括两部分陀螺仪偏置矫正和速度、重力向量、尺度因子初始化陀螺仪偏置矫正原理推导由约束关系通过视觉测得的姿态变化 = IMU预积分获得的姿态变化可获得如下约束方程:qbk+1c0−1⊗qbkc0⊗γbk+1bk=[10](1){\mathbf{q}_{b_{k+1}}^{c_{0}}}^{-1} \otimes \mathbf{q}_{b_{k}}^{c0} \otimes \boldsymbol{\gamma}_{b_{k+1}}^{b_{k}} = \begin{_视觉惯性slam理论与源码pdf

HDMI接口及规范-程序员宅基地

文章浏览阅读1w次,点赞6次,收藏88次。HDMI定义及术语HDMI(High Definition Multimedia Interface)高解晰度多媒体数位传输界面;它是基于DVI(Digital Visual Interface)的基础上延伸出的新定义;它所涉及的概念有:TMDS:(Time Minimized Differential Signal)最小化差分信号传输,是一种差分信号传输方式,HDMI信号传输通道采用了这种方式。HDCP: (High-bandwidthDigital Content Protection)_hdmi

怎么看小程序是谁开发的(查看小程序开发公司方法)_麓湖水城微信小程序是哪家公司的-程序员宅基地

文章浏览阅读2.7k次。很多粉丝朋友在日常生活中,看到一个自己比较满意的同行小程序,就想要查看该同行小程序是谁开发的。本文瀚林给大家介绍一下查看微信小程序开发公司的方法。1、查看小程序会员页面的底部,一般微信小程序开发公司会把自己提供技术支持的版权信息,放到小程序底部。你点击一下版权信息就知道是哪家公司开发的。2、直接联系小程序的在线客服人员,向该小程序的客服人员询问他们合作的小程序开发公司。3、查看该小程序的更多资料,一般通过关于小程序可以查看到小程序的更多资料。4、直接与瀚林沟通,请瀚林协助查看是谁开发的该小程序。最_麓湖水城微信小程序是哪家公司的

圆角JPanel_jpanel leftsubjpanel = new jpanel();怎么设置圆角-程序员宅基地

文章浏览阅读1.8k次。package com.victoria.xmleditor.canvas;import java.awt.Color;import java.awt.Graphics;import java.awt.geom.RoundRectangle2D;import javax.swing.JFrame;import javax.swing.JLabel;impor_jpanel leftsubjpanel = new jpanel();怎么设置圆角

随便推点

SDR学习之——跟踪飞机轨迹_sdr飞机追踪-程序员宅基地

文章浏览阅读2.6k次。ADS-B是广播式自动相关监视的英文缩写,它主要实施空对空监视,一般情况下,只需机载电子设备(GPS接收机、数据链收发机及其天线、驾驶舱冲突信息显示器CDTI),不需要任何地面辅助设备即可完成相关功能,装备了ADS-B的飞机可通过数据链广播其自身的精确位置和其它数据(如速度、高度及飞机是否转弯、爬升或下降等)。ADS-B接收机与空管系统、其它飞机的机载ADS-B结合起来,在空地都能提供精确、..._sdr飞机追踪

产品营销策划方案:6个创意来源_营销创意的来源和途径-程序员宅基地

文章浏览阅读759次。目录  一、效仿跟踪  二、空白区域  三、新创建品类  1、品类嫁接法  2、品类借接  3、市场细分化  四、取代变换  五、升值发掘  六、空白要求  消费者导向性的市场营销推广,重点在于发觉并达到消费者的要求,从4P而言便是产品研发新产品。而怎么才能发觉消费者的要求呢?这就必须做市场科学研究,例如市场调研和市场洞悉。  如今的市场市场竞争激烈,环境破坏迅速,那样客观性规定公司务必对市场作出迅速的反映。在那样的状况下公司显而易见不太可能在做每一个营._营销创意的来源和途径

如何区分光接入网OLT, ONU, ODN,ONT?_odn是分光器吗-程序员宅基地

文章浏览阅读2w次,点赞24次,收藏202次。光接入网络(点此查看什么是光接入网)就是以光为传输介质的接入网络,替代铜线,用于接入每个家庭.光接入网络。光接入网络一般有三个部分组成: 光线路终端OLT,光网络单元ONU,光分配网络ODN,其中OLT和ONU光接入网络的核心部件。什么是OLT?OLT全称是Optical Line Terminal,光线路终端。OLT是光线路终端,是电信的局端设备,用于连接光纤干线,作用相当于传统通信网中的交换机或路由器,是外网入口和内网出入口的一个设备。放置在局端,最重要的执行功能是流量调度,缓冲区控制,以及提供面向_odn是分光器吗

高速电路中菊花链、fly-by与T点拓扑_菊花链和flyby区别-程序员宅基地

文章浏览阅读1.8w次,点赞8次,收藏72次。  开局一张图,内容……  在高速电路中往往涉及到多个高速存储设备,因此合理的拓扑结构对布局走线非常重要。主流的拓扑模式有菊花链、fly-by与T点。  菊花链是相对最为常见的一种拓扑方式。菊花链拓扑的原理可以解释为:将所有的总线视作拓扑的干路,从处理器引出之后,每个存储设备所需要的总线视为支路,也称为“SUB线”。从微机原理的角度上讲,更像是将所有的总线视作一条“大总线”,每个内存设备需要..._菊花链和flyby区别

网页设计的常用字体规范_网页字体规范-程序员宅基地

文章浏览阅读8.6k次,点赞3次,收藏11次。看完上面这张图你就能明白了 是不是阅读起来非常的难受? 那就对了! 其实折磨你的问题有以下几点 1.字体样式太多,杂乱无章 2.使用的字体不易识别 3.字体和内容的气氛不匹配 怎么 看完上面这张图你就能明白了是不是阅读起来非常的难受? 那就对了!其实折磨你的问题有以下几点1.字体样式太多,杂乱无_网页字体规范

java 异常对象_Java面向对象-Java中的异常-程序员宅基地

文章浏览阅读671次。第1关:Java中的异常处理机制任务描述本关任务:完成异常类选择题。为了完成本关任务,你需要掌握:1.什么是异常;2.如何使用异常。什么是异常异常:程序在运行过程中产生的不正常情况。程序在运行的时候,发生了一些不被预期的事件,从而没有按照我们编写的代码执行,这就是异常。异常是Java中的错误,但是并不是所有的错误都是异常,比如说,你在定义变量名的时候没有依照Java的规则,在语句的结尾少了一个分号..._本关任务:抛出程序的异常。 相关知识 为了完成本关任务,你需要掌握:1. 如何使用th

推荐文章

热门文章

相关标签