网站开发的pc或移动端/津seo快速排名

网站开发的pc或移动端,津seo快速排名,呼伦贝尔市规划建设局网站,平顶山市哪里有做网站的题目: 我仿佛见到了一位故人。。。也难怪,题目就是ZJCTF 按要求提交/?textdata://,I have a dream&filenext.php后: ......不太行,好像得用filephp://filter/convert.base64-encode/resourcenext.php 耶?那 f…

题目: 

 我仿佛见到了一位故人。。。也难怪,题目就是ZJCTF

按要求提交/?text=data://,I have a dream&file=next.php后: 

......不太行,好像得用file=php://filter/convert.base64-encode/resource=next.php 

耶?那 file=php://filter/convert.base64-encode/resource=next.php 和 file=next.php在这里有啥区别啊 

file=php://filter/convert.base64-encode/resource=next.php 和 file=next.php

示例:如果next.php为 <?php echo "hello"; ?>

1.file=next.php: 直接输出hello(include函数会将括号内的文件内容当作php来解析)

2.file=php://filter/convert.base64-encode/resource=next.php

  • php://filter 是PHP的流包装器,允许在读取文件时对内容进行过滤处理。
  • convert.base64-encode 过滤器会将文件内容转换为Base64编码格式。
  • 当使用 include 包含此路径时,PHP会先读取 next.php 的内容,经过Base64编码后,再尝试将编码后的内容作为PHP代码执行。

关键点在于base64编码后的东西不再是有效代码,php无法解析,在面对无效代码这种情况下php可能会将编码后的内容作为“原始输出”返回

这样就能直接返回next.php的源代码了 

 源代码

<?php
$id = $_GET['id'];
$_SESSION['id'] = $id;function complex($re, $str) {return preg_replace('/(' . $re . ')/ei','strtolower("\\1")',$str);
}foreach($_GET as $re => $str) {echo complex($re, $str). "\n";
}function getFlag(){@eval($_GET['cmd']);
}

代码一些地方需要注意:

preg_replace('/(' . $re . ')/ei','strtolower("\\1")',$str);

preg_replace($要搜索的正则表达式的模式, $用于替换匹配项的字符串, $被进行搜索和替换的字符串); 所以关于这里的正则表达式模块:'/('.$re.')/ei',

注意preg_replace在调用的时候需要将参数用 ' ' 括起来

其中$re代表用户传入的正则表达式模式,通过字符串拼接的方式,将$re嵌入到整体正则表达式中  / 用于表示正则表达式的开始和结束,( 和 ):是捕获组的符号,用于将匹配到的内容捕获起来,以便后续引用,e 修饰符会使 preg_replace 在替换字符串时执行其中的 PHP 代码,i 修饰符表示不区分大小写进行匹配。

strtolower("\\1")

\\1:这是对捕获组的引用,代表第一个捕获组匹配到的内容。strtolower用于将字符串转换为小写。所以这句话意思是将捕获到的内容转换成小写

捕获组和反向引用

主要用于引用之前匹配的捕获组的内容。它允许在同一个正则表达式中复用已匹配的文本,常用于模式重复匹配或替换操作。

捕获组:()括起来的内容就是捕获组,比如说(\d+)匹配一个或者多个内容,并记录匹配的内容

反向引用:\n 表示引用第n个捕获组的内容

foreach函数触发漏洞

遍历$_GET数组,键名作为$re,键值作为$str,并将这两个值传入complex函数中

foreach($_GET as $re => $str) {echo complex($re, $str). "\n";
}

对于php中双引号和单引号的区别

双引号:

<?php echo "{${phpinfo()}}"; ?>

会返回phpinfo的界面 

因为双引号里面如果包含有变量,php解释器会将其替换为变量解释后的结果(允许变量解析)。任何 ${...} 内的表达式会被执行,其返回值作为变量名

具体实现:

  1. phpinfo() 函数会被立即执行,输出PHP配置信息(返回值为 true,即 1)。
  2. PHP尝试解析 ${phpinfo()} 的结果(即 1),等价于变量 $1
  3. 由于变量名 $1 非法(不能以数字开头),会触发一个 Notice级错误(若未关闭错误提示),最终输出空字符串。

实际效果

输出 phpinfo() 的完整信息。输出空字符串(因 $1 未定义),并可能伴随错误提示。

单引号:

<?php echo '{${phpinfo()}}'; ?>

单引号内不解析变量,所以内容按字面量输出  {${phpinfo()}}

再返回到next.php中,其基本思路就是get个键名键值都是自己输入的东西&cmd命令,其中get内容要触发getflag()函数进而触发eval()函数,cmd才有用武之地

