0x01. 进入环境,下载附件
题目给的一个无后缀文件,放入kali中查看文件类型,如图:
是个压缩文件,修改成tar进行压缩,得到两个文件:
0x02. 问题分析
打开flllllag.txt,发现是一堆乱码,明白了,用key去解密txt得到答案!
0x02_1. 提取key信息
用winhex打开gy.txt,发现是公钥文件,如图:
丢入kali中提取关键信息:
openssl rsa -pubin -in gy.key -text -modulus > out.txt
得到的结果如图:
e = Exponent = 65537
n = Modulus = A9BD4C7A7763370A042FE6BEC7DDC841602DB942C7A362D1B5D372A4D08912D9
= 76775333340223961139427050707840417811156978085146970312315886671546666259161
0x02_2. 在线分解素数
p = 273821108020968288372911424519201044333
q = 280385007186315115828483000867559983517
0x02_3. 代码解题
import rsa
import gmpy2
e = 65537
n = 76775333340223961139427050707840417811156978085146970312315886671546666259161
p = 273821108020968288372911424519201044333
q = 280385007186315115828483000867559983517
d = gmpy2.invert(e, (p - 1) * (q - 1))
private = rsa.PrivateKey(n, e, d, p, q)
with open('pic/fllllllag.txt', 'rb') as file:
print(rsa.decrypt(file.read(), private).decode())
得到结果为:flag{_2o!9_CTF_ECUN_},但是提交时候需要去调_,因此最终的答案为:flag{2o!9CTFECUN}
补充:
0x02_4. 提取key信息代码做法:
from Crypto.PublicKey import RSA
with open('pic/gy.key', 'rb') as file:
f = file.read()
public_key = RSA.importKey(f)
n = public_key.n
e = public_key.e