发布于2022年11月8日3年前 0x00 前言 在上篇文章《通过Boolang语言执行shellcode的利用分析》 介绍了利用博朗语言执行外壳代码的方法,本文将按照同样的思路,使用单声道(跨平台。网运行环境)实现执行外壳代码的功能,分析利用思路,给出防御建议 0x01 简介 单声道的简介 单声道的使用示例 通过单声道的执行外壳代码的方法 利用分析 防御检测 0x02 Mono简介 参考资料: https://www.mono-project.com/ https://github.com/mono/mono 单声道的是微软100 .净框架的开源实现 包括C#编译器和通用语言架构 单声道的项目不仅可以运行于Windows操作系统操作系统系统上,还可以运行于Linux,FreeBSD,Unix,OS X和Solaris 0x03 Mono使用示例 开发环境:Win7x64 下载单声道的安装包,地址如下: https://www.mono-project.com/download/stable/#download-win 默认安装路径:C:\Program Files\Mono\ 1.编译程序输出hello world HelloWorld.cs的内容如下: 使用系统; 公共类HelloWorld { 公共静态void Main(string[] args) { 控制台WriteLine(' Hello Mono World '); } } 使用mcs.exe进行编译,命令如下: c:\ Program Files \ Mono \ bin \ MCS ' hello world。铯 生成HelloWorld.exe 2.编译程序调用Messagebox Messagebox.cs的内容如下: 使用系统; 使用系统窗户。形式 命名空间MessageboxTest { 班级计划 { 静态void Main(string[] args) { 消息框.show(' Hello World '); } } } 使用mcs.exe进行编译,命令如下: “c:\ Program Files \ Mono \ bin \ MCS”消息框。cs-r:系统.窗户。Forms.dll 注: 需要加-r参数指定引用的dll,否则报错提示如下: Messagebox.cs(2,22):错误CS0234:类型或命名空间名称"表格"在命名空间“系统。Windows "中不存在。是否缺少“系统。Windows.Forms "程序集引用? 编译失败:1个错误,0个警告 3.编译程序执行shellcode Shellcode.cs已上传至GitHub,地址如下: https://github。com/3g学生/C-Sharp之家/blob/master/shellcode。铯 使用mcs.exe进行编译,命令如下: c:\ Program Files \ Mono \ bin \ MCS的外壳代码。铯 生成Shellcode.exe 0x04 通过Mono执行shellcode的方法 在0x03简单介绍了使用mcs.exe编译程序的方法 这一节着重介绍利用单声道的的特性绕过静态检测的方法 1.将启动shellcode的代码和payload分离 (1)将payload作base64加密并保存在文件中 部分示例代码如下: 使用系统。木卫一; byte[]shell代码64=new byte[276]{ XXX }; String AsBase64String=Convert .转换为base 64字符串(外壳代码64); StreamWriter SW=new StreamWriter(@ ' C:\ test \ shellcodebase 64。txt’); 西南write(作为base 64字符串); 西南。关闭() base64编码后的有效载荷已上传至GitHub,地址如下: https://github。com/3g student/home-of-C-Sharp/blob/master/shellcodebase 64。文本文件(textfile) (2)从指定文件读取payload,作base解密后加载shellcode 实现代码已上传至GitHub,地址如下: https://github。com/3g学生/C-Sharp之家/blob/master/read shellcode。铯 2.使用csc将生成的文件编译成只能通过Mono加载的形式 使用计算机科学硕士编译出来的程序可以直接运行,这有可能被查杀 使用乡村基进行编译可选的选项更多,我在乡村基帮助文件中发现可以生成只能通过单声道的加载的形式,参数说明如下: -target:appcontainerexe构建Appcontainer可执行文件(缩写:-t:appcontainerexe) 因此完整的编译命令如下: c:\ Program Files \ Mono \ bin \ CSC '读取shell代码。cs-target:appcontainerexe 生成文件ReadShellcode.exe,无法直接执行,只能通过单声道的加载,加载的命令如下: c:\ Program Files \ Mono \ bin \ Monoexe ' ReadShellcode.exe 3.构造精简的Mono运行环境 如果我们要在另一系统执行以上文件,不必安装单声道的的安装包 经过测试只需要以下文件: /bin/mono-2.0-sgen.dll /bin/mono.exe /bin/ReadShellcode.exe /bin/ShellcodeBase64.txt /lib/mono/4.5/mscorlib.dll 树形图如下图 注: 调用Messagebox引用系统窗户。Forms.dll时所需文件的树形图如下图 0x05 利用分析 通过单声道(跨平台。网运行环境)执行外壳代码,有以下两个优点: 1.通过Mono.exe加载启动程序,启动程序不包括恶意的功能,有效负载可保存在另一个脚本文件中 2.Mono可以构建一个. Net环境,可以解决一些程序对。Net环境。 例如: 该程序只能在下运行。Net 4,但目前的系统不支持。Net 4。Mono可以解决这个问题。 0x06 防御检测 通过跨平台执行外壳代码。NET运行时环境Mono,父进程是Mono.exe,这一点值得注意。 这种技术无法绕过对程序行为的检测,所以可以通过检测进程行为来防御。 0x07 小结 本文介绍了Mono(跨平台)的应用方法。NET运行时环境),分享几种绕过静态检测的方法,分析利用思路,给出防御建议。 留下回复
创建帐户或登录后发表意见