CTF题记——再战GK、BUU

前言

没事做一些杂项和密码学的题,记下没见过的,总结思路。扩大脑洞。

Crypto🍖

[GKCTF2020]汉字的秘密

这道题当时没做出来,做了一半。
下载下来的word文档,打不开,然后就010Editor看一下,发现是压缩包,改后缀解压。
出来一堆文件
m0re
当时做的时候,查到一篇博客(现在找不到了),上面说这种题,信息一般都在document.xml中。然后就找
果然发现了信息,

王壮 夫工 王中 王夫 由由井 井人 夫中 夫夫 井王 土土 夫由
土夫 井中 士夫 王工 王人 土由 由口夫

是当铺密码,然后进行转换是
m0re
这串字符串确实不是flag,到这里我的思路就没有了,古典密码试了,看过wp后才明白是变异凯撒,之前还做过这种题,没想到害。
下面是简单脚本,

m0re="EJ>CvSHMV7G9R9@?3k"
flag=''

i=0
for a in miwen:
    i+=1
    flag+=chr(ord(a)+i)

print(flag)

跑出来flag,转换成小写提交。

[MRCTF2020]古典密码知多少

没见过的标准银河字母,其他的两种很容易看出来是猪圈密码和圣堂武士密码。然后对照百度找到的标准银河字母对照表进行解码
m0re
解出得到FGCPFLIrtuASyoN
m0re
所以进行栅栏解密
m0re
得到flag

[MRCTF2020]keyboard

m0re
看着键盘,也不是26键的,就是9键的,而且数字的位数不超过三。
数字是按键,个数是第几个字母。
得到flag是mobilephond
但是提交不对,改成mobilephone就对了。

[WUSTCTF2020]佛说:只能四天

题目是与佛论禅,这个新的老的都试了一遍,新约佛论禅是可以解出来的。
在线解密网站🔑新约佛论禅
m0re
然后是社会主义核心价值观编码
在线网站🔑传送门
m0re
最后doyouknowfence提示栅栏密码
m0re
最后凯撒密码,然后hint中是有提示的。
m0re
凯撒最初是移三位的。所以直接偏移3位即可。
得到后查看符合base32编码,进行base32解密
m0re

Misc🍔

[GKCTF2020]code obfuscation

这个二维码是扭曲的,扫描是扫不出来的,看别人的wp,都是用ps了,各种方法都有,不过,QR research可以扫描,但是直接扫描也是扫描不出来的,下面一个比较有意思的方法,就是打开这个图片,截图粘贴到一块大的白屏上,然后尽可能让图片看起来小,再用工具扫描,就可以扫出来了。
m0re
然后进行文件分离,在图片中分离出来一个压缩包,有密码的,然后gkctf应该是解压密码,不过要进行base编码,只能挨个尝试,最后base58加密出来是对的。解压结果,一张图片和一个文件
m0re
在线工具js美化——传送门,直接将1文件拖进去,点击美化。

m0re
看了大佬的博客,emmm,多少还是有点不理解的地方。
整理得到

