BUUCTF MISC刷题笔记
Posted z.volcano
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BUUCTF MISC刷题笔记相关的知识,希望对你有一定的参考价值。
BUUOJ
Misc
[DDCTF2018]第四扩展FS
图片exif信息中有提示:Pactera
foremost分离出一个加密的压缩包,使用上面得到的密码解压,得到一个文本
词频统计:
f = open("file.txt","r")
txt=f.read().replace(" ","")
f.close()
d={}
for i in txt:
d[i] = d.get(i,0)+1
ls=list(d.items())
ls.sort(key=lambda x:x[1],reverse =True)
for i in ls:
print(i[0],end="")
跑一下就出flag
[INSHack2018]42.tar.xz
好多压缩包,每一个打开也都是一堆压缩包
一般来说写个py脚本重复解压就行,不过网上看到一个利用bash命令的,好像很方便
while [ "`find . -type f -name '*.tar.xz' | wc -l`" -gt 0 ]; do find -type f -name "*.tar.xz" -exec tar xf '{}' \\; -exec rm -- '{}' \\;; done;
flag{04ebb0d6a87f9771f2eea4dce5b91a85e7623c13301a8007914085a91b3ca6d9}
大流量分析(一)
某黑客对A公司发动了攻击,以下是一段时间内我们获取到的流量包,那黑客的攻击ip是多少?(答案加上flag{})
附件太多了…先下载一个看一下
一打开,映入眼帘的就是183.129.152.140
试一下,对了… flag{183.129.152.140}
这题正规做的话,借助这里的统计功能
次数最多是就是这个
大流量分析(二)
黑客对A公司发动了攻击,以下是一段时间内获取到的流量包,那黑客使用了哪个邮箱给员工发送了钓鱼邮件?(答案加上flag{})
仍然是上题那个流量包,这题要找邮箱
,所以筛选smtp
flag{xsser@live.cn}
大流量分析(三)
某黑客对A公司发动了攻击,以下是一段时间内我们获取到的流量包,那黑客预留的后门的文件名是什么?(答案加上flag{})
这里要找文件名,因为是后门文件,一般是.php
文件很多,慢慢翻,最后得到flag{admin.bak.php}
[NPUCTF2020]碰上彩虹,吃定彩虹!
先看maybehint.txt
,winhex打开,发现很多0宽字符
在线网站解密,直接解会乱码,因为默认勾选的是下面几种,linux系统下用vim
打开这个文本,会发现它是由<200b>、<200c>、<200d>
这三种字符组成
把这三种勾选上去,再次解密得到提示:do u know NTFS?
拿NtfsStreamsEditor2
把隐藏的信息提取出来,结果如下
=wwZlZ=8W=cndwljcdcG8wdj8W8Z8dZllGjZc=8lWjnlWd8WwZ5j=l8ccWZcZGjd5ZwZ5WZ8d=Zcwjwl5Gnn=WdwcwlnWd5lGnZWlnnwdnjnw8ndnc58d5cndl=njZl=WddjwWWwZllj5c5jGwZnZ5W=cZljdwd8c=85ndGGljcl5ccwd=W=l8w=5lwWn8WnwnWlGZwdcnGGl5G=8W==cnnWZnWjZ=wWcGwZcWc8ncWW=5jnWwcZl8W=8cdwWldlnwW5ddwlnlwncWlcwGZddj5djZWc5jcWdn5jdjwnj85GWGjnjwGd=jZGj5j==jwjlw8dlwWj5Wjn5n8dwwdjZlc5lZwdWldZlnGwl85cWnjd=WcWlwj8WGdlGncnZWGGd5ZncW5d55nW5wl=Wj8jGWnWj8jwZ=ZwWZ88nWG5nn5WlWnGdWw5Zn8jdl=nGcnll8WncZjnGn=dlwn5W8wlWjlnl5ccnGWGnnnc58WnjlGnG55Zwdn5cZdjdZZ5WljG5G5wcldd=Wlc8Z=8nGj=jWd8w8Wd=w8nccc8wZdjcnGdljZnnj5ww8885=lcWW8W8j5dG8jZZwG55GjnwZ=W5Z8G5ZlGc5ZZncZ5cd8j85GW5nj=WWncn55Gj5nj5nwnW58jG8GcnjZdWcl8wj8n=cj=8l8cn5jjcjn8lldn=Gjw8=cjcdWWjGddZljdjdZnG8djnZccZldlWllw5ZZ8wj5Gn==5w8Z=j55n=ZZ5wdww8lndwd8Wlj8WGjnl=nncZ=W8ZZWZnjjlwWGZZlZc5c==d8Zl855wZn=W=w8wWjZ85cGc==5Z8ccjdw5GnZWnGjcdGGnZ5wwwWGG5d=W5ldjwGZZdZwdG5cGGnZGlGc=W5ccWZ8=cGljdGcdld=8cj8jwn=lj88ZZ5jn5lcZ=Gdw=Zl58WZZl5ccwccwG5d5w8Z5wllj5ddnn=5=w8588WwGj=l5G55dWG8cl=GcjWwlwG=lWWnZ=dZG85Gcjc5=wnw=j==Gndnddjwn5c=c5W5wwdWlG5nWZwnGw8=lcWldcwnG5Wcjj=cWlGZc8Gn58ZWjZ85ljlncZj5cc=dZWGjd=d8ncZ8www55=cw=GWZn5ZZlnWld=cWcnclWlZG5djGW=cl8=ZG8cZwwc8wl=88W5ZwZ=jwZGGlcWcWnZZ5Zj5w5ZdZclZZWnccGw==cG8W8ZWlc8wcZ555Z85ljWG5jZ=8=wllWjWjlZc5lG8cwWlnjlGlW=l5=n=lGwnjGGjGdwj85ddW5ZwZ=ddjWldj=cjljjGwndZjWWZGcdWcZW5cdldj8WZjGljlWncZ5=8jnZWjl8wjZG5Zwlcl5dd
不像是某种编码,直接词频分析吧
f = open("out.txt","r")
txt=f.read().replace(" ","")
f.close()
d={}
for i in txt:
d[i] = d.get(i,0)+1
ls=list(d.items())
ls.sort(key=lambda x:x[1],reverse =True)
for i in ls:
print(i[0],end="")
结果:ZW5jcnlwdG8=
,base64解码得到encrypto
,百度一下会发现这是一个加密软件,下载,使用之前需要先把文件后缀改成.crypto,试了一下发现要把secret
改后缀,放进去解密,得到提示:小写
但是仍然需要密码来进行解密,想起还有一个lookatme.txt
没有看
tab换成-
,空格换成.
,然后解摩斯密码得到hint:autokey
关于autokey的题解我另一篇博客里写过,跑一下得到IAMTHEPASSWD,因为hint说要小写,所以密码:iamthepasswd
拿去解密,但是跑了很久没结果…winhex看一下,发现这里有东西,把它删了,重新解密
解出彩虹.png,foremost分离出一个压缩包,里面是加密的弗拉格.docx
这里和之前做过的题:很好的色彩呃?
类似,这六块黄色其实有细微的差别,用ps提取颜色,得到
ffff70
ffff40
ffff73
ffff73
ffff57
ffff64
最后两位连起来得到704073735764
,转字符得到p@ssWd
,拿去解压压缩包
上面那一串字符,把大小写字母分开
得到ALPHUCK
和
eeeeeeeeeepaeaeeeaeeeeeeeaeeeeeeeeeeccccisaaaaeejeeeeeejiiiiiiiiiiijeeeeeejeeeeeeeeeeeeeeeeeeeejcceeeeeeeeeeeeeeeeeeejaaiiiiiiijcciiiiiiiiiijaaijiiiiiiiiiiiiiiiiiiiijeeeeeeeeeeeeeeeeeeeeeeejcceeeeeeeeeeeejaaiiiijeeeeeeejceeeeeeeeeeeeeeeeeeeeeeeeejceeeeeeeeeeeeeeeeejaeeeeeejciiiiiiiiiiiiiiiiiiijaeeeejceeeeeeeeeeeeeeeeeejajciiiiiiiiiiiiiiiiiiijaaiiiijiijeeeeeeeeeeejcciiiiiiiiiiiiiiijaaij
[INSHack2017]10-cl0v3rf13ld-lane-signal
文件后缀改为.jpg
foremost分离出一个图片,但是这里没有有用的线索
再回头看jpg文件,发现png图片尾后面还有数据
百度得知这个是ogg文件,类似mp3的音乐格式,提取出来,Audacity打开,很明显是摩斯电码
.. -. ... .- -.--. -- ----- .-. ..... ...-- ..--.- .-- .---- .-.. .-.. ..--.- -. ...-- ...- ...-- .-. ..--.- ....- --. ...-- -.-.-- -.--.-
拿去解密得到flag{M0R53_W1LL_N3V3R_4G3!}
[INSHack2018] (not) so deep
下载得到一个wav文件,查看频谱图,只能看到下半截,把最高频率调高
,看到部分flag
前半截flag:flag{Aud1o_st3G4n
另一半flag肯定不在这里了,尝试音频隐写,mp3stego没反应,结合题目名,使用DeepSound
需要密码
这里借助大佬的脚本获取这个wav文件的hash
值
#!/usr/bin/env python3
'''
deepsound2john extracts password hashes from audio files containing encrypted
data steganographically embedded by DeepSound (http://jpinsoft.net/deepsound/).
This method is known to work with files created by DeepSound 2.0.
Input files should be in .wav format. Hashes can be recovered from audio files
even after conversion from other formats, e.g.,
ffmpeg -i input output.wav
Usage:
python3 deepsound2john.py carrier.wav > hashes.txt
john hashes.txt
This software is copyright (c) 2018 Ryan Govostes <rgovostes@gmail.com>, and
it is hereby released to the general public under the following terms:
Redistribution and use in source and binary forms, with or without
modification, are permitted.
'''
import logging
import os
import sys
import textwrap
def decode_data_low(buf):
return buf[::2]
def decode_data_normal(buf):
out = bytearray()
for i in range(0, len(buf), 4):
out.append((buf[i] & 15) << 4 | (buf[i + 2] & 15))
return out
def decode_data_high(buf):
out = bytearray()
for i in range(0, len(buf), 8):
out.append((buf[i] & 3) << 6 | (buf[i + 2] & 3) << 4 \\
| (buf[i + 4] & 3) << 2 | (buf[i + 6] & 3))
return out
def is_magic(buf):
# This is a more efficient way of testing for the `DSCF` magic header without
# decoding the whole buffer
return (buf[0] & 15) == (68 >> 4) and (buf[2] & 15) == (68 & 15) \\
and (buf[4] & 15) == (83 >> 4) and (buf[6] & 15) == (83 & 15) \\
and (buf[8] & 15) == (67 >> 4) and (buf[10] & 15) == (67 & 15) \\
and (buf[12] & 15) == (70 >> 4) and (buf[14] & 15) == (70 & 15)
def is_wave(buf):
return buf[0:4] == b'RIFF' and buf[8:12] == b'WAVE'
def process_deepsound_file(f):
bname = os.path.basename(f.name)
logger = logging.getLogger(bname)
# Check if it's a .wav file
buf = f.read(12)
if not is_wave(buf):
global convert_warn
logger.error('file not in .wav format')
convert_warn = True
return
f.seek(0, os.SEEK_SET)
# Scan for the marker...
hdrsz = 104
hdr = None
while True:
off = f.tell()
buf = f.read(hdrsz)
if len(buf) < hdrsz: break
if is_magic(buf):
hdr = decode_data_normal(buf)
logger.info('found DeepSound header at offset %i', off)
break
f.seek(-hdrsz + 1, os.SEEK_CUR)
if hdr is None:
logger.warn('does not appear to be a DeepSound file')
return
# Check some header fields
mode = hdr[4]
encrypted = hdr[5]
modes = {2: 'low', 4: 'normal', 8: 'high'}
if mode in modes:
logger.info('data is encoded in %s-quality mode', modes[mode])
else:
logger.error('unexpected data encoding mode %i', modes[mode])
return
if encrypted == 0:
logger.warn('file is not encrypted')
return
elif encrypted != 1:
logger.error('unexpected encryption flag %i', encrypted)
return
sha1 = hdr[6:6+20]
print('%s:$dynamic_1529$%s' % (bname, sha1.hex()))
if __name__ == '__main__':
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--verbose', '-v', action='store_true')
parser.add_argument('files', nargs='+', metavar='file',
type=argparse.FileType('rb', bufsize=4096))
args = parser.parse_args()
if args.verbose:
logging.basicConfig(level=logging.INFO)
else:
logging.basicConfig(level=logging.WARN)
convert_warn = False
for f in args.files:
process_deepsound_file(f)
if convert_warn:
print(textwrap.dedent('''
---------------------------------------------------------------
Some files were not in .wav format. Try converting them to .wav
and try again. You can use: ffmpeg -i input output.wav
---------------------------------------------------------------
'''.rstrip()), file=sys.stderr)
再使用john爆破密码
得到密码azerty
,解密得到后一半flag:0_1s_4lwayS_Th3_S4me}
所以:flag{Aud1o_st3G4n0_1s_4lwayS_Th3_S4me}
[羊城杯 2020]逃离东南亚
先看日记1.zip里的图片,修改高度得到第二个压缩包的密码wdnmd
test文件里是brainfuck
字符,直接拿去解密得到一堆乱码
因为缺东西了,可以随便拿一个字符去加密,会发现出来的结果总是以+++++
开头
在开头补上++++++++
,再次解密
得到的结果拿去base64解码,得到elf文件数据
保存下来,拿去运行,好像又被调戏了
去看打架.wav
,试着看波形、频谱图、音频隐写,都没结果,最后发现要用silenteye
解密
得到最后一个压缩包的密码This1sThe3rdZIPpwd
,这次的日记里就有有用的提示了:flag在源代码里
文件很多,慢慢翻,最后在elf文件下的rtld.c
、malloc文件夹下的malloc.c
、malloc文件夹下的arena.c
发现有空格和tab
组成的信息
把这三个文件放到同一文件夹下,写脚本提取
def f_read(name):
f=open(name,"r")
flag=""
useless=r"abcdefghijklmnopqrstuvw\\xyz;,)"
for line in f.readlines():
line=line.replace("\\n","")
if "}" in line:
t = line.split("}")
if len(t[1]) != 0:
x = 1
for i in useless:
if i in t[1]:
x = 0
break
if x:
for s in t[1]:
if s == '\\t':
flag += "1"
else:
flag += "0"
f.close()
print(flag)
print("*****")
f_read("rtld.c")
f_read("arena.c")
f_read("malloc.c")
跑出来的最后一串二进制,转字符即可得到flag
以上是关于BUUCTF MISC刷题笔记的主要内容,如果未能解决你的问题,请参考以下文章