RCE漏洞及其绕过——[SWPUCTF 2021 新生赛]easyrce、caidao、babyrce

news2025/1/12 20:56:07

目录

什么是Shell

1、Shell简介

2、印刷约定

一、什么是RCE

漏洞产生条件:

漏洞检测:

1.远程命令执行

system()函数:

passthru()函数:

exec()函数:

无回显

shell_exec()函数:

 2.远程代码执行

 eval()函数:

可将代码执行漏洞间接替换成命令执行漏洞

${}执行代码:

​编辑

 isset()函数:

二、RCE命令注入

RCE命令注入分类

1.过滤cat

2.过滤空格:

3.拼接符

4.过滤cat、ls、flag等一些关键字

\ 单双引号 反撇绕过过滤

变量绕过

命令拆分绕过

通配符正则绕过

三、例题

[SWPUCTF 2021 新生赛]easyrce

[SWPUCTF 2021 新生赛]caidao

 [SWPUCTF 2021 新生赛]babyrce


 

学习参考:

RCE代码及命令执行(详解)_rce命令执行-CSDN博客

RCE漏洞简介-CSDN博客

浅谈基础RCE-CSDN博客

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

什么是Shell

(参考)https://blog.51cto.com/aku28907/1783805

1、Shell简介

Shell是一个程序,它在用户和操作系统之间提供了一个面向行的可交互接口。

用户在命令行中输入命令,运行在后台的shell把命令转换成指令码发给操作系统。

2、印刷约定

    $:表示用户输入

    #:表示正在以root身份执行命令

一、什么是RCE

RCE(Remote Code/Command Execution)远程代码执行漏洞远程命令执行漏洞

漏洞产生条件:

1.调用第三方组件存在的代码执行漏洞。

2.用户输入的内容作为系统命令的参数拼接到命令中。

3.对用户的输入过滤不严格。

4.可控变量或漏洞函数。

漏洞检测:

白盒:可以对代码进行审计。
黑盒:可以使用一些漏洞扫描工具。

公开的漏洞、手工看功能点及参数值,其中参数值主要需要看是否和相关的漏洞函数有关,若有就可以进行测试,但可能存在加密的情况,那么还需要进行解密。

1.远程命令执行

执行系统命令

PHP代码(以分号;结尾)为例,常见的命令执行函数有:
system()、passthru()、exec()、shell_exec()、pcntl_exec()、popen()、proc_popen()等。

system()函数:

//system()的原型函数为:int system(const char * command)

参数字符串command为命令名
//system()用于调用一些dos(windows系统)命令、 shell(Linux/Unix系统) 命令,并执行 返回结果。

在windows系统下 参数字符串不区分大小写

 e.g(这里直接用phpstudy搭建了一个环境)

<?php                //使用system()函数执行Windows系统下的dir命令
system("dir");       //dir   列文件名
?>

passthru()函数:

与system()用法基本一致,在system函数被过滤后考虑使用

<?php                           //使用passthru()函数执行Windows系统下的ping命令
passthru("ping www.baidu.com");   //ping  测试网络连接
?>

exec()函数:

//执行一个新的程序

不输出结果,但返回执行结果的最后一行

<?php 
    echo exec("dir");
?>

无回显

搭配echo或其他的输出函数 如print_r()函数使得其回显

<?php 
    echo exec("dir",$file);
    echo "</br>"; 
    print_r($file);
 ?>

shell_exec()函数:

让页面无回显(与``作用相同),搭配echo或其他的输出函数使得其回显

<?php 
    shell_exec("dir");
?>

<?php echo shell_exec("dir");?>

<?php print shell_exec("dir");?>

 2.远程代码执行

执行(脚本代码)服务器网站的代码

常见的代码执行函数有:
eval()、assert()、preg_replace()、create_function()、array_map()、call_user_func()、call_user_func_array()、array_filter()、uasort()等。

 eval()函数:

//eval()函数把字符串按照PHP代码来计算。

该字符串必须是合法的PHP代码,并且必须以分号结尾。

<?php                   //使用eval()函数执行PHP代码中的phpinfo()函数
eval("phpinfo();");     //phpinfo()函数:显示出PHP所有相关信息
?>

<?php                  //使用eval()函数执行PHP代码中的echo命令
eval("echo 123;");     //echo    输出
?>

可将代码执行漏洞间接替换成命令执行漏洞
<?php                        //在eval()函数中增添了system()函数,将代码执行转化为了命令执行
eval("system('dir');");
?>

${}执行代码:

会将中间的php代码进行解析(与eval()函数作用相似)

<?php
${phpinfo()};
?>

 isset()函数:

检测变量是否已设置并且非空

二、RCE命令注入

先了解一下Linux文件查看常用命令:

  • cat:由第一行开始查看文件
  • tac:cat倒着写,由最后一行到第一行查看
  • more:逐项查看文件,按空格继续,最后自己退出
  • less:逐行查看文件,按方向键,不可主动退出,按q退出
  • head:只查看文件前十行
  • tail:只查看文件后十行

RCE命令注入分类

