zy.21

PHP(续)

PHP代码执行漏洞

1.PHP中代码漏洞的概念

代码执行漏洞就是在代码中若存在eval、assert等能将所接收的参数作为代码去执行,并且拼接的内容可被访问者控制,也就是把传入的参数给拼接进去了,造成了额外的代码执行,也就造成了代码执行漏洞。(大概原理:原本正常访问/?method=method1,eval接收到参数,拼接出来的代码是(newTestController())->method1();",正常调用method1。但如果传入的参数是method1();phpinfo,那么拼接出来的代码就是“(new TestController())->method1(); phpinfo();"运行的结果就很有意思了,除了method1被调用了以外ohpinfo也被调用执行了。)

2.PHP代码执行漏洞函数

(1)eval,(assert)

直接把输入的字符串作为PHP代码去执行。eval结尾需要用;号结束,assert不用,现在不用assert了,现在主要用于断言条件是否为真

(2)call_user_func

call_user_func ($_GET ['req'] ) ; // /?req[]=TestController&req[]=method1

这样输入,得到参数为['TestController','method1'],而如果只是单纯地访问/?req=phpinfo,调用的就是phpinfo。

(3)array_walk. array_map. array_filter 

具体用法参考我的另一篇文章array_walk. array_map. array_filter -CSDN博客

array_walk对每个元素执行回调函数,直接改变原数组

array_map可以一次性处理多个数组返回一个新的数组,原数组不变

array_filter过滤数组元素

等效于

PHP反序列化漏洞

1.PHP的类与对象

类像是一个模板,对象是通过这个模板做出来的,属性和方法是模板规定的创建出来的对象所有的性质(这是我大概的理解应该没错吧,具体概念很晦涩就不写了)

2.PHP的序列化与反序列化

存储和与其他程序交换这些类所实例化出来的对象用的两个函数serialize(序列化)和unserialize(反序列化)

把一个对象转换成一段文本(可传输),而转换的这个过程就叫序列化还可以进行包裹,例子

反序列化并将对象放到变脸p中得到age

3.PHP中的反序列化漏洞

在构造一个对象时,如果想要给对象动态设置一些初始

属性,就需要在类的定义中添加一个叫构造方法的方法,在PHP中这个方法叫_construct。同样,在程序结束运行,对象被销毁时也可以定义一个在此时会被调用的方法,叫析构方法。在PHP中这个方法叫_destruct。destruct这个方法在程序运行结束,对象被销毁时被调用,对象被销毁的标志(1)unset()(2)在函数内部有new关键词创建对象

我还学习了其他魔术方法,具体知识内容写到了我的另一篇文章中PHP中的魔术方法-CSDN博客

对魔术方法进一步利用:反序列化出来一个对象,对象中的属性我们可控,那么就只要程序运行结束,对象被销毁,那么我们就可以操控这些函数的调用,让它执行我们想要执行的代码或者命令了

在目标上反序列化出这样一个对象有两种方式:

(1)直接控制unserialize函数的参数值,很少见,但只要能控制,就可以随心所欲反序列化出我们想要的对象

(2)通过文件操作函数来进行反序列化的操作,如file_get_contents、file_exist等函数。倘若它们的参数可控,不仅可以读取到任意文件的内容,同时也可以进一步扩展,达到RCE等目的  例如

unserialize($_GET['a']);                                             echo file_get_contents($_GET['a']);  

关于PHAR压缩文件(由PHP文件构成的压缩文件):可控的对象+可以利用的魔术方法就构成了我们对于反序列化漏洞的利用 ,简单来说,就是可以在这个压缩文件中存储一个对象,当这个压缩文件被PHP读取时,就会反序列化这个对象,那么如果这个对象有析构函数或者是其他的魔术方法定义,则在特定的时机(如程序运行结束时)就会被调用,进行一些删除文件等恶意操作

相关例题强网杯 2019 Upload(代码审计、反序列化、thinkphp5,附代码审计详解)_[强网杯 2019]upload-CSDN博客

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

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

相关文章

LSTM 学习笔记 之pytorch调包每个参数的解释

0、 LSTM 原理 整理优秀的文章 LSTM入门例子:根据前9年的数据预测后3年的客流(PyTorch实现) [干货]深入浅出LSTM及其Python代码实现 整理视频 李毅宏手撕LSTM [双语字幕]吴恩达深度学习deeplearning.ai 1 Pytorch 代码 这里直接调用了nn.l…

React - 事件绑定this

在 React 中,this 的绑定是一个常见问题,尤其在类组件中使用事件处理函数时。JavaScript 中的 bind 函数用于设置函数调用时 this 的值。 bind 函数的作用 bind() 方法创建一个新的函数,当被调用时,其 this 关键字被设置为提供的…

Web3 的虚实融合之路:从虚拟交互到元宇宙构建

在这个数字技术日新月异的时代,我们正站在 Web3 的门槛上,见证着互联网的又一次革命。Web3 不仅仅是技术的迭代,它代表了一种全新的交互方式和价值创造模式。本文将探讨 Web3 如何推动虚拟交互的发展,并最终实现元宇宙的构建&…

Kafka简单使用

说明:kafka是一款消息中间件,可实现微服务之间的异步调用。本文介绍kafka的简单使用。windows操作系统下的kafka安装,参考下面这篇文章 Kafka安装 启动 按照上面博客的介绍,使用CMD命令启动,如下: Demo …

【原创精品】基于Springboot3+Vue3的学习计划管理系统

