攻防世界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了
本文作者:Jinx8823
本文链接:https://www.cnblogs.com/Jinx8823/p/16260000.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步