sln任意代码执行的几种方式(evilsln)
参考文章EvilSln
调试命令行
以下图方式设置,可以在不影响调试的情况下执行任意代码
生成事件
一共有三个事件,都可以用来执行代码
自定义生成工具
随便创建一个特殊后缀名的文件,右键打开属性
按下图方式设置
接着来到自定义生成工具这里,命令行可以用于执行任意代码
一个小坑:输出这里也要写不然不会执行(随便填一个就行)
编译,成功执行
MSBuild任务
上面的几种方式都需要编译才会触发,使用MSBuild任务可实现打开项目就触发
不只是.net项目,其他所有类型的项目都可以利用
将以下代码添加进proj文件中
1 |
|
这里以C++控制台项目作为演示。添加代码,打开项目,成功执行
suo文件反序列化漏洞
suo文件反序列化漏洞有以下优点:
- 打开项目就执行,无需后续操作
- .suo文件默认隐藏,且.suo文件以二进制形式存储,恶意代码也经过了序列化,很难被发现
- Visual Studio在关闭时会将新内容保存到.suo文件中,因此payload会被清除(也就是只有第一次打开时会执行)
- 相比以上的方法,suo文件反序列化漏洞并不被人所熟知,在检查恶意代码时会很自然的把.vs隐藏文件夹忽略
- 自带免杀(自行测试,无需多言)
使用Visual Studio打开项目本来就是危险操作,所以微软并不认为这是漏洞,也不会修复(Discussion)
原文并没有提供详细利用方法,这里把我研究的内容发出来(应该是全网首发哈哈)
生成payload
经过测试,使用ysoserial.net以以下命令行生成payload
1 |
|
将payload添加到suo文件中
suo文件结构网上的资料非常少(可以说是根本没有),不过这个项目suo启发了我
使用openmcdf库就可以对suo文件可以进行读写
以下为示例代码
1 |
|
这里我已经写好了完整利用工具,详见VS_Deserialize_Exploit
应对攻击
- 不打开不可信的项目(star数多并不代表项目就可信,公司内网的项目也可能被投毒,你的朋友和同学也可能是黑客假冒的,请一定擦亮双眼谨慎辨别)
如果必须要打开,请按以下步骤操作
- 打开项目前,检查proj文件是否存在可疑内容
- 打开项目前,删除整个.vs隐藏文件夹
- 打开项目前,检查项目文件是否存在利用unicode控制字符的钓鱼行为(unicode控制字符钓鱼也是老生常谈的话题了。有时候,看似愚蠢的攻击方式反而十分奏效)
可使用CheckEvilSln工具辅助检查
sln任意代码执行的几种方式(evilsln)
https://crackme.net/articles/evil_sln/