第三届上海市大学生网络安全大赛线上初赛 WriteUp

  • A+
所属分类:安全博客

比赛入口地址: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代码 。

第三届上海市大学生网络安全大赛线上初赛 WriteUp

可以看到 flag 长度为 42位 ,后面一个简单的异或比较。写个脚本跑一下就能拿到 flag 。

第三届上海市大学生网络安全大赛线上初赛 WriteUp

第三届上海市大学生网络安全大赛线上初赛 WriteUp

登机牌 (Misc 150)

解压得到 ticket.png ,用 foremost 可以分离出 png 图片。然后用 UltraEdit 打开比较一下,发现 ticket.png 文件后面隐写了一个 rar 压缩文件,写脚本分离出来。

第三届上海市大学生网络安全大赛线上初赛 WriteUp

然后需要修复文件头,把前 3 个字节 RAR 改回 Rar 才能打开。

压缩包解压需要密码,扫描 png 图片上的 PDF417 条码,得到 Key1921070120171018 。 解压后得到如下文件。

第三届上海市大学生网络安全大赛线上初赛 WriteUp

在 flag.pdf 最底部,就能看到 flag 。

第三届上海市大学生网络安全大赛线上初赛 WriteUp

Welcome To My Blog (Web 200)

网站存在 flag.php ,直接打开 /index.php?action=flag , index.php 会把 flag.php 加载进去,查看网页源代码就能看到 flag 了。

第三届上海市大学生网络安全大赛线上初赛 WriteUp

juckcode (Reverse 200)

直接打开 juckcode.exe ,提示 error in open flag. 。用 IDA 打开,查看 Strings 。

第三届上海市大学生网络安全大赛线上初赛 WriteUp

猜测它会打开 flag 文件,随便构造一个 flag 文件,重新打开 juckcode.exe ,发现返回文本格式看上去与 flag.enc 有点像。

猜测 juckcode.exe 的作用是加密文本, flag.enc 是加密flag后得到的文本。尝试反编译 juckcode.exe 的加密算法,可是里面加花了,不好调试。所以直接写了个半自动脚本,爆破 flag 。

第三届上海市大学生网络安全大赛线上初赛 WriteUp

第三届上海市大学生网络安全大赛线上初赛 WriteUp

Step By Step (Web 300)

试了一下,发现 robots.txt 里面写着 code.zip ,把 code.zip 下载下来,解压得到 3 个经过 混淆zym加密 的 php 源代码文件,网上找在线解密进行解密。

看了源代码,发现 3 个页面是有关联的,根据题意,我们需要一步一步解决。

第三届上海市大学生网络安全大赛线上初赛 WriteUp

首先分析 index.php ,在 0-99999 范围内取随机数,置随机数种子,然后取长度为 16 的随机字符串输出到网页,再取长度为 10 的随机字符串作验证凭据。

根据随机数的特点,写个脚本就能把后面长度为 10 的验证凭据算出来。

第三届上海市大学生网络安全大赛线上初赛 WriteUp

成功跳转到 admin.php?authAdmin=2017CtfY0ulike

第三届上海市大学生网络安全大赛线上初赛 WriteUp

接着分析 admin.php ,关键点在 json_decode($auth) == $auth_code ,明显的弱类型比较,查了一下 php 官方文档,发现 $auth 为 true , json_decode 也会返回 true ,这样就能满足条件, POST DATA: auth=TRUE

第三届上海市大学生网络安全大赛线上初赛 WriteUp

最后分析 file.php ,传值 id 必须含有 jpg ,正则只会取 php://resource=$1 中 $1 里含有 | 的左边部分,所以构造 id=flag.php|jpg 即可读取 flag.php 里的 flag 。

第三届上海市大学生网络安全大赛线上初赛 WriteUp

流量分析 (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 即可解压,另一个确实是密码加密的。

第三届上海市大学生网络安全大赛线上初赛 WriteUp

提示我们应该留意加密数据包,也就是 TLS 协议的数据包。

FTP-DATA 还能导出一个 key.log 文件,这是一份 NSS Key Log Format 文件,这个文件是能解密出 Wireshark 里面的 https 流量的。

在 Wireshark 的首选项中的 SSL 协议部分,在 (Pre)-Master-Secret log filename 中填上导出的 key.log 文件。

第三届上海市大学生网络安全大赛线上初赛 WriteUp

然后刷新一下流量包就可以解密出来隐藏的信息

第三届上海市大学生网络安全大赛线上初赛 WriteUp

瞄了一眼大概就是上了百度的网盘下载了个东西,直接通过 导出对象 -> HTTP 进行导出

第三届上海市大学生网络安全大赛线上初赛 WriteUp

解压之后发现是一首歌, アスノヨゾラ哨戒班 ,也挺好听的,听到了最后剩下了莫名其妙的杂音,数据应该就在这个部分了

通过 Audacity 打开了这首歌拉到了最后,果然是后面加上去的

第三届上海市大学生网络安全大赛线上初赛 WriteUp

查看频谱图

第三届上海市大学生网络安全大赛线上初赛 WriteUp

隐约能看到写着,Key:AaaAaaaAAaaaAAaaaaaaAAAAAaaaaaaa!

回到一开始解不开的 zip 文件,使用 AaaAaaaAAaaaAAaaaaaaAAAAAaaaaaaa! 作为密码,成功解出来了 flag.txt

第三届上海市大学生网络安全大赛线上初赛 WriteUp

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 ,写脚本。

第三届上海市大学生网络安全大赛线上初赛 WriteUp

跑一下,得到数据。用 RsaConverter 可以根据 旧e、旧d、n 算出 p、q

第三届上海市大学生网络安全大赛线上初赛 WriteUp

写个脚本解密 rsa ,即可得到 flag 。

第三届上海市大学生网络安全大赛线上初赛 WriteUp

第三届上海市大学生网络安全大赛线上初赛 WriteUp

Source: impakho.com | Author:impakho

相关推荐: GitHub Action使用杂记

GitHub Action 这是GitHub推出的一个类似Azure Pipeline的工具。GitHub Action 这里记录在初次使用GitHub Action时的一些小技巧。 设置环境变量 目前的GitHub Action的环境变量,若是在stage里…

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: