cyi 源鲁杯2024第二轮wp
Round 2
Web
[Round 2] Cmnts
查看源码,base64解码得到路径get_th1s_f1ag.php
parse_str($_SERVER['QUERY_STRING']); #将url?后面的字段截取,并分别设置成变量(变量覆盖)
主要逻辑在这块(感觉应该是想考变量覆盖的,但是好像代码写错了?)
if (isset($key) && $key === 'a7a795a8efb7c30151031c2cb700ddd9') {
echo $flag;
}
Crypto
[Round 2] ezAES
给了key和iv,用cbc模式,自己填充一下padding就行
# encoding:utf-8
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad
key = b'YLCTF-CRYPTO'
iv = b'YLCTF-IV'
key += b'\x00' * (16 - len(key)) # 扩展到16字节
iv += b'\x00' * (16 - len(iv)) # 扩展到16字节
aes = AES.new(key,2,iv)
encrypted_data = b'\xed\x1d]\xe6p\xb7\xfa\x90/Gu\xf4\xe2\x96\x84\xef90\x92e\xb4\xf8]"\xfc6\xf8\x8cS\xe9b\x19'
decrypted_padded_data = aes.decrypt(encrypted_data)
decrypted_data = unpad(decrypted_padded_data, AES.block_size)
print(decrypted_data)
#keysauikoydasuicxs
YLCTF{130f4f18-8ec2-4124-b79a-e9fbbc15d88a}
Misc
[Round 2] Trace
图片尾藏东西,直接拿出来
或者zsteg提取
base64解码,得到rar压缩包
aapr爆破不了
用rarjohn+hashcat
复制后面那段,然后爆破6位数(这里先用了6位纯数字试试水,就有了)
.\hashcat.exe -D 2 --force -m 13000 "hash.txt" -o "flag.txt" -a 3 ?d?d?d?d?d?d
-D使用gpu跑,-m指定rar格式,?d数字占位符,其他的自己去了解
得到密码370950吗,解压得到一个斜图,ps拼接
对于不确定的,多尝试一下(7--1,0--o)
YLCTF{ccfe9e2c-391f-4055-a128-c06b65426c83}
[Round 2] 听~
常规路子走完,发现没东西,各种tool上一手
deepsound直接提取文件(不用密码)
爆破得到密码10117
stegsolve查看图片
发现red通道0、1,green通道2、3,blue通道1、4有隐写
lsb得到flag
YLCTF{1b690589-9f50-49ea-b0b0-da92c10c7e18}
[Round 2] 滴答滴
题目叙述,猜测是摩斯电码,主要思考在于怎么替换成电码形式
这里替换格式是
00FF--0
FF00--1
知道这个,解密就好了
我是把十六进制拿出来的
jio本:
with open("C:\\Users\\86139\\Desktop\\1.txt", 'r') as f:
bin = ''
flag = ''
str = f.read()
list = [str[i:i + 4] for i in range(0, len(str), 4)]
for i in list:
if i == '00FF':
bin += '0'
else:
bin += '1'
bin = [bin[i:i + 8] for i in range(0, len(bin), 8)]
for i in bin:
flag+=chr(int(i,2))
print(flag)
YLCTF{7d160084-4dd5-4eec-bf1f-12f3ad8c8a6b}
Re
[Round 2] 三点几啦饮茶先
看一下代码,v9是key
输入tea算法中的v,encipher函数是加密逻辑,跟进函数
可以把代码拿出来,换换变量名,方便看
key和delta都有了,直接逆向代码(上网找个类似的)逆向分析中的密码学---tea_ctf逆向tea-CSDN博客
#include<stdio.h>
#define DELTA 289739961
void tea_decrypt(unsigned int* v, unsigned int* key) {
unsigned int l = v[0], r = v[1], sum = 0;
sum = DELTA * 40;
for (unsigned int i = 0; i < 40; i++) {
r -= (((l>>5) ^ (l*16)) + l) ^ (sum + key[(sum >> 11) & 3]);
sum -= DELTA;
l -= (((r >> 3) ^ (4*r)) + r) ^ (sum + key[sum & 3]);
}
v[0] = l;
v[1] = r;
}
int main(int argc, char const *argv[])
{
unsigned int key1[4]={4097,8194,12291,16388};//key
unsigned int v1[2];
v1[0] = 1913208188;
v1[1] = -1240730499;
tea_decrypt(v1,key1);
printf("tea_decrypt:%u %u\n",v1[0],v1[1]);
return 0;
}
YLCTF{0f88fef1-1c57-43a1-9cb8-a01a6eb22887}