前言

记录📝一些自己复现的过程吧.

第15届全国大学生知识竞赛

比赛时间:5.29 11:00 - 5.29 19:00
比赛网址: https://ctf.ichunqiu.com/topic/2022dxs


misc

everlasting_night

everlasting_night.zip

照片文件尾多出了这个.

FB 3E FC E4 CE AC 2F 54 45 C7 AE 17 E3 E9 69 AB

image-20220602113605031

用md5解密看看,得到ohhWh04m1

image-20220602131624298

通过stegsolve照片隐写工具

发现alpha plane2通道有隐藏数据

image-20220602132038443

查看数据为f78dcd383f1b574b

image-20220602132218696

通过lsb隐写分离(工具🔧)之后用exiftool查看得知文件为zip压缩包(看文件📃头也可以)

image-20220603184220246

查看压缩包内容,如何检查压缩包是否有错误,没错误就解压带上密码参数-P ohhWh04m1

image-20220603184925001

查看文件类型,发现是PNG.

于是就先用pngcheck工具检查一下.

果然发现错误:invalid IHDR image dimensions (0x0)

我们知道是IHDR块存在问题,所以先去看看文件的十六进制转储 (Hex dump)

通过xxd命令并通过管道将其输入head,就一目了然了(通过010看也可以,这里方便演示)

image-20220603190451844

现在,我们来分解一下信息.

  • 89 50 4e 47 0d 0a 1a 0a:这可以识别为文件签名(文件头),这是 UNIX 系统用来识别文件类型的.
  • 00 00 00 0d:这是我们的 IHDR 长度.
  • 49 48 44 52:这是我们的块类型,在这种情况下指定 IHDR.
  • 00 00 00 00: 这是我们的宽度,显然这是无效的.
  • 00 00 00 00: 这是我们的身高,显然这也是无效的.
  • 08: 这是我们的位深度.
  • 06: 这是我们的颜色类型
  • 00: 这是我们的压缩类型.
  • 00:这是我们的过滤器类型.
  • 00: 这是我们的区间类型.
  • 00 00 00 00: 这是我们的 CRC 校验和,显然它也是无效的.

现在我们还知道了 图像尺寸 以及 CRC 校验和 无效.

关于CRC 校验和有疑问?那我简单介绍一下吧.

CRC 校验和是基于块数据计算的,如果 IHDR 块有效,那么它的 CRC 校验和 将匹配 hexdump 中提供的CRC.

既然CRC 校验和无效,那么我们不能通过暴力破解 IHDR 块中可能的图像尺寸来修复损坏的 png 图像

观察后面的数据,我们可以将51之后的数据另存后缀为data的文件,用gimp打开.

调整宽度为352,即可得到我们的flag.

image-20220603215119450

flag{607f41da-e849-4c0b-8867-1b3c74536cc4}

ez_usb

ez_usb.zip

用Wireshark打开,发现存在键盘流量.

image-20220603221835237

image-20220603232930277

图中显示的HID Data就是我们的键盘输入数据.

我们先看看Source为2.8.1这个键盘数据.

通过命令1⃣️tshark -r usb.pcapng -Y "usb.src == \"2.8.1\"" -T fields -e usbhid.data | sed '/^\s*$/d' > usbdata.txt
或者2⃣️ tshark -r usb.pcapng -T fields -e usbhid.data | sed '/^\s*$/d' > usbdata.txt
(若显示的是 Leftover Capture Data,则用命令tshark -r usb.pcap -T fields -e usb.capdata | sed '/^\s*$/d' > usbdata.txt#提取并去除空行)

注:-Y “usb.src == "2.8.1"“ 是过滤source为2.8.1的数据包
-T fields -e usbhid.data 是提取usbhid.data字段
-e usb.capdata 是提取usb.capdata字段

命令1⃣️可以过滤出Source为2.8.1的键盘输入数据.导出为usbdata.txt这个文件.

命令2⃣️则是将所有键盘输入数据导出来.

然后使用此脚本USB键盘流量.py.

image-20220603231337013

(注:pythonT是我的一个虚拟python的替换,你们用python即可)

显然,output中前面一串是rar文件头,并发现有密码,先将它们dump到本地.

image-20220603231618421

再看看Source为2.10.1这个键盘数据.

上述过程同理.得到 35c535765e50074a

image-20220603233256310

根据测试这个是压缩包的密码.

从而得到 flag{20de17cc-d2c1-4b61-bebd-41159ed7172d}

image-20220603234215147

不过除了这2个键盘流量,我还发现另外一个.

image-20220603234407817

但可惜的是,什么信息都没有.

image-20220603234437658

Crypto

签到电台

题目内容:豪密,是中国共产党和中国工农红军第一本无线电通讯密码的简称,由周恩来同志亲自编制,以周恩来党内化名“伍豪”命名,它是我党建立机要工作最早也是保密性能最强的一种密码,从二十世纪三十年代到全国解放,都始终未被破译。春秋GAME伽玛实验室团队通过对豪密的加密模式进行分析,并参考已有的文献资料,仿制豪密的加密方法,制作成一道题目,谨以此题致敬情报战线的先辈们。

请点击“下发赛题”,让我们一起穿越百年,追寻红色通信足迹。(关注“春秋伽玛”公众号,回复“签到电台”获取解题提示)

在“标准电码表”找“弼时安全到达了”所对应的7个电码,再跟“密码本”的前7*4个数字分别逐位进行“模十算法”(加不进位、减不借位),所得到的就是要发送的电码。

发送电码前先发送“s”启动,即按3个“.”,这个发送电报的过程可以使用抓包软件进行抓取,可方便输入电报。

(如果您还需要进一步的提示,可在本公众号输入“豪密剖析”获取。)

“弼时安全到达了”所对应的7个电码:

1732 2514 1344 0356 0451 6671 0055

28=7*4

模十算法示例:1732与6378得到7000

发包示例:/send?msg=s

你的任务

现在你拥有了一台模拟电报机,如果以标准电码表为底本,并结合给出的密码本,请使用该电报机通过豪密的加密方法与总部通讯,发送消息为“弼时安全到达了”。

通过以下脚本

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

sess = req.session()

sess.get("http://???.cloudeci1.ichunqiu.com:8888/")

secret = sess.get("http://???.cloudeci1.ichunqiu.com:8888/secret").text
print(secret)

ans = ""
a = secret[:28] #"密码本的数字,纯数字模式"[:28]
b = "1732251413440356045166710055"

for i in range(28):
v = (int(a[i]) + int(b[i])) % 10
ans += str(v)

print(ans)

sess.get("http://???.cloudeci1.ichunqiu.com:8888/send?msg=s")
flag = sess.get("http://???.cloudeci1.ichunqiu.com:8888/send?msg={ans}").text

print(flag)

即可得到flag

基于挑战码的双向认证 1 && 2

说明文档:预赛可信计算赛题-双向认证挑战模式.docx

本题含有两个flag,请点击“下发赛题”,本题容器下发后的端口是ssh端口,ssh的账号密码均为:player;ssh登录上去可自行修改密码。请参考说明文档,获取flag,并在本题提交第一个获取到的flag。

通过find /| grep flag查找.

由于服务器上文件读取权限设置不当(755)
可以直接进入root目录下找到 cube-shell/instance/flag_server 下的 flag1.txt 和 flag2.txt

基于挑战码的双向认证 3

由于给出的服务器上,root用户使用了弱密码.

爆破root密码为toor,登录后找到flag在/root/cube-shell/instance/flag-server/flag2.txt