安全-变量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)的主要内容,如果未能解决你的问题,请参考以下文章

安全-Simple_SSTI1(BugkuCTF)

安全-alert(BugkuCTF)

安全-GET(BugkuCTF)

安全-滑稽(BugkuCTF)

安全-eval(BugkuCTF)

安全-头等舱(BugkuCTF)