前言

这次比赛运气真好拿了个一血?(bluewhale饭点出的,不然也能拿个血.jpg

懂的都懂,这波拟态防御属实太行了

Crypto

拟态签到题

base64解码得到flag:flag{GaqY7KtEtrVIX1Q5oP5iEBRCYXEAy8rT}

Misc

WeirdPhoto

爆破高宽,进而得到字符串:TIEWOFTHSAEOUIITNRBCOSHSTSAN

附上爆破脚本

import binascii
import struct

crcbp = open("1.png", "rb").read()
for i in range(2000):
    for j in range(2000):
        data = crcbp[12:16] + struct.pack('>i', i)+struct.pack('>i', j)+crcbp[24:29]
        crc32 = binascii.crc32(data) & 0xffffffff
        if(crc32 == 0x9E916964):
            print('hex:', hex(i), hex(j))

#hex: 0x58c 0x1f4

接着就纯靠猜不断尝试最后确认是栅栏密码(key=4)得到压缩包密码: THISISTHEANSWERTOOBSFUCATION

解压查看文件头很明显这是一个pdf文件,010更改下pdf头

最后通过工具wbs43open解密得到flag:flag{th1s_ls_thE_f1n4l_F14g_y0u_want}

BlueWhale

追踪tcp流发现了password:th1sIsThEpassw0rD

接着我们进行明文攻击得到压缩包密码:!2b$3&Ec

最后lsb隐写得到flag:flag{F1nallY_y0uve_f0unD_1t}

mirror

爆破高宽发现这图是湖中倒影

import binascii
import struct

crcbp = open("full.png", "rb").read()
for i in range(3000):
    for j in range(3000):
        data = crcbp[12:16] + struct.pack('>i', i)+struct.pack('>i', j)+crcbp[24:29]
        crc32 = binascii.crc32(data) & 0xffffffff
        if(crc32 == 0x099B2F6E):
            print('hex:', hex(i), hex(j))

#hex: 0x922 0x505

然后在010中观察发现其存在两张图,像镜子一样倒过来了,并且它是每十六位翻转的

data = open('full.png', 'rb').read()
data = data[::-1]
data = [data[i:i+16][::-1] for i in range(0, len(data), 16)]
res = b''.join(data)
f = open('full1.png', 'wb')
f.write(res)
f.close()

接着我们盲水印提示 CRC error ,修一下再来一次然后倒置得到字符串:32effq8aa8374a02a9p1636ae8901qa0

hint:2-5 e-6 9-a p-b q-d

最后根据hint转换得到flag:flag{356ffd89983749059ab1e3e968a01d90}

bar

参考文章:https://blog.csdn.net/kzhuangood/article/details/72953354

首先分离GIF提取出每一帧,接着我们规定黑为1,白为0,灰为空格,摩斯密码得到提示:CODE93

1010 111 100 0 11110 00011 
CODE93

然后还是按黑1白0来,每九个为一组对照code93编码表得到:F0C62DB973684DBDA896F9C5F6D962 (后面还有一大块空白的是需要我们去算的校验位

接着我们通过在线网站输入条码号生成条形码,而它这校验位其实是已经自动算出来的,我们只要根据其结构即可得到最后两位

hint:1、观察得到字符串在code93在线网站生成的条形码停止字符的前两位字符 2、flag内容都是小写英文字母

最后根据hint得知应该是小写的,进而得知最后两位校验码为U和M

大写情况:
101000100 101101100 111010010   101011110        1
    2         W      SPACE    * Start/Stop     终止条

小写情况:
101000100 110010110 101001100  101011110         1
    2         U         M    * Start/Stop      终止条

整理得到flag:flag{f0c62db973684dbda896f9c5f6d962um}

Web

zerocalc

直接readfile读flag:flag{Hf4ulmUeLzShDRRfHdS4E8UhrlYbyMM6}

new_hospital
首先信息收集,dirb/御剑扫一下目录

接着我们发现这cookie处会给api赋值base64编码的,进而得知这有一个任意文件读取漏洞

然后我们通过修改api读取会发现它响应包的头还是2.js,于是我们回想前面扫到它有个old版本的,最后我们改old和api读取flag相对路径得到flag:flag{wI91wqE1yQ3599fU5RFv3V2L7e0kquMm}

EasyFilter

<?php
   ini_set("open_basedir","./");
   if(!isset($_GET['action'])){
       highlight_file(__FILE__);
       die();
   }
   if($_GET['action'] == 'w'){
       @mkdir("./files/");
       $content = $_GET['c'];
       $file = bin2hex(random_bytes(5));
       file_put_contents("./files/".$file,base64_encode($content));
       echo "./files/".$file;
   }elseif($_GET['action'] == 'r'){
       $r = $_GET['r'];
       $file = "./files/".$r;
       include("php://filter/resource=$file");
   }

首先题目使用了open_basedir,设定了只能访问当前目录的文件

ini_set("open_basedir","./");

这里我们可以在一个文件里写入php代码来绕过,比如我们在一个文件里写入

<?php echo system('ls /');?>

我们再访问这个文件,是不是就可以直接查看根目录,这题就是类似的思路
下面就是有2种模式,一种是action=w时,他首先会创建一个files目录

@mkdir("./files/");

然后将创建一个随机的5位字符,16进制加密后给file,你可以理解这是将文件名加密了

string random_bytes(int $length)

生成适合于加密使用的任意长度的加密随机字节字符串,例如在生成salt、密钥或初始化向量,bin2hex() 函数把 ASCII 字符的字符串转换为十六进制值

$file = bin2hex(random_bytes(5));

然后将我们写入的东西,base64加密后传入./files/filename中,再返回到屏幕上

file_put_contents("./files/".$file,base64_encode($content));
echo "./files/".$file;

第一种是写,第二种就是读了,这里读的话,就是直接读,不用base64加密

elseif($_GET['action'] == 'r'){
        $r = $_GET['r'];
        $file = "./files/".$r;
        include("php://filter/resource=$file");
    }

我们常见的php伪协议读数据的方法是

php://filter/read=convert.base64-encode/resource=file

他这里给的是

php://filter/resource=file

他省略了encode加密的过程,我们写的时候是不是将文件的内容进行base64加密后再传入文件,这样我们的php代码就直接会成为base64密文,并不会作为php代码执行,我们在文件包含的时候将其解密,他就会变成php代码执行了

php://filter/resource=./files/read=convert.base64-decode/resource=file

得到flag:flag{Cuw5RV9SvBUJR1ACBgLBm83p2VZe7lRG}

ezPickle

pickle反序列化

Jack-Shiro

原题:https://www.redmango.top/article/61#javaweb

Give_me_your_0day

当我们安装tp的时候说文件没写成功,于是发现应该是恶意mysql构造任意文件读取(当数据库用不了的时候会报数据库连不上,数据库能用的时候会说无法自动创建文件需要手段创建,说明去连了mysql的,再加上tp又没啥漏洞