Bugkuctf-变量1

2023-10-24 22:58
文章标签 变量 bugkuctf

本文主要是介绍Bugkuctf-变量1,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

写在前:最近开始记录我的ctfweb的学习笔记,顺便记录一下学习到的Wp。

 

Bugkuctf题目,变量1

这里涉及了几个知识点:

1.eval()函数

eval函数,可以将括号内的字符串变成php代码执行,前提是括号内的内容以分号结尾;如果代码解析错误,则会返回false。

2.var_dump()函数

将显示一个或多个表达式的值,包括表达式的类型和值,数组会递归展开。

变量1-信息

点进来看到的是php代码。

变量1-题目

刚开始看到include,就猜测应该是跟文件包含相关。在我尝试了一些关于文件包含的手段之后,我发现并不对。

因为看到最后的eval以及var_dump,我就想到了payload的方式去提交申请,发现并不对。

我尝试了一下这个方法:

http://123.206.87.240:8004/index1.php?args=1);highlight_file=%27flag1.php%27;var_dump(3;

也就是借用eval函数,来实现文件的阅读。

发现:

我们再来审计一下代码。

<?php

error_reporting(0); //关闭错误报告

include"flag1.php"

highlight_file(_file_);

if(isset($_GET['args']))// isset函数判断变量是否存在,是则返回true

{ $args= $_GET['args']; //通过get请求获取args

  if(!preg_match("/^\w+$/",$args));//利用正则匹配,检测args中的内容

  {die("args error!);}

 eval("var_dump($$args);")//var_dump会输出一个或者多个表达式的类型和值,eval函数会将字符串当成php代码来执行

}

?>

所以我们可以从中了解到,我们需要通过get请求的方式将args赋值。

我本来尝试了一下直接复制args=flag1.php,但是因为在preg_match()函数中,匹配的是\w,也就是字母字符以及下划线,所以输出了 args error!

又尝试了一下args=flag1,发现还是不对,输出了null。

再次审计代码以及这个输出的null,

最后一句话 eval(var_dump($$args));

有两个$符号,这里可以做个小小的例子:可以简单理解,把这个东西想象成二级指针。

如果$a='hello',$hello=world,那么$$a=world。

所以在做替换的时候,如果args=flag,那么最后的结果就是eval(var_dump($flag);,也难怪系统输出了null。

在看一遍题目,没有了其他的提示,我们只能猜测是使用了全局变量,尝试一下args=GLOBALS,我们的结果就出来了。


 

 

这篇关于Bugkuctf-变量1的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/278323

相关文章

浅析Rust多线程中如何安全的使用变量

《浅析Rust多线程中如何安全的使用变量》这篇文章主要为大家详细介绍了Rust如何在线程的闭包中安全的使用变量,包括共享变量和修改变量,文中的示例代码讲解详细,有需要的小伙伴可以参考下... 目录1. 向线程传递变量2. 多线程共享变量引用3. 多线程中修改变量4. 总结在Rust语言中,一个既引人入胜又可

java如何调用kettle设置变量和参数

《java如何调用kettle设置变量和参数》文章简要介绍了如何在Java中调用Kettle,并重点讨论了变量和参数的区别,以及在Java代码中如何正确设置和使用这些变量,避免覆盖Kettle中已设置... 目录Java调用kettle设置变量和参数java代码中变量会覆盖kettle里面设置的变量总结ja

Perl 特殊变量详解

《Perl特殊变量详解》Perl语言中包含了许多特殊变量,这些变量在Perl程序的执行过程中扮演着重要的角色,:本文主要介绍Perl特殊变量,需要的朋友可以参考下... perl 特殊变量Perl 语言中包含了许多特殊变量,这些变量在 Perl 程序的执行过程中扮演着重要的角色。特殊变量通常用于存储程序的

变量与命名

引言         在前两个课时中,我们已经了解了 Python 程序的基本结构,学习了如何正确地使用缩进来组织代码,并且知道了注释的重要性。现在我们将进一步深入到 Python 编程的核心——变量与命名。变量是我们存储数据的主要方式,而合理的命名则有助于提高代码的可读性和可维护性。 变量的概念与使用         在 Python 中,变量是一种用来存储数据值的标识符。创建变量很简单,

JS_变量

二、JS的变量 JS中的变量具有如下特征 1 弱类型变量,可以统一声明成var 2 var声明的变量可以再次声明 3 变量可以使用不同的数据类型多次赋值 4 JS的语句可以以; 结尾,也可以不用;结尾 5 变量标识符严格区分大小写 6 标识符的命名规则参照JAVA 7 如果使用了 一个没有声明的变量,那么运行时会报uncaught ReferenceError: *** is not de

使用条件变量实现线程同步:C++实战指南

使用条件变量实现线程同步:C++实战指南 在多线程编程中,线程同步是确保程序正确性和稳定性的关键。条件变量(condition variable)是一种强大的同步原语,用于在线程之间进行协调,避免数据竞争和死锁。本文将详细介绍如何在C++中使用条件变量实现线程同步,并提供完整的代码示例和详细的解释。 什么是条件变量? 条件变量是一种同步机制,允许线程在某个条件满足之前进入等待状态,并在条件满

axure之变量

一、设置我们的第一个变量 1、点击axure上方设置一个全局变量a = 3 2、加入按钮、文本框元件点击按钮文档框展示变量值。 交互选择【单击时】【设置文本】再点击函数。 点击插入变量和函数直接选择刚刚定义的全局变量,也可以直接手动写入函数(注意写入格式。) 这样点击按钮时就直接展示刚刚设置的全局变量3了。 2、更改变量值 在新建交互里点击设置变量值。 将a变量设置成等于10. 将新

shell脚本中变量中字符串替换的测试 /和//的区别

test_char=abbbcbbbf echo "bf:test_char = " $test_char test_char=${test_char/bbb/ddd} echo "af:test_char = " $test_char 输出: bf:test_char =  abbbcbbbf af:test_char =  adddcbbbf 只匹配第一个

eclipse中相同变量显示变色设置

java文件的设置"Window"-"preferences"-"Java"-"Editor"-"Mark Occurrences"复选框勾选 js文件的设  置"Window"-"preferences"-"web"-"javascript"-"Mark Occurrences"复选框勾选 。

Python学习1--变量和简单数据

经过这一段时间的学习,将Python相关的知识点记录下来,好记性不如烂笔头嘛。 本文主要参考了《Python编程从入门到实践》以及唐宇迪老师的教程《Python快速入门视频课程》,然后在博主http://www.cnblogs.com/liubinsh/p/6937409.html的基础上总结而成,特此感谢! 第二章 变量和简单数据类型 什么是变量 这里的message就是变量,