大家好,我是武哥,最近给大家手撸了一个基于SpringBoot3Vue3的学习计划管理系统,可用于毕业设计、课程设计、练手学习,系统全部原创,如有遇到网上抄袭站长的,欢迎联系博主~ 项目演示视频 https://www.bili…

为什么我用Python控制仪器比C#慢很多?如何优化性能?

在自动化测试、实验室仪器控制等领域,Python、C# 和 C 是常见的编程语言选择。最近,我在使用 Python 控制仪器时,发现其交互速度明显比 C# 慢很多。这让我感到困惑,毕竟 Python 以其简洁和高效著称,为什么会出现这种情…

在Vue项目中Vuex和松花的作用和区别

在 Vue 项目中,Vuex 和 Pinia 都是用于状态管理的工具,但它们在设计理念、使用方式和性能等方面存在显著区别。以下是它们的作用和区别: 作用 Vuex: Vuex 是 Vue.js 的官方状态管理库,主要用于管理组件之间的共享状态…

微服务日志查询难解决方案-EFK

前言 在微服务项目中,日志查询难是一个常见问题,主要原因包括:日志分散:微服务实例分布在多个节点或容器中,日志存储位置分散。格式不统一:不同服务可能使用不同的日志格式,难以统一查询。调用…

为AI聊天工具添加一个知识系统 之90 详细设计之31 Derivation 之5-- 神经元变元用它衍生神经网络

本文要点 要点 Derivation 神经元变元衍生模型( 衍生 神经网络) 整体上说,它( Derivation)自己充当 整体无意识原型anestor的代言--作为所有神经网络的 共生环境。Derivation 初始断言了 基于最古老的 自然和逻辑树…

C++引用深度详解

C引用深度详解 前言1. 引用的本质与核心特性1.1 引用概念1.2 核心特性 2. 常引用与权限控制2.1 权限传递规则2.2 常量引用2.3 临时变量保护1. 样例2. 样例3. 测试 三、引用使用场景分析3.1 函数参数传递输出型参数避免多级指针高效传参 3.2 做函数返回值正确使用危险案例 4. 性…

若依框架二次开发——若依介绍、环境部署及更换项目包路径

文章目录 一、若依介绍1、项目简介2、主要特性3、技术选型4、内置功能5、文件结构6、配置文件7、核心技术介绍二、环境部署1、准备工作2、运行系统3、必要配置4、部署系统三、更换项目包路径1、更换目录名称2、更换顶级目录中的pom.xml3、更换项目所有包名称4、修改application…

本地部署Deepseek R1

使用Ollama open-webui部署Deepseek R1 一、安装Ollama 官网地址:https://ollama.com/,点击下载按钮选择windows版本。并安装 打开命令提示符输入ollama,出现一下提示命令表示ollama安装完成 二、使用Ollama下载deepseek R1不同模型 打开o…

速度超越DeepSeek!Le Chat 1100tok/s闪电回答,ChatGPT 4o和DeepSeek R1被秒杀?

2023年,当全球科技界还在ChatGPT引发的AI狂潮中沉浮时,一场来自欧洲的"静默革命"正悄然改变游戏规则。法国人工智能公司Mistral AI推出的聊天机器人Le Chat以"比ChatGPT快10倍"的惊人宣言震动业界,其背后承载的不仅是技术…

MATLAB 生成脉冲序列 pulstran函数使用详解

MATLAB 生成脉冲序列 pulstran函数使用详解 目录 前言 一、参数说明 二、示例一 三、示例二 总结 前言 MATLAB中的pulstran函数用于生成脉冲序列,支持连续或离散脉冲。该函数通过将原型脉冲延迟并相加,生成脉冲序列,适用于信号处理和系统…

ASP.NET Core的贫血模型与充血模型

目录 概念 需求 贫血模型 充血模型 总结 概念 贫血模型:一个类中只有属性或者成员变量,没有方法。充血模型:一个类中既有属性、成员变量,也有方法。 需求 定义一个类保存用户的用户名、密码、积分;用户必须具有…

机器学习(李宏毅)——self-Attention

一、前言 本文章作为学习2023年《李宏毅机器学习课程》的笔记,感谢台湾大学李宏毅教授的课程,respect!!! 二、大纲 何为self-Attention?原理剖析self-Attention VS CNN、RNN、GNN 三、何为self-Attenti…

RagFlow + Docker Desktop + Ollama + DeepSeek-R1本地部署自己的本地AI大模型工具

前期准备 首先,我们需要下载 Ollama 以及配置相关环境。 Ollama 的 GitHub仓库 (https://github.com/ollama/ollama)中提供了详细的说明,简单总结如下: Step1:下载 Ollama 下载(https://ollama.com/dow…

【数据结构】双向链表(真正的零基础)

链表是一种物理存储单元上非连续、非顺序的存储结构。数据元素的逻辑顺序是通过指针的链接来实现的!在上篇我们学习了单向链表,而单向链表虽然空间利用率高,插入和删除也只需改变指针就可以达到!但是我们在每次查找、删除、访问..…

网络编程-day5-sqlite3数据库

思维导图 服务器 #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <pthread.h> #include <semaphore.h>…

Spring AI 介绍

文章来源&#xff1a;AI 概念 (AI Concepts) _ Spring AI1.0.0-SNAPSHOT中文文档(官方文档中文翻译)|Spring 教程 —— CADN开发者文档中心 本节介绍 Spring AI 使用的核心概念。我们建议仔细阅读它&#xff0c;以了解 Spring AI 是如何实现的。 模型 AI 模型是旨在处理和生成…