一、找找找
1.010打开zip文件末尾,发现了一个png图片和一段base64,base64解密后为flag666,图片显示crc有错误,010打开发现宽度值为0,使用脚本进行爆破
点击查看代码
import zlib
import struct
filename = 'crc.png'
with open(filename, 'rb') as f:
all_b = f.read()
crc32key = int(all_b[29:33].hex(), 16)
data = bytearray(all_b[12:29])
n = 4095 # 理论上0xffffffff,但考虑到屏幕实际/cpu,0x0fff就差不多了
for w in range(n): # 高和宽一起爆破
width = bytearray(struct.pack('>i', w)) # q为8字节,i为4字节,h为2字节
for h in range(n):
height = bytearray(struct.pack('>i', h))
for x in range(4):
data[x + 4] = width[x]
data[x + 8] = height[x]
crc32result = zlib.crc32(data)
if crc32result == crc32key:
# 2021.7.20,有时候显示的宽高依然看不出具体的值,干脆输出data部分
print(data.hex())
print("宽为:", end="")
print(width)
print("高为:", end="")
print(height)
exit(0)
2.得到正确的宽度应该为7f,保存后发现结尾部数据块划分有问题,猜测是IDAT块有问题,发现了一段十六进制编码
3.转为hex
4.这个就是zip的密码,打开,得到snow隐写
5.解密,得到flag
SNOW.EXE -p flag666 -C flag.txt
二、HK的怪兽
1.得到一个加密的zip和一个流量,提示zip的密码就是shell中的key,看下流量,发现明显是哥斯拉流量,跟题目名字正好对应
2.在第14流发现了哥斯拉流量密文解密的key等信息
3.在第6流发现了压缩包的十六进制源码,打开发现是加密的
4.在第41流,使用解密脚本解密哥斯拉流量的密文,得到了跟密钥有关的信息
点击查看代码
<?php
@session_start();
@set_time_limit(0);
@error_reporting(0);
function response_decode($D,$K){
$D = base64_decode($D);
for($i=0;$i<strlen($D);$i++){
$c = $K[$i+1&15];
$D[$i] = $D[$i]^$c;
}
var_dump(gzdecode($D));
}
$pass='DASCTF';
$payloadName='payload';
$key='9854e8aa5568e23c';
$request_data ='J748ZThhYTU1NjWpAz2hCTQ19M0T/tEHhbdtMxYleyEo1z+jjnUl6WGDGRgM72C3dVubLL8qK/w+2iBXOVef67qIQ0lZdGrErqhtlAHkJdugunhkNxN+yJ+91ga/P+TqTgG5t9wvx/bTadLPTl0FDfE6wRw97Qs1NTY=';
echo
response_decode($request_data, $key);
5.但是看后面没有回显到cat txt的内容,尝试后得知zip的密码就是哥斯拉流量密文解密的key:9854e8aa5568e23c,得到的文件是乱码
6.密文解密后得到的cat Pass1sHere.txt中txt的名字就是1.pem文件的解密密码,010打开后发现其中是一个PRIVATE KEY
7.要使用1.pem中的私钥解密flag文件,具体用法可参考https://blog.csdn.net/as3luyuan123/article/details/16331003
openssl pkeyutl -decrypt -in flag -inkey 1.pem -out flag.txt