CDUT第一届信安大挑战Misc(部分) 和 Crypto 的write up

密码学

  • crypto 1

    • 题目描述

      modulus:99742889480132178464693625265991467727088330702125690789109469022100733238623
      exponent:65537
      请提交私钥
      注:私钥为十六进制。Flag格式 dino{0x…….}

    • 题解

      已知p、q、e求d的经典RSA题型

      首先将模数N,分解为两个大素数 p、q

      pip install factordb-pycli
      factordb n的值
      

      http://factordb.com/ 也可以求解

      求解出p、q

      # python3.8
      import gmpy2
      p =gmpy2.mpz(336771668019607304680919844592337860739)
      q =gmpy2.mpz(296173636181072725338746212384476813557)
      e =gmpy2.mpz(65537)
      
      phi_n= (p - 1) * (q - 1)
      
      d = gmpy2.invert(e, phi_n)
      print ("d is:")
      print (d)
      

      得到的d是十进制,再转换为十六进制

      进制转换:

      print "1: 10->2\n2: 10->16\n3: 2->10\n4: 16->10\n5: 16->2\n6: 2->16\n"
      c =int( raw_input("Input your choice:"))   #  c = choose
      
      # 10->2
      if c ==  1:
          print bin(int(raw_input("Input your number:")))
          
      
      # 10->16
      elif c == 2:
          print hex(int(raw_input("Input your number:")))
          
      
      # 2->10
      elif c ==3:
          print str(int(raw_input("Input your number:"),2))
          
      
      # 16->10
      elif c ==4:
          print str(int(raw_input("Input your number:"),16))
          
      
      # 16->2
      elif c == 5:
          s = str(int(raw_input("Input your number"),16))  #  s = step
          print bin(int(s))
          
      
      # 2->16
      elif c ==6:
          st = str(int(raw_input("Input your number:"),2))
          print hex(int(st))
          
      

      Flag

      dino{0xb010bd96058b2972f5778c95fb8b8614406666727a4e4bda1338aa299b219e71}

  • crypto 2

    • 题目描述

      丘比特是一位英俊儒雅的英国绅士,他的妻子埃尔西是一位美国淑女。两人的婚姻生活十分美满,直到一系列神秘信息的到来改变了一切。flag格式:dino{}

      题目下载链接:https://gryffinbit.lanzous.com/ibQUciae1zi

    • 题解

      开局一张gif,可以看到有很多图片闪过。想办法把gif分解成一张一张的,可以找网站找软件找各种工具。

      例如拖进PhotoShop:

      可以看到图层被分解,然后对照表解密:

      得到密文:THEDANCINGPEOPLE

      dino{THEDANCINGPEOPLE}

  • crypto 3

    • 题目描述

      密文:iuf_xat_hmoz_gocwmx

    • 题解

      密文:iuf_xat_hmoz_gocwmx

      Playfair cipher是一种使用一个关键词方格来加密字符对的加密法。它依据一个5*5的正方形组成的密码表来编写,密码表里排列有25个字母。如果一种语言字母超过25个,可以去掉使用频率最少的一个。如,法语一般去掉w或k,德语则是把i和j合起来当成一个字母看待。英语中z使用最少,可以去掉它。

      图片key.jpg是小恐龙dino,密钥key就是dino。

      可以手写算出密码,或者用在线网站解密:http://rumkin.com/tools/cipher/playfair.php

      flag格式:dino{}

      dino{are_you_play_fairly}

  • crypto 4

    • 题目描述

      🎵“我是一个酒精过敏的帅哥,我的酒品爆差,但是我爆爱喝。 I got drunk drunk drunk drunk 我是百变酒精,不是百变小樱。I got drunk drunk drunk drunk 今晚我要出门 酒局你得小心asmekusfkxjykebqmmsyvsbklsgkhsynkgjfphjlpjhljzqcqzfqyxqhfkiqfsxedglfkvdquzkmrsdtgsxajykmzkyjfeqyzkmrszjulmszhtzfjfhfjkyejlbsdzkcfsyckhyxjyysazlqlsdzbsdsjzfbscmqvxjyklhooms“ 法老可能酒精中毒了,胡言乱语了。Flag格式:flag{} 注:没有空格

    • 题解

      词频分析题

      https://quipqiup.com/

      welcome to dino challenge hope you enjoy it quipqiup is a fast and automated cryptogram solver by Edwin Olson It can solve simple substitution ciphers often found in newspapers here is the flag dino puzzle

      flag{dinopuzzle}

  • crypto 5

    • 题目描述

      e(m)=7m+21(mod26)
      密文:rxjfkzyh
      flag格式:dino{}

    • 题解

      仿射变换。

      dino{security}

  • crypto 6

    • 题目描述

      +21 +6 +1 +8
      flag格式: dino{}

    • 题解

      题目下载链接:https://gryffinbit.lanzous.com/i3Ejohp95wd

      从64出发,+21 +6 +1 +8

      base64 -> base 85 -> base 91 -> base 92 -> base 100

      压缩包密码:HappyHalloween
      92: ;K23g2[f*!o9q#12Hb2
      91:2f,0."!"R7uMQ:nTwlEL*JB 85: 11joF0J4Om,#U@B9i3rh<-N.I9IY$
      64: MTFqb0YwSjRPbSwjVUBCOWkzcmg8LU4uSTlJYFkk

      base100 👛👠👥👦👲👁👬👪👫👖🐹👘👪👜👖👄👜🐘👴

      dino{Just_Base_Me!}

  • crypto 7

    • 题目描述

      加入协会之后,你们会认识一个叫兔子的学姐。我期待和你们见面。送上Flag,格式dino{}。U2FsdGVkX1/+ydnDPowGbjjJXhZxm2MP2AgI

    • 解题

      Rabbit 密码

      dino{Cute_Rabbit}

  • crypto 8

    • 题目描述

      什么?你竟然不会口算MD5?算什么黑客,行吧,告诉你key是209. 剩下的自己想去,flag就是MD5都告诉你了,这都做不出来?flag格式:dino{}

      ![MD5](/Users/KarlieLee/Desktop/md/2020 10 25【招新】信安大挑战 5ad161b8c17049feadbe5a2c2bf41cef/MD5.jpg)

      题目:

      import hashlib   
      for i in range(32,127):
          for j in range(32,127):
              for k in range(32,127):
                  m=hashlib.md5()
                  m.update('TASC'+chr(i)+'O3RJMV'+chr(j)+'WDJKX'+chr(k)+'ZM')
                  des=m.hexdigest()
                  if 'e9032' in des and 'da' in des and '911513' in des:
                      print ("f9032994ebcbd08080091151380478b2")
      
    • 题解

      脚本运行print des就可以得到MD5,本题做了个混淆,print出来的是别的。e9032994dabac08080091151380478a2做了个凯撒密码位移,key=209 解一下得到的就是flag

      import hashlib   
      for i in range(32,127):
          for j in range(32,127):
              for k in range(32,127):
                  m=hashlib.md5()
                  m.update('TASC'+chr(i)+'O3RJMV'+chr(j)+'WDJKX'+chr(k)+'ZM')
                  des=m.hexdigest()
                  if 'e9032' in des and 'da' in des and '911513' in des:
                                      print (des)
                      print ("f9032994ebcbd08080091151380478b2")
      

      dino{e9032994dabac08080091151380478a2}

  • crypto 9

    • 题目描述

      RSA

      题目下载链接:https://gryffinbit.lanzous.com/i99Xmhp6bba

    • 题解

      flag{5b55c69f-398d-47bc-ad37-4f268e8ae4b2}

      需要python的基础知识。首先拿到一个脚本和一个output的执行文件。output是这个脚本的运行结果,把output放进终端,运行打印出来一串数字,对应着脚本来看,每串数字对应着一个print

      pow (x,y,z) 函数代表着x的y次方模z。反之,已知结果c1求msg m= gmpy2.iroot(c1,3)[0]

      from libnum import *
      from gmpy2 import *
      m= gmpy2.iroot(c1,3)[0]
      

      • 题目py

        from secret import e1,e2,flag
        from Crypto.Util.number import *
        
        msg = bytes_to_long("=========Hint:e1="+str(e1)+"=============")
        p = getPrime(512)
        q = getPrime(512)
        N = p*q
        print N
        #N1=92492770373119584460081987762423642921257844727187836762004909281192459271971634726161143981458071695340994591107972425352531669271078740978901135762304359798469976380706711716397909327202889036066332030534806956149533263677365472375053769919044969923810993041551455618809123044195807478835222921551845223673
        print pow(msg,3,N)
        # 求msg的3次方模N1
        #结果c1=28249132350044579687091110964285446575404805400757326954185222098803605008954490760462246663674360047951197296557689347856716297531621331430289344669498939239588624311221464757652619402073234993515450143594805022438694559765344247838048186137683783869848355994953125
        
        msg = bytes_to_long(flag)
        p = getPrime(1024)
        q = getPrime(1024)
        N = p*q
        c = pow(msg, e2, N)
        print N,e2
        #N2=27015781782143176377305444708803319343811009307670517970464768333771120997045181708841835585570829548449323842457013912871572311489720085833836018287540353234899258733164425361573491416926759037218022548655403489670177828691645649124879974295681372533797388585691439378293643867458900873524289213226600650695273378214798580343627514294295063280759129845430749116891862775979009255567653541999885963152760100703226634896555671676063304361506854160585739743294659176171738147833879545955904927967598053108666430271719503999512230196683852929862867406713611436850146222646354297511499309143157446775247989917315728885081
        #e2 是未知的,没有在output中显示
        print c
        #c=6960471390887676836770576717723665527999812876556281118485164081998911577875381908446602930344333654944091349042662834710841686602096786488652321359862587616056255592745697363730350424006430304398118412822538778460783959334956287873626339403915923932633438142296099193868446694776583016981952887671846310453413799566390944727222387714300425256165444782922011140095044159890292073622972447390685582541707094791774266611010707510165706469905665511940032155195482276746347896610980037890500866671279623501021060117466463857453415816945239635341057570437059560066260202940898394476654111403345827675113200431405898577228
        print(pow(p+q,e1,N ))
        #结果S1=1043358162140860962273728863918690254907683549241317489027248804399285815575770538413854959643097587139967903983728298468193229257795104589966904860928102961617976618240299512928763147662509317818932641083203337246219100049009339117603571633877302978817219689048124475419370026280279605865626353406562716520200330156419718727010377305953369496577186008235640834052476174479818668164269356133941979167253165318046864430749941469717776898395077805761110978284600985034996774850879017975655590682283621730288960471273895327469257980443060594976109602435213897419646191853646130932643009667656100697739228571988907108326
        print(pow(p+e1, q, N))
        #结果S2=2367294939363830936563488061919820815242930281093184747199533909423831655805653462926444204702027721204809679004109764873839689145594088483842010258154637719914884625388278232087919706082381019835448905310742695003695950771324141473767622775925225996118945331612570816055138158026344226500272784973866690432399708551301786027237710788172551956598563031161785118254195771411706070504960683710473948125061842911067623875812101363911946970263021272358739604106737786749756437515890114561301491995915709307108967981619075610635000644793538253463486203886648971971414160634218354735619624263269704236191332074536463815524
        
        # 解e1.py
        from Crypto.Util.number import *
        from gmpy2 import *
        from libnum import *
        c1=28249132350044579687091110964285446575404805400757326954185222098803605008954490760462246663674360047951197296557689347856716297531621331430289344669498939239588624311221464757652619402073234993515450143594805022438694559765344247838048186137683783869848355994953125
        msg= gmpy2.iroot(c1,3)[0]
        print(n2s(msg))
        #e1=2020321
        

      • 解题py

        from Crypto.Util.number import *
        from gmpy2 import *
        from libnum import *
        
        S1 = 1043358162140860962273728863918690254907683549241317489027248804399285815575770538413854959643097587139967903983728298468193229257795104589966904860928102961617976618240299512928763147662509317818932641083203337246219100049009339117603571633877302978817219689048124475419370026280279605865626353406562716520200330156419718727010377305953369496577186008235640834052476174479818668164269356133941979167253165318046864430749941469717776898395077805761110978284600985034996774850879017975655590682283621730288960471273895327469257980443060594976109602435213897419646191853646130932643009667656100697739228571988907108326
        S2 = 2367294939363830936563488061919820815242930281093184747199533909423831655805653462926444204702027721204809679004109764873839689145594088483842010258154637719914884625388278232087919706082381019835448905310742695003695950771324141473767622775925225996118945331612570816055138158026344226500272784973866690432399708551301786027237710788172551956598563031161785118254195771411706070504960683710473948125061842911067623875812101363911946970263021272358739604106737786749756437515890114561301491995915709307108967981619075610635000644793538253463486203886648971971414160634218354735619624263269704236191332074536463815524
        e1 = 2020321
        N2 = 27015781782143176377305444708803319343811009307670517970464768333771120997045181708841835585570829548449323842457013912871572311489720085833836018287540353234899258733164425361573491416926759037218022548655403489670177828691645649124879974295681372533797388585691439378293643867458900873524289213226600650695273378214798580343627514294295063280759129845430749116891862775979009255567653541999885963152760100703226634896555671676063304361506854160585739743294659176171738147833879545955904927967598053108666430271719503999512230196683852929862867406713611436850146222646354297511499309143157446775247989917315728885081
        
        k1 = S2 - e1
        k2 = pow(k1,e1,N2)
        k3 = k2-S1
        q = gcd(k3,N2)
        #print(q)
        #162984526621683870625098586014910615083563535116972222345188747969350923464088799732530801488388575838451737347617234153531460507216470173767572431203228056853761835680227568853138262896922662664650377958457439852663861645573573134863458099139681417307977919507889782957584330019942586292868271385366037674313
        p = N2//q
        #print(p)
        165756727599372791875820541625601955300453776993770577352314168977734910665053298526454521639089078020881208027049933409502069159705827587730047406034448233170464600044968540270031406627778916422623991350852342453286144055883559111480220646693965481942701883316426823927969224691707129909621502373328134683537
        
        e2 = 65537
        p = 165756727599372791875820541625601955300453776993770577352314168977734910665053298526454521639089078020881208027049933409502069159705827587730047406034448233170464600044968540270031406627778916422623991350852342453286144055883559111480220646693965481942701883316426823927969224691707129909621502373328134683537
        q = 162984526621683870625098586014910615083563535116972222345188747969350923464088799732530801488388575838451737347617234153531460507216470173767572431203228056853761835680227568853138262896922662664650377958457439852663861645573573134863458099139681417307977919507889782957584330019942586292868271385366037674313
        c = 6960471390887676836770576717723665527999812876556281118485164081998911577875381908446602930344333654944091349042662834710841686602096786488652321359862587616056255592745697363730350424006430304398118412822538778460783959334956287873626339403915923932633438142296099193868446694776583016981952887671846310453413799566390944727222387714300425256165444782922011140095044159890292073622972447390685582541707094791774266611010707510165706469905665511940032155195482276746347896610980037890500866671279623501021060117466463857453415816945239635341057570437059560066260202940898394476654111403345827675113200431405898577228
        phi = (p-1)*(q-1)
        d = invert(e2,phi)
        m = pow(c,d,N2)
        print(n2s(m))
        #flag{5b55c69f-398d-47bc-ad37-4f268e8ae4b2}
        

        解题脚本:

        from Crypto.Util.number import *
        from gmpy2 import *
        from libnum import *
        
        S1 = 1043358162140860962273728863918690254907683549241317489027248804399285815575770538413854959643097587139967903983728298468193229257795104589966904860928102961617976618240299512928763147662509317818932641083203337246219100049009339117603571633877302978817219689048124475419370026280279605865626353406562716520200330156419718727010377305953369496577186008235640834052476174479818668164269356133941979167253165318046864430749941469717776898395077805761110978284600985034996774850879017975655590682283621730288960471273895327469257980443060594976109602435213897419646191853646130932643009667656100697739228571988907108326
        S2 = 2367294939363830936563488061919820815242930281093184747199533909423831655805653462926444204702027721204809679004109764873839689145594088483842010258154637719914884625388278232087919706082381019835448905310742695003695950771324141473767622775925225996118945331612570816055138158026344226500272784973866690432399708551301786027237710788172551956598563031161785118254195771411706070504960683710473948125061842911067623875812101363911946970263021272358739604106737786749756437515890114561301491995915709307108967981619075610635000644793538253463486203886648971971414160634218354735619624263269704236191332074536463815524
        e1 = 2020321
        N2 = 27015781782143176377305444708803319343811009307670517970464768333771120997045181708841835585570829548449323842457013912871572311489720085833836018287540353234899258733164425361573491416926759037218022548655403489670177828691645649124879974295681372533797388585691439378293643867458900873524289213226600650695273378214798580343627514294295063280759129845430749116891862775979009255567653541999885963152760100703226634896555671676063304361506854160585739743294659176171738147833879545955904927967598053108666430271719503999512230196683852929862867406713611436850146222646354297511499309143157446775247989917315728885081
        
        k1 = S2 - e1
        k2 = pow(k1,e1,N2)
        k3 = k2-S1
        q = gcd(k3,N2)
        #print(q)
        #162984526621683870625098586014910615083563535116972222345188747969350923464088799732530801488388575838451737347617234153531460507216470173767572431203228056853761835680227568853138262896922662664650377958457439852663861645573573134863458099139681417307977919507889782957584330019942586292868271385366037674313
        p = N2//q
        #print(p)
        165756727599372791875820541625601955300453776993770577352314168977734910665053298526454521639089078020881208027049933409502069159705827587730047406034448233170464600044968540270031406627778916422623991350852342453286144055883559111480220646693965481942701883316426823927969224691707129909621502373328134683537
        
        e2 = 65537
        p = 165756727599372791875820541625601955300453776993770577352314168977734910665053298526454521639089078020881208027049933409502069159705827587730047406034448233170464600044968540270031406627778916422623991350852342453286144055883559111480220646693965481942701883316426823927969224691707129909621502373328134683537
        q = 162984526621683870625098586014910615083563535116972222345188747969350923464088799732530801488388575838451737347617234153531460507216470173767572431203228056853761835680227568853138262896922662664650377958457439852663861645573573134863458099139681417307977919507889782957584330019942586292868271385366037674313
        c = 6960471390887676836770576717723665527999812876556281118485164081998911577875381908446602930344333654944091349042662834710841686602096786488652321359862587616056255592745697363730350424006430304398118412822538778460783959334956287873626339403915923932633438142296099193868446694776583016981952887671846310453413799566390944727222387714300425256165444782922011140095044159890292073622972447390685582541707094791774266611010707510165706469905665511940032155195482276746347896610980037890500866671279623501021060117466463857453415816945239635341057570437059560066260202940898394476654111403345827675113200431405898577228
        phi = (p-1)*(q-1)
        d = invert(e2,phi)
        m = pow(c,d,N2)
        print(n2s(m))
        #flag{5b55c69f-398d-47bc-ad37-4f268e8ae4b2}
        

Misc

  • misc 1

    • 题目描述

      这张图片为什么这么大? flag格式为:dino{}

      题目下载链接:https://gryffinbit.lanzous.com/iRIKZhp6lkj

    • 题解

      binwalk -e

      提取图片中的内容,扫描二维码得到base64,解码,然后再对结果URL解码

      dino{c879f00c-1761-441f-97dd-14b0b7921278}

  • misc 2

  • misc 3

    • 题目描述

      来感受下zip套娃的魅力吧

      题目下载链接:https://gryffinbit.lanzous.com/ipv3Ihp6vyd

    • 题解

      zip是伪加密,解开之后得到一个whydocxtype.docx 用笔记本打开给了hint,是爆破的提示,把这个docx格式改成zip,打开里面有一个flag is here的zip。爆破得到密码,打开。是一个vhd,Windows下,文件管理系统,可以得到flag

      flag is here密码:114514

      flag:

      dino{f0b91cb7-605a-4ec7-9ae5-6c3a412bd67d}

  • misc 4

    • 题目描述

      hi!新生们好,欢迎来到信息安全协会,请踏上探索之路,拨开层层迷雾,找到到钥匙,打开宝箱,寻找flag吧。注意:蓝奏云下载文件的时候,不要共享密钥!!!

      题目下载链接:https://gryffinbit.lanzous.com/iigFYhp7a0j

    • 题解

      第一层: 考察点:文件头以及十六进制查看的用法

      一张图,协会之门.jpg,文件头被删掉,打开失败。用010 editor打开,添加上文件头。可以把图片打开。打开以后是一个蓝奏云的链接,但是没有提取码。 提取码需要通过010 editor打开后。在最后一行的位置放着。

      第二层:考察点:盲水印。

      上一步的蓝奏云打开后,拿到一个txt 和 一个加密的zip。

      txt内容: 209攻防实验室的大门,由一只表情凝重的猫猫守卫着!打败它!获得钥匙!欸。。。可是你发现,这竟然是影分身。。。机智的你想到需要找到本体,通过本体来发现影分身中的奥秘。 影分身说了一串你不懂的话“eW91X2xvbmdfZGFuZ19ndWlfaGFpXw==”

      you_long_dang_gui_hai_

      解密那串话,得到的内容是zip的密码。zip中放的是盲水印的原图和一个hint:宝箱我藏起来了,钥匙在影分身那里。

      通过原图的协助,将影分身中的盲水印解出来。影分身里的盲水印被解出来是一个key,

      key:welcome_to_dino209

      第三层:考察点:图片隐写

      本体里,还放着一个隐写,png里面隐藏了一个zip,将zip从png里剥离出来,得到的zip用key解压,拿到flag.txt

      Flag:

      dino{猫猫的凝视}

  • misc 5

    • 题目描述

      新生们好,曾经CTF大赛中出现过一道yusa女神题。图片里的大脸把出题人折磨的很惨。于是,出题人决定出一道小麦腹肌男的题来报复。希望你们玩的开心。小麦腹肌男,永远滴神!

      题目下载地址:https://gryffinbit.lanzous.com/iPNslhp7n5c

    • 题解

      # -*- coding:UTF-8 -*-
      
      from PIL import Image
      
      
      
      def mod(x,y):
      
          return x%y;
      
      
      
      def toasc(strr):
      
          return int(strr, 2)
      
      #le为所要提取的信息的长度,str1为加密载体图片的路径,str2为提取文件的保存路径
      
      def func(le,str1,str2):
      
          a=""
      
          b=""
      
          im = Image.open(str1)
      
          lenth = le*8
      
          width = im.size[0]
      
          height = im.size[1]
      
          count = 0
      
          for h in range(0, height):
      
              for w in range(0, width):
      
                   #获得(w,h)点像素的值
      
                  pixel = im.getpixel((w, h))
      
                  #此处余3,依次从R、G、B三个颜色通道获得最低位的隐藏信息
      
                  if count%3==0:
      
                      count+=1
      
                      b=b+str((mod(int(pixel[0]),2)))
      
                      if count ==lenth:
      
                          break
      
                  if count%3==1:
      
                      count+=1
      
                      b=b+str((mod(int(pixel[1]),2)))
      
                      if count ==lenth:
      
                          break
      
                  if count%3==2:
      
                      count+=1
      
                      b=b+str((mod(int(pixel[2]),2)))
      
                      if count ==lenth:
      
                          break
      
              if count == lenth:
      
                  break
      
          with open(str2,"wb") as f:
      
              for i in range(0,len(b),8):
      
                   #以每8位为一组二进制,转换为十进制
      
                  stra = toasc(b[i:i+8])
      
                  #将转换后的十进制数视为ascii码,再转换为字符串写入到文件中
      
                  f.write(chr(stra))
      
                  stra =""
      
          f.closed
      
      #文件长度
      
      le = 50
      
      #含有隐藏信息的图片
      
      new = "/Users/KarlieLee/Downloads/f1ag/小麦肌肉男Dino.png"
      #信息提取出后所存放的文件
      
      tiqu = "/Users/KarlieLee/Desktop/f1ag.txt"
      
      func(le,new,tiqu)
      

      lsb隐写,需要下载蓝奏云里的原图zip

      flag:

      dino{Dino209_yyds}

评论