for n in a b c d e f g h i j k l m n o p q r s t u v w x y z do eval An = "n"
done
for n in A B C D E F G H I J K L M N O P Q R S T U V W X Y Z do eval An = "n"
done num = 0
for n in a b c d e f g h i j do eval Bn = "n"
num = $((num + 1))
done alert("Bk=' ';Bm='"';Bn='#';Bs='(';Bt=')';By='.';Cb='';Cc='<';Ce='>';Cl='_';Cn='{';Cp='}';Da='0';Db='1';Dc='2';Dd='3';De='4';Df='5';Dg='6';Dh='7';Di='8';Dj='9';")

再用下大师傅的脚本跑一下。

import string
s = "$Bn$Ai$An$Ac$Al$Au$Ad$Ae$Bk$Cc$As$At$Ad$Ai$Ao$By$Ah$Ce$Ai$An$At$Bk$Am$Aa$Ai$An$Bs$Bt$Cn$Ap$Ar$Ai$An$At$Bs$Bm$Aw$Dd$Al$Ac$Da$Am$Ae$Cl$De$Ao$Cl$Dj$Ak$Ac$At$Df$Bm$Bt$Cb$Ar$Ae$At$Au$Ar$An$Bk$Da$Cb$Cp"
ll = s.split('$')
list1 = ['Bk','Bm','Bn','Bs','Bt','By','Cb','Cc','Ce','Cl','Cn','Cp',
'Da','Db','Dc','Dd','De','Df','Dg','Dh','Di','Dj']
list2 = [' ','"','#','(',')','.','','<','>','_','{','}','0','1','2','3','4','5','6','7','8','9']
list3 = []
list4 = []
s = string.ascii_lowercase
for i in s:
	list3.append('A%s'%i)
	list4.append(i)
#print(list3,'\n',list4)

t = ''
for i in range(0,len(ll)):
	for j in range(0,len(list1)):
		if ll[i]==list1[j]:
			t += list2[j]
	for k in range(0,len(list3)):
		if ll[i]==list3[k]:
			t +=list4[k]
print(t)

m0re

[GKCTF2020]Harley Quinn

下载得到音频文件和一张图片,听音频,听到最后面发现异常,也不知道是什么,也不是摩斯密码什么的,后来看hint是电话音,

m0re

看了大佬的wp(这个比赛的时候我是没有做出来的,没有思路)
需要用到一个工具,dtmf2num.exe
下载地址呢,emmm这个大佬他给了下载链接,可以去他博客里找链接,毕竟不好直接搬过来。——传送门
然后下载好啦之后,需要先将那个音频进行剪辑,把后面那段电话音剪出来,
可以选中电话音前面的所有部分,然后剪切掉

再导出文件就行了。
然后使用dtmf解题

#22283334447777338866#
九键


ctfisfun
然后第二个hint是


工具吧,百度搜索就行。
然后打开使用,可能需要将原来的JPEG为后缀的图片改成jpg格式,

输入密码,ctfisfun
得到一个flag.txt

[GXYCTF2019]gakki

foremost分离图片得到压缩包,然后是弱口令,8864(都是傻瓜式操作就不截图了)
解压出来flag.txt是
m0re
进行词频分析(这个应该就是考点)
官方给的脚本,这个在线网址有点力不从心。

# gakki_exp.py
# Author : imagin
alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()_+- ={}[]"
f = open("flag.txt", "r")
data = f.read()
result = {d:0 for d in alphabet}
 
def sort_by_value(d):
    items = d.items()
    backitems = [[v[1],v[0]] for v in items]
    backitems.sort(reverse=True)
    return [ backitems[i][1] for i in range(0,len(backitems))]
 
for d in data:
    for alpha in alphabet:
        if d == alpha:
            result[alpha] = result[alpha] + 1
 
print(sort_by_value(result))

跑一遍得结果
m0re
flag{gaki_IsMyw1fe}

[SWPU2019]伟大的侦探

解压得到密码文件,misc文件夹是空的,编码没见过,所以就百度了一下,然后发现这种编码可以使用010editor转换
m0re
转换就得到密码,再次解压得到图片
m0re
是跳舞的小人,百度寻找对照表
得到flag{iloveholmesandwllm}

john-in-the-middle

这个流量分析,追踪流没得到有用的信息,尝试导出http,然后看到了六张png图片。
使用stegsolve查看,在logo.png 中得到flag
m0re
flag{J0hn_th3_Sn1ff3r}
也有直接进行foremost分离得到图片的,两种方法均可。

[GXYCTF2019]SXMgdGhpcyBiYXNlPw==

先解密这个题目,是base64,得到Is this base?
然后打开压缩包后得到的flag.txt看到
m0re
虽然很多,但是还是进行了解码查看了一下,但是没找到有用的信息

Cette nuit,
Intenable insomnie,
La folie me guette,
Je suis ce que je fuis
Je subis,
Cette cacophonie,
Qui me scie la t锚te,
Assommante harmonie,
Elle me dit,
Tu paieras tes delits,
Quoi qu'il advienne,
On tra卯ne ses cha卯nes,
Ses peines,
Je voue mes nuits,
A l'assasymphonie,
Aux requiems,
Tuant par depit,
Ce que je seme,
Je voue mes nuits,
A l'assasymphonie,
Et aux blasphemes,
J'avoue je maudis,
Tous ceux qui s'aiment,
L'ennemi,
Tapi dans mon esprit,
F锚te mes defaites,
Sans repit me defie,
Je renie,
La fatale heresie,
Qui ronge mon 锚tre,
Je veux rena卯tre,
Rena卯tre,
Je voue mes nuits,
A l'assasymphonie,
Aux requiems,
Tuant par depit,
Ce que je seme,
Je voue mes nuits,
A l'assasymphonie,
Et aux blasphemes,
J'avoue je maudis,
Tous ceux qui s'aiment,
Pleurent les violons de ma vie,
La violence de mes envies,
Siphonnee symphonie,
Deconcertant concerto,
Je joue sans toucher le Do,
Mon talent sonne faux,
Je noie mon ennui,
Dans la melomanie,
Je tue mes phobies,
Dans la desharmonie,
Je voue mes nuits,
A l'assasymphonie,
Aux requiems,
Tuant par depit,
Ce que je seme,
Je voue mes nuits,
A l'assasymphonie,
Et aux blasphemes,
J'avoue je maudis,
Tous ceux qui s'aiment,
Je voue mes nuits,
A l'assasymphonie (l'assasymphonie),
J'avoue je maudis,
Tous ceux qui s'aiment

