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{}
题解
开局一张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{} 注:没有空格
题解
词频分析题
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.I9I
Y$
64: MTFqb0YwSjRPbSwjVUBCOWkzcmg8LU4uSTlJYFkkbase100 👛👠👥👦👲👁👬👪👫👖🐹👘👪👜👖👄👜🐘👴
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
题解
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{}
题解
binwalk -e
提取图片中的内容,扫描二维码得到base64,解码,然后再对结果URL解码
dino{c879f00c-1761-441f-97dd-14b0b7921278}
misc 2
题目描述
二维码粉碎机 flag格式:flag{}
题解
题解下载链接:https://gryffinbit.lanzous.com/is5wbiaer2b
html和图片放在一个文件夹内,打开html
拼接二维码
方法:HTML表格图片拼接
flag{IsQRfun?}
misc 3
题目描述
来感受下zip套娃的魅力吧
题解
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吧。注意:蓝奏云下载文件的时候,不要共享密钥!!!
题解
第一层: 考察点:文件头以及十六进制查看的用法
一张图,协会之门.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女神题。图片里的大脸把出题人折磨的很惨。于是,出题人决定出一道小麦腹肌男的题来报复。希望你们玩的开心。小麦腹肌男,永远滴神!
题解
# -*- 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}