无过滤、过滤cat、过滤空格、过滤目录分隔符、过滤运算符、综合过滤

1.过滤cat
tac    //与cat相反,按行反向输出
more   //按页显示,用于文件内容较多且不能滚动屏幕时查看文件
less   //与more类似
tail   //查看文件末几行
head   //查看文件首几行
nl     //在cat查看文件的基础上显示行号
od     //以二进制方式读文件,od -A d -c /flag转人可读字符
xxd    //以二进制方式读文件,同时有可读字符显示
sort   //排序文件
uniq   //报告或删除文件的重复行
file -f    //报错文件内容
grep    //过滤查找字符串,grep flag /flag  //查找文件里符合条件的字符串
2.过滤空格:

< 、<>、%20(space)、%09(tab)、$IFS$9、 ${IFS}、$IFS等

3.拼接符
  |     #只执行|后面的语句
  ||    #如果前面命令是错的那么就执行后面的语句,否则只执行前面的语句
  &     #&前面和后面命令都要执行,无论前面真假
  &&    #如果前面为假,后面的命令也不执行,如果前面为真则执行两条命令
  ;     #前后都执行,无论前面真假,类似&
4.过滤cat、ls、flag等一些关键字
\ 单双引号 反撇绕过过滤
ca\t flag
ca''t flag
ca""t flag 
ca``t flag
变量绕过
a=c;b=a;c=t;$a$b$c flag
命令拆分绕过
a=fl;b=ag.php;echo $a$b;
通配符正则绕过

如果正则匹配过滤了一些关键字,如:flag、php、txt等等可以使用问号(?)代替某个字符

适当的可以用星号(*)

注意:这里的?和*都只能用于文件名,如果是命令(类似ls cat等)就不适用

cat flag.php === cat ??ag.php ===cat ?la*

无回显时可以把flag写进一个文件,然后访问这个文件

?cmd=ls /|tee 1.txt

?cmd=c''at \f*** |tee 1.txt       //tee  保存到1.txt文件里

三、例题

[SWPUCTF 2021 新生赛]easyrce

system()调用Linux ls /命令,发现一个flllllaaaaaaggggggg文件

ls /      //查看根目录

 cat查看flllllaaaaaaggggggg内容,得到flag

[SWPUCTF 2021 新生赛]caidao

打开环境,发现        传了一句话木马 密码wllm

解法一:post传参,查看根目录 发现flag文件

cat查看,得到flag

解法二:用蚁剑连接

 在根目录里发现flag

 [SWPUCTF 2021 新生赛]babyrce

cookie传参,得到一个新的php网址

直接访问又得到新的rce

preg_match("/ /") 正则绕过空格,使用${IFS}过滤空格

$a = shell_exec($ip);无回显a

查看根目录,发现flllllaaaaaaggggggg文件

 查看文件内容,得到flag

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

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

相关文章

我们一起看看《看漫画学C++》中如何讲解对象的动态创建与销毁

《看漫画学C》这本书中会用图文的方式生动地解释对象的动态创建与销毁。在C中&#xff0c;动态创建对象是通过new运算符来实现的&#xff0c;而销毁对象则是通过delete运算符来完成的。这种方式可以让程序在需要时分配内存给对象&#xff0c;并在对象不再需要时释放内存&#x…

「Word 论文排版」插入分节符导致word转PDF后出现空白页

问题 word转PDF后出现空白页 解决 但是此方法会让页面页脚标记出错 TODO 如下图所示 在论文目录后有一个分节符&#xff0c;转成PDF之后就多了一个空白页 文件-打印-页面设置-选中封面那一页-版式-从偶数页开始 再导出空白页就没了

Nginx莫名奇妙返回了404

描述 nginx作为反向代理&#xff0c;代理python的服务&#xff0c;但是通过代理访问服务的时候&#xff0c;报了404的错误。 难受的是客户现场没有查看日志的权限&#xff0c;只有查看配置文件的权限&#xff0c;我们检测了几遍配置文件也没有找到问题&#xff0c;哎~ 问题引…

34. 【Android教程】菜单:Menu

作为 Android 用户&#xff0c;你一定见过类似这样的页面&#xff1a; 它就是我们今天的主角——菜单&#xff0c;它的使用场景和作用不用多说&#xff0c;几乎每个 App 都会用到它&#xff0c;今天我们就一起来看看 Android 提供的几种菜单类型及用法。 1. 菜单的几种类型 根…

[Algorithm][滑动窗口][无重复字符的最长字串][最大连续的一个数 Ⅲ][将x减到0的最小操作数]详细讲解

目录 1.无重复字符的最长字串1.题目链接2.算法原理详解3.代码实现 2.最大连续的一个数 Ⅲ1.题目链接2.算法原理详解3.代码实现 3.将x减到0的最小操作数1.题目链接2.算法原理详解3.代码实现 1.无重复字符的最长字串 1.题目链接 无重复字符的最长字串 2.算法原理详解 研究的对…

