# WEEK1

# 真的签到

flag{Welc0me_tO_SHCTF2023}

# 请对我使用社工吧

社工题,根据图片去寻找

根据万达体彩店这个信息,找对面有大学的,最终找到山东东营西城万达广场,对面就是中国石油大学

flag {山东省东营市东营区_中国石油大学}

# 也许需要一些 py

将未加密的 flag 文件解压出来放入 winhex

补上缺少的 PNG 头,并且加上 png 后缀

得到图片,发现是一串 md5,解码一下注释

发现是一个 key,将大写转为小写,解压出加密文件

得到

根据题目提示:flag 怎么没大没小的可以知道这并不是最终的 flag,并且大小写有问题,根据前面得到的 md5 可以猜测是正确 flag 的 md5 值用来校验,利用脚本来组合字符串校验 md5

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import hashlib
import itertools

target_md5 = "63e62fbce22f2757f99eb7da179551d2"
input_string = "pNg_and_Md5_SO_GreaT"

def generate_case_combinations(input_string):
combinations = []
for case_combination in itertools.product(*zip(input_string.lower(), input_string.upper())):
combinations.append(''.join(case_combination))
return combinations

def find_matching_string(target_md5, input_string):
for combination in generate_case_combinations(input_string):
md5_hash = hashlib.md5(combination.encode()).hexdigest()
if md5_hash == target_md5:
return combination
return None

result = find_matching_string(target_md5, input_string)
if result:
print("找到匹配的字符串:", result)
else:
print("未找到匹配的字符串")

得到

flag{Png_AnD_md5_so_GReAt}

# ez-misc

得到附件是一串 01 字符串,利用脚本转换为二维码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from PIL import Image
from zlib import *

MAX = 29
pic = Image.new("RGB",(MAX,MAX))
str ="1111111011111111011000111111110000010011000101010001000001101110100011000110010010111011011101011010000100010101110110111010000111111000001011101100000100011101111010010000011111111010101010101010111111100000000000000111111100000000001011101000111010100100010010011000000101101111100010001110110010101001111010001110011101001001001100100010001000100110001001100010101001110100011010000110100110000001101111000001100111111000100101011111000110010000011111111111000111010110001110100100110011010011000011010000110011100100111011001110011010100110100111101101000110001001110101010010100100110001111101111111100010000000011110011010110001000011111110010000000001101010111100000101110100010101000100101011101011000001110011111111110111010010101001010000110100101110101111111011010001100011000001000111101111001001101011111110010100011110111100111"
i=0
for y in range(0,MAX):
for x in range(0,MAX):
if(str[i] == '1'):
pic.putpixel([x,y],(0,0,0))
else:pic.putpixel([x,y],(255,255,255))
i = i+1
pic.show()
pic.save("flag.png")

得到:

扫描得到:hit_k1sme4_4_fun

解压加密附件

根据 PK 头添上后缀.zip

解密注释提示 rockyou 字典,证明需要用到字典爆破

1
2
zip2john flag.zip > hash
john --wordlist=rockyou.txt hash

得到密码 palomino,解压得到

猜测为字频统计,使用脚本排列

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# -*- coding:utf-8 -*-
#Author: mochu7
alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()_+- =\\{\\}[]"
strings = open('flag.txt').read()

result = {}
for i in alphabet:
counts = strings.count(i)
i = '{0}'.format(i)
result[i] = counts

res = sorted(result.items(),key=lambda item:item[1],reverse=True)
for data in res:
print(data)

for i in res:
flag = str(i[0])
print(flag[0],end="")

得到 flag

flag{SHyk1sme4}

# Jaeger lover

得到图片和加密压缩包

图片尾的 base 解码得到

1
you know the Windows is a system for PC,but do you know the what is thr Op. System for this Jaeger?

让我们去找暴风赤红的操作系统

能在百度百科中找到 Tri-Sun Horizon
Gate,根据题目提示每张图片有两个 steg,猜测该图片另一个 steg 为 steghide

得到压缩包密码

1
.*+#1Ao/aeS

一看宽高就明显被修改过,CRC 爆破出正确的宽高

再次得到 key,K34-759183-191

查看图片结构发现文件尾有冗余,猜测为 oursecret 隐写

得到 flag,flag{A1l_boys_aRe_Jaeger_L0ver!!}

# Steganography

在 careful.jpg 图片末尾发现一串 base64

这题应该是算非预期出的,将输出作为掩码进行爆破,大概半小时左右,忘记截图了就不重新爆破一遍了,密码为 12ercsxqwed909jk

解压得到 flag,flag{4d72e4f3-4d4f-4969-bc8c-a2f6f7a4292c}

# 可爱的派蒙捏

分离图片出一个压缩包

解压得到两个相似的文本 1.txt 和 2.txt

用 winhex 的文件工具进行比较

保留差异第二列进行 16 进制转换

1
666C61677B34656266333237393035323838666361393437617D

得到 flag,flag{4ebf327905288fca947a}

# message

16 进制转换得到 flag

SHCTF{ba978405-b1c8-847c-8e69-f62177e4c087}

# 签到题

两层 base64 得到 flag

flag{this_is_flag}

# WEEK2

# 远在天边近在眼前

得到压缩包,从里到外拼接文件夹字符得到 flag

flag{TH15_1S_r3aIIY_eA5y_4LRi9Ht?_765786987fad}

# 奇怪的 screenshot

得到截图

winhex 查看

发现有两个图片尾,截图 cve,CVE-2023-28303

使用工具还原

得到

1
杨吕褚朱窦任云伍孙赵孙李伍孙冯李赵李伍袁尤张钱钱伍花张尤曹曹尤张朱伍魏赵赵吕伍尤金伍张赵魏伍花韩蒋陶华韩

百家姓解密

得到 flag,flag{CVE-2023-28303-Win11-Snipping-t00l-is-n0t-Secure}

# 可爱的洛琪希

得到 jpg 的 base64 编码,解码之后保存为图片

在详细信息中找到编码

图片末尾找到 key,nanian

16 进制解码,维吉尼亚解密得到 flag

flag{Roxy_daisuki!}

# 图片里的秘密

在图片末发现 rar 压缩包,手动分离出来

解压得到

根据题目提示盲水印猜测为 java 盲水印,水印工具提取得到

flag{Blind_Water_Mark!}

# 表里的码

得到一个 zip 文件,根据题目提示发现是表格的压缩包

修改后缀为 xls 打开

随便点点发现有些单元格字体是加粗的,将加粗单元格填充为黑色得到二维码

扫码得到 flag,flag{j0k3r_1s_my_wif3}

# 喜帖街

先放张图来阐述一下这个老知识点

原理就是利用声波干涉消除原声得到想要的音频

附件得到 wav 音频,听了下发现有杂音,想到了反相相消,这里在网上下载了原曲,使用 au 进行反相

首先导入两个音频创建多轨并拖入

当弹出采样率不匹配时点击确定使它自动转换成相同的采样率

拉大将音轨对齐

再双击原曲也就是上图所示紫色部分,全选之后点击效果中的反相

回看多轨能发现波峰正好对应上波谷,实现相消

导出多轨重新放入 au 中查看频谱图

频谱图上发现了一串字符串 LeeTung,作为 key 来解音频隐写,尝试 deepsound 和 silenteye 都不是,这里也是一个比较老的知识点,wav 的 steghide 隐写

文本中得到 ook 编码,解码得到 flag

flag{w@v2txt_s0_Int3r3st1ng!}

更新于