标题 简介 类型 公开时间
关联规则 关联知识 关联工具 关联文档 关联抓包
参考1(官网)
参考2
参考3
详情
[SAFE-ID: JIWO-2024-2886]   作者: 大猪 发表于: [2021-05-21]  [2021-05-21]被用户:大猪 修改过

本文共 [279] 位读者顶过


环境描述

漏洞模块 %SystemRoot%\system32\profsvc.dll

补丁对比文件环境:win7 x86

调试环境:win 10 x64 1903

补丁分析

补丁查看修补情况如下图所示

在这里插入图片描述

先来看看改动最大的函数CreateTempDirectoryForUser

修补前 在创建目录前没有模拟用户

在这里插入图片描述[出自:jiwo.org]
修补后的CreateTempDirectoryForUser在创建目录前模拟用户

在这里插入图片描述

另一个被修补的LoadUserClasses函数 同样也是没有经过模拟用户便创建目录,被修补后则选择了模拟用户token

在这里插入图片描述
这两个函数都会被CUserProfile::Load 调用,CUserProfile::Load又可以被LoadUserProfileServer可以调用

LoadUserProfileServer是一个rpc接口函数,在调用CUserProfile::Load之前其实是模拟了本地用户的但是后面又取消了模拟
在这里插入图片描述

LoadUserProfileServer 的参数是一个上下文句柄,该句柄具有in 属性,所以需要先调用DropClientContext 获得服务端返回给我们初始化好的上下文句柄。

如下图所示,映射名称为IUserProfile2,uuid为326731e3-c1c0-4a69-ae20-7d9044a4ea5c

在这里插入图片描述

当我使用rpc view反编译的接口编译后提示1764.提示参数错误,便去ida查看参数,得知最后一个Struct_6_t最后一个成员应该是long*而不是unsigend,于是修改后便没有报错

其实Struct_6_t就是PROFILEINFO结构,这是用户配置结构。

在这里插入图片描述

当DropClientContext调用成功后,上下文句柄初始化好了,然而初始化好的并不完美,因为我传了一个空的PROFILEINFOW结构,
当我用这个不完美的上下文去调用LoadUserProfileServer时,LoadUserProfileServer会判断上下文句柄后8个字节是否为0,如果为0则返回,这意味着不能调用CUserProfile::Load,显然我无法接受这个结果。

在这里插入图片描述

要想上下文句柄的后8个字节不为0,需要在调用DropClientContext时传入一个正确PROFILEINFOW,如下图所示

在这里插入图片描述

此时便能进入CUserProfile::Load

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

一直跟,直接对CreateDirectoryW下断,断下后再查看创建的目录名
在这里插入图片描述

现在我们得知我们可以利用该漏洞创建
C:\Users\当前用户\AppData\Roaming\Microsoft\Windows\CloudStore 这个目录


 


我们对CloudStore 所在的Windows目录有着删除权限 关于利用部分请参考这篇:

从任意目录创建到任意文件读取
https://googleprojectzero.blogspot.com/2017/08/windows-exploitation-tricks-arbitrary.html



评论

暂无
发表评论
 返回顶部 
热度(279)
 关注微信