OPPO赞助的校赛,遗憾没拿到第一名,第一名貌似是研究生学长,tql膜了。
Misc
窗外的山
image.jpg看起来像是手机拍的照片,所以尝试用EXIF查看相关信息:
拿经纬度到google地图上去定位,发现就在彭州周围。根据‘绵延’的特征筛选了一下,猜测是九峰山脉。遂百度:https://chengdu.cncn.com/jingdian/jiufengshan/profile
再根据实景地图排除了几个,剩下天牙峰,长年峰,龙峰。一个个尝试直到正确提交flag。
Never Gonna Give Misc Up
又是这首歌QWQ。题目用歌词把类似于伪代码的描述混淆起来,刚开始以为是非常复杂的加密操作,还一句句分析。后来仔细想想貌似也就给了个key,给了个异或,解base64之后明文长度是44。key长度是23,于是直接把key*2和base64明文进行一波异或,就出了。
1 | import sys |
Unbroken RSA
这题确实是misc,和crypto没啥关系。这里的RSA没啥毛病,无法攻击。看到hint说task.py就是服务端的运行的文件,那么关键点就在于task.py是python2,而python2存在一个input rce,可参考:
https://www.heetian.com/info/912
https://hxp.io/blog/72/DEFCON-CTF-Quals-2020-notbefoooled/
所以这里我们尝试连接之后getshell,再cat flag:
Crypto
RingSA
把n转换到2^32下的多项式形式就能分解,可参考:https://ctftime.org/writeup/22977
exp:
1 | from sage.all import * |
无e烦
没给e也不需要e,用M来构造m即可用C来表示c,M是经过设计的应该不是随机的。构造的时候需要把M中的元素和m同时分解,对照基数进行组合。
1 | import gmpy2 |
just_math
proof部分的思路是找一个Carmichael数多次进行连接请求,会有较小概率通过1000次测试,发现因子较大的Carmichael数比较容易通过检验。找到的效果最好的是82929001,因子为281。proof勉强能够通过(大概几分钟的样子),当然,也可以多开几个终端跑。
后面一部分就是利用佩尔方程解:
参考:https://zhuanlan.zhihu.com/p/365860557
exp:
1 | import math |
义神爱吃铜
proof part:
1 | from string import * |
copper部分用了个crt:
所以,g-x=k1p,g-y=k2q
又知道n的高位,所以只需要构造一个modnn(kp*kq)的多项式用copper梭:
解出之后和k1p,k2q做gcd得到p和q,后边就是正常解密过程。
1 | from sage.all import * |
eccop
思路在代码注释里。
1 | # sage 椭圆曲线本身就是一个多项式,利用一元copper可恢复x |