RCE复习(ctfhub上)

news2024/12/23 18:51:57

一、rce漏洞概述

        在Web应用开发中为了灵活性、简洁性等会让应用调用代码执行函数或系统命令执行函数处理,若应用对用户的输入过滤不严,容易产生远程代码执行漏洞或系统命令执行漏洞。

二、常见RCE漏洞函数
1.系统命令执行函数

  1. system():能将字符串作为OS命令执行,且返回命令执行结果;
  2. exec():能将字符串作为OS命令执行,但是只返回执行结果的最后一行(约等于无回显);
  3. shell_exec():能将字符串作为OS命令执行
  4. passthru():能将字符串作为OS命令执行,只调用命令不返回任何结果,但把命令的运行结果原样输出到标准输出设备上;
  5. popen():打开进程文件指针
  6. proc_open():与popen()类似
  7. pcntl_exec():在当前进程空间执行指定程序;

反引号``:反引号``内的字符串会被解析为OS命令;
2.代码执行函数

  1. eval():将字符串作为php代码执行;
  2. assert():将字符串作为php代码执行;
  3. preg_replace():正则匹配替换字符串;
  4. create_function():主要创建匿名函数;
  5. call_user_func():回调函数,第一个参数为函数名,第二个参数为函数的参数;
  6. call_user_func_array():回调函数,第一个参数为函数名,第二个参数为函数参数的数组;

可变函数:若变量后有括号,该变量会被当做函数名为变量值(前提是该变量值是存在的函数名)的函数执行。

三、RCE漏洞的绕过方式:

具体看:RCE漏洞详解及绕过总结(全面)-CSDN博客

接下里看例题:

一.eval执行

进入题目就看见了源代码

php函数意思是:

是否由变量cmd 如果有,就执行eval($_REQUEST["cmd"]);

也就是木马

补充:eval函数,将字符串认为是php代码来执行。

具体:

__isset判断一个变量是否已设置, 即变量已被声明,且其值为ture

所以我们在访问的时候使用变量 cmd

先直接查看根目录有没有flag

/?cmd=sysytem("ls");

注意:这几条命令最后面的“;”都不能省略

发现有php文件,但是没有flag文件

那么就查看上一级目录

/?cmd=system("ls /");

发现了有flag文件,那么就访问这个文件

/?cmd=system("cat /flag_3748");

得到flag

二.文件包含

进入题目,看见有一个GET传参,然后下面还有一个shell的超链接

点开看一下

这里又包含了eval函数,而且要求赋值给ctfhub,原网页还有一个get传参 所以这题应该是get+post传参的 并且要赋值给ctfhub才可以执行命令(这里就要用到hackbar了)

那么就按照它说的做,先用get传参

/?file=shell.txt

然后再进行post传参

ctfhub=system("ls");

我们通过查看根目录发现了两个文件

但是并没有发现flag文件

所以查看上一级目录

ctfhub=system("ls /");

发现了flag的字眼,继续查找flag

ctfhub=system("cat /flag");

发现了flag

三.php://input

先了解一下是什么?

php://input 是 PHP 提供的一个伪协议,允许开发者 访问 POST 请求的原始内容。对于 POST 请求数据,PHP 提供了 $_POST 与 $FILES 超全局变量,在客户端发起 POST 请求时,PHP 将自动处理 POST 提交的数据并将处理结果存放至 $_POST 与 $FILES 中。

 所以php://input要用 post请求才可以

使用php://input的条件也满足

接下来就是要用bp进行抓包,然后操作

先在题目地址栏中访问php://input,然后抓包(/?file=php://input)

<?php system("ls");?>

注:在本题使用<?php system('ls');?>无效,要直接使用<?php system('ls /');?>

查看根目录

并且这里修改发送方法为post,目标修改为/?file=php://input

<?php system("ls /");?>

查看上一级目录

<?php system("cat /flag_8199");?>

查看这个flag下的所有内容

得到flag

这题值得注意的点就是php://input 的用法以及它的使用条件 php://input需要用post请求的方式

四.远程包含

进入题目,首先看到源代码,然后下面有个phpinfo的链接,点开看一下

发现符合php://input的使用条件,所以本题可以使用php://input的方法来做

用bp抓包,做法和上一题一样的

首先访问/?file=php://input,然后抓包

抓到包以后,发送到repeater,把GET修改为POST,目标修改为/?file=php://input

