官方公众号企业安全新浪微博
FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。
FreeBuf+小程序
Windows Contact是一种文件类型,用于存储和管理Windows操作系统中的联系人信息。它是一种通用的联系人数据格式,包含个人或组织的姓名、地址、电话号码、电子邮件地址等联系信息。
此漏洞早在19年就公开发布过0day公告,Windows在处理 Contact 文件时存在特定缺陷,在联系人文件中构建的数据可能会导致 Windows 显示危险的超链接。用户界面无法提供足够的危险指示,攻击者可以利用此漏洞在当前用户的上下文中执行代码。
2022年12月13日,微软针对该漏洞发布了补丁,但是该补丁仍然能够被绕过,影响范围包括最新的Windows系统版本,攻击者通过社会工程学手法诱导用户交互,将导致目标主机失陷。
首先对公开poc进行分析,发现其在syslink控件中,直接调用了payload.lnk文件,
由于其是个进程创建事件,为了方便定位漏洞位置,直接上调试器,在进程创建函数也就是在SHELL32!ShellExecuteExW中下断点,定位堆栈如下。
可以看出进程创建发生在wab32.dll中的SafeExecute函数中。
分析函数功能,函数首先判断URL是否为本地文件(通过UrlIsW函数),如果是,则调用AESAttemptExecute尝试以管理员权限运行文件并返回执行结果;否则,使用ShellExecuteExW函数打开URL对应的应用程序(如果在系统中没有找到该应用程序,则返回错误代码),并返回执行结果。在microsoft文档中对其也有解释,
所以该函数本质上就是提供了执行程序的功能,只是对href中的值没有做足够的过滤,导致其可以执行我们的自定义程序,而这也为我们后续提供其绕过过滤带来了可能性。
对补丁进行diff,发现主要在fnSummaryProc→SafeExecute函数的路径上添加了判断,现在在调用SafeExecute前,会判断href字段是否是网络地址,如果不是,则进入IsInternetAddress函数判断地址是否合法后调用SafeExecute。
可能是为了兼容其他协议,IsInternetAddress这里在判断字段中如果存在@,则调