- 工信部备案号 滇ICP备05000110号-1
- 滇公安备案 滇53010302000111
- 增值电信业务经营许可证 B1.B2-20181647、滇B1.B2-20190004
- 云南互联网协会理事单位
- 安全联盟认证网站身份V标记
- 域名注册服务机构许可:滇D3-20230001
- 代理域名注册服务机构:新网数码
欢迎来到蓝队云技术小课堂,每天分享一个技术小知识。
什么是回调函数?
所谓的回调函数,就是指调用函数时并不是向函数中传递一个标准的变量作为参数,而是将另一个函数作为参数传递到调用的函数中,这个作为参数的函数就是回调函数。通俗的来说,回调函数也是一个我们定义的函数,但是不是我们直接来调用的,而是通过另一个函数来调用的,这个函数通过接收回调函数的名字和参数来实现对它的调用。
PHP 中的回调函数与 C、Java 等语言的回调函数的作用是一模一样的,都是在函数执行的过程中,跳转到回调函数中,当回调函数执行完毕之后,再回到之前的函数处理接下来的程序。
以下是一些关键概念和如何识别、预防 PHP 回调后门的基本方法。
1. 回调后门的基本形式
PHP 回调后门通常会利用 PHP 的 call_user_func、call_user_func_array、array_map、array_walk 等函数。攻击者通过这些函数将自定义代码作为参数注入,从而执行代码。例如:
<?php$malicious_function = 'system';$malicious_code = 'ls';call_user_func($malicious_function, $malicious_code);?>
上例中,call_user_func 使用 system 执行命令 ls。这种回调后门会根据传入的参数不同而执行不同的代码逻辑,极具隐蔽性。
2. 动态代码调用
回调后门经常利用动态代码调用机制,将执行函数作为变量传递。例如:
<?php$func = $_GET['func'];$param = $_GET['param'];call_user_func($func, $param);?>
访问 script.php?func=phpinfo¶m= 将执行 phpinfo() 函数。如果没有做好输入过滤,攻击者可能通过 URL 调用任意 PHP 函数,从而导致严重的安全问题。
3. 如何识别回调后门
要识别回调后门,需要检查源代码中是否有以下特征:
使用了 call_user_func 或 call_user_func_array 调用动态代码。
代码中过多地使用了 eval、system、shell_exec 等函数。
使用了与文件读写、命令执行相关的函数(如 file_get_contents、exec)并结合了回调调用。
存在不受信任的用户输入被直接传递给回调函数。
例如:
<?php// 可疑代码示例call_user_func($_REQUEST['cmd'], $_REQUEST['arg']);
4. 如何预防回调后门
防范 PHP 回调后门主要集中在输入的过滤和严格控制动态代码调用:
限制动态函数调用:避免使用 call_user_func、call_user_func_array 和 eval。
验证用户输入:确保用户输入经过严格的验证和过滤,避免将不受信任的输入直接用于动态函数调用。
使用白名单:在必须调用回调函数的情况下,建议使用函数白名单,仅允许可信的函数调用。
例如:
<?php$allowed_functions = ['strlen', 'strtolower'];$func = $_GET['func'];if (in_array($func, $allowed_functions)) {
call_user_func($func, $_GET['param']);
}?>
5. 检测工具
使用静态代码分析工具(如 PHPStan、SonarQube)或防火墙(WAF)能够检测到代码中的回调后门。另外,代码审计和定期安全检查也可以帮助发现和预防 PHP 回调后门。
蓝队云官网上拥有完善的技术支持库可供参考,大家可自行查阅,更多技术问题,可以直接咨询。同时,蓝队云整理了运维必备的工具包免费分享给大家使用,需要的朋友可以直接咨询。
更多技术知识,蓝队云期待与你一起探索。
售前咨询
售后咨询
备案咨询
二维码
TOP