PHP不死马为何几分钟就死掉了?
Obito 发表于 河南 WEB安全 1597浏览 · 2024-04-21 05:49

前言:在AWD中php不死马对于维持权限来说十分good,不过为了更好的学习php不死马的原理当然要在本地实验一番来,但在本地实验的过程中遇到了小插曲,php不死马在成功上传服务器后却在几分钟后烟消云散了,在网上搜索却找不到相关文献,好在经过一阵分析从日志文件中找到了原因。
正文:
问题描述:在通过预置的一句话木马使用webshell管理工具(这里以蚁剑为例),进行上传不死马,上传成功后删除不死马,刚开始删不掉,过了几分钟在去删发现已经删掉了。
(本地实验配置:Ubuntu22.04,宝塔,php8.)
不死马的原理是运行后删除自身文件,利用死循环驻留在内存里。那我们可以监控一下php进程看看到底怎么个事?我们使用top命令来看看php进程的实时情况
指令:top -c -p $(pgrep -d',' php)


但过了几分钟后1247进程却莫名其妙的消失了


我们去/www/server/php/80/var/log目录下查看一下php-fpm.log看看报错是什么样发现了WARNING: [pool www] child 1247, script '/www/wwwroot/192.168.156.149/aa.php' (request: "GET /aa.php") execution timed out (107.644002 sec), terminating这个警告意味着我的 PHP 脚本 '/www/wwwroot/192.168.156.149/aa.php' 执行时间超过了服务器所设置的最大执行时间限制,因此服务器强制终止了该脚本的执行
贴一下aa.php:


从日志中我们知道了进程消失的原因是执行时间超过了服务器所设置的最大执行时间限制,那么我们该如何解决此问题呢?在网上查找了相关资料后得知了request_terminate_timeout这样一个参数request_terminate_timeout 是 PHP-FPM(PHP FastCGI Process Manager)的一个配置项,用于设置 PHP 请求终止的超时时间。当 PHP 脚本的执行时间超过了这个设定的时间限制,PHP-FPM 将会终止该请求的执行。官网文档中说它的默认值为0


我们去/www/server/php/80/etc查看一下在宝塔中它的配置为多少


我们清楚的看到宝塔默认配置为100秒。后期经过测试发现宝塔的php版本中request_terminate_timeout均为100秒,也经过实验发现只要将这个参数的值调大点就可以避免php不死马离奇消失(测试时我将参数改为了1000秒)
希望此文章可以帮助你解决在本地搭建环境测试php不死马时遇到的进程终止问题
php官方文档

0 条评论
某人
表情
可输入 255
目录