BugKU靶场解题记录Crypto篇
[TOC]
1 /.-
…-./.-…/.-/–./----.–/-…/…–/…-./-.-./-…/…-./.----/–…/…-./----./…–/----./----./…/-----/…-/-----.-
一个很简单的莫斯密码题,使用线上的解题工具即可完成。注意*%u7b和%u7d*分别是**{** 和 }。
2 聪明的小羊
题干是一只小羊翻过了2个栅栏 fa{fe13f590lg6d46d0d0},提示的很清楚栅栏密码,直接解码就行。
3 okk
说真的我并不知道这道题的考点在哪里。下载是一个txt文件,打开一大串由okk组成的字符,使用在线工具解码就行。
okk密码实际上是一种编程语言,由okk. okk? okk!组成。
4 [±<>]
说真的这道题跟上一道题是接近一毛一样,这是使用的是一款可读性几乎为0的语言:Brainfuck!
解码还是用上一道题的链接就行,bugku本站将两种编码的在线解码放在了同一个工具里。
5 你以为是md5吗
bci177a7a9c7udf69c248647b4dfc6fd84o 是又不是就是玩
确实是md5,但是md5是16进制的包含0到9和a到f一共16个字符,这道题给的包含了超出f的字符,删去这一部分就能得到正确的编码。解码可得结果。不得不说真的666666啊。
6 这不是md5
说实话这道题还真不是md5,就是一段16进制数,直接转文本就行flag{ae73587ba56baef5}
7 一段base64
这段base64还真是够长的,用在线解题工具已经不能将其解码了。不过还是可以利用工具converter进行解码。得道形如\134\170\65\143\134\170\67\65 的一段编码。百度得知是unescape编码。继续进项解码得到形如\x5c\x75\x30\x30\x35的编码这一部分还清楚是hex编码。将他转化为text。得到一堆我又不认识的密码。。。
结果看了下别人的解题他们告诉我这还是unescape,继续解码发现String.fromCharCode根据大佬的介绍这是JavaScript的函数,[]内的是里面的参数。然后将这一些删去对数字就是一种dec密码。继续解码。得到decode编码。继续解码。得到Unicode编码.编码可得。
flag%7Bctf_tfc201717qwe%7D
其中%7b是 { ,%7d是 }。
得到flag。这道做的时候是转的最晕的一次,使用的密码太多了。
8 base家族
这确实不是base64,不是base32,不是base16.这是神奇的base91…
flag{554a5058c9021c76}
9 把猪困在猪圈里
题目提示的很清楚是与猪圈密码有关。打开是一段base64编码,我们知道猪圈密码是一堆特殊符号。这就很有可能是要将base64密码转为图片。在文本最前方加上data:image/jpg;base64,然后用在线工具编码出对应图片。
就是这个,对应解码得到flag{thisispigpassword}
由于比较忙碌这个解题,包括之前的web和之后写的杂项都会持续更新的。
10 .!?
这像不像前面的okk,实际上这就是一种变形的okk密码,省略okk只使用.!?进行描述。用在线工具解题即可获得flag。
11 散乱的密码
看这个题第一眼以为是栅栏密码,但又有2 1 6 5 3 4这样的提示,这让我想到了ADFGX密码。仔细一数 lf5{ag024c483549d7fd@@1}一共24个数,216534一共六个数。盲猜是变形对ADFGX,将每六个作为一组,按照216534的顺序进行排列。最后删去@@得到flag。
12 EN-气泡
提示的很清楚气泡,Bubble。这就是一串BubbleBubble密码。对文件多次解码得到flag。
13 简单加密
题目信息里的AA实际上是提示,这个本质上是一个凯撒移位,但是凯撒移位是对字母进行移位,而这个是包含了字母数字和特殊符号。无法使用现成的工具。
写一个脚本。
text = input("请输入题目密文")
text1=''
for i in text:
t=chr(ord(i)-4)
text1+=t
print(text1)
将字符进行移位得到a2V5ezY4NzQzMDAwNjUwMTczMjMwZTRhNThlZTE1M2M2OGU4fQ==,明显是base64密码,解码得flag。
14 来自宇宙的信号
下载下来是一张图片,评论区告诉我这是标准银河字母(Standard Galactic Alphabet)出自《指挥官基恩》系列。后面又了解了下,突然发现这东西还是MC的附魔符号,感觉这么多年的我的世界白玩了。
15 告诉你一个秘密。
636A56355279427363446C4A49454A7154534230526D6843 56445A31614342354E326C4B4946467A5769426961453067
嗯这像是16进制数也像MD5,MD5解密什么都没有得到,使用16进制转字符串得到cjV5RyBscDlJIEJqTSB0RmhCVDZ1aCB5N2lKIFFzWiBiaE0g,用base64进行编码得到
r5yG lp9I BjM tFhBT6uh y7iJ QsZ bhM
评论区有人告诉我们,这是键盘码,
键盘密码应该不算是一种加密算法,但是一种有趣的设置密码方式。
他就是a-z(A-Z)对应成键盘上的字母,把键盘字母一行一行的对应即可。
例如被r5yg几个字母包围的是t。
得到flag,注意最后的密码需要大写。
16 小山丘的秘密
hill能有什么秘密呢,Hill Cipher正是希尔密码,观察图片,希尔密码需要秘钥字母表,密钥肯定就在图片中,图片看上去4和9的位置看上去像是缺了棋子,那么将它看作0,那么此处位置为 z ,其他位置如图所示,得到密钥
将其作为秘钥abczadefz
同时我们知道提示中他说A=1,我们要让密码表中Z=0,a=1;
将PLGTGBQHM小写进行解码,得到whatahill。扩上{}得到flag。
17 你喜欢下棋吗
题干很清楚下棋,这个是波利比奥斯方阵密码,也叫棋盘密码。使用在线工具解码得到thisispolybius。这是txt文件的解压密码。
一种5bit的编码
bugku{11111 11001 00011 00111 01001 11011 10110 11111 10000 01110 11011 10110 11111 01001 00001}
评论区告诉我这是博多电码解码,好家伙出题人你做个人吧。
博多电码太过于古老,导致都没什么现成的公具。https://www.dcode.fr/baudot-code这是评论区大佬给的解码网址。还有几个网址,但因为各种各样的原因进不去。。。
解码得到flag
18 一段新闻
近日,教育部、财政部印发《关于实施中小学幼儿园教师国家级培训计划(2021—2025年)的通知》(以下简称《通知》),明确“十四五”期间“国培计划”实施思路、支持方向、工作重点,推进教师培训提质增效,助力教师队伍高质量发展。
《通知》要求,“十四五”期间,要重点支持中西部欠发达地区农村义务教育学校、幼儿园骨干教师、校园长和培训者深度培训;实现巩固拓展教育脱贫攻坚成果同乡村振兴有效衔接,支持国家乡村振兴重点帮扶县教师校长能力整体提升;辐射带动省、市、县、校级教师培训,实现教师培训全覆盖。 《通知》从培训内容体系、机制改革、能力建设、监管评价4个方面明确10项重点工作。在内容方面,强调要突出教师核心素养培养,将思想政治和师德师风作为必修内容。在机制改革方面,强调要实行分层分类精准培训,建立教师自主发展机制;创新教师发展协同机制,深入实施教师发展“一对一”精准帮扶;推动人工智能与教师培训融合,探索“智能+教师培训”,形成人工智能支持教师终身学习、持续发展的机制。在能力建设方面,强调要完善教师专业发展支持服务体系,加强市县教师发展机构专业化建设,建强专业化教师培训队伍,加强培训资源和平台建设,实现优质资源全面覆盖、全体共享。在监管评价方面,强调强化培训实施的监管评价,对教师学习过程和效果进行综合评价,适时提供反馈和跟踪指导。
这个是一种隐藏信息使用隐藏信息解密得到明文(其实还是一重秘文)。社会主义核心价值观加密这个加密方式在bugku靶场上面就有。解密得到flag。
flag{why_d0nt_you_try_t0_understand_socia1ism?}
19 这是个盲兔子,竟然在唱歌!
这个题目名很有水平,在做完这个之后,我更是如此觉得。对应的这个题目的三层解码盲文,rabbit加密和解密,以及音乐符号密码。
⡥⠂⡶⡃⡔⡷⡦⡛⡨⠁⠟⡚⠉⠇⡳⡜⡉⡤⡴⡑⡓⡆⡑⡔⡆⡠⡩⡹⠂⡢⡪⡵⡢⡟⡶⡹⠃⡒⠁⡥⡞⠟⡚⡞⡣⡣⡤⡀⡡⡆⠉⡼⡻⠀⠉⡧⡙⠇⡦⡇⡧⡅⡺⡑⠺⡑⡉⡑⠂⡞⡱⡳⠁⡊⡢⡩⡊⡚⡊⡕⡛⠀⡕⠂⡩⡱⡾⡴⠂⡶⡛⠈⡹⡇⡗⡑⠃⠁⡆⡝⡽⡺⡨⡙⠛⠅⠁⡠⡇⡩⡅⡸⡑⡧⡑⡸⠅⡆⡨⠛⡣⡨⡑⡢⡝⠁⡟⡚⡿⠺⠛⡿⡕⡴⡛⡡⠀⡔⠉⠂⡴⡃⠃⠀⡿⡹⠄⡺⡀⡵⡊⡝⡪⡨⡛⡦⡖⡛⡧⡡⡪⠈⡲⠟⡝⡔⡕⠅⡄⡞⠟⠂⡵⡉⠅⡩⡦⡼⡈⡴⡩⡈⠟⡞⡦⡩⡆⡛⡴⡾⡈⡁⡁⡗⠺⡹⡾⡆⡢⡹⡠⡈⡃⡛⠆⡁⡖⡻⡉⡡⡻⡓⠆⡁⡼⡷⠃⡛⠅⡵⠈⡝⡂⠉⡃⡄⡠⡠⡡⡒⡁⡃⡁⠅⡾⡨⠆⡘⠇⡄⡁⡲⠅⡖⠛⡓⡤⡃⡕⡺⡃⡝⡛⡳⠀⡢⡒⡙⠂⠺⡱⡉⡻⡒⡨⡄⡒⡒⡈⡱⡧⡽⠆⡉⡷⡹⠛⡊⠟⡥⡜⡳⡶⠆⡺⠉⠂⡂⡛⡥⡓⡝⡴⠆⡽⡟⠅⡿⡻⡸⡺⠆⡇⠂⠈⡼⡤⡕⠂⠈⡤⠅⠛⠁⡇⡟⡧⡈⡗⡲⡊⡸⠉⡻⠺⡱⡻⡥⠍=
通过**盲文密码**解码得到:
U2FsdGVkX1/j97ClyTDacvadvPYI2RZERoFI3b1Un/jnSSTpQv9LK09Wi7VwWuJaaya2nAC1zRYzjzek0e2YAND2Fk8Iwga31vmMJXi+51PwYuHaWaH5vX+SXaRm1ojO+OeDkQ0d92Ds30OI4JpEzmZXkVfkWQZ8B/mde5tn/2Ey5YVLxDYx/nVYvkDNxqqgINvRIPxsk6qfKyQKc6qLG3k5E8mr9stPPQbqsq5NX6h7tqB5f+cTseJsmkC0Rbi2AyKbXtbbxAWM6yGI+z/UlCF6J92rkUcmD6Mo5OKHJ6w28LTe28T5+1woWxgBzH9KAKU=
这一层是**rabbit**密码,在题干上有这一点。
♬♯♩¶♬♫¶♭♩¶♫♪‖♯♬♭♩♬‖♫‖∮‖♩♬§‖♪¶‖♬♩♬§‖♩¶∮♬♬‖♪¶♭¶♯♫♯♩♫‖‖♬§‖♫♬♯♬§♫‖♩♩♫∮♬♩♫‖‖♪¶∮♫‖♫♫♯=
在通过**音乐解密得到flag**
bugku{2at746c5jfc6nh5klxs0c7bcvrzfv5nv}
19 7+1=0
4nXna/V7t2LpdLI44mn0fQ==
这个是base64编码,但又有问题。使用在线工具编译得到的会是**ⵧk{b鴲8⩴}**需要使用base64->text方式解密,得到的结果依旧不都在可读范围内
import base64
miwen = '4nXna/V7t2LpdLI44mn0fQ=='
mingwen = base64.b64decode(miwen)
#这一个题目生成的秘文应该类似于bugku{},查看ascll码判断有多少出现在不可打印区域
print(mingwen)
for i in mingwen:
print(i, end=" ")
print()
j = 1
for i in mingwen:
if(j % 2 == 1):
print(chr(i-128), end="")
else:
print(chr(i), end="")
j += 1
我们通过base64->text方式看到?u?k?{?b?t?8?i?},单数上面是不属于可输入范围,查看每一个ascll码的值,发现你们一堆200多的ascll码。这个flag大概是bugku{},通过ascll码对照表发现相比正常的ascll码多了128,通过脚本解密得到flag。
bugku{7bit28bit}
20 黄道12宫
黄道十二宫杀手(Zodiac Killer)可能是世界上最知名的高智商连环杀手,52年来从未被抓获。这个连环变态杀手,在美国加州南部杀死了至少5人,声称自己手上有37条人命。作案的同时,他寄送了很多封以挑衅为主的信件给媒体,这些信件中包含着一些未公开的细节以及犯罪证据,甚至在其中署名。虽然一封408字符的文件已经被专家破解,但是其他信件继续困扰了警方和密码学专家51年。
1969年11月8日,在杀死了两名受害者之后,他向《旧金山纪事报》致信,并随信附上了340个加密字符。该密码被称为Z-340,或简称为340,一直未曾有人成功破解。
关于这个加密的相关可以看这篇博客黄道十二宫杀手密码51年后被破解,来自两位程序员与数学家通力合作
II KILLED A LOT OF PEOPLE THERE ARE ENOUGH
SLAVES TO WORK FOR I I HOPE YOU CAN DECRYPT
IT AS SOON AS POSSIBLE.THIS IS FLAG ALPHAN
ANKE OTHERWISE I WILL CONTINUE TO KILLL
得到flag{alphananke}
21 你看得懂我的乐谱吗?
抱歉我不懂音乐,我不懂这个乐谱。但是在bugku的评论区有人问到
把音符还原成字母串后怎么不管大写还是小写放入flag{}都不对,去掉flag四个字也不对 。
把音符还原成字符串,这是个啥?之前那道题是音符加密,我以为这一道题也是与那一道相关。
看到这个之后,我还是不太明白,这里放一个大佬的推测。
这样可以得出flag,关于这个题目我想说,我不懂你的乐谱,我懂个de
flag{EMARKCISSOACHHLG}
22 Math&English
说实话,我会数学,但我真的不会英语。
计算结果: 21 33 1 22 3 44 54 5 1 35 54 3 35 41 52 13
结果全部都含义,1,2,3,4,5五个数字。他们告诉我这个是元音密码,这里是元音密码对照表。
对于得到flagisyuanyinpwdflagis记得删掉flag{yuanyinpwd}
23 RSA
N : 460657813884289609896372056585544172485318117026246263899744329237492701820627219556007788200590119136173895989001382151536006853823326382892363143604314518686388786002989248800814861248595075326277099645338694977097459168530898776007293695728101976069423971696524237755227187061418202849911479124793990722597
e : 354611102441307572056572181827925899198345350228753730931089393275463916544456626894245415096107834465778409532373187125318554614722599301791528916212839368121066035541008808261534500586023652767712271625785204280964688004680328300124849680477105302519377370092578107827116821391826210972320377614967547827619enc : 38230991316229399651823567590692301060044620412191737764632384680546256228451518238842965221394711848337832459443844446889468362154188214840736744657885858943810177675871991111466653158257191139605699916347308294995664530280816850482740530602254559123759121106338359220242637775919026933563326069449424391192
使用在线的质数分解工具分解n,
Q:28805791771260259486856902729020438686670354441296247148207862836064657849735343618207098163901787287368569768472521344635567334299356760080507454640207003
P:
15991846970993213322072626901560749932686325766403404864023341810735319249066370916090640926219079368845510444031400322229147771682961132420481897362843199
搞了一个求解脚本
from libnum import n2s,s2n
import base64
def egcd(a, b):
if a == 0:
return (b, 0, 1)
else:
g, y, x = egcd(b % a, a)
return (g, x - (b // a) * y, y)
def modinv(a, m):
g, x, y = egcd(a, m)
if g != 1:
raise Exception('modular inverse does not exist')
else:
return x % m
p=15991846970993213322072626901560749932686325766403404864023341810735319249066370916090640926219079368845510444031400322229147771682961132420481897362843199
q=28805791771260259486856902729020438686670354441296247148207862836064657849735343618207098163901787287368569768472521344635567334299356760080507454640207003
e = 354611102441307572056572181827925899198345350228753730931089393275463916544456626894245415096107834465778409532373187125318554614722599301791528916212839368121066035541008808261534500586023652767712271625785204280964688004680328300124849680477105302519377370092578107827116821391826210972320377614967547827619
d = modinv(e, (p - 1) * (q - 1))
c = 38230991316229399651823567590692301060044620412191737764632384680546256228451518238842965221394711848337832459443844446889468362154188214840736744657885858943810177675871991111466653158257191139605699916347308294995664530280816850482740530602254559123759121106338359220242637775919026933563326069449424391192
n = p*q
m=pow(c,d,n)
print(n2s(m))
得到~~flag{Wien3r_4tt@ck_1s_3AsY}~~
25 进制转换
二进制、八进制、十进制、十六进制,你能分的清吗? 来源:第七届大学生网络安全技能大赛
b 2进制 o 8进制 d 10进制 x 16进制,根据首字母确定进制并进行相应的转换,得到
s=["d87","x65","x6c","x63","o157","d109","o145","b100000","d116","b1101111","o40","x6b","b1100101","b1101100","o141","d105","x62","d101","b1101001","d46","o40","d71","x69","d118","x65","x20","b1111001","o157","b1110101","d32","o141","d32","d102","o154","x61","x67","b100000","o141","d115","b100000","b1100001","d32","x67","o151","x66","d116","b101110","b100000","d32","d102","d108","d97","o147","d123","x31","b1100101","b110100","d98","d102","b111000","d49","b1100001","d54","b110011","x39","o64","o144","o145","d53","x61","b1100010","b1100011","o60","d48","o65","b1100001","x63","b110110","d101","o63","b111001","d97","d51","o70","d55","b1100010","d125","x20","b101110","x20","b1001000","d97","d118","o145","x20","d97","o40","d103","d111","d111","x64","d32","o164","b1101001","x6d","o145","x7e"]
s1=""
t=""
t1=""
for i in s:
s1=i
for j in range(1):
if s1[0:1]=='d':
t=str(hex(int(s1[1:])))
t=t[2:]+" "
t1=t1+t
if s1[0:1]=='x':
t=s1[1:]+" "
t1=t1+t
if s1[0:1]=='o':
t=str(hex(int(s1[1:],8)))
t=t[2:]+" "
t1=t1+t
if s1[0:1]=='b':
t=str(hex(int(s1[1:],2)))
t=t[2:]+" "
t1=t1+t
print t1
借助~~WPS~~的替换功能将空格去掉,得到
57656c636f6d6520746f206b656c61696265692e204769766520796f75206120666c6167206173206120676966742e2020666c61677b31653462663831613633393464653561626330303561633665333961333837627d202e2048617665206120676f6f642074696d657e
最后使用在线的16进制转字符串工具得到flag。
Welcome to kelaibei. Give you a flag as a gift. flag{1e4bf81a6394de5abc005ac6e39a387b} . Have a good time~