Web_Bugku_WriteUp | 变量1
题目
分析
<?php error_reporting(0); // 不显示报错信息 include "flag1.php"; highlight_file(__file__); if(isset($_GET['args'])){ // get传入的args值非空 $args = $_GET['args']; // 将传入的值赋给args if(!preg_match("/^\w+$/",$args)){ // 如果args从开头到结尾匹配到非字母或非数字或非下划线 die("args error!"); // 输出"args error!"并退出脚本 } eval("var_dump($$args);"); // 将与arge值同名变量的相关信息作为php代码执行 } ?>
根据代码内容能够获得的信息主要有:
- 传入 args 的字符串参数只能包含字母数字下划线。
- 以 args 值为变量名的变量被格式化后将作为 php 代码被执行后输出。
显然我们需要向 arge 传入一个已经存在的变量以获得变量内容。
先尝试输入 “flag” 但没有输出 flag 内容,遂 WP 解法:BugKu 变量1-雨落洛-博客园
了解到 php 存在九大全局变量,分别是 $_POST
$_GET
$_FILES
$_COOKIE
$_SESSION
$_REQUEST
SERVER
$GLOBALS
和 $_ENV
。其中 $GLOBALS
是一个包含了全部变量的全局组合数组,通过向 args 传入 GLOBALS 即可获得包括 flag 的所有变量的名称及内容。payload:?args=GLOBALS
:
输出 flag 的变量名为 ZFkwe3。
参考
本文作者:Guanz
本文链接:https://www.cnblogs.com/Guanz/p/18077572
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
分类:
标签:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步