-
-
[原创]Windows Service Tracing 权限提升漏洞(CVE-2020-0668)
-
发表于: 2023-2-22 18:26 10466
-
Windows Service Tracing中存在任意文件移动漏洞,该功能旨在提供有关运行服务和模块的一些基本调试信息,可以由任何本地用户配置。
服务或模块与注册表项相关联。每个键包含 6 个值。我们关注的 3 个值是:
EnableFileTracing (启用/禁用“跟踪”)、
FileDirectory(设置输出日志文件的位置)、
MaxFileSize(设置日志文件的最大文件大小)。
启用服务后(EnableFileTracing ),目标服务将会在指定的位置(FileDirectory)写入目录文件,当日志文件的大小达到设置的最大值时,文件将会被移动,并新建一个日志文件。
使用AccessChk Windows Sysinternals 工具套件,可以看到普通用户具有几乎所有子键的读写权限。
https://learn.microsoft.com/en-us/sysinternals/downloads/accesschk
RASTAPI模块被 IKEEXT 服务使用。因此,可以通过启动虚拟 VPN 连接轻松触发日志事件。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Tracing\RASTAPI
Name Possible values Description
EnableFileTracing 0 - 1 开始或停止写入log文件
FileDirectory A String 目录的绝对路径
MaxFileSize 0x00000000 - 0xffffffff 输出日志文件的最大大小
日志文件由NT AUTHORITY\SYSTEM写入
当输出的日志文件大于设置的最大文件值时,它将被移动(扩展名被替换)并创建一个新的日志文件。
SetRenameInformationFile将其从移动C:\LOGS\RASTAPI.LOG到C:\LOGS\RASTAPI.OLD.
可以通过控制EnableFileTracing|FileDirectory|MaxFileSize 值,在任意目录(如C:\Windows\system32\)下写入文件,目前可以做到在FileDirectory指定的目录创建一个文件大小大于MaxFileSize的RASTAPI.LOG,这样它可以被移动并改为RASTAPI.OLD
但是还不能控制文件名,和要写入的位置
这就要用到符号链接技术
有请chatgpt:
里面提到创建符号链接需要管理员权限,搜到了微软的一篇文章
https://blogs.windows.com/windowsdeveloper/2016/12/02/symlinks-windows-10/
里面说到从 Windows 10 Insiders build 14972 开始,符号链接对开发者将不再需要管理员权限,这可以让开发者像在 Linux 或 macOS 上一样高效地工作。googleprojectzero项目可以不用管理员权限创捷符号链接
https://github.com/googleprojectzero/symboliclink-testing-tools
Project Zero中的开源项目有详细解释符号链接
可以做如下的尝试
结果E:\Log\1.txt中的内容就是1,代入场景:如果一个高权限用户,要向一个低权限用户可控的目录中写入文件,那么低权限用户可以将目标文件通过符号链接重定向到另外一个无权限的文件,甚至达到任意代码执行。
在CVE-2020-0668中创建两个符号链接,
RASTAPI.LOG-》大于MaxFileSize的文件,
RASTAPI.OLD-》C:\Windows\System32\WindowsCoreDeviceInfo.dll
这样就实现了任意文件移动
该漏洞的利用流程为
在DiagTrack服务中回去调用一个不存在的dll,windowscoredeviceinfo.dll
通过劫持这个dll来提升权限
通过劫持不存在的系统dll来提升权限还由该研究员的这篇文章,all editions of Windows Server, from 2008R2 to 2019
https://itm4n.github.io/windows-server-netman-dll-hijacking/
在win10上还可以使用CVE -2023-21746中所写的劫持打印机的dll(msf生成的shell就行)
C:\Windows\System32\spool\drivers\x64\3\PrintConfig.dll
再通过已system进行身份验证的CLSID
(不过直接使用CVE -2023-21746提权就好了,只是记录下学习dll劫持提权的知识)
参考链接:
https://itm4n.github.io/cve-2020-0668-windows-service-tracing-eop/
https://payloads.online/archivers/2020-03-21/1/
https://itm4n.github.io/usodllloader-part1/#foreword
https://blogs.windows.com/windowsdeveloper/2016/12/02/symlinks-windows-10/
https://blog.walterlv.com/post/ntfs-link-comparisons.html
https://nixhacker.com/understanding-and-exploiting-symbolic-link-in-windows/
CreateSymLink.exe C:\Log\
1.txt
E:\Log\
1.txt
echo
1
> C:\Log\
1.txt
CreateSymLink.exe C:\Log\
1.txt
E:\Log\
1.txt
echo
1
> C:\Log\
1.txt
1
、创建(或复制)一个大小大于
0x8000
(
32
,
768
) 字节的文件。
2
、创建一个新目录(C:\EXPLOIT\mountpoint\例如)并将其设置为\RPC Control.
3
、创建以下符号链接:
\RPC Control\RASTAPI.LOG
-
> \??\C:\EXPLOIT\FakeDll.dll (owner
=
current user)
\RPC Control\RASTAPI.OLD
-
> \??\C:\Windows\System32\WindowsCoreDeviceInfo.dll
4
、在注册表中配置以下值:
FileDirectory
=
C:\EXPLOIT\mountpoint
MaxFileSize
=
0x8000
(
32
,
768
bytes)
EnableFileTracing
=
1
5
、RasDial使用Windows API 中的函数触发 RASTAPI 相关事件。
6
、触发 Update Session Orchestrator 服务以在 的上下文中加载 DLL NT AUTHORITY\SYSTEM。
1
、创建(或复制)一个大小大于
0x8000
(
32
,
768
) 字节的文件。
2
、创建一个新目录(C:\EXPLOIT\mountpoint\例如)并将其设置为\RPC Control.
3
、创建以下符号链接:
\RPC Control\RASTAPI.LOG
-
> \??\C:\EXPLOIT\FakeDll.dll (owner
=
current user)
\RPC Control\RASTAPI.OLD
-
> \??\C:\Windows\System32\WindowsCoreDeviceInfo.dll
4
、在注册表中配置以下值:
FileDirectory
=
C:\EXPLOIT\mountpoint
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)