Luoingly's Space

SICTF 2023 Round#3 团队赛 Misc 方向个人题解

February 21, 2024 · Legacy Blog

[签到] 签到

这也要写 Writeup?

关注公众号发送 SICTF{Round3,我来辣~} 即可。

真💨签到

压缩包的结尾藏了一段 Hex,找到合适的工具将其解码就能得到压缩包的密码 2024HappyNewYear

Screenshot-202402191454

解压后可以得到一个 WAV 文件和一个 JPG 文件,先看一眼 WAV 音频的频谱图:

Screenshot-202402191503

结合文件名(Lagrange is Capatlized)可以得到 givemeyourLAGRANGE,将其作为密码对 JPG 文件进行 Steghide Extract 就可以得到 Flag 了:

$ steghide extract -p givemeyourLAGRANGE -sf steg.jpg
wrote extracted data to "flag.txt".
$ cat flag.txt 
SICTF{T3e_endless_Lagrange_is_really_fun!}

New Year’s regret

压缩包密码差四位数字不知道,直接手搓脚本爆破就能出:2024SICTF,解压得到一个 TXT 文件和一个 PNG 文件。TXT 文件中只有字符 01,直接丢给 Cyberchef 二进制作图可以得到:

Screenshot-202402191507

网上随便找下密码表,可以从中解出字母 putitalltogether。PNG 文件的本体是一个汉信码,内容为「flag 好像不在这里 ing」,没啥用。用 Binwalk 扫一下 PNG 文件可以撕出一个压缩包(内含一个 TXT 文件)和另一个 PNG 文件(PNG 接完 ZIP 后再接了一个 PNG)。这个 TXT 文件是个 Base64 套娃,手搓下脚本解个 35 回(次数由尝试得出)就能得到一个 PNG 文件:

import base64
source = open('_task.png.extracted/result.txt', 'r').read()
for _ in range(35):
    source = base64.b64decode(source)
print(source.hex())

