RSA(攻防世界)Rsa256 -- cr4-poor-rsa


⭐RSA256


【攻防世界】 題目鏈接 【RSA256】



下載附件得到兩個文件。 猜測第一個 txt 文件 可能為RSA加密密文 ,第二個估計就是密鑰。依次打開看看:


果然如此。


目標: 尋找 n、e、q、p


利用 openssl 查看 e


打開 kali ,利用 openssl 工具


輸入以下命令:


openssl rsa -pubin -text -modulus -in gy.key


得到: e: 65537 (0x10001)


常見 openssl rsa 命令 如下:


openssl rsa [-inform PEM|NET|DER] [-outform PEM|NET|DER] [-in filename] [-passin arg] [-out filename] [-passout arg] [-sgckey] [-des] [-des3] [-idea] [-text] [-noout] [-modulus] [-check] [-pubin] [-pubout] [-engine id]


-in filename:指明私鑰文件


-out filename:指明將提取出的公鑰保存至指定文件中


-pubout:根據私鑰提取出公鑰


例子:已知私鑰,利用openssl 工具破解密文。


如題 : 【攻防世界】就在其中


openssl rsautl -decrypt -in key.txt -inkey psa.key -out flag.txt

密文: key.txt

私鑰:psa.key

破解保存到 flag.txt


十六進制轉換得到 n


注意到上一步驟中,得到了:

Modulus=A9BD4C7A7763370A042FE6BEC7DDC841602DB942C7A362D1B5D372A4D08912D9


Modulus的值目前是十六進制,需轉化為十進制:


得到 n:76775333340223961139427050707840417811156978085146970312315886671546666259161


利用 n來分解得到 p、q


已知 n = 76775333340223961139427050707840417811156978085146970312315886671546666259161


利用 在線分解素數網站


得到

p =  273821108020968288372911424519201044333
q =  280385007186315115828483000867559983517

跑腳本出flag


至於跑腳本的庫的提前准備,可參考我 之前一篇博客中的環境准備


#coding:utf-8
import gmpy2
import rsa
p = 273821108020968288372911424519201044333
q = 280385007186315115828483000867559983517
n = 76775333340223961139427050707840417811156978085146970312315886671546666259161
e = 65537
d = int(gmpy2.invert(e,(p-1)*(q-1)))
privatekey = rsa.PrivateKey(n,e,d,p,q)
with open("E:\\fllllllag.txt","rb") as f:
    print(rsa.decrypt(f.read(),privatekey).decode())


flag{_2o!9_CTF_ECUN_}


記得去掉 _ 真正的flag為:


flag{2o!9CTFECUN}

【參考題解】 戳這里


⭐cr4-poor-rsa


【攻防世界】 題目鏈接 【cr4-poor-rsa】


下載附件,解壓得到如下兩個文件:

【注意】顯然在第一個文件中,flag經過base64加密,跑腳本時要記得給其解密:


利用 openssl來查看 key.pub


openssl rsa -pubin -text -modulus -in key.pub


得到 :


e = 65537
n = 52A99E249EE7CF3C0CBF963A009661772BC9CDF6E1E3FBFC6E44A07A5E0F894457A9F81C3AE132AC5683D35B28BA5C324243
= 833810193564967701912362955539789451139872863794534923259743419423089229206473091408403560311191545764221310666338878019

分解大數n,得到p、q


分解: http://www.factordb.com/



p = 863653476616376575308866344984576466644942572246900013156919
q = 965445304326998194798282228842484732438457170595999523426901

腳本拿flag


修改一下上題腳本:


#coding:utf-8
import gmpy2
import rsa
from base64 import b64decode
p = 863653476616376575308866344984576466644942572246900013156919
q = 965445304326998194798282228842484732438457170595999523426901
n = 833810193564967701912362955539789451139872863794534923259743419423089229206473091408403560311191545764221310666338878019
e = 65537
d = int(gmpy2.invert(e,(p-1)*(q-1)))
privatekey = rsa.PrivateKey(n,e,d,p,q)
with open("E:\\flag.b64","rb") as f:
    str = b64decode(f.read())
    print(rsa.decrypt(str,privatekey).decode())


拿到flag!

ALEXCTF{SMALL_PRIMES_ARE_BAD}

⭐結語 - (enc)flag格式


順便提一句,像上面的格式有 _ 的存在。因此在考慮flag格式的時候,可以優先考慮一下:


比如 【攻防世界】 的 enc 最終解密得到 ALEXCTFTH15O1SO5UP3RO5ECR3TOTXT


但是真正flag格式 為: (將O更換為 _ )


ALEXCTF{TH15_1S_5UP3R_5ECR3T_TXT}

【侵權刪】


【轉載請放鏈接】 https://www.cnblogs.com/Jlay/p/Rsa_openssl.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM