某训练营结营赛

整理一下比赛里学到的新姿势

S7_analysis

这个题不是很懂,网上搜的时候在大佬的博客里提到可以使用s7comm.header.rosctr == 1过滤,我过滤完之后只剩了三个流量,一个一个编号试,最后用399试出来了

hsnctf{39}

extract

这题运气比较好,拿了二血,学了些新姿势。

题目附件是一个Cloakify.txt.zip,解压后得到了一个Cloakify.txt,里面是一堆emoji:

网上百度了一下,发现了一个叫Cloakify-Powershell的工具,可以基于文本的隐写术输出来掩盖文件,其中就包括通过emoji进行隐写,使用方法为先在powershell里.\cloakifyFactory.ps1启动(如果启动失败可能是脚本信任的问题,复制报错去百度一下就可以找到解决方法),然后如下操作即可:

然后可以看到我们在指定路径输出了一个flag.txt

看到PK就知道一眼zip,我们把它重名为1.zip,解压出来得到一个f2332.zip,然后解压出来又得到一个f2331.zip,一眼套娃zip题,改改之前红岩杯那个脚本就行了:

import zipfile
import os
for i in range(2330,1,-1):
    zfile=zipfile.ZipFile(f"./f{i}.zip","r")
    zfile.extractall(path=".")
    if i!=1000 or i !=2000 or i !=500 or i !=50:
        os.remove(f"f{i+1}.zip")

最后解压到f1.zip拿到flag

对于这种持续解压的套娃题,建议不要在解压中停止,因为这样可能导致文件损坏压缩包没法继续解压,所以写脚本的时候千万不要解压一个删一个,最好保持文件夹里至少有两个压缩包同时存在,这样最新的那个寄了还能用上一个,或者直接用我这个脚本改改得了。

外星电波

附件是一个flag.zip压缩包,2.3mb,解压出来是一个flag.rar,也是2.3mb,但再解压就只剩下一个flag.txt了,只有1kb,显然这里面有问题,我试了常见的foremost,binwalk之类的啥也没分出来,只好把视线投向这个flag.txt了,里面只有一行:

UEsDBBQAAQAAAJWWe1X3LRmUOAAAACwAAAAHAAAAa2V5LnR4dC07SzAm0/65DjqdNiRlBKXO92+KgkCxomKGJLjsGcV7Fue2z4K1sKgxXqQAQJ7R+MbJWT8Zvan2UEsBAj8AFAABAAAAlZZ7VfctGZQ4AAAALAAAAAcAJAAAAAAAAAAgAAAAAAAAAGtleS50eHQKACAAAAAAAAEAGACLClJfTgLZAYsKUl9OAtkBnjjX+k0C2QFQSwUGAAAAAAEAAQBZAAAAXQAAAAAA

这个/还有+看起来眼熟的一批,用base64解码了一下,发现了PK,看来是zip,但直接解码会有一大堆奇奇怪怪的字符,显然格式有问题,最后求助于万能的ChatGPT,写了一个可以将base64解码后的数据以16进制保存的python脚本:

import base64

# 获取需要解码的base64字符串
base64_str = 'UEsDBBQAAQAAAJWWe1X3LRmUOAAAACwAAAAHAAAAa2V5LnR4dC07SzAm0/65DjqdNiRlBKXO92+KgkCxomKGJLjsGcV7Fue2z4K1sKgxXqQAQJ7R+MbJWT8Zvan2UEsBAj8AFAABAAAAlZZ7VfctGZQ4AAAALAAAAAcAJAAAAAAAAAAgAAAAAAAAAGtleS50eHQKACAAAAAAAAEAGACLClJfTgLZAYsKUl9OAtkBnjjX+k0C2QFQSwUGAAAAAAEAAQBZAAAAXQAAAAAA'

# 将base64字符串解码
decoded_data = base64.b64decode(base64_str)

# 将解码后的数据转换为16进制
hex_data = decoded_data.hex()

# 将转换后的16进制数据写入文件
with open('data.hex', 'w') as f:
    f.write(hex_data)

然后将那个data.hex里的16进制数据像之前菜狗杯的一样在010editor里新建一个文件,然后粘贴自16进制,最后保存并重命名为1.zip,这样就是一个正常的压缩包了,里面有一个key.txt,但有压缩包密码,而且还不是伪加密,当时爆破了很久也没爆破出来,赛后复现才知道不是用来爆破的,那个从rar到txt里消失的数据其实是被NTFS隐藏了。