并且在body部分执行  <?php system("ls");?> 查看根目录

然后查看上一级目录  <?php system("ls /");?>

最后执行  <?php system("cat /flag");?>

查找flag,并且得到了flag

五.读取源代码

这道题需要我们读取源代码  

这里用php://input发现执行不了 就需要用到另外的一个伪协议 php://filter

先来认识一下它

使用的方法:

/?file=php://filter/read=convert.base64-encode/recource=index.php;

这句话的意思是我们用base64编码的方式来读文件index.php;这时页面会显示出源文件index.php经过base64编码后的内容,然后经过base64解码就可以看到flag;

convert.base64

convert.base64-encode和 convert.base64-decode使用这两个过滤器等同于分别用base64_encode()和base64_decode()函数处理所有的流数据。

convert.base64-encode支持以一个关联数组给出的参数。如果给出了line-length,base64 输出将被用line-length个字符为 长度而截成块。如果给出了line-break-chars,每块将被用给出的字符隔开。这些参数的效果和用base64_encode()再加上 chunk_split()相同。

进入题目,发现它已经给了我们flag的位置

我们直接执行命令:?file=php://filter/resource=/flag

得到flag

还可以:

执行命令/?file=php://filter/read=convert.base64-encode/resource=/flag

让flag以base64编码的方式呈现出来

然后解码

同样的,也可以得到flag

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

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

相关文章

LeetCode 94.二叉树的中序遍历

题目描述 给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,3,2]示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[]示例 3&#xff1a; 输入&#xff1a;root [1] …

【c++】----STL简介string

目录 1. 什么是STL 2. STL的版本 3. STL的六大组件 4.STL的缺陷 5.string类 1. 为什么学习string类&#xff1f; 6.string类的常用接口说明&#xff08;下面我们只讲解最常用的接口&#xff09; 1.string 常见构造 2.string类的遍历 iterator 迭代器遍历 &#xff08;…

uniapp制作安卓原生插件踩坑

top. fireEvent失效的问题 本来我项目跑的好好的&#xff0c;结果放到公司项目半天收不到回调 结果是因为vue3 方法 onTel会变成on-tel 全部改小写才行了 1.uniapp和Android工程互相引用讲解 uniapp原生Android插件开发入门教程 &#xff08;最新版&#xff09;_uniapp and…

Java设计模式 _创建型模式_工厂模式(普通工厂和抽象工厂)

一、工厂模式 属于Java设计模式创建者模式的一种。在创建对象时不会对客户端暴露创建逻辑&#xff0c;并且是通过使用一个共同的接口来指向新创建的对象。 二、代码示例 场景&#xff1a;花店有不同的花&#xff0c;通过工厂模式来获取花。 1、普通工厂模式 逻辑步骤&#…

AnaTraf网络流量分析仪:实时监控、故障排除和性能优化的必备工具

AnaTraf网络流量分析仪是一款高性能的实时网络流量分析工具&#xff0c;用于全流量回溯分析、网络流量监控、网络性能分析、快速排除网络故障。本文将为您详细介绍AnaTraf的功能和优势&#xff0c;帮助您了解如何通过该设备进行网络流量监控、故障排除和性能优化。 一、AnaTraf…

修改CentOS ifcfg_ens33文件,提示 file read only/只读

没有用root用户去修改&#xff0c;需要切换到root用户&#xff1a; su root 输入root密码&#xff0c;切换到root用户修改。 另一个原因&#xff1a;打开文件的时候有临时文件存在&#xff0c;这个时候需要按E才能确认编辑&#xff0c;否则是默认以只读方式打开。 参考《vim编…

Gateway结合Nacos使用!!!

一、本地结合使用 1. 引入依赖 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> 2. bootstarp.yml配置文件 如果Nacos中配置使用yaml格式&…

Python 0基础_变现_38岁_day 15(匿名函数)

匿名函数&#xff1a; 不用定义函数名&#xff0c;无需使用def关键字&#xff0c;使用lambda将函数写成一行&#xff1b;#使用匿名函数定义一个两个数字相加的函数add lambda x,y : xy #使用变量接收匿名函数的内容&#xff0c;且变量名作为调用函数的变量名&#xff1…

Linux软件包管理器——yum

