攻防世界Normal_RSA

Normal_RSA

文件下载下来是这样的

image-20220510223550994

查阅信息发现:带有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对其中参数进行解密

image-20220510224230862

解密出来是这样的

然后将这个16进制的modules转化为10进制

python可以直接转化,并且kali linux自带python,输入python再输入

0x(16进制数据)即可

image-20220510224442843

十进制数据是:87924348264132406875276140514499937145050893665602592992418171647042491658461

然后再用factor对大整数进行分解

因为数据比较大,分解的时间可能稍微长一点

image-20220510224826157

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

image

然后再用这个private.pem解密flag.enc文件

openssl rsautl -decrypt -in flag.enc -inkey private.pem

image-20220511212317219

PCTF{256b_i5_m3dium}就得到flag了

posted @ 2022-05-11 21:35  Jinx8823  阅读(186)  评论(0编辑  收藏  举报