RITSEC CTF
记录这个假期做的一些题目
RITSEC CTF
Emails
email0.txt
1 | Good morning, |
email1.txt
1 | Good morning, |
email2.txt
1 | Good evening, |
email3.txt
1 | Good afternoon, |
email4.txt
1 | Good evening, |
email5.enc
1 | [P蒊?S =檤?I僷MX[,?団?<S螰鱏L1F'議2鴁!7?釯ZSu昛楊曪鏩zS荍糞l1F'?Y蘦z??Gh;躠溅佯?,J鵛z |
从4份未加密的邮件可以知道考点是MTP,而且密钥长度是32bytes
我查了下密文刚好192长度,分为6组,套用MTP脚本即可
本题关键在于用邮件格式Good evening
,然后利用know函数可以得到更多有意义的信息,然后不断猜测,不断利用know函数
最后我利用了32次才得到正确的明文,也许是我脚本用错了(欢迎师傅们指点)
exp.py
1 | import Crypto.Util.strxor as xo |
Failed File Transfer
file1.txt
1 | Y�/㵫 %��9K��5wT��=�Tg�s��w��BƲId�U��X����^�k���*�uNBNrS�|,Td0��~y��.b�Xt����FgC� �N@���K'�S�7�����-wJ�G��?"� |
file2.txt
1 | .ϫ������y^8��Q6�;�5��$�h<]F��>2��5Y�2r<�^~��������{��,�$�x�B��,�$�^E�x���K��7�����s�*��3��+� x |
file3.txt
1 | ���81a���V� ��.�0S��&Z���«��T���Zj���<�}����u}��)��#���M�*r�Weyh��E�k:�k"\w��*2��n2�b�9����c�HT�\�P�qИ������Ē7����X5E��9 |
pk1.pem
1 | -----BEGIN PUBLIC KEY----- |
pk2.pem
1 | -----BEGIN PUBLIC KEY----- |
pk3.pem
1 | -----BEGIN PUBLIC KEY----- |
提取公钥发现e1 = 17,e2 = 65537,e3 = 3
,而且n1 = n2
共模攻击即可
exp.py
1 | from Crypto.PublicKey.RSA import import_key |
这明文长度估计直接开3次方也能出
Dastardly Evil Scientists
task.py
1 | from Crypto.Cipher import DES |
题目给的交互没什么用,因为要我们自己输入密钥。疑惑了很久,在鸡块师傅指导下得知当密钥是弱密钥的时候加密密文即可恢复明文(说来也惭愧,最近学校课程就在上DES的内容,而我却不知道这些),参考DES弱密钥-CSDN博客,弱密钥有以下这些
1 | 0x0101010101010101 |
一个一个试就可以了
Forensics
read.txt
1 | -----BEGIN BITCOIN SIGNED MESSAGE----- |
查询这个地址找交易记录
把这串16进制转字符得到I have the invention and expect full payment -Z RS{26f9c2fcdfe8e86804eb}
SwampCTF
Jank File Encryptor
task.py
1 | import random |
很简单的LCG恢复参数题型,恢复完seed逐个异或回去即可,exp不小心删了,最后得到的是
1 | It is super important that this flag be kept secret! I wouldn't want anyone to find it!!! |
Copper Crypto
task.py
1 | #!/bin/python3 |
可以写为
$$
c \equiv (flag\times pad)^e \mod n
$$
$$
flag^e \equiv c \times (pad^e)^{-1} \mod n
$$
这个填充可以枚举,然后开三次方即可
exp.py
1 | from Crypto.Util.number import * |