1753ctf - WriteUp & 复现


碎碎念

这是上周末的跟su一起打的一个国际赛,不过因为在打TG,所以最后也没怎么打,除了osint里的Somewhere in Space,其他都是后面复现的,也算是填补一下复现分类的空缺,这块还是得多刷,最近有点太怠惰了

ps:还在绝赞复现中,不全的

MISC

Apples and Oranges

知识点省流

js语法 wtfjs

WP

After capturing an enemy spy, the only thing we got from him was that the password is bananafruit. It does not seem to be right though. Can you help us?

题目信息如上,他提醒我们密码是bananafruit,但通过nc连接并提交后会发现无法得到flag,其回显提示我们这个输入不被允许

image-20250418145941280

通过简单的回显测试,可以确认仅可以输入+![]{}() ,这看起来有点像jsfuck,但实则不然,这里涉及到了另一个语法:WTFJS

参考https://github.com/denysdovhan/wtfjs/blob/master/README-zh-cn.md,可以了解到wtfjs相关的语法和技艺

在wtfjs中,可以用([]+{})表示字符串[object Object],然后我们可以通过索引提取这个字符串中的特定字符,而+!![]表示计算结果1,所以通过表达式([]+{})[+!![]+ +!![]]就可以表示从字符串[object Object]中取索引为2的字符

以此类推即可得到payload

([]+{})[(+!![]+ +!![])]+(![]+[])[+!![]]+(+{})+(![]+[])[+!![]]+(![]+[])[+[]]+(!![]+[])[+!![]]+(!![]+[])[(+!![]+ +!![])]+(([][[]]+[])[(+!![]+ +!![]+ +!![]+ +!![]+ +!![])])+(!![]+[])[+[]]

image-20250416230507862

GAS

知识点省流

脑洞 社工

WP

I've heard there is a guy with gas joining this discord soon. Maybe we can help him a bit? https://youtu.be/QaxGfxIDK8M

题目信息如上,其指向了一个youtube视频,其中视频的内容实际上说明了题目的GAS指的是装备收集综合征(gear acquisition syndrome),然后抽象的来了,在discord里面有个机器人叫Gear Collector(我说实话想得到就有鬼了),与它进行对话就可以触发任务,他会要求我们帮他找到指定属性的乐器,然后我们通过社工找到链接后提交,它会检测是否符合要求

image-20250418153032763

不过他的要求会越来越离谱,以至于不好社工,甚至可能压根不存在这玩意)

不过这个机器人应该是检测网页中的内容,当检测到符合的所有要素后则通过检测,所以可以自己构造网页丢给它,我这边直接拿自己博客写了)

image-20250418152737654

最后通过n轮提交,得到了flag

image-20250418152651827

OSINT

Somewhere in Space

知识点省流

WP

直接将图片丢到谷歌搜索,看到这个一样的图,找到他的原地址

image-20250415132343202

可以看到这里其实是展示了一些涂鸦,往下翻我们就能找到这个宇航员在看的是什么

image-20250415132433072

而他看的这张图在最开始有一张高清大图,其文件名就是Aphrodite_final.j(只需要提交看得到的部分)

image-20250415132510312

STEGANO

Never Gonna Flag You Up

知识点省流

音频隐写(midi)

WP

下载附件得到一个mid文件,第一次接触这个文件,所以简单了解一下,在mid文件的wiki中,提到了midi的运作过程,其中包括了一个名为力度的特定速率(很重要)

image-20250416215609007

将文件丢给audacity分析(顺带一提播放出来是never gonna give you up)

image-20250416215925370

这里考察的知识点其实是midi的力度隐写,这边可以让gpt帮忙生成一个脚本用来读取midi文件的力度

import mido	# 核心就在于这个库

def extract_velocity_from_midi(file_path):
    mid = mido.MidiFile(file_path)
    velocities = []

    for i, track in enumerate(mid.tracks):
        print(f'Track {i}: {track.name}')
        for msg in track:
            if msg.type == 'note_on':
                velocities.append(msg.velocity)

    return velocities

# 示例使用
file_path = 'final_version_v199237.mid'  # 将这改成你的 MIDI 文件路径
velocities = extract_velocity_from_midi(file_path)

print('提取的力度值:')
print(velocities)

运行脚本,会发现成功输出我们要的力度值,但除此之外里面还包含了大量的值为81的力度,这些是干扰值,将他们去除即可

image-20250416220840199

import mido

def extract_velocity_from_midi(file_path):
    mid = mido.MidiFile(file_path)
    velocities = []

    for i, track in enumerate(mid.tracks):
        print(f'Track {i}: {track.name}')
        for msg in track:
            if msg.type == 'note_on' and msg.velocity != 81:
                velocities.append(msg.velocity)

    return velocities

# 示例使用
file_path = 'final_version_v199237.mid'  # 将这改成你的 MIDI 文件路径
velocities = extract_velocity_from_midi(file_path)

print('提取的力度值:')
print(velocities)

# 得到
# [64, 49, 55, 53, 51, 99, 123, 82, 105, 99, 107, 95, 65, 115, 116, 108, 101, 121, 95, 73, 115, 95, 80, 114, 111, 117, 100, 95, 79, 102, 95, 89, 111, 117, 125]

用厨子转为ascii值后得到flag

image-20250416221051527

顺带一提,这题里面还藏了一个fake flag,得益于一个midi的隐写工具https://github.com/maxcruz/stegano_midi,用它可以提出里面的fake flag

FORENSIC

Rest In Peace

知识点省流

restic备份工具使用&密码爆破

WP

下载附件得到一个文件夹,里面的目录结构如下,并没有见过这种项目,遂需要现场搜索分析

image-20250416223958413

用谷歌搜索目录,可以搜索到一个叫restic的工具,在其官网中可以得知这是一个备份工具

image-20250416224624455

在kali中安装restic,根据官网的使用说明尝试打开附件的内容,但是它提示我们需要密码,但我们并没有

image-20250416224837384

这边需要用到github上的一个restic爆破工具()

爆破成功后,用密码打开仓库,发现里面有一个快照

image-20250416225542022

查看快照的内容,发现有两个flag,读取后发现是假的,但这里的序号显然有问题,只有1和5,其中的2和4不见了,应该是被删除了

image-20250416225646562

简单了解一下,发现可以通过recover命令恢复快照(前提是作者没有执行prune参数删除快照备份),recover后发现多了一个快照

image-20250416230010999

老样子读取里面的内容即可找到flag

image-20250416230140830

1753c{faked_my_own_death_to_save_the_flag}

qwq