BugkuCTF 部分题解(随缘更新)
Posted z.volcano
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BugkuCTF 部分题解(随缘更新)相关的知识,希望对你有一定的参考价值。
之前做的题在BugkuCTF 部分题解(一)
佛系更新
11月9日更新了奇怪的压缩包
11月7日更新了这个flag,就是逊啦、不可以破译的密码
10月26日更新了真正的爱情
bugku
MISC
奇怪的压缩包
给了三张图,首先是shumu.bmp
,bmp的话优先考虑lsb隐写
和silencenteye隐写
,是后者,解出第一组数据
然后是xiaoshumu.png
,B0通道发现一个二维码,扫码得到一些十六进制数据
还有一个jpg,是jphs隐写
,密码在exif信息中
解出第三组数据,拼接在一起得到一个加密的压缩包
flag3直接crc32爆破得到CTF-
,爆破得到flag2.txt的密码是456789
,内容为an-excellent-
。猜想一下flag1.txt的密码也许是123456
?猜对了,内容是flagBugku-is-
。
猜想之后是要明文攻击,用bkcrack应该也可以跑,具体可以参考我另一篇wp。
因为上次打完比赛重装系统了,再次安装bkcrack出现了问题,所以这里就用ARCHPR
进行攻击了,首先对于明文攻击,要明确:
1.AES256加密方式不适用
2.ZipCrypto Deflate和ZipCrypto Store可以使用
可见flag1.txt和flag2.txt是AES-256
,也导致了如果用ARCHPR
直接打开这个压缩包,会显示:明文攻击不适合这个文件。
解决办法是,用010editor打开压缩包,删去flag1.txt和flag2.txt对应部分的数据(这部分自行探索,全教了就没意思了),然后再用winrar对得到的压缩包进行修复。效果如下
测试一下可以得知flag4.txt的内容就是前面得到的三段伪flag拼凑起来:flagBugku-is-an-excellent-CTF-
然后正常明文攻击就行,记得搜索完口令到如下界面时,直接停止
即可得到解密后的文件。
flag就在flag.txt中,不过前面得到的flagBugku-is-an-excellent-CTF-
是段伪flag,最后一个单词很好猜,但是真正的flag对前面的字符都进行了混淆替换,别想着猜flag了。
这个flag,就是逊啦
提示:第一层有两个hint
;数字→文字→数字
第二层:0→1,1→0
不可以破译的密码
第一层类似维吉尼亚
lt = [['P', 'Q', 'L', 'N', 'E', 'Y', 'O', 'D', 'H', 'R', 'J', 'M', 'B', 'K', 'C', 'T', 'F', 'U', 'A', 'Z', 'S', 'X', 'I', 'W', 'V', 'G'],
['H', 'R', 'V', 'K', 'E', 'I', 'Y', 'B', 'J', 'G', 'M', 'Q', 'P', 'C', 'X', 'D', 'F', 'N', 'Z', 'T', 'U', 'O', 'L', 'A', 'W', 'S'],
['S', 'N', 'U', 'K', 'R', 'T', 'P', 'B', 'O', 'E', 'X', 'G', 'A', 'V', 'Z', 'Q', 'D', 'J', 'H', 'W', 'C', 'Y', 'I', 'M', 'L', 'F'],
['J', 'T', 'K', 'Q', 'V', 'F', 'L', 'X', 'D', 'Z', 'W', 'U', 'O', 'A', 'M', 'I', 'E', 'B', 'Y', 'G', 'P', 'R', 'S', 'H', 'C', 'N'],
['J', 'Z', 'B', 'L', 'E', 'P', 'K', 'G', 'N', 'O', 'A', 'C', 'R', 'U', 'I', 'S', 'D', 'M', 'F', 'V', 'X', 'H', 'Q', 'T', 'W', 'Y']]
d = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
x = 0
f = open('cipher_text.txt','r')
f1 = open('out.txt','w')
for i in f.read():
if i.isalpha():
ls = lt[x]
ind = ls.index(i)
flag = d[ind]
f1.write(flag)
x = (x + 1) % 5
else:
f1.write(i)
f.close()
f1.close()
得到的结果hex解一下就是zip文件了
一眼crc32碰撞,不过解出来的没有可读的,需要生成字典爆破一下
跑完自己爆破一下。
a = ['2miMR_', '5tnsxt', 'EiAfA8', 'U4YYYg', 'Uytd4o', 'VE0Kvk', 'WEqzmr', 'Yk0Z80', 'ZWtuz4', 'fZ6p89', 'it6avb', 'jHrN4f', 'kimoF3', 'ompnGP', 'wJBCVw', 'z44aEu', 'zXGLA1']
b = ['Bu2vU1', 'GqnFOK', 'JB5Y1A', 'NgvHYn', 'Og7yBw', 'PEM6xo', 'YSU8nJ', 'nhEqbk', 'qVpbYg', 'us3s1H', 'wO6mhU', 'wSy1iA']
c = ['1OFImu', '3sCW4h', 'CO2Rdh', 'DJz0OW', 'DV5lNC', 'Iens0I', 'KYkmiT', 'N1Dpwj', 'XTDP7K', 'ZhANnV', 'eYGdn_', 'geBz7B', 'kVXTRQ', 'lO_jxz', 'oREUS2', 'sqjyCv', 'zgrwUS']
d = ['9pJQTY', 'CG9e94', 'CfguPx', 'G_k89C', 'Li9two', 'MixElv', 'RWMVWz', 'dpSrAV', 'qEdPG7', 'rD13mk', 'uAyQFT', 'w0QrrA']
e = ['33r8sz', '7GSHwI', '9HLxKG', 'BBo1Uk', 'DGfbeM', 'F6NAQX', 'H9QqmV', 'JHyRYC', 'KH8cBZ', 'UvLAbO', 'cQRetc', 'h6bHVS', 'jGJkbF', 'u4RE4B']
f = open('password.txt','w')
for i in a:
for j in b:
for l in c:
for m in d:
for n in e:
s = i+j+l+m+n
f.write(s)
f.write('\\n')
f.close()
套娃解密,最后的密文再解一下栅栏,flag小写
import base64
f = open('flag.txt','r')
s = f.read()
while 1:
try:
s = base64.b32decode(s)
except:
try:
s = base64.b16decode(s)
except:
try:
s = base64.b64decode(s)
except:
print(s)
break
f.close()
真正的爱情
聊天记录,很明显是摩斯密码,把字替换成-进行解密得到wandwbxdwn
(我爱你但我不想耽误你)
另一张图片尾部有压缩文件的数据,提取保存并用得到的密码解压。
熟悉的声音.mp3
听起来明显是拨号音,有能力的师傅直接就听出结果了,听不出来的师傅可以参考我另一篇博客的做法,再或者使用dtmf2.exe工具也行。
密码:19865153975
,解压缩包,进入下一层。
ppt文件里给了很多图片,真正有用的被藏起来了,众所周知pptx的本质是压缩包,改后缀为zip解压可以翻到两个图片,下图应该是某种替换密码。
google一下就可以找到密码表,则密码为:wdxcyyyzyq
(晚冬夏初要永远在一起)
最后这个视频是有点搞的,试了一些隐写都不对,根据视频里文字内容猜想flag可能是前面的密码
以上尝试均寄,直到我暂停完回来发现底部隐约有东西(这个位置一般是被进度条挡住的)
stegsolve处理一下可以得到一部分flag,多试几次就可以得到完整flag
ez_misc
修复abc.rar的文件头,解压出a.zip、b.zip、c.txt
c.txt是jpg图片,修改后缀,修改图片高度得到yQsad6E1
,用于解压b.zip,得到一个二维码,扫描得到提示GIF89a
。再看flag.docx,下面那行应该是隐藏文字,我默认是可见的,如果看不到自己改一下设置
用得到的密码解压a.zip,得到call.png,结合前面的提示,修改文件头,stegsolve打开得到flag
Happy ZQ
1.txt和2.txt长度都是6,很明显是crc32碰撞,得到_pass_
和_word_
,合起来之后作为密码解压p.zip
得到Happy_zhong_qiu
,用于解压can you find it.zip
passwd.txt是snow隐写,解出Mid-Autumn_Festival
,然后解压拿flag…
粉色的猫
压缩包注释TCAACTTAGCTGTGATGATGTTCAGATTAGCTA
由ATCG
四个字符组成,很容易联想到腺嘌呤A,胸腺嘧啶T,胞嘧啶C,鸟嘌呤G这四个碱基,而这四个碱基是组成DNA
的基本单元。
于是猜想这可能是DNA相关的一种加密,查到一篇文档:https://arxiv.org/pdf/0903.2693.pdf
可以发现解密过程,除了已知的密文序列
外,还需要知道对应的密码本
。但是本体中只给了一串密文,猜想不是这一种加密。
然后又找见一个DNA翻译的脚本
s = 'TCAACTTAGCTGTGATGATGTTCAGATTAGCTA'
table =
'ATA':'I', 'ATC':'I', 'ATT':'I', 'ATG':'M',
'ACA':'T', 'ACC':'T', 'ACG':'T', 'ACT':'T',
'AAC':'N', 'AAT':'N', 'AAA':'K', 'AAG':'K',
'AGC':'S', 'AGT':'S', 'AGA':'R', 'AGG':'R',
'CTA':'L', 'CTC':'L', 'CTG':'L', 'CTT':'L',
'CCA':'P', 'CCC':'P', 'CCG':'P', 'CCT':'P',
'CAC':'H', 'CAT':'H', 'CAA':'Q', 'CAG':'Q',
'CGA':'R', 'CGC':'R', 'CGG':'R', 'CGT':'R',
'GTA':'V', 'GTC':'V', 'GTG':'V', 'GTT':'V',
'GCA':'A', 'GCC':'A', 'GCG':'A', 'GCT':'A',
'GAC':'D', 'GAT':'D', 'GAA':'E', 'GAG':'E',
'GGA':'G', 'GGC':'G', 'GGG':'G', 'GGT':'G',
'TCA':'S', 'TCC':'S', 'TCG':'S', 'TCT':'S',
'TTC':'F', 'TTT':'F', 'TTA':'L', 'TTG':'L',
'TAC':'Y', 'TAT':'Y', 'TAA':'_', 'TAG':'_',
'TGC':'C', 'TGT':'C', 'TGA':'_', 'TGG':'W'
for i in range(len(s)//3):
x = s[3*i:3*(i+1)]
print(table[x],end="")
跑出的结果是ST_L__CSD_L
,不是压缩包密码,猜想掩码爆破,也没得到密码
之前就卡到这个位置不做了,今天有空刷刷文章,偶然看到树木师傅的wp,发现最开始的思路是对的,解密确实需要用到密钥,所以只能使用出题人用的那个在线网站……其他的工具会因为密钥不同无法解出
解得密码:CATISSOCUTE
解得的key.txt的内容看特征应该是PDU编码了,用在线网站逐行解码,最后拼接在一块再转为png文件
图片看起来挺怪的,这个是npiet,可以看看1998师傅的文章
可以用在线网站解,记得科学上网,不然会报Please check the the captcha form.
。也可以用工具解。
测试发现:需要将这个图片反色处理
之后才能成功解出隐藏的信息。
解得的a=13b=14
暂时不知道什么意思,用010打开之前的无后缀文件1,发现是bpg文件。bpg图片不能在windows系统下直接显示,查看方式可以参考misc入门的misc3。
使用工具查看,发现图片无法正常显示。
在前面查询npiet
相关资料时,发现这个题考察的知识点和HGAME2022 谁不喜欢猫猫呢
差不多,最后一步考察的是Arnold变换(猫脸变换)
。
这里的图片需要用工具转为png
格式后才能正常使用脚本,Image.open
和cv2.imread
好像都不支持bpg格式的读取。
变换完再查看可以得到flag。
from PIL import Image
img = Image.open('out.png')
if img.mode == "P":
img = img.convert("RGB")
assert img.size[0] == img.size[1]
dim = width, height = img.size
st = 33
a = 13
b = 14
for _ in range(st):
with Image.new(img.mode, dim) as canvas:
for nx in range(img.size[0]):
for ny in range(img.size[0]):
y = (ny - nx * a) % width
x = (nx - y * b) % height
canvas.putpixel((y, x), img.getpixel((ny, nx)))
canvas.show()
canvas.save('result.png')
请叫我艺术家
word里有个像素画,和一串符号
前者用工具解出半个flag
文档末尾的todpole提示了这串符号是蝌蚪文,在线网站解密得到后半段flag
simple MQTT
解题过程还是简单的,关键是学习了解一下mqtt协议
wireshark打开后,分析
→追踪流
→TCP流
上面那部分显然是rar文件数据,下半部分则提示了密码为:th1s_1s_rar_p@ssw0rd
,解压拿flag
Where is flag Plus
压缩包中共有1936
个txt文件,对应序号0-1935,每一个txt的大小都是12,内容像是base64编码,但是解码得到的是乱码,换了几种组合方式后解得的依旧是乱码
转换思路,看看文件的crc32校验值,没有找到规律;但是发现文件的修改时间比较奇怪,而且只有秒数不一样
于是把所有文件解压到一个文件夹下,写个简单脚本分析可知,秒数分布为30-50
,再结合文件个数为1936
,正好能被8整除
import os
import time
out =[]
flag = ""
for i in range(1936):
path = r'dir\\.txt'.format(str(i))
# 获取修改时间
file_time = os.path.getmtime(path)
s = time.ctime(file_time)
out.append(int(s[17:19]))
print(max(out)) #50
print(min(out)) #30
于是遍历文件的修改时间,如果秒数大于40
,则记为1
,否则即为0,再将得到的二进制转hex
import os
import time
flag = ''
out=''
for i in range(1936):
path = r'dir\\.txt'.format(str(i))
file_time = os.path.getmtime(path)
s = time.ctime(file_time)
if int(s[17:19]) >= 40:
flag += '1'
else:
flag += '0'
if len(flag) == 8:
out += hex(int('0b'+flag,2))[2:].zfill(2)
flag = ''
print(out)
保存为7z文件,得到snow.txt,看特征明显是snow加密
这里需要密码,得爆破,随便上网找个弱口令字典,运行完了ctrl+f查找有无flag输出就行
import os
f = open('wordlist.dic','r')
for line in f.read().splitlines():
out = str(os.system('SNOW.EXE -p -C snow.txt'.format(line))以上是关于BugkuCTF 部分题解(随缘更新)的主要内容,如果未能解决你的问题,请参考以下文章