还有乱码,又想到这个题是杂项里面的,应该不是只让解密的吧,反正还是没有其他的思路。
这个emmm没有什么思路了,就找wp学习学习
发现是base64隐写
学习看这里🔑神奇的base64
然后跑下脚本就出来了吧。

# -*- coding: cp936 -*-
b64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
with open('flag.txt', 'rb') as f:
    bin_str = ''
    for line in f.readlines():
        stegb64 = ''.join(line.split())
        rowb64 =  ''.join(stegb64.decode('base64').encode('base64').split())
        offset = abs(b64chars.index(stegb64.replace('=','')[-1])-b64chars.index(rowb64.replace('=','')[-1]))
        equalnum = stegb64.count('=') #no equalnum no offset
        if equalnum:
            bin_str += bin(offset)[2:].zfill(equalnum * 2)
        print ''.join([chr(int(bin_str[i:i + 8], 2)) for i in xrange(0, len(bin_str), 8)]) #8 位一组

m0re
注意是python2写的脚本,需要使用2.7的版本去运行。
flag{fazhazhenhaoting}
这道题与 ([ACTF新生赛2020]base64隐写)相似,可以一块了解。
m0re

[SWPU2019]你有没有好好看网课?

两个压缩包都有密码,每个查过一遍,看到flag3.zip上有备注,是一个六位数字的密码。暴力破解就行。
然后解码得到一个word文档和影流之主的mp4文件
m0re
然后两个不寻常的数字,分别查看视频中相应的帧数所在的画面
m0re
m0re
在灯上,两条信息得到

..... ../... ./... ./... ../
dXBfdXBfdXA=

第一个是敲击码
m0re
解码得到WLLM,与base64解出的拼接到一起是wllmup_up_up,也就是flag2.zip的密码
得到图片用010editor打开
m0re

[BJDCTF 2nd]TARGZ-y1ng

不用爆破,tar zxvf不管用,那么密码就可能没有或者伪加密,或者在备注当中再有就是文件名就是密码。的确是文件名,但是解压好多次都没有得到结果。
看了wp,发现要解压300次,应该是不行的。
还有就是脚本,这里直接使用脚本可以。

#来源官方wp#
import zipfile

name = 'hW1ES89jF'
while True:
    fz = zipfile.ZipFile(name + '.tar.gz', 'r')
    fz.extractall(pwd=bytes(name, 'utf-8'))
    name = fz.filelist[0].filename[0:9]
    fz.close()

注意,运行自行建立一个新文件夹,然后就是傻瓜式操作。
找到flag文件用记事本打开就可以了。

黑客帝国

打开后是一个文本文件,emmm脑洞太小,想不到。看wp学习
emmm💡是十六进制,用HxD编辑保存一下
m0re
是压缩包,而且压缩包有密码,emmm,也不是伪加密。那就暴力破解试试。
m0re
然后打开是个图片,但是图片无法打开。
010editor查看,发现图片类型是JFIF,应该是jpg图片格式,所以将文件头修改成jpg格式的。
m0re
然后看到图片
m0re

flag{57cd4cfd4e07505b98048ca106132125}

[MRCTF2020]你能看懂音符吗

压缩包损坏,010editor看到前两组数据换了位置,改回来就行
m0re
然后解压得出一个word文档,打不开,010editor看出是zip压缩包。改后缀。
解压得到一堆文件,根据经验,信息一定藏在document里,果然找到了音符
m0re
然后使用在线网站解码就行了
m0re

百里挑一

解压文件得到的是pcap数据包,题目提示好多图片,wireshark打开导出http对象,保存到一个文件夹中。然后在kali中使用一条命令找到一半的flag

exiftool *|grep flag

意思是在当前文件夹中匹配flag字段
关于exiftool看这里🔑exiftool的说明使用
m0re
另一半需要在wireshark中找
但是我找了半天也没找到,烦躁💣
看了wp发现是114……郁闷💔
m0re
这……我真是🈚🐔8🐟

flag{ae58d0408e26e8f26a3c0589d23edeec}

从娃娃抓起

两种编码,
m0re
查询后了解到分别是中文电码和五笔编码
m0re
第一行——人工智能
m0re
第二行——也要从娃娃抓起
m0re
32位小写

