WEB应用(十三)---RCE

news2025/2/24 5:12:36

什么是RCE?

Remote Command/Code Execute,远程命令或代码执行。通过构造特殊的字符串,将数据提交至Web应用程序,并利用该方式执行外部程序或系统命令实施攻击,类似于SQL注入。

Web应用程序使用了一些可以执行系统命令或代码的函数,而且对用户提交的数据过滤不严格,导致黑客可以利用服务器执行命令或代码。

php相关函数:

  1. eval(string $code);
  2. assert()函数
  3. preg_replace()函数
  4. call_user_func()函数
  5. exec()/shell_exec()函数
  6. 反撇号,作为命令来执行

当然不是只有以上的方式才是实现rce,这几个是最典型的函数,还有其他的函数就又大家以后去收集了

下面我们来看看远程代码执行

eval()函数我们在www目录下创建一个名为rce的文件夹,并且创建rce.php文件,写入以下代码

<?php
//防止中文乱码
header("content-type:text/html;charset=utf8");
eval($_GET["code"]);
?>

 去访问这个文件,然后传入参数,?code=echo 8-2;可以看到页面回显了6。

如果是一个恶意代码呢,?code=phpinfo();   回显了php等其他相关信息

assert()函数,assert函数的本意并不是要执行代码,而是程序员用来调试代码用的。但是,如果第一个参数是字符串,它将会被 assert() 当做 PHP 代码来执行。先来看代码

<?php
//防止中文乱码
header("content-type:text/html;charset=utf8");
//eval($_GET["code"]);
assert($_GET['code']);
?>

preg_replace函数,preg_replace ( mixed $pattern , mixed $replacement , mixed $subject)

搜索 subject 中匹配 pattern 的部分, 以 replacement 进行替换。如果所替换内容为可执行函数,则该函数会被执行。

e 修正符使 preg_replace() 将 replacement 参数当作 PHP 代码。

<?php
//防止中文乱码
header("content-type:text/html;charset=utf8");
//eval($_GET["code"]);
//assert($_GET['code']);
//这里可以将phpinfo,替换成$_GET['code']
preg_replace("/www/e","phpinfo()","www.com");
?>

call_user_func()函数,这个函数输入的不是函数,而是函数名,?code=phpinfo

<?php
//防止中文乱码
header("content-type:text/html;charset=utf8");
//eval($_GET["code"]);
//assert($_GET['code']);
//preg_replace("/www/e","phpinfo()","www.com");
call_user_func($_GET['code']);
?>

 下面是远程命令执行

exec()、shell_exec()函数

这里就可以输入ipconfig,whoami,在我们输入ipconfig时,我们发现只有一行的回显,这是因为返回时有多行信息,所以就返回最后一行,所以我们就可以换一个函数

<?php
echo exec($_GET['cmd']);
?>

 这个时候再传入ipconfig,信息就完整了

<?php
//echo exec($_GET['cmd']);
echo shell_exec($_GET['cmd']);
?>

反撇号

这个键在Esc键的下方,Tab键的上方,被反撇号包起来的的内容会被当做命令去执行,但是内部不允许使用单引号,双引号等,所以直接上代码

<?php
//echo exec($_GET['cmd']);
//echo shell_exec($_GET['cmd']);
$cmd = $_GET['cmd'];
echo `$cmd`;
?>

接下来看看命令连接符

 下面几个命令作为练习,和验证

<?php
//echo exec($_GET['cmd']);
//echo shell_exec($_GET['cmd']);
//$cmd = $_GET['cmd'];
//echo `$cmd`;
//pwd是linux下的命令在windows中不会有任何操作
echo `whoami&&ipconfig`;
echo `pwd&&ipconfig`;
?>

趁热打铁,我们来到pikachu靶场,进入第一个环境

这里提示要我们输入一个ip地址进去,我这里输入127.0.0.1,可以看到正确执行了,这些乱码其实是pikachu内置的编码和浏览器不一致导致的

 当然输入一个域名也是可以的,这里我输入的百度的

 接下来就可以练习命令连接符,这里去ping127.0.0.1一定可以执行,通过&&的连接后面的命令一定可以执行,如果你的靶场搭建在linux操作系统中相应的命令要发生变换

//比如输入
127.0.0.1&&whoami
127.0.0.1&&ipconfig