文章目录 1.什么是软件包1.1安装与删除命令1.2注意事项1.3查看软件包1.3.1注意事项&#xff1a; 2.关于rzsz3.有趣的Linux下的指令 -sl 1.什么是软件包 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序. 但是这样太麻烦了, 于是有些人把一…

Django之搭配内网穿透

一&#xff0c;安装coplar 二&#xff0c;开启8087的内网穿透 三&#xff0c;setting.py中加入如下配置&#xff1a; ALLOWED_HOSTS [*]CSRF_TRUSTED_ORIGINS ["https://localhost:8087", "http://localhost:8087"]四&#xff0c;启动项目 五&#xff…

rust疑难杂症解决

rust疑难杂症解决 边碰到边记录&#xff0c;后续可能会逐步增加&#xff0c;备查 cargo build时碰到 Blocking waiting for file lock on package cache 原因是Cargo 无法获取对包缓存的文件锁&#xff0c; 有时vscode中项目比较多&#xff0c;如果其中某些库应用有问题&…

Spring快速入门!(超详细)——工厂模式

GOF之工厂模式 设计模式&#xff1a;一种可以被重复利用的解决方案。GoF&#xff08;Gang of Four&#xff09;&#xff0c;中文名——四人组。《Design Patterns: Elements of Reusable Object-Oriented Software》&#xff08;即《设计模式》一书&#xff09;&#xff0c;19…

红米A2/A2+/POCO C51手机秒解BL+快速获取root权限+解谷歌锁刷机救砖教程

红米A2/A2/POCO C51手机是目前小米公司针对于国外用户的1个独立的品牌&#xff0c;或者和国内的红米手机都非常相似&#xff0c;几款手机由于硬件非常接近&#xff0c;我们这里将其放在一起和大家介绍而从他们的代号中我们可以得知&#xff0c;目前A2/POCO的代号为water&#x…

Ubuntu22.04安装freecad、ODAFileConverter

一、背景 作为程序界的萌新&#xff0c;不只写代码&#xff0c;还需要临危受命看看CAD图。 手上的一份CAD图是DWG格式的&#xff0c;先得找款看DWG格式文件的软件&#xff0c;很快找到了“CAD迷你看图”&#xff0c;这款软件直接傻瓜式安装&#xff0c;不是本文重点。 本文重…

RejectedExecutionHandler 以及线程池的自行实现

RejectedExecutionHandler handler 拒绝方式/拒绝策略(线程池考察的重点) 我们知道,线程池有一个阻塞队列,当阻塞队列满了之后,继续添加任务,我们该如何去应对? Java系统的四个处理方式 ThreadPoolExecutor.AbortPolicy 直接抛出异常,这样做的话,整个线程池就不干活了 T…

【Vue】组件化编程

定义 实现应用中局部功能代码和资源的集合 为什么要用组件化编程? 传统方式编写:依赖关系混乱,不好维护,且代码复用率不高 模块化编写:只关注解决js,复用js,简化js的编写与效率 组件方式编写:好维护、复用率更高、提高运行效率 在组件出现之前,我们开发基本都是用htm…

七、OSPF特殊区域及其特性

目录 OSPF区域分类 hello报文中option字段 1.末节区域&#xff08;Stub区域&#xff09; 2.完全末节区域&#xff08;Toally Stub区域&#xff09; 3.七类LSA 4.非完全末节区域&#xff08;NSSA区域&#xff09; 5.完全非完全末节区域&#xff08;Toally NSSA区域&#…

Android 11 bindService 流程分析

我们可以使用bindService来跨进程通信&#xff0c;其使用方法如下 Intent intent new Intent("xxx"); intent.setPackage("xxx"); boolean result bindService(intent,new ServiceConn(),BIND_AUTO_CREATE);private class ServiceConn implements Servi…

Django初步了解

目录 一、什么是Django 二、Django的设计模式 三、涉及的英文缩写及其含义 四、安装&#xff08;官方教程&#xff09; 一、什么是Django Django是一个Python Web框架&#xff0c;可以快速开发网站&#xff0c;提供一站式的解决方案&#xff0c;包括缓存、数据库ORM、后台…

windows如何安装MySQL(详)

MySQL在Windows上的安装和配置 官网&#xff1a;www.mysql.com 下载地址&#xff1a;MySQL :: Download MySQL Community Server (Archived Versions) window系统 安装包&#xff08;Windows (x86, 64-bit), MSI Installer&#xff09; 压缩包&#xff08;Windows (x86, 64…