[DDCTF2018](╯°□°)╯︵ ┻━┻

打开文件发现一串字符串。
m0re
十六进制的数字,先转换成10进制的。需要先将这么多数字中两个两个分开。
脚本:

s="d4e8e1f4a0f7e1f3a0e6e1f3f4a1a0d4e8e5a0e6ece1e7a0e9f3baa0c4c4c3d4c6fbb9b2b2e1e2b9b9b7b4e1b4b7e3e4b3b2b2e3e6b4b3e2b5b0b6b1b0e6e1e5e1b5fd"
a = ""
for i in range(0,len(s),2):
    a = a+"0x"
    a += s[i:i+2]
    a += ","
print(a)
0xd4,0xe8,0xe1,0xf4,0xa0,0xf7,0xe1,0xf3,0xa0,0xe6,0xe1,0xf3,0xf4,0xa1,0xa0,0xd4,0xe8,0xe5,0xa0,0xe6,0xec,0xe1,0xe7,0xa0,0xe9,0xf3,0xba,0xa0,0xc4,0xc4,0xc3,0xd4,0xc6,0xfb,0xb9,0xb2,0xb2,0xe1,0xe2,0xb9,0xb9,0xb7,0xb4,0xe1,0xb4,0xb7,0xe3,0xe4,0xb3,0xb2,0xb2,0xe3,0xe6,0xb4,0xb3,0xe2,0xb5,0xb0,0xb6,0xb1,0xb0,0xe6,0xe1,0xe5,0xe1,0xb5,0xfd,

然后转换成ascii码, 但是转换成10进制时,发现数值都大于128,所以减去128进行尝试,(128=0x80)

a=[0xd4,0xe8,0xe1,0xf4,0xa0,0xf7,0xe1,0xf3,0xa0,0xe6,0xe1,0xf3,0xf4,0xa1,0xa0,0xd4,0xe8,0xe5,0xa0,0xe6,0xec,0xe1,0xe7,0xa0,0xe9,0xf3,0xba,0xa0,0xc4,0xc4,0xc3,0xd4,0xc6,0xfb,0xb9,0xb2,0xb2,0xe1,0xe2,0xb9,0xb9,0xb7,0xb4,0xe1,0xb4,0xb7,0xe3,0xe4,0xb3,0xb2,0xb2,0xe3,0xe6,0xb4,0xb3,0xe2,0xb5,0xb0,0xb6,0xb1,0xb0,0xe6,0xe1,0xe5,0xe1,0xb5,0xfd]
for i in a:
    print(chr(i-0x80), end="")

m0re
得到flag
还找到一个一步走的脚本

def hex_str(str):
    hex_str_list=[]
    for i in range(0,len(str)-1,2):
        hex_str=str[i:i+2]
        hex_str_list.append(hex_str)
    print("hex列表:%s\n"%hex_str_list)
    hex_to_str(hex_str_list)


def hex_to_str(hex_str_list):
    int_list=[]
    dec_list=[]
    flag=''
    for i in range(0,len(hex_str_list)):
        int_str=int('0x%s'%hex_str_list[i],16)
        int_list.append(int_str)
        dec_list.append(int_str-128)
    for i in range(0,len(dec_list)):
        flag += chr(dec_list[i])
    print("转化为十进制int列表:%s\n"%int_list)
    print("-128得到ASCII十进制dec列表:%s\n"%dec_list)
    print('最终答案:%s'%flag)


if __name__=='__main__':
    str='d4e8e1f4a0f7e1f3a0e6e1f3f4a1a0d4e8e5a0e6ece1e7a0e9f3baa0c4c4c3d4c6fbb9b2b2e1e2b9b9b7b4e1b4b7e3e4b3b2b2e3e6b4b3e2b5b0b6b1b0e6e1e5e1b5fd'
    print("字符串长度:%s"%len(str))
    hex_str(str)

总结🍗

密码学了解🍕
标准银河字母🔑——对照表
键盘密码
当铺密码
变异凯撒

杂项了解🎂
JS美化
解密电话音
工具——dtmf2num.exe
工具——FreeFileCamouflage
词频分析
- 脚本
- 在线网站
新了解的编码——EBCDIC(可用010editor转码)
跳舞的小人
base64隐写
敲击码
套娃解压压缩包——脚本
音符加密
工具——exiftool
中文电码
五笔编码

抓住端午节的小尾巴,端午节快乐!
以上就是这次总结,再接再厉。加油!加个鸡腿🍗

文末寄语

欢迎来到现实世界,它糟糕得要命,但你会爱上它的。——《老友记》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章