文章总结: 文档分享第十届楚慧杯CTF比赛解题思路,涵盖对抗样本、车联网安全标准ISO/SAE21434等基础知识题,以及Web和Crypto方向实战技巧。Web题展示了HTTP请求走私结合SSTI漏洞利用、SQL注入与MD5长度扩展攻击组合利用等技术,Crypto题涉及ECDSA签名私钥恢复,整体呈现了从漏洞发现到获取flag的完整攻击链。 综合评分: 84 文章分类: CTF,漏洞分析,渗透测试,实战经验,WEB安全
| | | — | | Python 3 Pillow numpy 原始压缩包可正常读取 |
- 关键代码实现
from __future__ import annotationsfrom pathlib import Pathimport zipfileimport numpy as npfrom PIL import Image, ImageOpsBASE_DIR = Path(__file__).resolve().parentROOT_DIR = BASE_DIR.parentZIP_PATH = ROOT_DIR / "tempdir" / "MISC附件" /"Time_and_chaos.zip"UNPACK_DIR = BASE_DIR / "unpacked"ART_DIR = BASE_DIR / "artifacts"# 图像链路提取的前半段FLAG_PREFIX = "DASCTF{Logistic_and"def ensure_unpacked() -> None: """解压附件到工作目录""" UNPACK_DIR.mkdir(parents=True,exist_ok=True) required = [UNPACK_DIR / f"{i}.png"for i in range(1, 9)] required += [UNPACK_DIR /"flag.png", UNPACK_DIR / "flag.txt"] if all(p.exists() for p in required): return if not ZIP_PATH.exists(): raiseFileNotFoundError(f"zip not found: {ZIP_PATH}") with zipfile.ZipFile(ZIP_PATH,"r") as zf: zf.extractall(UNPACK_DIR)def build_mean_inverse() -> None: """计算8图均值并反相,保存中间结果用于验证""" ART_DIR.mkdir(parents=True,exist_ok=True) arr = [] for i in range(1, 9): img = Image.open(UNPACK_DIR /f"{i}.png").convert("RGB") arr.append(np.array(img,dtype=np.uint8)) # 计算逐像素均值 mean_img = np.mean(np.stack(arr,axis=0), axis=0).astype(np.uint8) mean_pil = Image.fromarray(mean_img,mode="RGB") mean_pil.save(ART_DIR /"mean.png") # 反相处理增强可读性 inv = ImageOps.invert(mean_pil) inv.save(ART_DIR /"mean_inv.png") # 裁剪右上角文字区域 w, h = inv.size crop = inv.crop((w - 900, 0, w, int(h* 0.22))) crop.save(ART_DIR /"text_line.png")def decode_tail_from_zwc() -> str: """从零宽字符解码flag后半段""" s = (UNPACK_DIR /"flag.txt").read_text(encoding="utf-8") # 提取零宽字符 zw = "".join(ch for ch in sif ord(ch) in (0x200C, 0x200D, 0xFEFF, 0x202C)) # 建立映射关系 mapping = { 0x200C: "00", # ZWNJ 0x200D: "01", # ZWJ 0xFEFF: "11", # BOM 0x202C: "10", # POP DIR } bits ="".join(mapping[ord(ch)] for ch in zw) # 比特流转字节,UTF-16BE解码 data = bytes(int(bits[i:i+8], 2) fori in range(0, len(bits), 8)) return data.decode("utf-16-be")def main() -> None: ensure_unpacked() build_mean_inverse() tail = decode_tail_from_zwc() flag = FLAG_PREFIX + tail print(flag)if __name__ == "__main__": main()
- 分析 Weapons.rvdata2
使用Ruby解析武器数据:
module RPG classBaseItem; end classWeapon < BaseItem; end classBaseItem classFeature; end endendobj = Marshal.load(File.binread('Data/Weapons.rvdata2'))w = obj[49]puts w.instance_variable_get(:@name)puts w.instance_variable_get(:@description)
运行结果为DASCTF{Logistic_and_time_fly}
OnePandaSec团队交流群,欢迎网络安全爱好者加入
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:OnePanda-Sec OnePanda-Sec OnePanda-Sec《第十届“楚慧杯” wp》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论