zoukankan      html  css  js  c++  java
  • RSA(攻防世界)Rsa256 -- cr4-poor-rsa

    ⭐RSA256


    【攻防世界】 题目链接 【RSA256】



    下载附件得到两个文件。 猜测第一个 txt 文件 可能为RSA加密密文 ,第二个估计就是密钥。依次打开看看:


    果然如此。


    目标: 寻找 n、e、q、p


    利用 openssl 查看 e


    打开 kali ,利用 openssl 工具


    输入以下命令:


    openssl rsa -pubin -text -modulus -in gy.key
    


    得到: e: 65537 (0x10001)


    常见 openssl rsa 命令 如下:


    openssl rsa [-inform PEM|NET|DER] [-outform PEM|NET|DER] [-in filename] [-passin arg] [-out filename] [-passout arg] [-sgckey] [-des] [-des3] [-idea] [-text] [-noout] [-modulus] [-check] [-pubin] [-pubout] [-engine id]


    -in filename:指明私钥文件


    -out filename:指明将提取出的公钥保存至指定文件中


    -pubout:根据私钥提取出公钥


    例子:已知私钥,利用openssl 工具破解密文。


    如题 : 【攻防世界】就在其中


    openssl rsautl -decrypt -in key.txt -inkey psa.key -out flag.txt
    

    密文: key.txt

    私钥:psa.key

    破解保存到 flag.txt


    十六进制转换得到 n


    注意到上一步骤中,得到了:

    Modulus=A9BD4C7A7763370A042FE6BEC7DDC841602DB942C7A362D1B5D372A4D08912D9
    


    Modulus的值目前是十六进制,需转化为十进制:


    得到 n:76775333340223961139427050707840417811156978085146970312315886671546666259161


    利用 n来分解得到 p、q


    已知 n = 76775333340223961139427050707840417811156978085146970312315886671546666259161


    利用 在线分解素数网站


    得到

    p =  273821108020968288372911424519201044333
    q =  280385007186315115828483000867559983517
    

    跑脚本出flag


    至于跑脚本的库的提前准备,可参考我 之前一篇博客中的环境准备


    #coding:utf-8
    import gmpy2
    import rsa
    p = 273821108020968288372911424519201044333
    q = 280385007186315115828483000867559983517
    n = 76775333340223961139427050707840417811156978085146970312315886671546666259161
    e = 65537
    d = int(gmpy2.invert(e,(p-1)*(q-1)))
    privatekey = rsa.PrivateKey(n,e,d,p,q)
    with open("E:\fllllllag.txt","rb") as f:
        print(rsa.decrypt(f.read(),privatekey).decode())
    


    flag{_2o!9_CTF_ECUN_}
    


    记得去掉 _ 真正的flag为:


    flag{2o!9CTFECUN}
    

    【参考题解】 戳这里


    ⭐cr4-poor-rsa


    【攻防世界】 题目链接 【cr4-poor-rsa】


    下载附件,解压得到如下两个文件:

    【注意】显然在第一个文件中,flag经过base64加密,跑脚本时要记得给其解密:


    利用 openssl来查看 key.pub


    openssl rsa -pubin -text -modulus -in key.pub
    


    得到 :


    e = 65537
    n = 52A99E249EE7CF3C0CBF963A009661772BC9CDF6E1E3FBFC6E44A07A5E0F894457A9F81C3AE132AC5683D35B28BA5C324243
    = 833810193564967701912362955539789451139872863794534923259743419423089229206473091408403560311191545764221310666338878019
    

    分解大数n,得到p、q


    分解: http://www.factordb.com/



    p = 863653476616376575308866344984576466644942572246900013156919
    q = 965445304326998194798282228842484732438457170595999523426901
    

    脚本拿flag


    修改一下上题脚本:


    #coding:utf-8
    import gmpy2
    import rsa
    from base64 import b64decode
    p = 863653476616376575308866344984576466644942572246900013156919
    q = 965445304326998194798282228842484732438457170595999523426901
    n = 833810193564967701912362955539789451139872863794534923259743419423089229206473091408403560311191545764221310666338878019
    e = 65537
    d = int(gmpy2.invert(e,(p-1)*(q-1)))
    privatekey = rsa.PrivateKey(n,e,d,p,q)
    with open("E:\flag.b64","rb") as f:
        str = b64decode(f.read())
        print(rsa.decrypt(str,privatekey).decode())
    


    拿到flag!

    ALEXCTF{SMALL_PRIMES_ARE_BAD}
    

    ⭐结语 - (enc)flag格式


    顺便提一句,像上面的格式有 _ 的存在。因此在考虑flag格式的时候,可以优先考虑一下:


    比如 【攻防世界】 的 enc 最终解密得到 ALEXCTFTH15O1SO5UP3RO5ECR3TOTXT


    但是真正flag格式 为: (将O更换为 _ )


    ALEXCTF{TH15_1S_5UP3R_5ECR3T_TXT}
    

    【侵权删】


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

  • 相关阅读:
    在HTML网页中巧用URL
    技术不是第一位,商业模式是第一位[转帖]
    SQL Server日期计算
    Ms XmlDom 异步装载Xml文件
    陆游词全集
    陈慧娴 3 In 1 MV珍藏集
    下大雪啦
    用Asp+XmlHttp实现RssReader功能
    双绞线的标准接法
    巧把Hotmail邮箱2M轻易扩容到25M
  • 原文地址:https://www.cnblogs.com/Jlay/p/Rsa_openssl.html
Copyright © 2011-2022 走看看