Webshell免杀研究(webshell免杀马)
qiyuwang 2025-05-11 00:25 3 浏览 0 评论
前言
不想当将军的士兵不是好士兵,不想getshell的Hacker不是好Hacker~有时候我们在做攻防对抗时经常会碰到可以上传webshell的地方,但是经常会被安全狗、D盾、护卫神、云锁等安全软件查杀,在本篇文章中将会介绍一些常用的木马免杀技巧,主要针对安全狗、护卫神、D盾进行免杀~
查杀软件
D盾
D盾是一个专门为IIS设计的主动防御的安全性保护软件,它采用以内外防护的方式防止服务器和网站被人入侵,它秉持在正常运行各类网站的情况下,越少的功能,服务器就越安全的理念而设。它具有一句话木马查杀、主动后门拦截、Session保护、CC攻击防御、网页篡改查询、WEB嗅探防御、SQL注入防御、XSS攻击防御、提权防御、恶意文件上传防御、未知0Day防御等特性。
安全狗
安全狗是一款安全防护软件,它提供木马查杀、漏洞防御、非法请求拦截等功能,致力于保护网站和服务器的安全。它具有应用防护WEB应用风险、拦截各类SQL注入、XSS攻击防御、0Day攻击防御、特定资源保护、网络木马文件、恶意畸形文件、0Day漏洞、黑链等特性。
护卫神
护卫神是一款以分离权限为基础,通过一系列独特技术手段,保障网站不被入侵的安全性防护软件。它适用于各类ASP和PHP编写的程序,在目前网站日益猖狂的挂马、入侵情况下,护卫神可以彻底解决用户所面临的众多安全难题,为网络安全保驾护航。 它具有实时木马程序查杀、网站挂马拦截、文件篡改保护、PHP拒绝服务攻击防御、SQL防御、XSS跨站攻击防御、入侵拦截防护、远程桌面安全保护等特性。
免杀基础
免杀需求
因为设计的木马的最终目的在发现目标网站有上传漏洞时可以将木马上传到目标服务器上并且可以远程访问实现远程控制,然而一些网站都会有安全狗、D盾、安骑士、护卫神、云锁等防护软件可以对一些Webshell进行查杀,那么要想使用Webshell进行远控就需要实现免杀,以此来躲避木马查杀工具的检查。
查杀技术
目前主流的木马查杀方法有:静态检查、动态检测、日志检查三种方式。a、静态检查通过匹配特征码、危险函数和木马特征值来查杀木马程序,它的特点是快速方便,对已知的木马程序查找准确率较高,它的缺点是误报率较高,无法查找0Day型的木马程序,而且容易被绕过。b、动态检测通过木马程序的动态特征来检测,当木马程序被上传到服务器上后,攻击者总会去执行它,当木马程序被执行时所表现出来的特征就是所谓的动态特征。c、日志检测则主要通过日志分析检测技术来实现,它主要通过分析大量的日志文件并建立请求模型来检测出异常文件。它的优点为当网站上的访问量级达到一致值时,这种检测方法具有比较大参考性价值。它的缺点则是存在一定误报率,对于大量的日志文件,检测工具的处理能力和效率都会变的比较低。
免杀技巧
木马程序可以使用多种编程语言来设计,不同的编程语言有不同特性以及提供的系统函数,所以在实现免杀时可以首先考虑灵活运用语言的特性来实现免杀,其次可以根据查杀软件的查杀规则来重构木马程序,躲避木马查杀工具的查杀,同时可以考虑密码学中的加密解密对源木马程序进行加密解密处理,以此来躲避木马查杀工具的检查。木马免杀技术的核心在于“灵活多变”。
免杀实战—小马免杀
引用免杀
因为D盾、安全狗、护卫神会对关键字eval中的执行变量进行溯源,当追溯到要执行的变量为一个通过POST接收的可疑数据时就会显示可疑木马,为了躲避这种溯源方式,可以通过多次使用&来引用前一个变量,通过一连串的赋值操作最后将要执行的内容与反引号拼接后传入eval实现免杀,具体实现如下所示:
之后使用D盾查杀一下看看:
发现还是被查杀到了,这时候b有给a说了:"喂,上面的a,我们换换位置呗~",于是a无奈的说:"为啥受伤的总是我呢?"
之后a对b说:"你看,不行吧?换了也没戏",之后b皱了皱眉说:"不急,我们来再拉一下伙伴——反引号,让他帮帮忙":
果然,b小哥说的还是有点门道的哦,从上面的结果中可以看到成功免杀了,之后再来看看安全狗——成功免杀
护卫神——成功免杀
至此,D盾、安全狗、护卫神已成功免杀,之后我们来看看可用性:
可变变量
可变变量是PHP中一种较为独特的变量,它可以动态的改变一个变量的名称,这种特性可以用于木马免杀中。首先可以定义一个变量$do并为其赋值为todo,之后将木马内容赋值给可变变量$do,最后在调用eval函数执行时将执行对象定义为$todo即可,具体实现如下所示:
之后使用D盾查杀一下看看:
发现不行哦,那么怎么办呢?幸好今天"反引号"大哥来串门,不妨让他来帮个忙:
发现成功免杀,之后我们再使用安全狗查杀一下看看————成功免杀
护卫神————成功免杀
至此,成功免杀安全狗、护卫神、D盾,之后我们试试可用性:
二维数组
在免杀时我们可以考虑见要执行的一句话木马程序放到数组中执行达到绕过的目的,例如:
之后我们使用D盾进行查杀————成功免杀
之后我们使用安全狗进行查杀————成功免杀
之后我们使用护卫神进行查杀:
oh, My God!护卫神这么强悍的吗???好不容易过了D盾、安全狗的查杀检测,走到最后一步却被护卫神给查杀了.....,那么怎么绕呢?既然一维数组不行,那么我就来个二维数组,哼:
之后再次使用护卫神查杀
还是被查杀到了,那么怎么办呢?变量$a给变量$b说:"我们不妨换换位置?",变量$b只好带着"试一试"的心态回复"换就换呗,反正就那样....":
"竟然成功免杀了?",变量$b带着痴呆的表情说到。之后我们再次使用D盾进行查杀————成功免杀:
之后再次使用安全狗查杀————成功免杀
至此,成功免杀D盾、安全狗、护卫神,那么来看看可用性:
数组交集
在做免杀研究是,发现我们可以通过数组的交集来获得我们想要的值,之后将其利用到木马程序的构造当中,例如:
至于设计原理上面的注释中想必已经说得很是详细了,这里就不再一一复述了,下面我们使用D盾进行查杀看看——免杀
之后使用安全狗查杀看看————成功免杀
之后使用护卫神查杀看看————成功免杀
至此,D盾、安全狗、护卫神成功免杀,下面试试可用性:
回调函数
array_map() 回调函数会返回用户自定义函数作用后的数组。array_map() 函数具体使用方法和参数说明如下:
在这里我们可以先定义一个函数test,其中第一个参数$a用作回调函数名称,第二个参数$b用作回调函数的参数,之后将其传递给array_map()函数进行执行,之后我们在外部调用test函数,同时传入我们的回调函数名称和回调函数的参数:
之后使用D盾进行查杀————成功免杀
之后使用安全狗查杀————成功免杀
之后使用护卫神查杀————成功免杀
至此,成功免杀D盾、安全狗、护卫神,之后我们使用菜刀连接试试看是否可以正常使用:
免杀实战—大马免杀
加密&混淆
在免杀处理的众多方法中,加密免杀算是一种常用的技巧,常见的加密方式有rot13、base64加解密,下面我们使用base64来进行免杀研究,首先我们需要一个shell.php的PHP大马:
之后我们需要使用encode.php对上面的大马程序进行一次base64加密处理,encode.php代码如下:
之后我们在浏览器中访问encode.php即可实现对shell.php大马程序的加密处理:
PS:因为木马程序源代码中含有很多敏感的操作,而且有很多容易被查杀到的关键词,所以后续的免杀都是在加密处理的基础上进行的分析与研究之后我们使用D盾先来一波查杀看看:
从上面的查杀结果可以看到这里威胁级别为"5",而且报"加密后门"的警告,这里应该是D盾检测到了关键字"base64_decode",所以我们这里需要做一个简单的混淆处理:
通过以上处理之后发现处理后的木马程序躲避了D盾的查杀,但是被安全狗检测到了:
经过分析发现被查杀的原因是eval函数执行了一个解密后的内容,为了躲避查杀,这里可以通过将解密后的内容赋值给一个变量,之后通过使用反引号拼接变量然后再让eval去执行的方式躲避查杀,具体实现如下所示:
可以发现成功免杀,之后我们再使用D盾进行一次查杀操作,发现依旧成功免杀(毕竟大马程序的复杂度增加了):
之后我们再使用护卫神进行一次查杀:
至此该木马成功免杀D盾、安全狗、护卫神,同时我们需要检测一下免杀之后的可用性:
可以正常使用:
Create_function免杀
在免杀的过程中,发现了一个PHP的内置函数Create_function,它主要用于创建一个函数,这里可以使用它来进行免杀,但是由于D盾、安全狗有关键词查杀所以这里需要对Create_function进行一个拆分处理,同时需要加入混淆处理,最后木马程序重构结果如下所示:
之后使用D盾进行查杀————成功免杀!
之后使用安全狗查杀————成功免杀
之后使用护卫神进行查杀————成功免杀
至此,安全狗、护卫神、D盾成功免杀,之后我们试试可用性:
可以正常使用~
可变变量
可变变量是PHP中一种较为独特的变量,它可以动态的改变一个变量的名称,这种特性可以用于木马免杀中。首先可以定义一个变量$do并为其赋值为todo,之后将加密处理过后的木马内容赋值给可变变量$do,最后在调用eval函数执行时将执行对象定义为$todo即可,具体实现如下所示:
之后使用D盾进行查杀————成功免杀
之后使用安全狗查杀————成功免杀
之后使用护卫神查杀————成功免杀
至此,成功免杀D盾、安全狗、护卫神,之后我们试试可用性:
总结
免杀与查杀在一次又一次的攻防较量中不断的进步,而我们在使用现有的webshell时也需要留意该webshell的可信程度,有些webshell留有后门,至少笔者分析的N多个大马时发现加密的木马文件几乎都有相关的后门。所以在免杀研究时还是自我设计木马程序为好,一些大马文件的功能不外乎由编程语言的功能函数来实现外加各种加密解密、编码/解码方法等。当然,随着木马查杀库的更新我们也需要研究更多的木马查杀方法与木马查杀机制的缺陷,促进攻防两端的进步。
相关推荐
- 铭说 | 一句话木马的多种变形方式
-
今天来和大家聊一聊,一句话木马...
- 某教程学习笔记(一):13、脚本木马原理
-
我和她说,如果有天你要离开我,你就跟我掰手腕,赢了你就让你走,她说我那么瘦小怎么会赢。后来她真的要和我分手,我把右手放在桌子上,眼看我要赢的时候,她把左手放到右手上,我抬头看她咬着牙眼里含着泪,我知道...
- 年中盘点:详细分析2019年上半年爆发的macOS恶意软件
-
概述自从我们在去年12月对2018年的macOS恶意软件进行年终盘点以来,我们发现新型macOS恶意软件的爆发数量有所增加。一些旧恶意软件家族产生了新的变种,一些恶意软件使用了新的技巧,同时还产生了一...
- Webshell免杀研究(webshell免杀马)
-
前言不想当将军的士兵不是好士兵,不想getshell的Hacker不是好Hacker~有时候我们在做攻防对抗时经常会碰到可以上传webshell的地方,但是经常会被安全狗、D盾、护卫神、云锁等安全软件...
- 一个合格的seoer应该掌握的基本技能和知识点!
-
1.301重定向2.404错误页面3.url表转化4.三导航5.树桩结构6.网站目录优化7.网站内连接8.更新带动器9.Gzip压缩技术的意义!10.http状态码是否正常11.URL静态化12.网站...
- Cacti监控服务器配置教程(基于CentOS+Nginx+MySQL+PHP环境搭建)
-
具体案例:局域网内有两台主机,一台Linux、一台Windows,现在需要配置一台Cacti监控服务器对这两台主机进行监控...
- php opcache 的工作原理(php aop 实现原理)
-
opcachePHP扩展实现了各种功能,以透明的方式加速PHP。顾名思义,它的起源和主要目的是操作码缓存,但现在它还包含一个优化器和即时编译器。然而,这篇博文将只关注操作码缓存方面。...
- win7下apache+mysql+php安装配置(mysql在win7下安装)
-
一.首先下载好要用的apache版本:http://httpd.apache.org/download.cgimysql版本:http://dev.mysql.com/downloads/mys...
- Ubuntu linux 上的 Nginx 和 Php 安装
-
教程-在UbuntuLinux上安装Nginx1.安装Nginx服务器和所需的包。apt-getupdatebrapt-getinstallnginx...
- 只需要四步,就能完成PHP搭建(如何搭建php运行环境)
-
搭建php的方法主要分为独立安装和集成安装两种,独立安装需要分别下载apache,mysql和php,而集成只需要下载一个软件安装包,比较简单,很适合新手。集成安装包有WampServer、appse...
- 判断元素是否在数组内的几种方法对比
-
数组是很常用的一个数据结构,而且经常需要判断某个元素是否在数组中,这在...
- 如何从 PHP 过渡到 Golang?(php转go还是java)
-
我是PHP开发者,转Go两个月了吧,记录一下使用Golang怎么一步步开发新项目。本着有坑填坑,有错改错的宗旨,从零开始,开始学习。因为我司没有专门的Golang大牛,所以我也只能一步步自己去...
- Thinkphp3.2.3及以下版本漏洞整理
-
欢迎搜索公众号:白帽子左一每天分享更多黑客技能,工具及体系化视频教程...
- 【php学习笔记】php中str_split()方法使用笔记
-
PHP是一种广泛应用的编程语言,它有许多内置函数和方法,用来方便我们对数据进行处理和操作。其中,字符串处理是PHP中常见的任务之一。str_split()是PHP中的一个字符串方法,它用来将字符串分割...
- Redis中BitMap是如何储存的,以及PHP如何处理
-
setbit,getbit这些命令在redis是如何储存和获取的呢?直接通过get获取到的值我们如何判断对应的位是0或者1?...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- navicat无法连接mysql服务器 (65)
- 下横线怎么打 (71)
- flash插件怎么安装 (60)
- lol体验服怎么进 (66)
- ae插件怎么安装 (62)
- yum卸载 (75)
- .key文件 (63)
- cad一打开就致命错误是怎么回事 (61)
- rpm文件怎么安装 (66)
- linux取消挂载 (81)
- ie代理配置错误 (61)
- ajax error (67)
- centos7 重启网络 (67)
- centos6下载 (58)
- mysql 外网访问权限 (69)
- centos查看内核版本 (61)
- ps错误16 (66)
- nodejs读取json文件 (64)
- centos7 1810 (59)
- 加载com加载项时运行错误 (67)
- php打乱数组顺序 (68)
- cad安装失败怎么解决 (58)
- 因文件头错误而不能打开怎么解决 (68)
- js判断字符串为空 (62)
- centos查看端口 (64)