接下来看看evel,最简单的输入phpinfo();   ,或者echo 10-2;    。

rce漏洞该怎么防御呢,对用户输入的符号做替换,进行严格的过滤,还可以进行输入内容的特征来详细的过滤,比如第一个ping,在这个环境中他只想让我们输入Ip地址,那我们就可以根据Ip地址的特点,点分十进制,首先将输入的内容以点号来分割,校验这四个部分是不是都是数字,只要有一个部分不是数字,那便返回错误。

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

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

相关文章

多变量时间序列生成模型GAN介绍与实现

目录 1. 模型介绍2. 问题提出3. 模型具体实现3.1 数据预处理3.2 生成对抗网络&#xff08;GAN&#xff09;结构3.3 模式崩溃解决3.4 合成数据验证 4. 代码实现参考文献 1. 模型介绍 在大数据时代&#xff0c;生成逼真的时间序列数据对于负载平衡、负载预测和智能资源配置等方面…

openwrt 性能工具perf和cpu占用查看工具sysstat编译及使用

代码使用的lean源码&#xff0c;只需要用make menuconfig打开perf对应的编译选项即可 1.第一步选择Global build settings 2.第二步选择Kernel build options 3.第三步选择Enable kernel cgroups 4.第四步选择Enable perf_event per-cpu per-container group (cgroup) monitor…

计算机网络-CSP初赛知识点整理

历年真题 [2016-NOIP-普及-第3题] 以下不属于无线通信技术的是( ) A. 蓝牙 B. Wifi C. GPRS D. 以太网 [2015-NOIP-普及-第10题] FTP 可以用于( )。 A. 远程传输文件 B. 发送电子邮件 C. 浏览网页 D. 网上聊天 [2019-CSP-J-第1题] 中国的国家顶级域名是( ). A. .cn B. .ch C.…

国内自闭症学校指南:了解孩子的康复需求和解决方案

在国内&#xff0c;自闭症儿童的数量逐年增加&#xff0c;为他们提供专业的教育和康复支持变得至关重要。对于家长来说&#xff0c;选择一所合适的自闭症学校是帮助孩子走向康复的关键一步。在众多的选择中&#xff0c;星贝育园以其独特的优势和全面的服务脱颖而出。 当孩子被诊…

android系统中data下的xml乱码无法查看问题剖析及解决方法

背景&#xff1a; Android12高版本以后系统生成的很多data路径下的xml都变成了二进制类型&#xff0c;根本没办法看xml的内容具体如下&#xff1a; 比如想要看当前系统的widget的相关数据 ./system/users/0/appwidgets.xml 以前老版本都是可以直接看的&#xff0c;这些syste…

Cxx primer-chap13-Copy Control

copy控制涉及类的五个成员函数&#xff1a;&#xff0c;这五个成员函数被显式或隐式的被调用&#xff0c;各司其职&#xff1a;我们必须根据类的实际情况来确定是否需要显式定义这些成员函数&#xff1a;什么是拷贝构造函数呢&#xff1f;简单讲就是该函数的第一个形参是refere…

malloc函数与free函数

目录 开头1.怎样把数组初始化时的项数变成变量?malloc函数free函数 2.malloc函数与free函数的实际运用CC6 牛牛的排序随机乱码打印随机数组打印 结尾 开头 大家好&#xff0c;我叫这是我58。今天&#xff0c;我们来学一下如何把数组初始化时的项数变成变量的一些知识。 1.怎…

【书生大模型实战营第三期 | 入门岛第3关-Git 基础知识】

学习Git版本控制系统心得体会 摘要 通过参与InternLM Git教程&#xff0c;我对Git这一开源的分布式版本控制系统有了更深入的理解和实践。Git以其高效的团队协作能力、详尽的代码历史记录以及灵活的分支管理功能&#xff0c;成为软件开发中不可或缺的工具。 文章大纲 Git简介…

自查出癌症后 凯特王妃的生活观发生了变化 王室的粉丝们也应该会很少见到她

凯特米德尔顿今年的健康问题令人意外,这也改变了王室的面貌。这位威尔士王妃每次露面都引来巨大关注,因此王室不得不发挥创意,将更多精力放在威廉王子、索菲、爱丁堡公爵夫人,甚至查理三世国王的社交日程上。王室粉丝们可能期待着凯特恢复健康,恢复正常日程,但内部人士称…

