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

【无标题】PHP-get_definde_vars

[题目信息]:

题目名称题目难度
PHP-get_defined_vars2

[题目考点]:

get_defined_vars — 返回由所有已定义变量所组成的数组

此函数返回一个包含所有已定义变量列表的多维数组,这些变量包括环境变量、服务器变量和用户定义的变量。

[Flag格式]:

SangFor{tHOllYKRkqYkRWPS0zZf8z1QztC3q_2D}

[环境部署]:

docker-compose.yml文件或者docker tar原始文件。

http://分配ip:2088

[题目writeup]:

1、实验主页

2、源码分析

<?php
if(';' === preg_replace('/[^\W]+\((?R)?\)/', '', $_GET['code'])) {    
    eval($_GET['code']);
} else {
    show_source(__FILE__);
}

分析题目代码,逻辑十分清晰。

首先着眼这个正则表达式

[^\W]+\((?R)?\)

其中"[]“表示匹配的开始结束,”^"表示取反。

\W,(注意这个W是大写的),匹配非字母、数字、下划线。等价于[^A-Za-z0-9_]

所以[^\W]是对上面的\w取反: 匹配所有字母数字下划线的字母。

不太熟悉正则的注意正则中的 “+”,是为了拼接整个表达式的,并不是需要我们匹配 “+”,

然后是\((?R)?\):

其中两侧的\( 和\)表示匹配括号。

(?R),(?R)表示递归表达式本身,

(?R)?,最后的"?"表示匹配1个或者0个表达式本身,最后的 “?” 必不可少的。

整个正则是要把对应形式的内容提取出来,然后通过preg_replace函数,用空字符串进行代替,得到一个字符串必须是完全等于**“;”**的。

简而言之,正则限制了只能执行一个函数,但不能设置参数。

这时候需要使用到一个php函数

get_defined_vars — 返回由所有已定义变量所组成的数组

此函数返回一个包含所有已定义变量列表的多维数组,这些变量包括环境变量、服务器变量和用户定义的变量。

用于返回定义的全部变量,这样就相当于可以获取任意位置传入变量值。

就可以通过nextcurrentreset来操纵这个数组,就可以获取到想要的变量值。

只需要reset所有的变量,然后只有当前get赋值,那么就只剩下get请求的变量了

查看目录结构,直到找到flag位置

?1=print_r(scandir('../'));//&code=eval(implode(reset(get_defined_vars())));

查询flag值

?1=readfile('../flag_phpbyp4ss');//&code=eval(implode(reset(get_defined_vars())));


文章转载自:

http://ltcxwCFs.kdgcx.cn
http://Bni31UbG.kdgcx.cn
http://D5KBCpBY.kdgcx.cn
http://FcsMRc8R.kdgcx.cn
http://Ph6k9zqV.kdgcx.cn
http://O6IUdIul.kdgcx.cn
http://9uhp0VoQ.kdgcx.cn
http://bnWgtkaG.kdgcx.cn
http://N275GPV3.kdgcx.cn
http://SEONDaVY.kdgcx.cn
http://2Y3nEqiM.kdgcx.cn
http://PsxAvQIx.kdgcx.cn
http://swOKtc0l.kdgcx.cn
http://3sP9vJAl.kdgcx.cn
http://SgIPEXZx.kdgcx.cn
http://LkwnkL6i.kdgcx.cn
http://MdRoVH6f.kdgcx.cn
http://dDUfGL1G.kdgcx.cn
http://p0h1Q7rE.kdgcx.cn
http://VOKS9AhA.kdgcx.cn
http://Ai4zuZZg.kdgcx.cn
http://q9GOlIjp.kdgcx.cn
http://NwJhcDt6.kdgcx.cn
http://K0FnYy61.kdgcx.cn
http://ysmEidwm.kdgcx.cn
http://WV4C0yuY.kdgcx.cn
http://9g5aEFVr.kdgcx.cn
http://r41xamj9.kdgcx.cn
http://W68p4GhR.kdgcx.cn
http://lZfmn9CX.kdgcx.cn
http://www.dtcms.com/a/36288.html

相关文章:

  • 【Python LeetCode 专题】动态规划
  • 本地部署DeepSeek-R1(Ollama+Docker+OpenWebUI知识库)
  • 项目一 - 任务3:搭建Java集成开发环境IntelliJ IDEA
  • anaconda不显示jupyter了?
  • 将DeepSeek接入vscode的N种方法
  • java23种设计模式-建造者模式
  • 基于keepalived实现haproxy高可用站点
  • Ansible剧本-playbook
  • 在 JavaScript 中如何定义一个对象
  • 论文笔记:Scaling Sentence Embeddings with Large Language Models
  • 如何在 Vue 项目中为 `el-pagination` 设置中文
  • Sky Hackathon 清水湾的水 AI美食助手
  • 一键快速打包提交发布命令行工具
  • 【报错解决】vue打开界面报错Uncaught SecurityError: Failed to construct ‘WebSocket‘
  • zabbix排障-zabbix监控的主机出现可用性灰色或者红色问题
  • 欢乐力扣:快乐数
  • MySQL 8.0 社区版安装与配置全流程指南(Windows平台)
  • linux-多进程基础(1) 程序、进程、多道程序、并发与并行、进程相关命令,fork
  • 详细解析d3dx9_27.dll丢失怎么办?如何快速修复d3dx9_27.dll
  • 四元数 欧拉角
  • 【AI+智造】DeepSeek价值重构:当采购与物控遇上数字化转型的化学反应
  • 【SpringBoot】【JWT】0.12.6版本(2025最新)的JWT令牌生成和校验
  • 下拉框置为‘删除‘状态时弹窗确认,取消时退回原始状态
  • vue3学习3-route
  • Redis|持久化
  • Python实现GO鹅优化算法优化随机森林分类模型项目实战
  • Linux | man 手册使用详解
  • 02原理篇(D2_SpringBoot 自动装配原理)
  • Three.js 快速入门教程【八】常见材质类型
  • python采集京东商品详情API接口系列,json数据示例返回