RsaCtfTool是一个RSA多重攻击工具
从弱公钥中解密数据并尝试恢复私钥自动选择给定公钥的最佳攻击
安装:
1.安装RsaCtfTool
命令:
git clone https://github.com/Ganapati/RsaCtfTool.git
安装好以后进入RsaCtfTool目录下
2.安装相应环境
RsaCtfTool.py运行需要安装mpfr和mpc
安装mpfr命令:这是最新的指令,网上的大多已经无法使用。
wget https://www.mpfr.org/mpfr-4.0.2/mpfr-4.0.2.tar.bz2
等待下载完成后
v=4.0.2
下一步
tar -jxvf mpfr-${v}.tar.bz2 && cd mpfr-${v}
在下一步
./configure
然后
make && make check && make install
安装mpc命令:
第一步
v=1.1.0
第二步
wget ftp://ftp.gnu.org/gnu/mpc/mpc-${v}.tar.gz
第三步
tar -zxvf mpc-${v}.tar.gz && cd mpc-${v}
然后
./configure
make && make check && make install
等待全部完成后
cd RsaCtfTool
pip install -r requirements.txt
这里可能一次无法将库全部下完,中间容易下载失败,需要多次执行此命令
pip3 install -r requirements.txt
用法:
1.用法一:已知公钥(自动求私钥) –publickey,密文 —-uncipherfile。将文件解压复制到RsaCtfTool里:
python RsaCtfTool.py --publickey 公钥文件 --uncipherfile 加密的文件
2.用法二:已知公钥求私钥:
RsaCtfTool.py --publickey 公钥文件 --private
3.用法三:密钥格式转换——把PEM格式的公钥转换为n,e:
python RsaCtfTool.py --dumpkey --key 公钥文件
umpkey --key 公钥文件
4.用法四:密钥格式转换——把n,e转换为PEM格式:
python RsaCtfTool.py --createpub -n 782837482376192871287312987398172312837182 -e 65537
使用案例:
Hgame CTF
Crypto
RSA
from Crypto.Util.number import *
flag = open('flag.txt', 'rb').read()
p = getPrime(512)
q = getPrime(512)
n=p*q
e = 65537
m = bytes_to_long(flag)
c = pow(m, e, n)
print(f"c={c}")
print(f"n={n}")
"""
c=110674792674017748243232351185896019660434718342001686906527789876264976328686134101972125493938434992787002915562500475480693297360867681000092725583284616353543422388489208114545007138606543678040798651836027433383282177081034151589935024292017207209056829250152219183518400364871109559825679273502274955582
n=135127138348299757374196447062640858416920350098320099993115949719051354213545596643216739555453946196078110834726375475981791223069451364024181952818056802089567064926510294124594174478123216516600368334763849206942942824711531334239106807454086389211139153023662266125937481669520771879355089997671125020789
"""
EXP:
可以使用factordb.com分解N,得到p,q
from gmpy2 import *
from libnum import *
c = 110674792674017748243232351185896019660434718342001686906527789876264976328686134101972125493938434992787002915562500475480693297360867681000092725583284616353543422388489208114545007138606543678040798651836027433383282177081034151589935024292017207209056829250152219183518400364871109559825679273502274955582
n = 135127138348299757374196447062640858416920350098320099993115949719051354213545596643216739555453946196078110834726375475981791223069451364024181952818056802089567064926510294124594174478123216516600368334763849206942942824711531334239106807454086389211139153023662266125937481669520771879355089997671125020789
p = 11239134987804993586763559028187245057652550219515201768644770733869088185320740938450178816138394844329723311433549899499795775655921261664087997097294813
q = n // p
e = 65537
d = invert(e,(q-1)*(p-1))
print(n2s(pow(c,d,n)))
使用
使用RsaCtfTool直接解密,直接在kali中下载RsaCtfTool,在RsaCtfTool目录下运行
python3 ./RsaCtfTool.py -n 135127138348299757374196447062640858416920350098320099993115949719051354213545596643216739555453946196078110834726375475981791223069451364024181952818056802089567064926510294124594174478123216516600368334763849206942942824711531334239106807454086389211139153023662266125937481669520771879355089997671125020789 -e 65537 --uncipher 110674792674017748243232351185896019660434718342001686906527789876264976328686134101972125493938434992787002915562500475480693297360867681000092725583284616353543422388489208114545007138606543678040798651836027433383282177081034151589935024292017207209056829250152219183518400364871109559825679273502274955582
private argument is not set, the private key will not be displayed, even if recovered
直接求出flag。
hgame{factordb.com_is_strong!}