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

[安洵杯 2019]easy_serialize_php1

打开题目

题目源码:

<?php$function = @$_GET['f'];function filter($img){$filter_arr = array('php','flag','php5','php4','fl1g');$filter = '/'.implode('|',$filter_arr).'/i';return preg_replace($filter,'',$img);
}if($_SESSION){unset($_SESSION);
}$_SESSION["user"] = 'guest';
$_SESSION['function'] = $function;extract($_POST);if(!$function){echo '<a href="index.php?f=highlight_file">source_code</a>';
}if(!$_GET['img_path']){$_SESSION['img'] = base64_encode('guest_img.png');
}else{$_SESSION['img'] = sha1(base64_encode($_GET['img_path']));
}$serialize_info = filter(serialize($_SESSION));if($function == 'highlight_file'){highlight_file('index.php');
}else if($function == 'phpinfo'){eval('phpinfo();'); //maybe you can find something in here!
}else if($function == 'show_image'){$userinfo = unserialize($serialize_info);echo file_get_contents(base64_decode($userinfo['img']));
}

我们简单代码审计一下

$function = @$_GET['f'];  //从 GET 请求中获取名为 'f' 的参数,并赋值给 $function 变量。使用 @ 符号来抑制可能的未定义变量警告,

function filter($img){   //定义了一个名为 filter 的函数,接受一个参数 $img
    $filter_arr = array('php','flag','php5','php4','fl1g');  //$filter_arr 数组包含了需要过滤掉的关键词列表,如 'php', 'flag', 'php5', 'php4', 'fl1g'。
    $filter = '/'.implode('|',$filter_arr).'/i';
    return preg_replace($filter,'',$img);

知识点:

implode函数

implode() 函数,把数组元素组合为字符串。

语法

implode(separator,array)
参数描述
separator可选。规定数组元素之间放置的内容。默认是 ""(空字符串)。
array必需。要组合为字符串的数组。

例子:

<?php
$arr = array('Hello','World!','I','love','Shanghai!');
echo implode(" ",$arr);
?>

运行结果为:

Hello World! I love Shanghai!

extract函数

定义和用法

extract() 函数从数组中将变量导入到当前的符号表。

该函数使用数组键名作为变量名,使用数组键值作为变量值。针对数组中的每个元素,将在当前符号表中创建对应的一个变量。

第二个参数 type 用于指定当某个变量已经存在,而数组中又有同名元素时,extract() 函数如何对待这样的冲突。

该函数返回成功导入到符号表中的变量数目。

语法

extract(array,extract_rules,prefix)
参数描述
array必需。规定要使用的数组。
extract_rules

可选。extract() 函数将检查每个键名是否为合法的变量名,同时也检查和符号表中已存在的变量名是否冲突。对不合法和冲突的键名的处理将根据此参数决定。

可能的值:

  • EXTR_OVERWRITE - 默认。如果有冲突,则覆盖已有的变量。
  • EXTR_SKIP - 如果有冲突,不覆盖已有的变量。
  • EXTR_PREFIX_SAME - 如果有冲突,在变量名前加上前缀 prefix
  • EXTR_PREFIX_ALL - 给所有变量名加上前缀 prefix
  • EXTR_PREFIX_INVALID - 仅在不合法或数字变量名前加上前缀 prefix
  • EXTR_IF_EXISTS - 仅在当前符号表中已有同名变量时,覆盖它们的值。其它的都不处理。
  • EXTR_PREFIX_IF_EXISTS - 仅在当前符号表中已有同名变量时,建立附加了前缀的变量名,其它的都不处理。
  • EXTR_REFS - 将变量作为引用提取。导入的变量仍然引用了数组参数的值。
prefix

可选。请注意 prefix 仅在 extract_type 的值是 EXTR_PREFIX_SAME,EXTR_PREFIX_ALL,EXTR_PREFIX_INVALID 或 EXTR_PREFIX_IF_EXISTS 时需要。如果附加了前缀后的结果不是合法的变量名,将不会导入到符号表中。

前缀和数组键名之间会自动加上一个下划线

参考下面这个实例就能很清楚看明白如果变量有冲突,该怎么设置

实例

<?php
$a = "Original";
$my_array = array("a" => "Cat", "b" => "Dog", "c" => "Horse");extract($my_array, EXTR_PREFIX_SAME, "dup");echo "\$a = $a; \$b = $b; \$c = $c; \$dup_a = $dup_a";
?>

运行结果为:$a = Original; $b = Dog; $c = Horse; $dup_a = Cat

知识点的参考文章:

PHP extract() 函数

PHP implode() 函数

相关文章:

[安洵杯 2019]easy_serialize_php1

打开题目 题目源码&#xff1a; <?php$function $_GET[f];function filter($img){$filter_arr array(php,flag,php5,php4,fl1g);$filter /.implode(|,$filter_arr)./i;return preg_replace($filter,,$img); }if($_SESSION){unset($_SESSION); }$_SESSION["user&q…...

【前端素材】推荐优质在线通用果蔬商城电商网页eStore平台模板(附源码)

一、需求分析 1、系统定义 通用果蔬网站是指专门提供各类果蔬产品展示和销售的在线平台。它将不同种类的新鲜水果、蔬菜、干果、坚果等聚集在一起&#xff0c;为消费者提供方便、快捷的购物渠道。 2、功能需求 通用果蔬网站是指专门提供各类果蔬产品展示和销售的在线平台。…...

开源软件的商业模式探析:开放与盈利的平衡

写在开头 开源软件的概念和应用已经成为了现代科技领域中的一个重要组成部分。然而&#xff0c;虽然开源软件的价值和影响力得到了广泛认可&#xff0c;但如何在开放的环境中找到商业盈利的平衡却是一个颇具挑战性的问题。本文将深入探讨开源软件的商业模式&#xff0c;从基本…...

使用全局事件总线实现任意组件间的通讯

本文以vue2中爷孙组件通讯为例&#xff0c;需求是点击孙组件的按钮&#xff0c;实现关闭爷组件的弹窗。 全局事件总线是通过Vue实例的事件系统来实现组件之间的通讯&#xff0c;可以方便地在任何组件中进行事件的触发和监听。 以下是使用全局事件总线实现爷孙组件通讯的步骤&a…...

文件基础和文件fd

文章目录 预备知识C语言的文件接口系统调用文件fd 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的 人工智能学习网站&#xff0c; 通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。 点击跳转到网站。 预备知识 我们平时说文件就是说文件里…...

3dgs学习(二)—— 3d高斯与协方差矩阵及其几何意义

协方差矩阵与3d高斯 3d高斯与椭球与协方差矩阵 3d高斯&#xff0c;及3维空间内的正态分布。 通过一元正态分布的坐标系图像不难想象&#xff0c;3维空间中的正态分布点集中在一片椭球空间中&#xff0c;各方向长轴取决于各方向正态分布的方差。 而协方差矩阵通过计算多元之…...

ZStack Cube超融合入选IDC《中国超融合基础架构市场评估》报告

近日&#xff0c;IDC发布了《中国超融合基础架构市场评估&#xff0c;2023》。IDC针对中国超融合基础架构市场的发展现状展开了调研&#xff0c;明确了最终用户构建融合型云平台的痛点和难点&#xff0c;阐述了市场中各技术服务提供商的服务方案和优势&#xff0c;并对未来中国…...

每日一题——LeetCode1556.千位分隔符

方法一 个人方法&#xff1a; 把n转为字符串&#xff0c;逆序遍历n&#xff0c;把n的每个元素加入res&#xff0c;每三次加入.&#xff0c;最后将res翻转再转为字符串即为符合题目要求的结果 var thousandSeparator function(n) {nlet res[],lenn.length-1for(let ilen;i>…...

8.网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析-游戏底层功能对接类GameProc的实现

内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;通过逆向分析确定游戏明文接收数据过程 码云地址&#xff08;master 分支&#xff09;&#xff1a;https://gitee.com/dye_your_fingers/titan 码云版本号&#xff1a;bcf7559184863febdcad819e48aa…...

Redis冲冲冲——事务支持,AOF和RDB持久化

目录 引出Redis事务支持&#xff0c;AOF和RDB持久化1、Redis的事务支持2、Redis的持久化 Redis冲冲冲——缓存三兄弟&#xff1a;缓存击穿、穿透、雪崩缓存击穿缓存穿透缓存雪崩 总结 引出 Redis冲冲冲——事务支持&#xff0c;AOF和RDB持久化 Redis事务支持&#xff0c;AOF和…...

路由菜单路径匹配方法

优化路由菜单路径匹配算法&#xff1a;实现获取整条线路的路径 引言 在前端开发中&#xff0c;路由菜单的路径匹配是一个常见的需求。我们经常需要根据给定的路径&#xff0c;找到对应的菜单项&#xff0c;并获取整条线路的路径。本文将介绍一个优化的路由菜单路径匹配算法&…...

设计模式浅析(九) ·模板方法模式

设计模式浅析(九) 模板方法模式 日常叨逼叨 java设计模式浅析&#xff0c;如果觉得对你有帮助&#xff0c;记得一键三连&#xff0c;谢谢各位观众老爷&#x1f601;&#x1f601; 模板方法模式 概念 模板方法模式&#xff08;Template Method Pattern&#xff09;在Java中是…...

无用工作、UBI与AI

有些隐晦和黑暗的事实无法陈述&#xff0c;因为任何的系统中“无用”的结局都是被无情的抛弃和淘汰&#xff0c;AI监督下的人类结局更是如此。 什么是无用工作&#xff1f; 无用无效工作通常指的是那些看似忙碌但实际上对社会或个人没有实质性贡献的工作。这类工作可能包括以下…...

【监控】grafana图表使用快速上手

目录 1.前言 2.连接 3.图表 4.job和path 5.总结 1.前言 上一篇文章中&#xff0c;我们使用spring actuatorPrometheusgrafana实现了对一个spring boot应用的可视化监控。 【监控】Spring BootPrometheusGrafana实现可视化监控-CSDN博客 其中对grafana只是打开了一下&am…...

Django常用命令

一、新建一个新项目 django-admin startproject project_name二、新建一个app 在Django中的一个app代表一个功能模块。开发者可以将不同功能的模块放在不同的app中, 方便代码的复用。 python manage.py startapp appa_name三、数据迁移(更新数据库) 编写好了Model后&#x…...

【center-loss 中心损失函数】 原理及程序解释(更新中)

文章目录 前言问题引出open-set问题抛出 解决方法softmax函数、softmax-loss函数解决代码&#xff08;center_loss.py&#xff09;原理程序解释 如何梯度更新首先了解一下基本的梯度下降算法然后 前言 学习一下&#xff1a; 中心损失函数&#xff0c;用于用于深度人脸识别的特…...

什么是 HTTPS 证书?作用是什么?

HTTPS 证书&#xff0c;即超文本传输安全协议证书&#xff08;Hypertext Transfer Protocol Secure&#xff09;&#xff0c;是网站安全的关键组成部分。它通过 SSL/TLS 加密协议&#xff0c;确保用户与网站之间的数据传输是加密和安全的。 什么是 HTTPS 证书&#xff1f; HT…...

为什么软考报名人数越来越多?

2020年软考报名人数404666人&#xff0c;广东省报考人数超过14万人。 ●2021年软考通信考试报名人数突破100万人&#xff0c;估计软考有90多万。 ●2022年软考通信考试共129万人&#xff0c;估计软考占了120多万人。 ●2023年软考具体报名人数没有公布&#xff0c;但工业和信…...

【投稿优惠|快速见刊】2024年图像,机器学习和人工智能国际会议(ICIMLAI 2024)

【投稿优惠|快速见刊】2024年图像&#xff0c;机器学习和人工智能国际会议&#xff08;ICIMLAI 2024&#xff09; 重要信息 会议官网&#xff1a;http://www.icimlai.com会议地址&#xff1a;深圳召开日期&#xff1a;2024.03.30截稿日期&#xff1a;2024.03.20 &#xff08;先…...

html2canvas 将DOM节点转成图片

官网地址&#xff1a;html2canvas - Screenshots with JavaScript 将js文件保存到本地 可以新建一个txt文件&#xff0c;然后丢进去修改后缀名称即可。 在项目中引入js文件&#xff1a; import html2canvas from "../html2canvas.min.js" 这是我准备画的DOM节点。…...

3分钟快速上手Fiji:科研图像分析的完整免费工具箱

3分钟快速上手Fiji&#xff1a;科研图像分析的完整免费工具箱 【免费下载链接】fiji A "batteries-included" distribution of ImageJ :battery: 项目地址: https://gitcode.com/gh_mirrors/fi/fiji 如果你正在寻找一款功能强大、开箱即用的科学图像分析工具&…...

别再死记硬背了!用Python和C语言两种方式,彻底搞懂CRC32查表法里的反转(附完整代码)

深入解析CRC32查表法&#xff1a;Python与C语言实现中的反转机制 在数据校验领域&#xff0c;CRC32算法因其高效性和可靠性被广泛应用于文件校验、网络传输等场景。但许多开发者在实现过程中&#xff0c;常被"反转"这个概念困扰——为什么同样的数据在不同实现中会得…...

保姆级教程:用CANoe和Python脚本实现AUTOSAR E2E通信的自动化测试(附源码)

车载E2E通信自动化测试实战&#xff1a;从ARXML解析到CANoe-Python联动 在智能驾驶和车联网技术快速迭代的今天&#xff0c;AUTOSAR E2E通信保护机制已成为保障车载网络数据完整性的黄金标准。面对动辄上百个ECU的现代汽车电子架构&#xff0c;传统手动测试方法不仅效率低下&am…...

别再傻傻用软件AES了!STM32硬件AES实战:从CubeMX配置到DMA传输的完整流程

STM32硬件AES实战指南&#xff1a;从配置到DMA优化的全流程解析 在嵌入式系统开发中&#xff0c;数据安全已经成为不可忽视的核心需求。想象一下&#xff0c;你正在开发一款智能门锁产品&#xff0c;需要通过网络传输开锁指令&#xff0c;或者设计一款医疗设备&#xff0c;需要…...

终极指南:3步让旧Mac焕发新生,OpenCore Legacy Patcher完整使用教程

终极指南&#xff1a;3步让旧Mac焕发新生&#xff0c;OpenCore Legacy Patcher完整使用教程 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 还在为旧款Mac无法…...

QQ音乐加密格式终极转换指南:如何3步将.qmc文件转为MP3/FLAC

QQ音乐加密格式终极转换指南&#xff1a;如何3步将.qmc文件转为MP3/FLAC 【免费下载链接】qmc-decoder Fastest & best convert qmc 2 mp3 | flac tools 项目地址: https://gitcode.com/gh_mirrors/qm/qmc-decoder 你是否曾在QQ音乐下载了心爱的歌曲&#xff0c;却发…...

Python异步编程从入门到不懵:asyncio实战踩坑指南

作为一个写了6年Python的人&#xff0c;我之前一直对异步编程敬而远之。直到上周要写个爬虫&#xff0c;并发量要求上千&#xff0c;同步写法根本扛不住&#xff0c;硬着头皮啃了三天asyncio&#xff0c;踩了大大小小8个坑&#xff0c;搞到凌晨两点才跑通。今天把这些坑整理出来…...

Oracle 11g RAC集群运维:手把手教你用crsctl命令诊断CRS健康状态(附常见错误排查)

Oracle 11g RAC集群健康诊断实战&#xff1a;crsctl命令深度解析与故障排查指南 凌晨三点&#xff0c;值班手机突然响起刺耳的警报声——某核心业务系统的Oracle RAC集群出现节点异常。作为DBA&#xff0c;这种场景往往意味着一个不眠之夜。但真正资深的运维专家都清楚&#xf…...

AzurLaneAutoScript:碧蓝航线终极自动化解放指南,告别重复劳动轻松躺平

AzurLaneAutoScript&#xff1a;碧蓝航线终极自动化解放指南&#xff0c;告别重复劳动轻松躺平 【免费下载链接】AzurLaneAutoScript Azur Lane bot (CN/EN/JP/TW) 碧蓝航线脚本 | 无缝委托科研&#xff0c;全自动大世界 项目地址: https://gitcode.com/gh_mirrors/az/AzurLa…...

SITS2026 AI安全扫描实战手册(含LLM生成代码专项检测模型v2.3)

第一章&#xff1a;SITS2026 AI安全扫描实战手册概览 2026奇点智能技术大会(https://ml-summit.org) SITS2026 AI安全扫描实战手册是一套面向AI模型全生命周期的安全检测框架&#xff0c;聚焦于大语言模型&#xff08;LLM&#xff09;、多模态模型及推理服务组件的漏洞识别、…...