unity 粒子系统学习

差不多了解了基本的ui面板&#xff0c;学一下粒子系统 取消轮廓线 这样粒子biubiu的时候就没有橙黄色的轮廓线了

lvs的dr模式实现

目录 一、实验环境准备 1、五台红帽9系统的主机 2、关闭所有的防火墙以及关闭selinux 二、在lvs中配置 1、在lvs中安装lvs软件并设置开机启动 2、在lvs中打开内核路由功能&#xff0c;并把它写入/etc/sysctl.conf文件中 3、webserver1和webserver2下载httpd 4、在lvs主机…

【Redis进阶】Redis单线程模型和多线程模型

目录 单线程 为什么Redis是单线程 处文件事件理器的结构 文件处理器的工作流程 总结 文件事件处理器 连接应答处理器 命令请求处理器 命令回复处理器 多线程 为什么引入多线程 多线程架构 多线程执行流程 关于Redis的问题 Redis为什么采用单线程模型 Redis为什…

【STM32】USART串口和I2C通信

个人主页~ USART串口和I2C通信 USART串口一、串口1、简介2、电路要求3、参数及时序 二、USART外设1、USART结构2、波特率发生器 三、数据包1、HEX数据包HEX数据包接收 2、文本数据包文本数据包接收 I2C通信一、简介二、通信协议1、硬件电路2、I2C时序基本单元 三、I2C外设1、简…

Chapter 29 类型注解

欢迎大家订阅【Python从入门到精通】专栏&#xff0c;一起探索Python的无限可能&#xff01; 文章目录 前言一、变量的类型注解二、函数的类型注解三、Union类型注解 前言 类型注解为我们提供了一种清晰的方式来描述变量和函数的预期类型&#xff0c;使得代码的意图更加明确。…

GMMREG:基于高斯混合模型的鲁棒点集配准

其关键思想都是用连续密度函数表示离散点集&#xff0c;即高斯混合模型。不同点在于本节算法采用L2距离来衡量两个点云之间的相似性&#xff0c;而5.7节中的NDT算法采用的是作者定义的匹配势来衡量&#xff0c;实际上是所有线段对之间的差异。并且本节算法中加入了薄板样条插值…

打造分布式缓存组件【场景】

本文将采用AOP 反射 Redis自定义缓存标签&#xff0c;重构缓存代码&#xff0c;打造基础架构分布式缓存组件 配置 需要在Redis配置类中开启AOP自动代理&#xff0c;即通过EnableAspectJAutoProxy 注解实现该功能 import com.fasterxml.jackson.annotation.JsonAutoDetect; …

「链表」链表原地算法合集:原地翻转|原地删除|原地取中|原地查重 / LeetCode 206|237|2095|287(C++)

概述 对于一张单向链表&#xff0c;我们总是使用双指针实现一些算法逻辑&#xff0c;这旨在用常量级别空间复杂度和线性时间复杂度来解决一些问题。 所谓原地算法&#xff0c;是指不使用额外空间的算法。 现在&#xff0c;我们利用双指针实现以下四种行为。 //Definition fo…

Linux驱动.之I2C,iic驱动层(二)

一、 Linux下IIC驱动架构 本篇只分析&#xff0c;一个整体框架。 1、首先说说&#xff0c;单片机&#xff0c;的i2c硬件接口图&#xff0c;一个i2c接口&#xff0c;通过sda和scl总线&#xff0c;外接了多个设备device&#xff0c;通过单片机&#xff0c;来控制i2c的信号发生&…

VUE和Element Plus

1.VUE 1.下载和配置环境 使用vue编程&#xff0c;我们需要使用到的编程软件是vs code&#xff0c;还需要使用node.js&#xff0c;这个的作用就类似于JDK&#xff0c;当我们都下载好之后&#xff0c;winR键打开命令提示符&#xff0c;我们在这里可以查看版本&#xff0c; npm…

《计算机网络 - 自顶向下方法》阅读笔记

《计算机网络 - 自顶向下方法》阅读笔记 应用层、运输层、网络层、数据链路层 计算机网络和因特网&#xff1a; 因特网&#xff1a; ​ 是一个世界范围的计算机网络&#xff0c;互联了全世界的计算机设备 计算机设备&#xff1a;手机&#xff0c;电脑&#xff0c;游戏机&#…