1. 程式人生 > 其它 >攻防世界Normal_RSA

攻防世界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了