看雪2022 KCTF 秋季赛 | 第九题设计思路及解析

WriteUp 1年前 (2022) admin
393 0 0
看雪 2022 KCTF秋季赛 已于11月15日中午12点正式开始!比赛延续上一届的模式并进行优化,对每道题设置了难度值、火力值、精致度等多类积分,用规则引导题目的难度和趣味度。大家请注意:签到题(https://ctf.pediy.com/game-season_fight-216.htm)将持续开放,整个比赛期间均可提交答案,获得积分哦~

今天中午12点,第九题《乡绅压迫》已经关闭答题通道。此题一共持续了4天,最终没有战队成功提交flag。

看雪2022 KCTF 秋季赛 | 第九题设计思路及解析


下面一起看看该赛题的设计思路和相关解析吧~



出题团队简介


出题方:玄机安全团队 

战队成员id:T_N_TRt1Textet232e、F@rewellaa747

看雪2022 KCTF 秋季赛 | 第九题设计思路及解析



专家评委点评


由于作者用的云影解密工具有bug,其运算结果与系统编码有关,导致作者计算出来的结果出错,这样正确的云隐解密,就得不到flag。因此这题无解,直接会影响此题成绩和排名。



赛题解析


此题无人提交解析,以下是出题作者自己在电脑上的分析过程,仅供参考。


首先解压密码包含a中文,如果用mac自带的解压是不行的,这里推荐使用bandizip。

得到文件如下:
看雪2022 KCTF 秋季赛 | 第九题设计思路及解析

先查看same.zip:

看雪2022 KCTF 秋季赛 | 第九题设计思路及解析

用010edit打开首先头部发现全局加密位是没有加密的,所以很明显是伪加密,查找504b0102的第五位加密位,把09改成08即可正常解压。

看雪2022 KCTF 秋季赛 | 第九题设计思路及解析

分别在解压出两个归档文件:
看雪2022 KCTF 秋季赛 | 第九题设计思路及解析
查看归档2里面的c1文件,里面是文本信息:

看雪2022 KCTF 秋季赛 | 第九题设计思路及解析

全部为数字但是是0-9,排除ascii或者16进制,常规base解密也不考虑在内。熟悉密码学的应该会知道是云影解密。

看雪2022 KCTF 秋季赛 | 第九题设计思路及解析

解出来的结果可以发现全是大写的英文字母加数字组合就想到base32解密。

看雪2022 KCTF 秋季赛 | 第九题设计思路及解析

Base32之后明显是JJEncode特征,故用JJEncode解密。

看雪2022 KCTF 秋季赛 | 第九题设计思路及解析

得到的字符串用一键解码工具可以发现只有艾特巴什码解密解出来的内容在ascii范围内,所以判定艾特巴什码解密。

看雪2022 KCTF 秋季赛 | 第九题设计思路及解析

同样是全大写字母组合,尝试使用base32解出内容,得到Unicode特征。

看雪2022 KCTF 秋季赛 | 第九题设计思路及解析

Unicode解密

看雪2022 KCTF 秋季赛 | 第九题设计思路及解析

最后得到c1内容:

c1= 15607899289774752607745060640112255709584348056319300169675827088066545531052329055212475749916522602075087343995012560136522770780008169510716823289397779568651449463933095364917494301536008284214773203125839428300473218398961860575001550880707751765747943049845939343166556794908700384135165292528213058360224609924346188052068611879008421630442049699706199303391008331070479964099095091480815178325456657676154336417367846398480026498036542713756446773399794078872111383965893801785321378587638392345479643544976155845219551980902853316127518000204650028086944700122652612590911024559523635338190707554814200380486

我们在看e1文件夹下,有个liyou.xls:

看雪2022 KCTF 秋季赛 | 第九题设计思路及解析

使用file命令发现是个exe程序:

看雪2022 KCTF 秋季赛 | 第九题设计思路及解析

改后缀为liyou.exe运行输入ascii字符发现明显python应用的特征
提示class ‘str’是个字符串,放入ida里面查看字符串也能明显发现python特征。
看雪2022 KCTF 秋季赛 | 第九题设计思路及解析
提示class ‘str’是个字符串,放入ida里面查看字符串也能明显发现python特征:

看雪2022 KCTF 秋季赛 | 第九题设计思路及解析

这里有三种方法可以解开:
(1) 逆向算法,就是移位算法很简单
(2) 直接爆破纯数字
(3) 使用pydumpck可汇编出python源代码(pydumpck可在github下载,使用方法:pydumpck xxx.exe)

使用pydumpck得到如下代码:
看雪2022 KCTF 秋季赛 | 第九题设计思路及解析

逆向退回去就可以知道密码是2333。
看雪2022 KCTF 秋季赛 | 第九题设计思路及解析

所以
e1= 2333

我们在看n文件

看雪2022 KCTF 秋季赛 | 第九题设计思路及解析

010edit发现这是真加密,文件名是498把他当作前坠爆破数字(或者直接爆破数字即可)

看雪2022 KCTF 秋季赛 | 第九题设计思路及解析

只需要12毫秒就出结果了,解压后得到两个文件。

看雪2022 KCTF 秋季赛 | 第九题设计思路及解析

首先第二个文件名same to就是bao.7z的密码,解压后如下:

看雪2022 KCTF 秋季赛 | 第九题设计思路及解析

NewFile.txt.zip使用010edit同理是伪加密。

看雪2022 KCTF 秋季赛 | 第九题设计思路及解析

通过之前c1的方式修改为08解压文件后得到:

看雪2022 KCTF 秋季赛 | 第九题设计思路及解析

观察文件内容:

看雪2022 KCTF 秋季赛 | 第九题设计思路及解析

很明显在base85b范围内,使用base一键解密脚本或者每一层尝试base解密最后是:
base85b
base91
base36
base16
base64
base32

最终得到n
n= 26224780915746061171356900429211732907894133411825479719182498123964593046336645332186203017329096536728059066689042858165122989786178704838192642452809207585702043097467928891461018275353250786973471650494194372733779805807489907702141929843845278434884845352669740952041282423301305382858988793901043066209319303541040768595770413615909193635343887983001348320031799793442749287722273494363072729567998654591480541261852992180312943525820070353921502978892785291668530018272413373333023152500812351061427484075521491773070096927124526178143538470265400525381556167325594691165766654450050879959570189329514244646397

现在有了c1,c2,e,和n

共模攻击原理:
共模攻击即用两个及以上的公钥(n,e)来加密同一条信息m

已知有密文:
c1 = pow(m, e1, n)
c2 = pow(m, e2, n)

条件:
当e1,e2互质,则有gcd(e1,e2)=1
根据扩展欧几里德算法,对于不完全为 0 的整数 a,b,gcd(a,b)表示 a,b 的最大公约数。那么一定存在整数x,y 使得 gcd(a,b)=ax+by

所以得到:
e1*s1+e2*s2 = 1

因为e1和e2为正整数,所以s1、s2皆为整数,但是一正一负,此时假设s1为正数,s2为负数。

通过脚本解出最后的flag


import gmpy2
importlibnum
c1,c2,n,e1= 15607899289774752607745060640112255709584348056319300169675827088066545531052329055212475749916522602075087343995012560136522770780008169510716823289397779568651449463933095364917494301536008284214773203125839428300473218398961860575001550880707751765747943049845939343166556794908700384135165292528213058360224609924346188052068611879008421630442049699706199303391008331070479964099095091480815178325456657676154336417367846398480026498036542713756446773399794078872111383965893801785321378587638392345479643544976155845219551980902853316127518000204650028086944700122652612590911024559523635338190707554814200380486,9912145489658329063703116908130176375055506252353090158015020311359292968312531569743161728224569782005722216681399507818161788920830081064374252569718505004306324849118122179373113040412359784788890801415154852860588871824968417755511278333566988728360648915665920705782006580503622949713412004783709159110938297766541761012806638519144120185871912223675579905285601415931229013786735966073876266949856675319002370156239251410963101700078457935458560924743822548840463104683307540166435054824255359755162675074962666533368293982884206605526505018027277728046653165275392280548209270327864691747721570633243796277571,26224780915746061171356900429211732907894133411825479719182498123964593046336645332186203017329096536728059066689042858165122989786178704838192642452809207585702043097467928891461018275353250786973471650494194372733779805807489907702141929843845278434884845352669740952041282423301305382858988793901043066209319303541040768595770413615909193635343887983001348320031799793442749287722273494363072729567998654591480541261852992180312943525820070353921502978892785291668530018272413373333023152500812351061427484075521491773070096927124526178143538470265400525381556167325594691165766654450050879959570189329514244646397,2333
e2= 23333
defgongmo(e1,e2,c1,c2,n):
e1, e2, c1, c2, n=int(e1),int(e2),int(c1),int(c2),int(n)
s = gmpy2.gcdext(e1, e2)
s1 = s[1]
s2 = s[2]
ifs1 < 0:
s1 = – s1
c1 = gmpy2.invert(c1, n)
elifs2 < 0:
s2 = – s2
c2 = gmpy2.invert(c2, n)
m = (pow(c1,s1,n) * pow(c2 ,s2 ,n)) % n
returnint(m)
m = gongmo(e1,e2,c1,c2,n)
print(libnum.n2s(int(m)).decode())

看雪2022 KCTF 秋季赛 | 第九题设计思路及解析

flag{6ed4c74e022cb18c8039e96de93aa9ce}

END



看雪2022 KCTF 秋季赛 | 第九题设计思路及解析
第十题《两袖清风》正在进行

https://ctf.pediy.com/game-season_fight-225.htm


看雪2022 KCTF 秋季赛 | 第九题设计思路及解析

欢迎参赛或围观看雪2022 KCTF 秋季赛 | 第九题设计思路及解析


看雪2022 KCTF 秋季赛 | 第九题设计思路及解析
– End –


看雪2022 KCTF 秋季赛 | 第九题设计思路及解析


看雪2022 KCTF 秋季赛 | 第九题设计思路及解析

球分享

看雪2022 KCTF 秋季赛 | 第九题设计思路及解析

球点赞

看雪2022 KCTF 秋季赛 | 第九题设计思路及解析

球在看



看雪2022 KCTF 秋季赛 | 第九题设计思路及解析
“阅读原文查看详情!

原文始发于微信公众号(看雪学苑):看雪2022 KCTF 秋季赛 | 第九题设计思路及解析

版权声明:admin 发表于 2022年12月8日 下午6:05。
转载请注明:看雪2022 KCTF 秋季赛 | 第九题设计思路及解析 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...