攻防世界Normal_RSA
Normal_RSA
檔案下載下來是這樣的
查閱資訊發現:帶有PEM 副檔名的檔案是用於私密傳輸電子郵件的隱私增強型郵件證書檔案。 PEM格式使用base64對二進位制進行編碼,以便它以ASCII字串形式存在。
PEM檔案是Base64編碼的證書。PEM證書通常用於web伺服器,因為他們可以通過一個簡單的文字編輯器,很容易地轉換成可讀的資料。通常當一個PEM編碼在文字編輯器中開啟檔案,它會包含不同的頁首和頁尾。
-----BEGIN CERTIFICATE REQUEST----- and -----END CERTIFICATEREQUEST-----
CSR(證書籤名請求)
-----BEGIN RSA PRIVATE KEY----- and -----END RSA PRIVATEKEY-----
私鑰
-----BEGIN CERTIFICATE----- and -----END CERTIFICATE-----
通過搜尋可以發現可以用openSSL解密.pem的引數
kali自帶openssl
用命令openssl rsa -pubin -text -modulus -in warmup -in pubkey.pem對其中引數進行解密
解密出來是這樣的
然後將這個16進位制的modules轉化為10進位制
python可以直接轉化,並且kali linux自帶python,輸入python再輸入
0x(16進位制資料)即可
十進位制資料是:87924348264132406875276140514499937145050893665602592992418171647042491658461
然後再用factor對大整數進行分解
因為資料比較大,分解的時間可能稍微長一點
p=319576316814478949870590164193048041239
q=275127860351348928173285174381581152299
此時也可以得出φ(n)=(p-1)(q-1)=87924348264132406875276140514499937144456189488436765114374296308467862464924
然後可以通過Python的gmpy2模組求出d
import gmpy2 p = 275127860351348928173285174381581152299 q = 319576316814478949870590164193048041239 e = 65537 fn = (p - 1) * (q - 1) d = gmpy2.invert(e, fn) print(d)
d=10866948760844599168252082612378495977388271279679231539839049698621994994673
然後搜尋可知rsatool能夠通過n,e,d和密文檔案求出明文
然後在linux下安裝rsatool
git clone https://github.com/ius/rsatool.git
cd rsatool //進入這個目錄
python setup.py install
開啟rsatool目錄,生成私鑰檔案(這裡可能會遇到沒有gmpy2模組的問題,可以自行搜尋下載linux的gmpy2模組)
sudo apt install python3-gmpy2 -y
(這樣就可以安裝成功)
python3 rsatool.py -o private.pem -e 65537
-p319576316814478949870590164193048041239
-q275127860351348928173285174381581152299
然後再用這個private.pem解密flag.enc檔案
openssl rsautl -decrypt -in flag.enc -inkey private.pem
PCTF{256b_i5_m3dium}就得到flag了