这里要注意一下,只能用winrar解压那个flag.rar,否则会因为损失数据导致检测不出来被ntfs隐藏的文件,我就因为这个赛后复现浪费了很多时间。成功解压后我们使用ntfs神器ntfsstreamseditor即可找到那个flag.txt里消失的数据,原来是隐藏了一个wav文件:

导出来之后稍微听一下就知道是SSTV,真的是太太太太常见了,这学期开始接触misc之后,比赛里至少遇到了五次sstv了,参考我之前菜狗杯的教程用虚拟声卡,或者电脑打开音频,手机放旁边用Robot36嗯听也可以,就是有点吵:

passwd@hillstone

用这个密码解压那个压缩包即可拿到flag:

vigenere

#enc.py
import string

from secret import flag
from secret import encrypt

import random

dicts = string.ascii_lowercase +"{}"

key = (''.join([random.choice(dicts) for i in range(4)])) * 8

assert(len(flag) == 32)

assert(len(key) == 32)


cipher = encrypt(flag, key)

print(cipher)

# {mvjk}gbxyiutfchpm}ylm}a}amuxlmg
#table.tsv
  a b c d e f g h i j k l m n o p q r s t u v w x y z { }
a a b c d e f g h i j k l m n o p q r s t u v w x y z { } 
b b c d e f g h i j k l m n o p q r s t u v w x y z { } a 
c c d e f g h i j k l m n o p q r s t u v w x y z { } a b 
d d e f g h i j k l m n o p q r s t u v w x y z { } a b c 
e e f g h i j k l m n o p q r s t u v w x y z { } a b c d 
f f g h i j k l m n o p q r s t u v w x y z { } a b c d e 
g g h i j k l m n o p q r s t u v w x y z { } a b c d e f 
h h i j k l m n o p q r s t u v w x y z { } a b c d e f g 
i i j k l m n o p q r s t u v w x y z { } a b c d e f g h 
j j k l m n o p q r s t u v w x y z { } a b c d e f g h i 
k k l m n o p q r s t u v w x y z { } a b c d e f g h i j 
l l m n o p q r s t u v w x y z { } a b c d e f g h i j k 
m m n o p q r s t u v w x y z { } a b c d e f g h i j k l 
n n o p q r s t u v w x y z { } a b c d e f g h i j k l m 
o o p q r s t u v w x y z { } a b c d e f g h i j k l m n 
p p q r s t u v w x y z { } a b c d e f g h i j k l m n o 
q q r s t u v w x y z { } a b c d e f g h i j k l m n o p 
r r s t u v w x y z { } a b c d e f g h i j k l m n o p q 
s s t u v w x y z { } a b c d e f g h i j k l m n o p q r 
t t u v w x y z { } a b c d e f g h i j k l m n o p q r s 
u u v w x y z { } a b c d e f g h i j k l m n o p q r s t 
v v w x y z { } a b c d e f g h i j k l m n o p q r s t u 
w w x y z { } a b c d e f g h i j k l m n o p q r s t u v 
x x y z { } a b c d e f g h i j k l m n o p q r s t u v w 
y y z { } a b c d e f g h i j k l m n o p q r s t u v w x 
z z { } a b c d e f g h i j k l m n o p q r s t u v w x y 
{ { } a b c d e f g h i j k l m n o p q r s t u v w x y z 
} } a b c d e f g h i j k l m n o p q r s t u v w x y z { 

本人不太懂密码学,这个脚本来自时维嘉大佬

import random
import string
import itertools
dicts = string.ascii_lowercase +"{}"
print(dicts)
# key = (''.join([random.choice(dicts) for i in range(4)])) * 8
enc = '{mvjk}gbxyiutfchpm}ylm}a}amuxlmg'
for k in itertools.product(dicts,repeat=4):
    key = ''.join(k)
# print(key)
    numenc = [dicts.index(i) for i in enc]
    numkey = [dicts.index(i) for i in key]
    flag = ''
    for i in range(len(enc)):
# assert len(numenc) == len(numkey)
        ans = (numenc[i] - numkey[i % 4]) % 28
        flag += dicts[ans]
    if 'hsnctf' in flag:
        print(flag)
        break
#b'hsnctf{wecanalwaystrustvigenere}'

后记

六道web四道零解,还有一道到比赛最后才有一个人做出来,真的属实有点难绷,web我后面专门写个详细分析,有机会把那些题都研究研究。

不过训练营里发的那个MISC思维导图是真的好用,也算不虚此行了,而且那上面关于rar也写了ntfs,可惜当时我没放在心上

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