• buuctf学习笔记


    crypto

    18.信息化时代的步伐

    得到一串数字606046152623600817831216121621196386
    这是中文电码,用在线网站解密下

    flag{计算机要从娃娃抓起}

    19.RSA1

    c≡m^emodn
    m≡c^dmodn
    ϕ(n)=(p−1)∗(q−1)
    d∗e≡1modϕ(n)
    dp≡dmod(p−1)
    dq≡dmod(q−1)
    因为n=pq,所以m1=c^dmodp,m2=c^dmodq
    求明文m即为求这两个同余式的解,应该使用中国剩余定理解答
    假设d=k(p-1)+dp
    即m1=c^(k(p-1)+dp)modp
    又因为c^(p-1)modp≡1
    所以m1≡c^dpmodp
    同理m2≡c^dqmodq
    

    代码如下:

    import gmpy2
    n1=8637633767257008567099653486541091171320491509433615447539162437911244175885667806398411790524083553445158113502227745206205327690939504032994699902053229 
    n2=12640674973996472769176047937170883420927050821480010581593137135372473880595613737337630629752577346147039284030082593490776630572584959954205336880228469 
    dp=6500795702216834621109042351193261530650043841056252930930949663358625016881832840728066026150264693076109354874099841380454881716097778307268116910582929 
    dq=783472263673553449019532580386470672380574033551303889137911760438881683674556098098256795673512201963002175438762767516968043599582527539160811120550041 
    c=24722305403887382073567316467649080662631552905960229399079107995602154418176056335800638887527614164073530437657085079676157350205351945222989351316076486573599576041978339872265925062764318536089007310270278526159678937431903862892400747915525118983959970607934142974736675784325993445942031372107342103852
    M = n1*n2
    
    m1 = n2
    
    m2 = n1
    
    c1 = gmpy2.powmod(c,dp,n1)
    c2 = gmpy2.powmod(c,dq,n2)
    
    t1 = c1*m1*gmpy2.invert(m1,n1)
    
    t2 = c2*m2*gmpy2.invert(m2,n2)
    
    
    x = (t1+t2) % M
    
    flag1= hex(x)[2:]
    print(flag1)
    print(bytes.fromhex(hex(x)[2:])) 
    

    20.凯撒?替换?呵呵!

    密文为:MTHJ{CUBCGXGUGXWREXIPOYAOEYFIGXWRXCHTKHFCOHCFDUCGTXZOHIXOEOWMEHZO}

    在这个网站奇怪的上单暴力破解

    'substitution cipher decryption is always easy just like a piece of cake'.replace(' ','').lower()
    

    flag{substitutioncipherdecryptionisalwayseasyjustlikeapieceofcake}

    21.old-fashion

    密文:Os drnuzearyuwn, y jtkjzoztzoes douwlr oj y ilzwex eq lsdexosa kn pwodw tsozj eq ufyoszlbz yrl rlufydlx pozw douwlrzlbz, ydderxosa ze y rlatfyr jnjzli; mjy gfbmw vla xy wbfnsy symmyew (mjy vrwm qrvvrf), hlbew rd symmyew, mebhsymw rd symmyew, vbomgeyw rd mjy lxrzy, lfk wr dremj. Mjy eyqybzye kyqbhjyew mjy myom xa hyedrevbfn lf bfzyewy wgxwmbmgmbrf. Wr mjy dsln bw f1_2jyf-k3_jg1-vb-vl_l

    在这个网站奇怪的上单暴力破解

    flag{n1_2hen-d3_hu1-mi-ma_a}

    22.权限获得第一步

    密文:Administrator:500:806EDC27AA52E314AAD3B435B51404EE:F4AD50F57683D4260DFD48AA351A17A8:::
    密文符合Windows NTLM Hash的形式,考虑对其后32为进行处理
    F4AD50F57683D4260DFD48AA351A17A8MD5解密

    萌萌哒的八戒

    猪圈解密工具

    flag{whenthepigwanttoeat}

    23.世上无难事

    密文:VIZZB IFIUOJBWO NVXAP OBC XZZ UKHVN IFIUOJBWO HB XVIXW XAW VXFI X QIXN VBD KQ IFIUOJBWO WBKAH NBWXO VBD XJBCN NKG QLKEIU DI XUI VIUI DKNV QNCWIANQ XN DXPIMKIZW VKHV QEVBBZ KA XUZKAHNBA FKUHKAKX XAW DI VXFI HBN QNCWIANQ NCAKAH KA MUBG XZZ XEUBQQ XGIUKEX MUBG PKAWIUHXUNIA NVUBCHV 12NV HUXWI XAW DI XUI SCQN QB HZXW NVXN XZZ EBCZW SBKA CQ NBWXO XAW DI DXAN NB NVXAP DXPIMKIZW MBU JIKAH QCEV XA BCNQNXAWKAH VBQN HKFI OBCUQIZFIQ X JKH UBCAW BM XLLZXCQI XAW NVI PIO KQ 640I11012805M211J0XJ24MM02X1IW09

    在这个网站奇怪的上单暴力破解

    在python中转为小写
    'flag{640E11012805F211B0AB24FF02A1ED09}'.lower()
    flag{640e11012805f211b0ab24ff02a1ed09}

    24.RSA3(共模攻击)

    题目:
    c1=22322035275663237041646893770451933509324701913484303338076210603542612758956262869640822486470121149424485571361007421293675516338822195280313794991136048140918842471219840263536338886250492682739436410013436651161720725855484866690084788721349555662019879081501113222996123305533009325964377798892703161521852805956811219563883312896330156298621674684353919547558127920925706842808914762199011054955816534977675267395009575347820387073483928425066536361482774892370969520740304287456555508933372782327506569010772537497541764311429052216291198932092617792645253901478910801592878203564861118912045464959832566051361
    n=22708078815885011462462049064339185898712439277226831073457888403129378547350292420267016551819052430779004755846649044001024141485283286483130702616057274698473611149508798869706347501931583117632710700787228016480127677393649929530416598686027354216422565934459015161927613607902831542857977859612596282353679327773303727004407262197231586324599181983572622404590354084541788062262164510140605868122410388090174420147752408554129789760902300898046273909007852818474030770699647647363015102118956737673941354217692696044969695308506436573142565573487583507037356944848039864382339216266670673567488871508925311154801
    e1=11187289
    c2=18702010045187015556548691642394982835669262147230212731309938675226458555210425972429418449273410535387985931036711854265623905066805665751803269106880746769003478900791099590239513925449748814075904017471585572848473556490565450062664706449128415834787961947266259789785962922238701134079720414228414066193071495304612341052987455615930023536823801499269773357186087452747500840640419365011554421183037505653461286732740983702740822671148045619497667184586123657285604061875653909567822328914065337797733444640351518775487649819978262363617265797982843179630888729407238496650987720428708217115257989007867331698397
    e2=9647291
    
    因为e1,e2的最大公约数为1,这个可以通过gmpy2.gcd(e1,e2)验证
    因此:存在e1*s1+e2*s2=1
    m = c1^d1 mod n
    m = c2^d2 mod n
    c1^s1 mod n=m^(e1*s1) mod n
    c2^s2 mod n=m^(e2*s2) mod n
    c1^s1*c2^s2 mod n=m^(e1*s1+e2*s2) mod n
    c1^s1*c2^s2  =m mod n
    因此只需要找到s1,s2即可求出明文m
    
    import gmpy2
    import binascii
    
    def main():
        n = 22708078815885011462462049064339185898712439277226831073457888403129378547350292420267016551819052430779004755846649044001024141485283286483130702616057274698473611149508798869706347501931583117632710700787228016480127677393649929530416598686027354216422565934459015161927613607902831542857977859612596282353679327773303727004407262197231586324599181983572622404590354084541788062262164510140605868122410388090174420147752408554129789760902300898046273909007852818474030770699647647363015102118956737673941354217692696044969695308506436573142565573487583507037356944848039864382339216266670673567488871508925311154801
        c1 = 22322035275663237041646893770451933509324701913484303338076210603542612758956262869640822486470121149424485571361007421293675516338822195280313794991136048140918842471219840263536338886250492682739436410013436651161720725855484866690084788721349555662019879081501113222996123305533009325964377798892703161521852805956811219563883312896330156298621674684353919547558127920925706842808914762199011054955816534977675267395009575347820387073483928425066536361482774892370969520740304287456555508933372782327506569010772537497541764311429052216291198932092617792645253901478910801592878203564861118912045464959832566051361
        c2 = 18702010045187015556548691642394982835669262147230212731309938675226458555210425972429418449273410535387985931036711854265623905066805665751803269106880746769003478900791099590239513925449748814075904017471585572848473556490565450062664706449128415834787961947266259789785962922238701134079720414228414066193071495304612341052987455615930023536823801499269773357186087452747500840640419365011554421183037505653461286732740983702740822671148045619497667184586123657285604061875653909567822328914065337797733444640351518775487649819978262363617265797982843179630888729407238496650987720428708217115257989007867331698397
        e1 = 11187289
        e2 = 9647291
        # s11=gmpy2.invert(e1,e2)
        s22=gmpy2.invert(e2,e1)
        s11=int((1-e2*s22)/e1)  #float->int
    
        m = pow(c1,s11,n)*pow(c2,s22,n)%n
        print(m)
        flag = binascii.unhexlify(hex(m)[2:])
        print(flag)
    
    
    if __name__ == '__main__':
        main()
    

    flag{49d91077a1abcb14f1a9d546c80be9ef}
    别人的解法

    25.RSA2(dp泄露攻击)

    e<p-1
    dp*e=ed(modp-1)
    ed=k(p-1)+dp*e
    ed=1(mod(p-1)(q-1))
    ed=m(p-1)(q-1)+1
    联立可得:(p-1)*i+1=dp*e     //(i=m(q-1)-k)
    dp<p-1
    i<e
    找到i即可计算出p
    
    import gmpy2 as gp
    import binascii
    
    e = 65537
    n = 248254007851526241177721526698901802985832766176221609612258877371620580060433101538328030305219918697643619814200930679612109885533801335348445023751670478437073055544724280684733298051599167660303645183146161497485358633681492129668802402065797789905550489547645118787266601929429724133167768465309665906113
    dp = 905074498052346904643025132879518330691925174573054004621877253318682675055421970943552016695528560364834446303196939207056642927148093290374440210503657
    
    c = 140423670976252696807533673586209400575664282100684119784203527124521188996403826597436883766041879067494280957410201958935737360380801845453829293997433414188838725751796261702622028587211560353362847191060306578510511380965162133472698713063592621028959167072781482562673683090590521214218071160287665180751
    
    
    for i in range(1,e):                   #在范围(1,e)之间进行遍历
        if(dp*e-1)%i == 0:
            if n%(((dp*e-1)//i)+1) == 0:   #存在p,使得n能被p整除
                p=((dp*e-1)//i)+1
                q=n//(((dp*e-1)//i)+1)
                phi=(q-1)*(p-1)            #欧拉定理
                d=gp.invert(e,phi)         #求模逆
                m=pow(c,d,n)               #快速求幂取模运算
               
    print(m)                               #10进制明文
    print('------------')
    print(hex(m)[2:])                      #16进制明文
    print('------------')
    print(bytes.fromhex(hex(m)[2:]))       #16进制转文本
    print(binascii.unhexlify(hex(m)[2:]))
    

    flag{wow_leaking_dp_breaks_rsa?_98924743502}

  • 相关阅读:
    通过Navicat导入SQLServer的MDF文件和LDF文件
    ubantu系统出现登录界面死循环处理办法
    ubantu系统修改权限失败,导致只能客人会话登录解决办法
    redis基础
    ubantu安装MySQL,并未出现设置root密码的提示--》少年,请不要乱改密码!
    ngx_http_access_module模块说明
    一些常用的ngx_http_core_module介绍
    八、location匹配规则
    七、nginx的虚拟主机配置
    六、nginx的配置文件说明
  • 原文地址:https://www.cnblogs.com/wqnmlkb/p/14651175.html
Copyright © 2020-2023  润新知