WEB应用(十三)---RCE

ops/2025/1/16 2:46:49/

什么是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.ppmy.cn/ops/93043.html

相关文章

stm32应用、项目、调试

主要记录实际使用中的一些注意点。 1.LCD 1.LCD1602 电路图&#xff1a; 看手册&#xff1a;电源和背光可以使用5v或者3.3v&#xff0c;数据和控制引脚直接和单片机引脚连接即可。 单片机型号&#xff1a;stm32c031c6t6 可以直接使用推完输出连接D0--D7,RS,EN,RW引脚&#…

数据库原理面试-核心概念-问题理解

目录 1.数据库、数据库系统与数据库管理系统 2.理解数据独立性 3.数据模型 4.模式、外模式和内模式 5.关系和关系数据库 6.主键与外键 7.SQL语言 8.索引与视图 9.数据库安全 10.数据库完整性 11.数据依赖和函数依赖 12.范式&#xff1f;三范式&#xff1f;为什么要遵…

如何设计一个高效的 C/S 架构软件

如何设计一个高效的C/S架构软件 引言 C/S&#xff08;Client/Server&#xff09;架构是软件开发中常见且经典的一种架构模式。这种架构将应用程序划分为客户端&#xff08;Client&#xff09;和服务器&#xff08;Server&#xff09;两大部分&#xff0c;通过网络进行交互。客…

2024第十二届重庆国际植保暨新型肥料农药产业博览会即将开启

2024第十二届重庆国际植保暨新型肥料农药产业博览会即将开启 在农业现代化的征程中&#xff0c;肥料和农药始终是保障农作物茁壮成长、实现丰收的关键要素。2024 年 11 月 29 - 30 日&#xff0c;第十二届重庆国际新型肥料农药产业博览会将在重庆国际博览中心盛大开幕&#xff…

多模态大模型intern-vl 1.5 论文解读:How Far Are We to GPT-4V?

论文&#xff1a;https://arxiv.org/pdf/2404.16821 目录 1 介绍 3.1 整体架构 3.2 强大的视觉编码器 InternViT-6B-448px-V1.2 InternViT-6B-448px-V1.5 3.3 动态高分辨率 动态宽高比匹配 图像分割与缩略图 InternVL 1.5&#xff0c;这是一款开源的多模态大语言模型&…

Python迭代器模式的高级应用

Python迭代器模式的高级应用 在Python的多姿多彩世界中&#xff0c;迭代器模式以其独特的能力&#xff0c;允许我们以一致的方式遍历不同的集合。本文将深入探索Python迭代器模式的高级用法&#xff0c;揭示其在实际编程中的高效应用&#xff0c;并提供丰富的代码示例。 一、…

C语言电子画板

目录 开头程序程序的流程图程序的效果结尾 开头 大家好&#xff0c;我叫这是我58。今天&#xff0c;我们来看一下我用C语言编译的电子画板和与之相关的一些东西。 程序 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <Windows.h> int main() …

MBTI 性格测试小程序实战

MBTI 性格测试应用介绍 参考项目&#xff1a;16Personalities&#xff08;https://www.16personalities.com/ch&#xff09; MBTI 实现方案介绍 核心组成&#xff1a; 题目用户答案评分规则 题目结构 暂时使用JSON&#xff0c;便于理解&#xff0c;result代表题目对应的…