php会将传入的非法的参数名转成下滑线

当非法字符为首字母时,只有点号会被替换成下划线 

 上传的$re=$str,传入  .*=${getflag()}   代入代码中就是:

preg_replace('/(.*)/ei','strtolower("\\1")',${getflag()});

getflag() 是一个函数调用,意味着会先执行 getflag 函数,然后将该函数的返回值作为目标字符串传递给 preg_replace 进行处理。

也就是说会这样

好傻啊这个函数,还会先跑去执行一下代码然后再匹配,怪不得e被弃用了 

残留几个问题:

1.为什么要加上${  }? ,这个东西有什么用?

${ }用于变量替换、字符串模板、表达式嵌入

这里${getflag()}外面套上一个${ }就表示执行函数,如果不套这个${ }那么就变成

strtolower("getflag()")

此时单纯把这个当成字符串,而不能把他当成函数去解析

2.为什么 \S* 能表示 .? ?

因为大写表示取反操作

这里\s 表示匹配任意空白字符,而\S表示匹配任意非空白字符(等价于 [^\s]

3.捕获组和反向引用干什么用的?

主要是为了匹配重复的字符,比如说

\b(\w+)\b\s+\1\b

\b表示单词边界,\w表示任意一个单词字符,+是个量词,表示前面的 \w 可以出现很多次,\s+表示任意一个或多个空白符号

这里就能匹配到诸如"pig pig"这样的字符串

也可以匹配标签,这里的 < 和 > 都代表真实的<>

<([a-z]+)>(.*?)</\1>

反向引用还在输出! 

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

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

相关文章

[Web 安全] PHP 反序列化漏洞 —— POP 链构造思路

关注这个专栏的其他相关笔记&#xff1a;[Web 安全] 反序列化漏洞 - 学习笔记-CSDN博客 0x01&#xff1a;什么是 POP 链&#xff1f; POP 链&#xff08;Payload On Purpose Chain&#xff09;是一种利用 PHP 中的魔法方法进行多次跳转以获取敏感数据的技术。它通常出现在 CTF…

DeepSeek 助力 Vue3 开发:打造丝滑的网格布局(Grid Layout)

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…

Golang语法特性总结

1.认识Golang代码特性 package main //1.包含main函数的文件就是一个main包--当前程序的包名// import "fmt" // import "time" import("fmt""time" )//3.同时包含多个包 4.强制代码风格:函数的 { 一定和函数名在同一行&#xff0c;否…

AI赋能校园安全:科技助力预防与应对校园霸凌

校园本应是学生快乐学习、健康成长的地方&#xff0c;然而&#xff0c;校园霸凌却成为威胁学生身心健康的隐形“毒瘤”。近年来&#xff0c;随着人工智能&#xff08;AI&#xff09;技术的快速发展&#xff0c;AI在校园安全领域的应用逐渐成为解决校园霸凌问题的新突破口。通过…

易语言模拟真人鼠标轨迹算法 - 防止游戏检测

一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序&#xff0c;它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言&#xff0c;原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势&#xff1a; 模拟…

运营商三要素API:构建安全信任的桥梁

引言 在数字经济时代&#xff0c;身份验证已成为各类业务场景的基础需求。运营商三要素API作为一种高效的身份核验工具&#xff0c;通过对接运营商数据&#xff0c;实现对用户姓名、身份证号码、手机号码三项关键信息的实时校验&#xff0c;为各行业提供可靠的身份认证解决方案…

Spring Boot 与 MyBatis 版本兼容性

初接触Spring Boot&#xff0c;本次使用Spring Boot版本为3.4.3&#xff0c;mybatis的起步依赖版本为3.0.0&#xff0c;在启动时报错&#xff0c;报错代码如下 org.springframework.beans.factory.BeanDefinitionStoreException: Invalid bean definition with name userMapper…

GCN从理论到实践——基于PyTorch的图卷积网络层实现

Hi&#xff0c;大家好&#xff0c;我是半亩花海。图卷积网络&#xff08;Graph Convolutional Network, GCN&#xff09;是一种处理图结构数据的深度学习模型。它通过聚合邻居节点的信息来更新每个节点的特征表示&#xff0c;广泛应用于社交网络分析、推荐系统和生物信息学等领…

集合遍历的多种方式

目录 1.增强for 2.迭代器&#xff08;在遍历的过程中需要删除元素&#xff0c;请使用迭代器&#xff09; 3.双列集合 4.Lambda表达式(forEach方法) 1.单列集合&#xff1a; 2.双列集合&#xff1a; 4.Stream 流 5.普通for循环 6.列表迭代器 7.总结 1.增强for 注&…

value_counts()和unique()

我今天发现一个很有意思的问题哈 import scanpy as sc import numpy as npX np.random.randn(10,3) adata1 sc.AnnData(X) adata1.obs["sample"] "H1" print(adata1)X np.random.randn(20,3) adata2 sc.AnnData(X) adata2.obs["sample"] &…

每日OJ_牛客_游游的字母串_枚举_C++_Java

目录 牛客_游游的字母串_枚举 题目解析 C代码 Java代码 牛客_游游的字母串_枚举 游游的字母串 描述&#xff1a; 对于一个小写字母而言&#xff0c;游游可以通过一次操作把这个字母变成相邻的字母。a和b相邻&#xff0c;b和c相邻&#xff0c;以此类推。特殊的&#xff0…

数字万用表的使用教程

福禄克经济型数字万用表前面板按键功能介绍示意图 1. 万用表简单介绍 万用表是一种带有整流器的、可以测量交、直流电流、电压及电阻等多种电学参量的磁电式仪表。分为数字万用表&#xff0c;钳形万用表&#xff0c; &#xff08;1&#xff09;表笔分为红、黑二只。使用时黑色…

DeepSeek使用手册分享-附PDF下载连接

本次主要分享DeepSeek从技术原理到使用技巧内容&#xff0c;这里展示一些基本内容&#xff0c;后面附上详细PDF下载链接。 DeepSeek基本介绍 DeepSeek公司和模型的基本简介&#xff0c;以及DeepSeek高性能低成本获得业界的高度认可的原因。 DeepSeek技术路线解析 DeepSeek V3…

Hugging Face 推出 FastRTC:实时语音视频应用开发变得得心应手

估值超过 40 亿美元的 AI 初创公司 Hugging Face 推出了 FastRTC&#xff0c;这是一个开源 Python 库&#xff0c;旨在消除开发者在构建实时音频和视频 AI 应用时的主要障碍。 "在 Python 中正确构建实时 WebRTC 和 Websocket 应用一直都很困难&#xff0c;"FastRTC…

Qt显示一个hello world

一、显示思路 思路一&#xff1a;通过图形化方式&#xff0c;界面上创建出一个控件显示。 思路二&#xff1a;通过编写C代码在界面上创建控件显示。 二、思路一实现 点开 Froms 的 widget.ui&#xff0c;拖拽 label 控件&#xff0c;显示 hello world 即可。 qmake 基于 .…

复合机器人为 CNC 毛坯件上下料注入 “智能强心针”

在竞争日益激烈的 CNC 加工行业&#xff0c;如何提升生产效率、保证产品质量、实现智能化生产成为众多企业亟待解决的问题。富唯智能凭借其先进的复合机器人技术&#xff0c;成功为多家 CNC 加工企业提供了毛坯件上下料的优质解决方案&#xff0c;有效提升了生产效能&#xff0…

Spring Cloud Gateway 网关的使用

在之前的学习中&#xff0c;所有的微服务接口都是对外开放的&#xff0c;这就意味着用户可以直接访问&#xff0c;为了保证对外服务的安全性&#xff0c;服务端实现的微服务接口都带有一定的权限校验机制&#xff0c;但是由于使用了微服务&#xff0c;就需要每一个服务都进行一…

webstorm的Live Edit插件配合chrome扩展程序JetBrains IDE Support实现实时预览html效果

前言 我们平时在前端网页修改好代码要点击刷新再去看修改的效果&#xff0c;这样比较麻烦&#xff0c;那么很多软件都提供了实时预览的功能&#xff0c;我们一边编辑代码一边可以看到效果。下面说的是webstorm。 1 Live Edit 首先我们需要在webstorm的settings里安装插件Live …

map的operator[]的实现

map的operator[]的实现 operator[]里包含插入操作&#xff0c;所以我们先看一下首先看一下map的insert函数 返回值是一个pair类型。正常的常见的insert&#xff0c;插入成功返回true&#xff0c;失败返回false 这里设计的insert不单单返回布尔值&#xff0c;而是返回一个pair…

定时器的编码器接口模式

选择编码器接口模式的方法是&#xff1a;如果计数器只在TI2的边沿计数&#xff0c;则置TIMx_SMCR寄存器中的SMS001&#xff0c;如果只在TI1边沿计数&#xff0c;则置SMS010&#xff0c;如果计数器同时在TI1和TI2边沿计数&#xff0c;则置SMS 011 明确一点&#xff0c;计数器…