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

目录

什么是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.mzph.cn/bicheng/785.shtml

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

相关文章

【算法刷题day28】Leetcode:93.复原IP地址 78.子集 90.子集II

93.复原IP地址 文档链接&#xff1a;[代码随想录] 题目链接&#xff1a;93.复原IP地址 题目&#xff1a; 给定一个只包含数字的字符串&#xff0c;复原它并返回所有可能的 IP 地址格式。 有效的 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;…

【React】Ant Design自定义主题风格及主题切换

Ant Design 的自定义主题&#xff0c;对于刚入手的时候感觉真是一脸蒙圈&#xff0c;那今天给它梳理倒腾下&#xff1b; 1、自定义主题要点 整体样式变化&#xff0c;主要两个部分&#xff1a; 1.1、Design Token https://ant.design/docs/react/customize-theme-cn#theme 官…

2024信友队智灵班春季 Test1 总结

4月模考 死亡回放 模考时间线 1:30 比赛开始&#xff0c;读 T1 宇宙爆炸 的题1:50 自己手模了几组样例&#xff0c;得出了一个错误结论&#xff0c;打出了第一版错误代码&#xff0c;然后上交&#xff08; Wrong Answer 20 \color{red}\text{Wrong\ Answer\ 20} Wrong Answer …

【Vue 异步更新和 $nextTick】

文章目录 异步更新机制$nextTick 方法 异步更新机制以及 $nextTick 方法都与 Vue 的响应式系统密切相关&#xff0c;对于开发高效、流畅的应用至关重要。 异步更新机制 Vue 的数据更新是异步执行的。修改 Vue 实例的数据时&#xff0c;Vue 并不会立即更新 DOM。它将数据变更放…

每日一题(PTAL2-008):最长对称子串--分类讨论+遍历

最长对称子串的长度有可能是奇数也有可能是偶数&#xff0c;因此在遍历时要同时考虑这两种情况。 #include<bits/stdc.h> using namespace std;int main() {string s;getline(cin,s);int n s.size();int res 0; // 初始化为0&#xff0c;因为空字符串也是对称的for (i…

VMware最新下载安装

1、打开浏览器 搜索VMware官网&#xff0c;点进去。如图&#xff1a; 这里有两种下载方法&#xff0c;便洁就是我这种&#xff0c;还有一种就是注册账号之后下载就完全没有必要了&#xff0c;而且基本注册不了&#xff0c;不太好注册。 2、选择"产品"第二个选项 …

Oracle数据库从入门到精通系列之二十:Linux上使用容器数据库(CDB)方式部署Oracle数据库19c详细步骤

@TOC 一、Oracle 数据库部署类型 Oracle数据库支持以下部署类型: 容器数据库(CDB) 可以包含多个可插入数据库 (PDB) 的数据库。数据库客户端连接到每个 PDB,就好像它是标准的非 CDB 数据库一样。非容器数据库(非CDB) 标准Oracle数据库,不支持创建可插拔数据库。二、安…

OPTEE RUST支持构建并运行支持RUST的CA和TA

目录 一、RUST环境及代码准备 二、RUST构建演示 三、RUST运行演示 RUST语言,由于其更安全的编程语言特性,OPTEE作为可信执行环境的开源实现也增加了对RUST的支持。那么如何构建并运行支持RUST的CA和TA呢,本博客来探讨并进行qemu环境的实际演示。 一、RUST环境及代码准备…

从容器到协调:掌握Docker和Docker Compose的艺术

Docker 是一个开源的应用容器引擎&#xff0c;允许开发者打包他们的应用以及应用的依赖包到一个可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可以实现虚拟化。容器是完全使用沙箱机制&#xff0c;相互之间不会有任何接口&#xff08;类似 iPhon…

简单易学版 易操作版 man永久汉化 和help永久汉化 linux中

help 汉化 1 查看当前语言 echo $LANG locale 2 查看是否存在中文语言包 locale -a | grep zh_CN 3 没有就安装 yum install kde-l10n-Chinese 4 永久修改 vim /etc/locale.conf LANG"zh_CN.UTF-8" 重启后生效 或者 localectl set-l…

leetcode热题100.杨辉三角(动态规划入门)

Problem: 118. 杨辉三角 文章目录 题目思路复杂度Code 题目 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,…

98.验证二叉搜索树

给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&#xff1a; 节点的左 子树 只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。 方法一&#xff1a;中序…

Go语言并发控制

channel // cancelFn 数据通道关闭通知退出 func cancelFn(dataChan chan int) {for {select {case val, ok : <-dataChan:// 关闭data通道时&#xff0c;通知退出// 一个可选是判断data指定值时退出if !ok {fmt.Printf("Channel closed &#xff01;&#xff01;&…

OPEN CV 实现车辆统计

#加载视频 import cv2 import numpy as np cap cv2.VideoCapture(car.mp4) #去除背景 mog cv2.bgsegm.createBackgroundSubtractorMOG() kernel cv2.getStructuringElement(cv2.MORPH_RECT,(7,7)) min_w90 min_h90 line_hig400 #偏移量 offset2 cars[] carno0 #计算外矩形的中…

5. Django 探究CBV视图

5. 探究CBV视图 Web开发是一项无聊而且单调的工作, 特别是在视图功能编写方面更为显著. 为了减少这种痛苦, Django植入了视图类这一功能, 该功能封装了视图开发常用的代码, 无须编写大量代码即可快速完成数据视图的开发, 这种以类的形式实现响应与请求处理称为CBV(Class Base…

使用阿里云试用Elasticsearch学习:sentence-transformers 包使用

环境&#xff1a;centos8&#xff0c;windows坑太多。 一、检查linux环境openssl哪个版本&#xff08;如果是OpenSSL 1.1.1k 直接跳过&#xff09; [roothecs-334217 python39]# openssl version OpenSSL 1.0.2k-fips 26 Jan 2017原因后续会出麻烦&#xff0c;遇到这种情况最…

16.C++常用的算法_算数生成算法

文章目录 遍历算法1. accumulate()代码工程运行结果 2. fill()代码工程运行结果 遍历算法 1. accumulate() 代码工程 第三个参数为累加的起始值&#xff0c;如果没有特殊需求写0即可; 需要注意包含头文件#include<numeric>#define _CRT_SECURE_NO_WARNINGS #include&l…

为什么说创建一个index.html 文件 来作为javascript 一个 host

JavaScript代码运行环境的系统或平台&#xff0c;JavaScript代码需要一个“宿主环境”&#xff08;host environment&#xff09;来执行&#xff0c;这个环境提供了必需的资源、API和执行机制。 index.html 作为javaScript宿主环境的原因 说到使用一个 index.html 文件作为Ja…

【C语言】Dijkstra算法详解

一、引言二、Dijkstra算法原理三、Dijkstra算法的C语言实现四、Dijkstra算法的应用场景五、总结 一、引言 Dijkstra算法是一种著名的图论算法&#xff0c;用于解决单源最短路径问题。它是由荷兰计算机科学家Edsger W. Dijkstra在1956年提出的。本文将详细介绍Dijkstra算法的原理…

锂电池充放电管理-单片机通用模版

锂电池充放电管理-单片机通用模版 一、锂电池充放电检测的原理二、power.c的实现三、power.h的实现四、锂电池检测和充电电路一、锂电池充放电检测的原理 ①两节锂电池通过电阻分压检测ADC,再根据电压划分电量等级;②充电使用的是锂电池充电IC方案,可通过硬件电阻参数调节充…