CDUT第一届信安大挑战Misc(部分) 和 Crypto 的write up
密码学
crypto 1
题目描述
modulus:99742889480132178464693625265991467727088330702125690789109469022100733238623
exponent:65537
请提交私钥
注:私钥为十六进制。Flag格式 dino{0x…….}题解
已知p、q、e求d的经典RSA题型
首先将模数N,分解为两个大素数 p、q
1
2pip install factordb-pycli
factordb n的值http://factordb.com/ 也可以求解
求解出p、q
1
2
3
4
5
6
7
8
9
10
11# 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是十进制,再转换为十六进制
进制转换:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35print "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)
题目:
1
2
3
4
5
6
7
8
9import 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
1
2
3
4
5
6
7
8
9
10import 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]
1
2
3
4from libnum import *
from gmpy2 import *
m= gmpy2.iroot(c1,3)[0]题目py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36from 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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28from 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}解题脚本:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29from 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女神题。图片里的大脸把出题人折磨的很惨。于是,出题人决定出一道小麦腹肌男的题来报复。希望你们玩的开心。小麦腹肌男,永远滴神!
题解
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106# -*- 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}