美化博客文章(持续更新)

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;游戏实现&#xff1a;贪吃蛇​​​​​​ &#x1f337;追光的人&#xff0c;终会万丈光芒 前言&#xff1a; 该文提供我的一些文章设计的一些方法 目录 1.应用超链接 1.应用超链接

URL GET +号后台接收成空格

问题&#xff1a;参数spdmwhbs001 其中包含URL特殊符号 如果用GET请求方式不做任何不处理那么浏览器自动将转为%20 请求链接为 details?spdmwhbs%20001&limitKcysType1 后台接收到的参数为 whbs 001 &#xff0c;自动将号转成空格了。 尝试解决&#xff08;失败&#…

使用FastDDS编译IDL文件

1.安装FastDDS环境 Ubuntu22.04 1.1安装依赖的软件 sudo apt-get update //基础工具安装 sudo apt install cmake g python3-pip wget git //Asio 是一个用于网络和低级 I/O 编程的跨平台C库&#xff0c;它提供了一致的 异步模型。 TinyXML2是一个简单&#xff0c;小巧&…

400电话如何对接配置SIP

400电话对接配置SIP的基本步骤 要配置400电话对接SIP&#xff0c;通常需要遵循以下基本步骤&#xff1a; 注册和认证&#xff1a;首先需要在相应的云通信平台上注册账号&#xff0c;并进行企业实名认证。 开通语音服务&#xff1a;在通过认证后&#xff0c;需要开通语音服务&…

C# winform s7.net expected 22 bytes.”

S7.Net.PlcException:“Received 12 bytes: 32-02-00-00-00-00-00-00-00-00-81-04, expected 22 bytes.” 原因是博图的连接机制未勾选

Java编程题 | 数组元素交换

大家可以关注一下专栏&#xff0c;方便大家需要的时候直接查找&#xff0c;专栏将持续更新~ 题目描述 编写一个Java程序&#xff0c;输入一个整数数组&#xff0c;将最大的元素与第一个元素交换&#xff0c;最小的元素与最后一个元素交换&#xff0c;然后输出修改后的数组…

数据结构从入门到实战——顺序表的应用

目录 一、基于动态顺序表实现通讯录 二、代码实现 2.1 通讯录的初始化 2.2 通讯录的销毁 2.3 通讯录的展示 2.4 通讯录添加联系人信息 2.5 通讯录删除联系人信息 2.6 通讯录修改联系人信息 2.7 通讯录的查找联系人信息 2.8 将通讯录中联系人信息保存到文件中 2.9…

【Qt】设置QT标准对话框为中文字体

设置QT标准对话框为中文字体 一、问题二、解决方法1、找到Qt内置的翻译文件 qt_zh_CN.qm2、在代码中加载该文件 一、问题 在Qt中我们使用的标准对话框都是英文&#xff0c;例如下面的 字体选择对话框&#xff0c;但是实际中我们需要构建的是中文对话框。 所以我们需要使用Qt官…

【redis】hash和list常用命令

hash类型 Redis自身已经是键值对结构了。Redis自身的键值对就是通过哈希的方式来组织的。 把key这一层组织完成之后,到了value这一层。value的其中一种类型还可以再是哈希。哈希类型中的映射关系通常称为field-value,用于区分Redis整体的键值对(key-value)。注意这里的 value…

为什么创业总是小部分人能成功?

每年都有大批量应届生等待就业&#xff0c;同时&#xff0c;也有一大批大龄中青人正在面临失业。在这种焦虑&#xff0c;内卷的氛围下&#xff0c;就会激发一波又一波的人走上创业的道路。想靠创业改变命运。辞职之后&#xff0c;第一时间能想到的创业方式要么就是就是 开个奶茶…

阿里云ECS服务器安装docker

首先查看阿里云ECS的服务器的版本 cat /etc/redhat-release如果是Alibaba Cloud Linux release 3,请执行以下命令 添加docker-ce的dnf源。 sudo dnf config-manager --add-repohttps://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo安装Alibaba Cloud Linux 3专…

【若依前后端分离】仪表盘绘制

示例&#xff1a; 代码&#xff1a; InstrumentPanel.vue组件 <template><div><!-- 在这里放置你的图表组件 --><div ref"echarts" style"width: 100%; height: 400px;"></div></div> </template><script&g…

如何将你的iOS应用成功上架App Store(图文详解)

上架基本需求资料 1、苹果开发者账号&#xff08;如还没账号先申请- 苹果开发者账号申请教程&#xff09; 2、开发好的APP 通过本篇教程&#xff0c;可以学习到ios证书申请和打包ipa上传到appstoreconnect.apple.com进行TestFlight测试然后提交审核的完整流程&#xff01; …

基于javaspringboot实现的垃圾分类网站

开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven…

Android RecyclerView的LayoutManager配置

RecyclerView的item布局方式依赖于其配置的布局管理器。不同的布局管理器可以实现不同的界面效果。 LayoutManager介绍 RecyclerView可以通过setLayoutManager设置布局管理器&#xff0c;该方法的源码如下&#xff1a; /*** Set the {link LayoutManager} that this RecyclerV…