发现这是个二维码,直接丢给 Cyberchef,扫描后得到部分 Flag(SICTF{Congratulation_to_you!)。另一张图片如下图所示(顺时针旋转 90°),结合 Hint「其中有一部分你知道是几星吗?」可以猜测这些都是某个游戏的武器,需要查找对应的星级。

Screenshot-202402191517

截取部分进行搜图后可以得知是游戏「战双帕弥什」,对着 WIKI 一个一个找过去可以完成(找得我眼花):

44664654464566654465645644544664654654644546445446646565444454544664654664544545646454544454466465465645644

三状态首先考虑 Morse,将 456 分别替换为 . - 然后进行 Morse 解码就能得到另一部分 Flag。最后拼接下 Flag 就好了(中间自行确定那个接在哪个后面,自行在单词之间加上下划线,不行就多试)。最终得到 Flag:

SICTF{Congratulation_to_you!_found_all_the_pieces_and_put_it_all_together}

GeekChallege

根据 Tips(len(array)=5&&len(passwd)=114)猜测:密码长度 114,每次连接随机取 5 个字符生成密码。搓脚本爆破就是了:

from string import printable
from pwn import remote, context

password = ['']*114
context(log_level="debug")
io = remote("yuanshen.life", 33505)

for c in printable:
    io.recvuntil(b">")
    io.sendline((c*114).encode())
    result = io.recvline().strip().decode()
    if '1' in result:
        for i in range(114):
            if result[i] == '1':
                password[i] = c
    if all(password):
        break

io.recvuntil(b">")
io.sendline(("".join(password)).encode())
io.interactive()
io.close()

WHO?WHO?WHO

根据 Hint「压缩包密码为 6 位小写字母」进行爆破得到压缩包密码 qweqwe,解压后得到一个 TXT 文件,不难发现里面存在 Unicode 零宽字符隐写,找个合适的工具进行解码可以得到下面的内容,盲猜是 Rabbit:

U2FsdGVkX19uvldJ6CGUNff3B28QEdIjZqgUh98K+/0J16ELU8WVQydohw4P5+2M
jbhTLQHNOpcoOd7kSRgy8pwpovCmimdD8M0IbYUeXjNKYePL/WP4PCMaOJHAW3HR
b7IEoDDH1NYh3o5NwMmcFEqy1ujf72VgQIQkaeYFFFE=

找个工具试了一堆密码,最后用 shumu 作为 Key 进行 Rabbit 解密得到一坨 DNA。密码表网上随便找找就有,手搓个脚本吧:

src = "GTAGAGCTAGTCCTT{GGGTCACGGTTC_GGGTCACGGTTC_GAACGGTTC_GTAGTG_GCTTCA_GTAGACGTGGCGGTG_GTAGACTCA_TATGACCGG_GCTCGGGCT}"
mapping = { 'AAA':'a','AAC':'b','AAG':'c','AAT':'d','ACA':'e','ACC':'f', 'ACG':'g','ACT':'h','AGA':'i','AGC':'j','AGG':'k','AGT':'l','ATA':'m','ATC':'n','ATG':'o','ATT':'p','CAA':'q','CAC':'r','CAG':'s','CAT':'t','CCA':'u','CCC':'v','CCG':'w','CCT':'x','CGA':'y','CGC':'z','CGG':'A','CGT':'B','CTA':'C','CTC':'D','CTG':'E','CTT':'F','GAA':'G','GAC':'H','GAG':'I','GAT':'J','GCA':'K','GCC':'L','GCG':'M','GCT':'N','GGA':'O','GGC':'P','GGG':'Q','GGT':'R','GTA':'S','GTC':'T','GTG':'U','GTT':'V','TAA':'W','TAC':'X','TAG':'Y','TAT':'Z','TCA':'1','TCC':'2','TCG':'3','TCT':'4','TGA':'5','TGC':'6','TGG':'7','TGT':'8','TTA':'9','TTC':'0','TTG':' ','TTT':'.'}
result, i = "", 0
while i < len(src):
    if src[i] not in "ATCG":
        result += src[i]
        i += 1
    else:
        result += mapping[src[i:i+3]]
        i += 3
print(result)

# SICTF{Q1A0_Q1A0_GA0_SU_N1_SHUMU_SH1_ZHA_NAN}

日志分析 1

直接使用 Windows 的工具进行筛查效率貌似有点低,但是可以用它将日志导出为 TXT 或者是 CSV 文件,这样就方便多了。不难找到相关信息所在日志:

信息	2020/07/22 10:50:57	Microsoft-Windows-Security-Auditing	4720	User Account Management
已创建用户帐户。

属性:
	SAM 帐户名:	attack$
	显示名称:	<未设置值>
	用户主体名称:	-
	主目录:		<未设置值>
	主驱动器:	<未设置值>
	脚本路径:	<未设置值>
	配置文件路径:	<未设置值>
	用户工作站:	<未设置值>
	上次设置的密码:<从不>
	帐户过期:	<从不>
	主要组 ID:	513
  ...
信息	2020/07/22 10:51:15	Microsoft-Windows-Security-Auditing	4698	Other Object Access Events
已创建计划任务。

任务信息:
	任务名称: 		\callback
	任务内容: 		
<?xml version=""1.0"" encoding=""UTF-16""?>
<Task version=""1.2"" xmlns=""http://schemas.microsoft.com/windows/2004/02/mit/task"">
  ...
  <Actions Context=""Author"">
    <Exec>
      <Command>c:\windows\system32\windows_attack.exe</Command>
    </Exec>
  </Actions>
  ...
</Task>
信息	2020/07/22 10:52:06	Microsoft-Windows-Security-Auditing	4769	Kerberos Service Ticket Operations
已请求 Kerberos 服务票证。

帐户信息:
	帐户名:		attack$@ADOFLMB.COM
	帐户域:		ADOFLMB.COM
	登录 GUID:		{7539ad21-0be8-8cb6-7406-054797c14d68}
信息	2020/07/22 10:52:19	Microsoft-Windows-Security-Auditing	4779	Other Logon/Logoff Events
已断开会话与窗口站的连接。

使用者:
	帐户名:		attack$
	帐户域:		ADOFLMB
	登录 ID:		0x12A334

会话:
	会话名:		RDP-Tcp#0

附加信息:
	客户端名:		kali
	客户端地址:		192.168.222.200

所以对着 Hint 组织下 Flag:

SICTF{192.168.222.200|attack$|Administrators|callback|c:\windows\system32\windows_attack.exe|ADOFLMB.COM\attack$}

日志分析 2

直接对着 LOG 文件手撕,不难找到:

10.11.35.95 - - [30/Sep/2019:10:27:28 +0800] GET /index.php?action=view&mod=detail&id=12 HTTP/1.1 200 1859 - sqlmap 1.2.4.18
10.11.35.95 - - [30/Sep/2019:11:08:15 +0800] POST /images/avatar/web.php HTTP/1.1 200 355 - antSword/v2.1

并且这个 IP 对疑似登录接口在短时间内有着大量请求,怀疑是在爆破密码。所以 Flag:

SICTF{10.11.35.95|暴力破解|sqlmap|1.2.4.18|蚁剑|2.1}

Tags: #CTF #Writeup #Misc #SICTF

This article is authored by luoingly and licensed under CC BY-NC 4.0

Permalink: https://luoy.ing/posts/sictf-2023-round3-misc-writeup/