PHP-$$变量覆盖

[题目信息]:

题目名称 题目难度
PHP-$$变量覆盖 1

[题目考点]:

复制代码
变量覆盖指的是用我们自定义的参数值替换程序原有的变量值,一般变量覆盖漏洞需要结合程序的其它功能来实现完整的攻击。
经常导致变量覆盖漏洞场景有:$$,extract()函数,parse_str()函数等.

[Flag格式]:

复制代码
SangFor{yIMTJpEwJghjSgd5}

[环境部署]:

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

复制代码
http://分配ip:2009

[题目writeup]:

1、实验主页

2、源码分析

复制代码
<?php
error_reporting(0);
include "flag.php";
highlight_file(__file__);
if(isset($_GET['args'])){
    $args = $_GET['args'];
    if(!preg_match("/^\w+$/",$args)){
        die();
    }
    eval("var_dump($$args);");
}
else{
    "yyds";
}
?>

分析代码逻辑,首先检测变量是否设置,然后是一个正则匹配传入的值。

复制代码
/^\w+$/

两个//表示开始和结束

^表示开始字符串

$表示结束字符串

\w表示包含[a-z,A-Z, _ , 0-9]

+表示一个或者多个\w

总体意义就是限定一个任意长字符串全部由字母数字组成,前面中间后面都不能有空格、标点等非\w字符。

如果args的值是只由大小写字母数字和下划线,则执行eval("var_dump($$args)")。

通过提示"flag在变量里",想能不能通过打印所有变量的值来获得flag。

这里介绍一个超全局变量$GLOBALS,它可以引用全局作用域中可用的全部变量(一个包含了全部变量的全局组合数组。变量的名字就是数组的键),与所有其他超全局变量不同。我们尝试输入"?args=GLOBALS"获得flag

复制代码
http://localhost/?args=GLOBALS
相关推荐
幽络源小助理9 分钟前
《已调试》SpringBoot景区寄存管理系统源码 - 免费JavaWeb项目下载 | 幽络源
java·开发语言·spring boot
豆沙沙包?13 分钟前
2025年--Lc302-415. 字符串相加--java版
java·开发语言
JIngJaneIL14 分钟前
基于Java民宿管理系统(源码+数据库+文档)
java·开发语言·数据库·vue.js·spring boot
杰克尼14 分钟前
蓝桥云课-13. 定时任务
java·开发语言·算法
m0_7269659818 分钟前
RAG小实战
开发语言·python
元素之窗23 分钟前
MATLAB 的输入与输出:一篇速查博客
开发语言·matlab·php
CoderYanger30 分钟前
动态规划算法-路径问题:9.最小路径和
开发语言·算法·leetcode·动态规划·1024程序员节
无心水33 分钟前
【Python实战进阶】12、Python面向对象编程实战:从零构建搜索引擎,掌握封装、继承与多态!
开发语言·python·搜索引擎·python进阶·python面向对象·搜索引擎实战·封装继承多态
阿杰同学39 分钟前
Java NIO 面试题及答案整理,最新面试题
java·开发语言·nio
CoderYanger1 小时前
动态规划算法-路径问题:7.礼物的最大价值
开发语言·算法·leetcode·动态规划·1024程序员节