文章总结: 本文档提供全国大学生信息安全竞赛部分题解,涵盖ECDSA密码学、Godot逆向、Next.jsRCE、PHP反序列化、数据分析及流量分析。文含攻击脚本与Payload,展示获取Flag过程,实战性强,对CTF选手具较高参考价值。 综合评分: 89 文章分类: CTF,WEB安全,逆向分析,漏洞分析
第十九届全国大学生信息安全竞赛部分题解
赛查查
2025年12月31日 09:06 北京
以下文章来源于夜天炫安全 ,作者花千树 only9464
夜天炫安全 .
关于windows、安卓逆向、web安全以及CTF、护网、SRC的干活都在这里啦
“三题干碎网安梦,师傅我是计科人(汽车人)”
感谢参赛队伍:能不能一把梭哈 提供的题解
(只有题解,没有解析,后面会单出)
一、ECDSA
这个是一个密码学的题目,使用如下代码
from ecdsa import NIST521pfrom hashlib import sha1, sha512, md5from Crypto.Util.number import inverse, long_to_bytesimport binascii
curve = NIST521pn = curve.order
def nonce(i): seed = sha512(b"bias" + bytes([i])).digest() return int.from_bytes(seed, "big") % n
# 读取 signatures.txtsigs = []with open("signatures.txt") as f: for line in f: m_hex, sig_hex = line.strip().split(":") msg = binascii.unhexlify(m_hex) sig = binascii.unhexlify(sig_hex)
r = int.from_bytes(sig[:66], "big") s = int.from_bytes(sig[66:], "big")
z = int.from_bytes(sha1(msg).digest(), "big") sigs.append((msg, r, s, z))
# 用第一条签名恢复私钥msg, r, s, z = sigs[0]k = nonce(0)d = (s * k - z) * inverse(r, n) % n# 私钥字节(521 位 → 66 字节)priv_bytes = long_to_bytes(d, 66)# 计算 MD5priv_md5 = md5(priv_bytes).hexdigest()print("私钥:", hex(d))print("MD5(私钥):", priv_md5)
可以输出:
私钥: 0xe109b2b0a3d9acdd5f642935b2d1539d79583685a92959e929d8a9c1aa8965ee33bd3dfc9e2d37c147d0d1ab17016ba28a2840bb030d2dc9354b1da1209b3cf1MD5(私钥): 85d22caffd854b0726a98a2698527898
但是到这里还是不对的,因为需要的是私钥10进制的md5
简单的用脚本转码或者在线转码也可以
from hashlib import md5
d = int( "e109b2b0a3d9acdd5f642935b2d1539d79583685a92959e929d8a9c1aa8965ee33bd3dfc9e2d37c147d0d1ab17016ba28a2840bb030d2dc9354b1da1209b3cf1", 16)
s = str(d) # 十进制字符串print("flag{" + md5(s.encode()).hexdigest() + "}")
获得答案:flag{581bdf717b780c3cd8282e5a4d50f3a0}
二、babygame
godot引擎,直接用
gdsdecomp反编译一把梭哈:
可以看到是有脚本验证,AES加密,但是这样解不行,再翻翻,发现:
密钥会被更换:
所以正确的密钥是:FanBglFanBglOoO!
AES-ECB模式,直接解得:flag{wOW~youAregrEaT!}
三、redjs
看到是react和nextjs:
没跑了,是CVE-2025-55182,还是用工具
Nextjs_RCE_Exploit_Tool一把梭哈:
flag{f3787f4f-3c39-47da-b84e-1d52fd36591e}
四、hellogate
这个进来就是一张图片,下载下来发现图片的末尾有东西:
是源码,意思是php的反序列化漏洞,直接构造payload进行尝试:
最后是:
data=O:1:"A":1:{s:6:"handle";O:1:"B":1:{s:6:"worker";O:1:"C":1:{s:3:"cmd";s:5:"/flag";}}}
此时返回的图片再看,就能在末尾发现flag:
flag{d26431d1-8516-48e6-9406-cf88dd80b366}
五、The Silent Heist
算出每个特征的分布特性以及特征间的相关性,计算稳健的协方差矩阵,使用Copula方法生成数据,调整参数,满足题目要求。
返回flag:
flag{a0efa425-ba1b-412b-ace3-94b8c3fb69cf}
六、SnakeBackdoor-1
从这开始是连续的三个流量分析,都是同一个包
使用wireshark打开流量包,使用命令:http.request.method == POST&&http.request.uri contains “login”筛选找到最后一个打开看到登录后台的密码
七、SnakeBackdoor-2
搜索字符串SECRET_KEY,定位到如图
成功提取c6242af0-6891-4510-8432-e1cdf051f160
八、SnakeBackdoor-3
用:http.request.method == POST&&http.request.uri contains “preview”
查找数据包
使用python代码经行循环解密
输出解密成功的源代码
得到flag{v1p3r_5tr1k3_k3y}
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:赛查查 《第十九届全国大学生信息安全竞赛部分题解》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








评论