第三届上海市大学生网络安全大赛线上初赛 WriteUp
比赛入口地址:https://race.ichunqiu.com/shwas
i春秋(永信至诚)的题目水平还是可以的。
这次 16 道,只解出 8 道,排名第 22 ,感觉还行吧。
Writeup 纯粹记录,技术水平还有待提高。
签到 (Misc 50)
下载 i春秋 移动版 APP ,加入 CTF 竞赛圈,找到置顶帖,里面就有 flag 。
crackme (Reverse 50)
用 PEiD 打开 crackme.exe ,发现有 nSPack 3.7 壳,网上找到一个 NsUnpack3.7 脱壳机进行脱壳。
然后使用 IDA 打开,定位到 main 函数,用 F5 插件反编译 C代码 。
可以看到 flag 长度为 42位 ,后面一个简单的异或比较。写个脚本跑一下就能拿到 flag 。
登机牌 (Misc 150)
解压得到 ticket.png ,用 foremost 可以分离出 png 图片。然后用 UltraEdit 打开比较一下,发现 ticket.png 文件后面隐写了一个 rar 压缩文件,写脚本分离出来。
然后需要修复文件头,把前 3 个字节 RAR
改回 Rar
才能打开。
压缩包解压需要密码,扫描 png 图片上的 PDF417 条码,得到 Key1921070120171018
。 解压后得到如下文件。
在 flag.pdf 最底部,就能看到 flag 。
Welcome To My Blog (Web 200)
网站存在 flag.php ,直接打开 /index.php?action=flag
, index.php 会把 flag.php 加载进去,查看网页源代码就能看到 flag 了。
juckcode (Reverse 200)
直接打开 juckcode.exe ,提示 error in open flag.
。用 IDA 打开,查看 Strings 。
猜测它会打开 flag 文件,随便构造一个 flag 文件,重新打开 juckcode.exe ,发现返回文本格式看上去与 flag.enc 有点像。
猜测 juckcode.exe 的作用是加密文本, flag.enc 是加密flag后得到的文本。尝试反编译 juckcode.exe 的加密算法,可是里面加花了,不好调试。所以直接写了个半自动脚本,爆破 flag 。
Step By Step (Web 300)
试了一下,发现 robots.txt 里面写着 code.zip ,把 code.zip 下载下来,解压得到 3 个经过 混淆zym加密
的 php 源代码文件,网上找在线解密进行解密。
看了源代码,发现 3 个页面是有关联的,根据题意,我们需要一步一步解决。
首先分析 index.php ,在 0-99999
范围内取随机数,置随机数种子,然后取长度为 16 的随机字符串输出到网页,再取长度为 10 的随机字符串作验证凭据。
根据随机数的特点,写个脚本就能把后面长度为 10 的验证凭据算出来。
成功跳转到 admin.php?authAdmin=2017CtfY0ulike
接着分析 admin.php ,关键点在 json_decode($auth) == $auth_code
,明显的弱类型比较,查了一下 php 官方文档,发现 $auth 为 true , json_decode 也会返回 true ,这样就能满足条件, POST DATA: auth=TRUE
。
最后分析 file.php ,传值 id 必须含有 jpg ,正则只会取 php://resource=$1
中 $1 里含有 |
的左边部分,所以构造 id=flag.php|jpg
即可读取 flag.php 里的 flag 。
流量分析 (Misc 300)
将下载回来的 traffic.zip 解压,会得到一个 traffic.pcapng 文件,使用 Wireshark 打开。
将流量按照 Protocol 进行分类,可知有:
ARP / DNS / FTP / FTP-DATA / ICMP / ICMPv6 / IGMPv3 / LLMNR / NBNS / SSDP / SSL / TCP / TLSv1.2 / UDP
除去那几个没什么用的协议之后,有用的协议并没有很多,目前来说 TLSv1.2 协议没有什么好的办法可以强破,所以决定从 FTP 入手解题。
FTP-DATA 能导出几个文件,有两个 flag.zip ,一个是伪加密,用 hexedit 把 50 4B 01 02
后的 09 00
改为 00 00
即可解压,另一个确实是密码加密的。
提示我们应该留意加密数据包,也就是 TLS 协议的数据包。
FTP-DATA 还能导出一个 key.log 文件,这是一份 NSS Key Log Format
文件,这个文件是能解密出 Wireshark 里面的 https 流量的。
在 Wireshark 的首选项中的 SSL 协议部分,在 (Pre)-Master-Secret log filename
中填上导出的 key.log 文件。
然后刷新一下流量包就可以解密出来隐藏的信息
瞄了一眼大概就是上了百度的网盘下载了个东西,直接通过 导出对象 -> HTTP
进行导出
解压之后发现是一首歌, アスノヨゾラ哨戒班
,也挺好听的,听到了最后剩下了莫名其妙的杂音,数据应该就在这个部分了
通过 Audacity 打开了这首歌拉到了最后,果然是后面加上去的
查看频谱图
隐约能看到写着,Key:AaaAaaaAAaaaAAaaaaaaAAAAAaaaaaaa!
回到一开始解不开的 zip 文件,使用 AaaAaaaAAaaaAAaaaaaaAAAAAaaaaaaa!
作为密码,成功解出来了 flag.txt
rrrsa (Crypto 300)
解压得到 rrrsa.py ,分析代码。
程序每次运行都生成 新n、p、q
。入口有 3 次循环。
选项1:需要先使用 MD5 验证身份,然后才能输出 旧e、d
,重新生成 新e、d
。
MD5验证可以使用 MD5 长度扩展攻击
,试了下 secret 长度为 8 。
选项2:输出 n、e
。
选项3:输出使用 n、e
进行 rsa 加密后得到的密文,并且跳出循环。
想了一下,我们按照 1、2、3 的顺序执行即可得到 旧e、旧d、新e、n、密文
。 结合调用 hexpand ,写脚本。
跑一下,得到数据。用 RsaConverter 可以根据 旧e、旧d、n
算出 p、q
。
写个脚本解密 rsa ,即可得到 flag 。
Comments