安全-变量1(BugkuCTF)
Posted 小狐狸FM
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安全-变量1(BugkuCTF)相关的知识,希望对你有一定的参考价值。
一、题目
二、WriteUp
- 在服务器的php代码中,提示了
flag In the variable
,推测flag
在变量中- 代码中对传入的
args
参数进行了两次的逻辑判断
第一次使用了isset()
判断变量是否已经被设置了值且非空
第二次使用了preg_match()
对变量进行了正则匹配判断,\\w
表示大小写英文和数字- 当
args
参数的值不为大小写英文和数字时,就会执行die
函数输出args error!
信息并退出php
脚本,所以之后的eval()
代码就不会执行。
函数方法 | 介绍 |
---|---|
error_reporting(0) | 关闭错误报告 |
highlight_file(__file__) | 高亮显示当前的PHP脚本,并显示源码 |
isset(变量) | 检测变量是否设置且不为null,符合返回true,不符时返回false |
preg_match(正则表达式,变量) | 检测变量是否符合正则表达式条件,符合返回true,不符返回false |
die(消息) | 结束php程序,并打印消息 |
eval("php代码") | 运行一段php代码 |
var_dump(变量) | 显示变量的内容 |
<?php
flag In the variable !
error_reporting(0);
include "flag1.php";
highlight_file(__file__);
if(isset($_GET['args'])){
$args = $_GET['args'];
if(!preg_match("/^\\w+$/",$args)){
die("args error!");
}
eval("var_dump($$args);");
}
?>
- 在
PHP
中可以通过$GLOBALS
全局变量来显示所有已经被设置值的变量- 因为在
eval("var_dump($$args);");
中已经存在了一个$符号
,而$args
可以赋值为GLOBALS
这样就可以在目标服务器运行eval("var_dump($GLOBALS)")
显示所有变量的值了
以上是关于安全-变量1(BugkuCTF)的主要内容,如果未能解决你的问题,请参考以下文章