攻防世界Crypto RSA类型 cr4-poor-rsa

这道题的关键点有三个:

1.如何正确打开一个未知文件。应该是修改后缀,但如何知道其真实后缀?可以靠经验,也可以靠Kali的file命令来判断。我个人靠经验判断。

2.使用公钥解析工具。如果看见“-----BEGIN PUBLIC KEY-----”与“-----END PUBLIC KEY-----”,可到网站上做公钥解析。(附网站:SSL在线工具-公钥解析

3.发现最基本的RSA解题模型解出的明文m实际上无效怎么办?可以去算完整私钥来做解密而不仅仅是用私钥指数d。

下面是完整解题流程:

下载得到直接打开无效的未知类型文件,但是看见“.gz”,我凭经验猜测文件拓展名可能是“.tar.gz‘”。(导致源码泄露的其中一种可能的后缀)结果成功打开,发现有两个文件。

(后来发现这边的“.tar.gz”自己变成“.tar”打开了)

其中一个显然是密文,而另一个文件中有关键字“-----BEGIN PUBLIC KEY-----”与“-----END PUBLIC KEY-----”,于是到网站 SSL在线工具-公钥解析 做公钥解析,于是获得公钥指数e和公共模数n,然后借助网站 factordb.com (yafu算得慢得多)算出质数p与q。

有了上面这些信息,可尝试用最基本的RSA脚本来解密文,最后发现解出来的密文貌似没有用。于是改变思路,算出完整私钥priv,然后再利用完整私钥解密文。

但是这样貌似也有问题,最后发现是密文的形式异常,尤其是末尾有个等号,于是尝试在python中将其base64解密(相关的base64解密网站可能解不好),然后再用完整私钥解密,于是获得flag。下面是完整脚本:

import libnum
import gmpy2
from Crypto.Util import *
from Crypto.Util.number import *
from functools import reduce
import functools
#上面是我几乎做每一道RSA都会用到的东西。下面是求完整私钥与做base64所需的东西
from Crypto.PublicKey import RSA
import rsa
import base64

p=863653476616376575308866344984576466644942572246900013156919
q=965445304326998194798282228842484732438457170595999523426901
n=833810193564967701912362955539789451139872863794534923259743419423089229206473091408403560311191545764221310666338878019
e = 65537

ou=(q-1)*(p-1)
d=inverse(e,ou)
priv=rsa.PrivateKey(n,e,d,p,q)
c='Ni45iH4UnXSttNuf0Oy80+G5J7tm8sBJuDNN7qfTIdEKJow4siF2cpSbP/qIWDjSi+w='  #文件中的密文
#我看其他题解总想以文件读取的形式来获取这个字符串,但事实上此处并不需要那样做。
c=base64.b64decode(c)
flag=rsa.decrypt(c,priv)
print(flag)

得到flag:

  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值