zoukankan      html  css  js  c++  java
  • RSA脚本环境配置攻防世界OldDriver

    【Crypto】 题目链接 【RSA算法解密】

    ⭐审题分析⭐


    首先拿到一个压缩包,解压得到文件enc.txt。 先不用去管其他,第一眼enc马上联想到 RSA解密。接着往下看
    [{"c": 7366067574741171461722065133242916080495505913663250330082747465383676893970411476550748394841437418105312353971095003424322679616940371123028982189502042, "e": 10, "n": 25162507052339714421839688873734596177751124036723831003300959761137811490715205742941738406548150240861779301784133652165908227917415483137585388986274803},
    {"c": 21962825323300469151795920289886886562790942771546858500842179806566435767103803978885148772139305484319688249368999503784441507383476095946258011317951461, "e": 10, "n": 23976859589904419798320812097681858652325473791891232710431997202897819580634937070900625213218095330766877190212418023297341732808839488308551126409983193},
    {"c": 6569689420274066957835983390583585286570087619048110141187700584193792695235405077811544355169290382357149374107076406086154103351897890793598997687053983, "e": 10, "n": 18503782836858540043974558035601654610948915505645219820150251062305120148745545906567548650191832090823482852604346478335353784501076761922605361848703623},
    {"c": 4508246168044513518452493882713536390636741541551805821790338973797615971271867248584379813114125478195284692695928668946553625483179633266057122967547052, "e": 10, "n": 23383087478545512218713157932934746110721706819077423418060220083657713428503582801909807142802647367994289775015595100541168367083097506193809451365010723},
    {"c": 22966105670291282335588843018244161552764486373117942865966904076191122337435542553276743938817686729554714315494818922753880198945897222422137268427611672, "e": 10, "n": 31775649089861428671057909076144152870796722528112580479442073365053916012507273433028451755436987054722496057749731758475958301164082755003195632005308493},
    {"c": 17963313063405045742968136916219838352135561785389534381262979264585397896844470879023686508540355160998533122970239261072020689217153126649390825646712087, "e": 10, "n": 22246342022943432820696190444155665289928378653841172632283227888174495402248633061010615572642126584591103750338919213945646074833823905521643025879053949},
    {"c": 1652417534709029450380570653973705320986117679597563873022683140800507482560482948310131540948227797045505390333146191586749269249548168247316404074014639, "e": 10, "n": 25395461142670631268156106136028325744393358436617528677967249347353524924655001151849544022201772500033280822372661344352607434738696051779095736547813043},
    {"c": 15585771734488351039456631394040497759568679429510619219766191780807675361741859290490732451112648776648126779759368428205194684721516497026290981786239352, "e": 10, "n": 32056508892744184901289413287728039891303832311548608141088227876326753674154124775132776928481935378184756756785107540781632570295330486738268173167809047},
    {"c": 8965123421637694050044216844523379163347478029124815032832813225050732558524239660648746284884140746788823681886010577342254841014594570067467905682359797, "e": 10, "n": 52849766269541827474228189428820648574162539595985395992261649809907435742263020551050064268890333392877173572811691599841253150460219986817964461970736553},
    {"c": 13560945756543023008529388108446940847137853038437095244573035888531288577370829065666320069397898394848484847030321018915638381833935580958342719988978247, "e": 10, "n": 30415984800307578932946399987559088968355638354344823359397204419191241802721772499486615661699080998502439901585573950889047918537906687840725005496238621}]
    

    给出 十组RSA(enc)加密信息。且十组的e都相同。这里涉及到三个参数:

    • e / c :c要满足 : e * c = 1 (mod(p-1) * (q-1))

    • n : n = p * q(p和q是两个不同的大素数)

    • { e , n } 为公开密钥 { c , n } 为私有密钥



    详情可参考 阮一峰RSA算法



    ⭐低加密指数广播攻击⭐


    推一波大佬的总结: 详情戳这里


    低加密指数广播攻击


    介绍:


    如果选取的加密指数较低,并且使用了相同的加密指数给一个接受者的群发送相同的信息,那么可以进行广播攻击得到明文。

    即,选取了相同的加密指数e(这里取e=3),对相同的明文m进行了加密并进行了消息的传递,那么有:

    $ c_1equiv m^e$ $mod$ $n_1$

    $ c_2equiv m^e$ $mod$ $n_2$

    $ c_3equiv m^e$ $mod$ $n_3$

    对上述等式运用中国剩余定理,在e=3时,可以得到:

    $ c_xequiv m^3$ $mod$ $n_1n_2n_3$

    通过对$ c_x $进行三次开方可以求得明文。


    识别:


    这个识别起来比较简单,一般来说都是给了三组加密的参数和明密文,其中题目很明确地能告诉你这三组的明文都是一样的,并且e都取了一个较小的数字。



    ⭐环境准备⭐


    1. python2.x -- python3.x 环境准备

    2. libnum

    3. gmpy2(重头戏)


    python2.x -- python3.x 环境准备


    第一个相信大家都已经准备好了。


    安装 libunm


    如何下载 libunm库 只需打开 cmd 窗口,执行该命令即可:

    pip install libnum -i https://pypi.mirrors.ustc.edu.cn/simple/ 
    

    -i 后面接的是镜像源,加速下载。 可以换源 自取。

    阿里云 http://mirrors.aliyun.com/pypi/simple/
    中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
    豆瓣(douban) http://pypi.douban.com/simple/
    清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/
    中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/


    若是下载失败或者在pycharm里运行还是显示没有该模块,则我们可以采取直接法。直接在pycharm里下载该库。

    先打开pycharm -> settings -> Project Interpreter -> "+" -> 输入 libnum ->下载 -> 完成。


    这里提一句: 点击下方红框按钮,进行添加镜像,下载速度会更快哦~镜像源在上面已经给出,可自取!



    若出现 不信任报错,手动修改 httphttps 即可!


    顺带一提:在做RSA解题时经常会碰到 import crypto 如题【攻防世界】 cr3-what-is-this-encryption

    import libnum
    from Crypto.Util.number import long_to_bytes
    

    安装pycryptodome


    缺少crypto模块怎么办?


    • 法一: pip 安装

    • 法二: pycharm 里直接安装 crypto ,发现找不到?! 实际上应安装 pycrypto 即可。

      (法一法二均与上述libnum模块安装一致)

    • 法三:pycharm里面直接安装 pycryptodome 模块

      (PS:像博主这种倒霉蛋pycrypto又没安成功,只好曲线救国)


    这样就万事大吉啦~~

    Windows下 -- gmpy2安装


    最后一项 下载 gmpy2库 这可真是太折腾了。 博主亲测:


    • 第一种:与上述装 libnum库 一样,直接 pip 或者 pycharm 里安装 。 (反正倒霉蛋我是不行的)

    • 第二种:利用pip 安装 .whl 轮子文件 成功上岸!!

      首先,确定自己的python 版本 ,可直接 用 python -version 查看。

      下面,来这个 宝藏之地 找到 GMPY 板块。 根据自己的python版本来进行相应的下载。

      比如说,博主的python环境是 python3.8 ,并且,电脑是64版本,那就下载相对应的 gmpy2‑2.0.8‑cp38‑cp38‑win_amd64.whl 的文件 即可。



    安装后,进入你安装的python环境的目录。打开 Script 文件夹,将刚下载好的.whl文件拖进去,然后在此处打开 cmd窗口 ,或者是 Powershell 。 执行以下命令 : 注意!!.whl文件名一定要复制完整!!

    C:\Program Files\Python38\Scripts> pip install gmpy2‑2.0.8‑cp38‑cp38‑win_amd64.whl
    

    这样就安装成功啦!!


    Kali Linux下安装 RsaCtfTools


    RsaCtfTools 也是解Rsa题目的必备神器。 如何安装,大家可以康康大佬的这篇 kail下安装RsaCtfTool

    (博主亲测安装很顺利)

    但是!! 在安装mpfr时 ,记得将命令换成这条哦!不然会404

    wget https://www.mpfr.org/mpfr-current/mpfr-4.1.0.tar.bz2
    

    在执行 pip install -r requirements.txt 时,记得 先返回 RsaCtfTool目录中哦

    cd ../
    cd ../
    

    友情提醒一下 RsaCtfTool.py 是 python3 哒

    python2 pip 安装 :

    apt-get install python-pip
    

    python3 pip3 安装 :

    apt-get install python3-pip
    

    python -V 查看当前版本~

    Successful!!!


    ⭐解题脚本⭐

    万事俱备,只欠东风~接下来可以解题了。利用 中国剩余定理 来进行编写解密脚本 借鉴网上大佬脚本:这里


    python3.x 脚本

    import libnum
    import gmpy2
    dic =[{"c":7366067574741171461722065133242916080495505913663250330082747465383676893970411476550748394841437418105312353971095003424322679616940371123028982189502042, "e": 10, "n":25162507052339714421839688873734596177751124036723831003300959761137811490715205742941738406548150240861779301784133652165908227917415483137585388986274803},
    {"c":21962825323300469151795920289886886562790942771546858500842179806566435767103803978885148772139305484319688249368999503784441507383476095946258011317951461, "e": 10, "n":23976859589904419798320812097681858652325473791891232710431997202897819580634937070900625213218095330766877190212418023297341732808839488308551126409983193},
    {"c":6569689420274066957835983390583585286570087619048110141187700584193792695235405077811544355169290382357149374107076406086154103351897890793598997687053983, "e": 10, "n":18503782836858540043974558035601654610948915505645219820150251062305120148745545906567548650191832090823482852604346478335353784501076761922605361848703623},
    {"c":4508246168044513518452493882713536390636741541551805821790338973797615971271867248584379813114125478195284692695928668946553625483179633266057122967547052, "e": 10, "n":23383087478545512218713157932934746110721706819077423418060220083657713428503582801909807142802647367994289775015595100541168367083097506193809451365010723},
    {"c":22966105670291282335588843018244161552764486373117942865966904076191122337435542553276743938817686729554714315494818922753880198945897222422137268427611672, "e": 10, "n":31775649089861428671057909076144152870796722528112580479442073365053916012507273433028451755436987054722496057749731758475958301164082755003195632005308493},
    {"c":17963313063405045742968136916219838352135561785389534381262979264585397896844470879023686508540355160998533122970239261072020689217153126649390825646712087, "e": 10, "n":22246342022943432820696190444155665289928378653841172632283227888174495402248633061010615572642126584591103750338919213945646074833823905521643025879053949},
    {"c":1652417534709029450380570653973705320986117679597563873022683140800507482560482948310131540948227797045505390333146191586749269249548168247316404074014639, "e": 10, "n":25395461142670631268156106136028325744393358436617528677967249347353524924655001151849544022201772500033280822372661344352607434738696051779095736547813043},
    {"c":15585771734488351039456631394040497759568679429510619219766191780807675361741859290490732451112648776648126779759368428205194684721516497026290981786239352, "e": 10, "n":32056508892744184901289413287728039891303832311548608141088227876326753674154124775132776928481935378184756756785107540781632570295330486738268173167809047},
    {"c":8965123421637694050044216844523379163347478029124815032832813225050732558524239660648746284884140746788823681886010577342254841014594570067467905682359797, "e": 10, "n":52849766269541827474228189428820648574162539595985395992261649809907435742263020551050064268890333392877173572811691599841253150460219986817964461970736553},
    {"c":13560945756543023008529388108446940847137853038437095244573035888531288577370829065666320069397898394848484847030321018915638381833935580958342719988978247, "e": 10, "n":30415984800307578932946399987559088968355638354344823359397204419191241802721772499486615661699080998502439901585573950889047918537906687840725005496238621}]
    n = []
    C = []
    for i in dic:
        n.append(i["n"])
        C.append(i["c"])
    
    N = 1
    for i in n:
        N *= i
    
    Ni = []
    for i in n:
        Ni.append(N // i)
    
    T = []
    for i in range(10):
        T.append(int(gmpy2.invert(Ni[i], n[i])))
    
    X = 0
    for i in range(10):
        X += C[i] * Ni[i] * T[i]
    
    m10 = X % N
    m = gmpy2.iroot(m10, 10)
    print (libnum.n2s(m[0]))
    
    


    python2.x 脚本

    import libnum
    import gmpy2
    dic =[{"c":7366067574741171461722065133242916080495505913663250330082747465383676893970411476550748394841437418105312353971095003424322679616940371123028982189502042, "e": 10, "n":25162507052339714421839688873734596177751124036723831003300959761137811490715205742941738406548150240861779301784133652165908227917415483137585388986274803},
    {"c":21962825323300469151795920289886886562790942771546858500842179806566435767103803978885148772139305484319688249368999503784441507383476095946258011317951461, "e": 10, "n":23976859589904419798320812097681858652325473791891232710431997202897819580634937070900625213218095330766877190212418023297341732808839488308551126409983193},
    {"c":6569689420274066957835983390583585286570087619048110141187700584193792695235405077811544355169290382357149374107076406086154103351897890793598997687053983, "e": 10, "n":18503782836858540043974558035601654610948915505645219820150251062305120148745545906567548650191832090823482852604346478335353784501076761922605361848703623},
    {"c":4508246168044513518452493882713536390636741541551805821790338973797615971271867248584379813114125478195284692695928668946553625483179633266057122967547052, "e": 10, "n":23383087478545512218713157932934746110721706819077423418060220083657713428503582801909807142802647367994289775015595100541168367083097506193809451365010723},
    {"c":22966105670291282335588843018244161552764486373117942865966904076191122337435542553276743938817686729554714315494818922753880198945897222422137268427611672, "e": 10, "n":31775649089861428671057909076144152870796722528112580479442073365053916012507273433028451755436987054722496057749731758475958301164082755003195632005308493},
    {"c":17963313063405045742968136916219838352135561785389534381262979264585397896844470879023686508540355160998533122970239261072020689217153126649390825646712087, "e": 10, "n":22246342022943432820696190444155665289928378653841172632283227888174495402248633061010615572642126584591103750338919213945646074833823905521643025879053949},
    {"c":1652417534709029450380570653973705320986117679597563873022683140800507482560482948310131540948227797045505390333146191586749269249548168247316404074014639, "e": 10, "n":25395461142670631268156106136028325744393358436617528677967249347353524924655001151849544022201772500033280822372661344352607434738696051779095736547813043},
    {"c":15585771734488351039456631394040497759568679429510619219766191780807675361741859290490732451112648776648126779759368428205194684721516497026290981786239352, "e": 10, "n":32056508892744184901289413287728039891303832311548608141088227876326753674154124775132776928481935378184756756785107540781632570295330486738268173167809047},
    {"c":8965123421637694050044216844523379163347478029124815032832813225050732558524239660648746284884140746788823681886010577342254841014594570067467905682359797, "e": 10, "n":52849766269541827474228189428820648574162539595985395992261649809907435742263020551050064268890333392877173572811691599841253150460219986817964461970736553},
    {"c":13560945756543023008529388108446940847137853038437095244573035888531288577370829065666320069397898394848484847030321018915638381833935580958342719988978247, "e": 10, "n":30415984800307578932946399987559088968355638354344823359397204419191241802721772499486615661699080998502439901585573950889047918537906687840725005496238621}]
    n = []
    C = []
    for i in dic:
        n.append(i["n"])
        C.append(i["c"])
    
    N = 1
    for i in n:
        N *= i
    
    Ni = []
    for i in n:
        Ni.append(N / i)
    
    T = []
    for i in xrange(10):
        T.append(long(gmpy2.invert(Ni[i], n[i])))
    
    X = 0
    for i in xrange(10):
        X += C[i] * Ni[i] * T[i]
    
    m10 = X % N
    m = gmpy2.iroot(m10, 10)
    print libnum.n2s(m[0])
    

    • python2.x和python3.x环境脚本存在三个不同
    • print 有无括号 (不提也罢)
    • Ni.append(N / i) 在Python3中,N / i 返回的是float类型,float 最大值为1.7976931348623157e+308 因此会报错 OverflowError: integer division result too large for a float 所以要将它绕过,用//代替/,这样返回的是Integer
    • T.append(long(gmpy2.invert(Ni[i], n[i]))) 在Python3中,不存在 long() 函数,直接改为 int() 就可

    综上!!得到flag啦~~
    flag{wo0_th3_tr4in_i5_leav1ng_g3t_on_it}
    

    ⭐结语⭐

    关于以上链接引用【侵权删】

    第一次写博客,多多担待!若有错误之处还请多多指正~!

    【转载请放链接】 https://www.cnblogs.com/Jlay/p/RSA_Environment.html

  • 相关阅读:
    webapp开发绝对定位引发的问题
    git下配置github sshkey
    html5 filereader读取流注意事项
    神奇的负Margin
    泪奔的ie
    第二次作业-实践一 网络攻防环境的搭建
    20199115 2019-2020-2 《网络攻防实践》第一周作业
    《网络攻防实践》寒假作业
    C++中cin、cin.get()、cin.getline()、getline()、gets()等函数的用法
    getline()函数
  • 原文地址:https://www.cnblogs.com/Jlay/p/RSA_Environment.html
Copyright © 2011-2022 走看看