另外一个世界
考点:简单的二进制转十进制转ascii码。
解题:010打开找到末尾一串二进制字符:
以8位为一组,转换为10进制,再对照ASCII码表得出字符。最后以flag格式提交。
FLAG
考点:LSB隐写转bin文件
解题:拿到手的时候是一张图片
扔到steg中仔细分析,发现特别LSB隐写。
看看样子是个压缩包,010新建一个文件,将图片里的bin信息放入,改后缀为zip,解压zip后依次查看这些文件信息,在一个名为.rodata文件中找到flag。
数据包中的线索
考点:流量包追踪流分析,http过滤
解题:将题目里pcapng的文件拖进wireshark流量分析一波
发现有http的流量,于是我们过滤http,然后追踪http流,发现base64的编码
看到了base64编码
拿着base64去解密成图片,Base64解码 Base64编码 UTF8 GB2312 UTF16 GBK 二进制 十六进制 解密 – The X 在线工具 (the-x.cn) 然后我们将图片下载下来,得到flag
假如给我三天光明
考点:盲文对照、音频转莫斯解密
解题:根据题目联系到盲文。将图片和盲文对照表对照:盲文对照表 – gwind – 博客园 (cnblogs.com)
解出得到:kmdonowg
用解出的盲文解压出压缩包。得到一个.wav的音频文件
打开看着像是摩斯密码:
-.-. - ..-. .-- .--. . .. ----- ---.. --... ...-- ..--- ..--.. ..--- ...-- -.. --..
莫斯解密得到:CTFWPEI08732?23DZ(即为flag)
荷兰宽带数据泄露
考点:路由器密码查看器 (RouterPassView)
解题:RouterPassView,大多数现代路由器允许您备份到一个文件路由器的配置,然后从文件中恢复配置时的需要。路由器的备份文件通常包含了像您的ISP的用户名重要数据/密码,路由器的登录密码,无线网络的关键。如果你失去了这些密码1 /钥匙,但你仍然有你的路由器配置的备份文件,RouterPassView可以帮助你从你的路由器恢复您丢失密码的文件。
RouterPassView是一个找回路由器密码的工具。大多数现代路由器允许备份到一个文件路由器的配置,然后从文件中恢复配置时的需要。路由器的备份文件通常包含了像ISP的用户名重要数据/密码,路由器的登录密码,无线网络的关键。如果失去了这些密码1 /钥匙,但仍然有路由器配置的备份文件,RouterPassView可以帮助你从你的路由器恢复您丢失密码的文件。
故我们查找对象就是 用户名和密码 (flag即为用户名)
面具下的flag
考点:vmdk文件,vmdk解压
解题:打开附件是一张图片,用010打开发现有flag.vmdk文件,直接该源文件后缀名为.zip。解压得到flag.vmdk文件,vmdk文件其实是虚拟机使用的硬盘文件
关键步骤
这里如果在windows系统上解压,则得不到关键文件(可能是因为vmdk是虚拟机使用的硬盘文件),但在虚拟机里可以解压成功
先在windows解压看看
直接点zip,不用解压,用7z一直点进去,出现这个再解压
key one
什么也没有
key two
也什么都没有
可以发现没有什么有效信息
在kali解压
Linux压缩包的解压与压缩指令大全 然而再Linux解压就会出现Windows里没有的文件 7z x flag.vmdk
key one
+++++ +++++ [->++ +++++ +++<] >++.+ +++++ .<+++ [->-- -<]>- -.+++ +++.<
++++[ ->+++ +<]>+ +++.< +++++ +[->- ----- <]>-- ----- --.<+ +++[- >----
<]>-- ----- .<+++ [->++ +<]>+ +++++ .<+++ +[->- ---<] >-.<+ +++++ [->++
++++< ]>+++ +++.< +++++ [->-- ---<] >---- -.+++ .<+++ [->-- -<]>- ----- .<
看起来像是brainfuck加密 在线解密网址:https://www.splitbrain.org/services/ook
得到一半flagflag{N7F5_AD5
key two
这个特征就很明显了,是Ook加密 还是上面那个网址
_i5_funny!}
组合一下就得到flag :flag{N7F5_AD5_i5_funny!}
九连环
考点:伪加密、steghide提取图片隐写信息、foremost分离文件
解题:首先将附件放到010中进行查看,发现含有两个头文件,于是放到binwalk下面,发现还含有一个压缩包。用foremost分离出来,打开该压缩包,里面含有一个带密码的压缩包和一个图片文件。
查看一下文件头和文件尾
可以发现对应压缩包的内含压缩包中的加密为伪加密,这里对应一下前面的文件头,将这里的0108改为前面对应的0008就可以了。然后就能重新解压出完好的文件了。解压asd压缩包发现需要密码。
于是猜测图片中有密码,将图片放到stegohide中提取一下发现有隐藏信息:于是用命令行进行提取:
steghide extract -sf good.jpg
被偷走的文件
考点:压缩包密码爆破、流量过滤和查找、wireshark提取流量中的压缩包
解题:按照提示,文件对应 FTP 协议,搜索
发现被偷走了 flag.rar,wireshark 截取的流量中,会截取文件传输对应的流量,也就是说,这个流量包 包括 flag.rar,我们用foremost 分离,得到压缩包。压缩包有密码。这里没有多余的提示,按照惯例四位数字爆破,然后解压压缩包得到flag
刷新过的图片
考点:压缩包密码爆破、F5隐写
解题: F5
隐写,利用工具:F5-steganography: https://github.com/matthewgao/F5-steganography
得到的output.txt
用010观察,明显是个zip
文件,修改后缀为zip,发现含有密码,因为没有其他信息提示,因此用010查看一下,发现是伪加密,改一下信息,解压压缩包得到flag
snake1
考点:foremost分离、serpent加密算法
解题:下载附件,解压得到一张snake的图片。
1、拿到图片,放010 Editor看一下,找到PK标识,说明有隐藏的zip压缩包。
使用Kali中的binwalk工具进行检测,确实存在zip压缩包,用foremost工具分离出zip压缩包。
解压zip压缩包,解压成功,得到两个文件:cipher、key。
其中key 文件打开后,显示一串用base64过的密文字符串。
CyberChef (1357310795.github.io)(用chef解密一下)
解密之后,得到一个明文字符串
搜索了一下,找到提示所指向的内容。《Anaconda》是美国说唱女歌手妮琪·米娜演唱的一首说唱歌曲,是妮琪·米娜成绩最高的歌曲之一。“anaconda”就是我们要找的key。
cipher: 是一个数据格式的文件。我是看了别人的题解,才知道使用的是serpent加密算法,同时法语“serpent”翻译过来也是蛇的意思,切合题目。
SERPENT算法学习心得_serpent256算法-CSDN博客
使用在线工具进行解密,再加上之前得到的key,最后得到flag
Serpent Encryption – Easily encrypt or decrypt strings or files (online-domain-tools.com)
神奇的二维码
考点:密码的混用。图片包含压缩包、base64嵌套加密
解题:打开图片,发现二维码,扫描无果,放入binwalk分析,提炼出其中的隐藏压缩包,得到4个压缩包,三个能解压,只有一个18494.rar需要密码。
依次查看各个文件,均无异常,解密encoding文件(base64加密)
解密为 asdfghjkl1234567890
用该密码打开716A压缩包中的另一个加密压缩包,只得到一张图片。接着看flag.doc,发现为嵌套base64加密,用脚本解密
import base64
def decode(f):
n = 0;
while True:
try:
f = base64.b64decode(f)
n += 1
except:
print('[+]Base64共decode了{0}次,最终解码结果如下:'.format(n))
print(str(f,'utf-8'))
break
if __name__ == '__main__':
f = open('./base64.txt','r').read()
decode(f)
得到结果:comEON_YOuAreSOSoS0great
用这个密码解密得到good.mp3文件,用使用Audacity
打开,
经典的摩斯密码,解密得到
-- --- .-. ... . .. ... ...- . .-. -.-- ...- . .-. -.-- . .- ... -.--
摩斯电码在线转换:http://www.zhongguosou.com/zonghe/moersicodeconverter.aspx
得到flag
纳尼
考点:Gif文件头格式
解题:打开题目,给了提示,根据提示应该是这个文件打不开,看到是gif文件搜索一下gif文件的文件头为
4749463839 ASCII码就是 GIF89a
用winhex打开这张gif,发现
只有一个9a,疑似文件头损坏,将对应文件头加上,成功打开文件,打开文件后是一连串的字符,用stegsolve打开截取每一帧,然后拼凑成完整字符
Q1RGe3d hbmdfYm FvX3FpYW5n X2lzX3NhZH0=
base64解密,拿到flag
excel破解
考点:关于excel加密文档密码绕过
解题:将文件改成rar,然后用010打开,ascii码搜索flag即可
梅花香之苦寒来
考点:png信息收集,坐标画图二维码
解题:打开附件,查看文件属性,得到提示“你会画图吗”,用010打开,检查文件头、刚开始打开图片我看到写的“图穷匕见”,还以为是修改文件高度和宽度。结果在16进制看到了一连串的编码,复制下来,用脚本解密
with open('hex.txt', 'r') as h: # hex.txt为要转换的文本文件
val = h.read()
h.close()
with open('result.txt', 'w') as re: # 转换完成后写入result.txt
tem = ''
for i in range(0, len(val), 2):
tem = '0x' + val[i] + val[i+1]
tem = int(tem, base=16)
print(chr(tem), end="")
re.write(chr(tem))
re.close()
运行脚本解密得到返回值是一堆坐标,根据上述文件属性中的提示,可能是要我们用坐标画图。这我不会,见下面的WP
【BUUCTF】梅花香自苦寒来_buuctf 梅花香之苦寒来-CSDN博客
更简单的脚本(一命通关)16进制解密后用matplotlib画图
f=open('meihuai.jpg','rb').read()
f=f[6+21232:]
f=f.decode()
import binascii
f=binascii.unhexlify(f).decode()
f=f.split('\n')
o=open('out','w')
for i in f:
o.write(i.strip('(').strip(')')+'\n')
o.close()
#上面的代码是用于16进制解密生成out文件,可根据需要自行修改
import matplotlib.pyplot as plt
import numpy
x,y=numpy.loadtxt('out',delimiter=',',unpack=True)
plt.plot(x,y,'.')
plt.show()
得到一张二维码,用二维码扫描器扫出flag即可
outguess
考点:outguess隐写工具使用
解题:拿到是一个tar压缩包,放到虚拟机中用tar命令解压,得到张图片和txt文件,txt文件查看无果,检查图片,看到其属性中有社会主义价值观编码
公正民主公正文明公正和谐
解码CTF在线工具-在线核心价值观编码|核心价值观编码算法|Core Values Encoder (hiencode.com)
得到“abc”字符串,练习题目outguess正好需要一个key,于是猜测为outguess隐写,输入命令
隐写工具outguess安装使用教程_outguess使用-CSDN博客
outguess -k “abc” -r mmm.jpg hidden.txt
然后拿到flag
谁赢了比赛
考点:小综合
解题:打开附件第一眼我还以为是个二维码,结果非也。用010看看没什么结果,用binwalk看看,发现有压缩包,binwalk解压出来,得到txt、gif两个文件,检查txt文件无异常,但是gif文件需要密码解压。尝试用压缩包爆破工具,得到密码,解压出gif文件。
打开gif文件看着有点像二维码,用stegsolve 看看
这一帧有蹊跷保存一下这一帧,再用颜色通道看看,当red=0时出现二维码,扫码拿到flag
低个头
考点:第一次见
解题:BUUCTF:[HBNIS2018]低个头_[hbnis2018]低个头 1-CSDN博客
黑客帝国
考点:文件头的识别、十六进制如何以二进制流形式写入文件
解题:打开附件起初以为是某种循环编码,但是太长了让我想到会不会是文件头格式,打开看到前面为
52 61 72 21 1A 07 00
刚好就是rar压缩包文件头,但是单独改后缀并不能改成rar,因为他并不是以二进制形式写入文件,这里要用到脚本
import binascii
# 读取文件1.txt的十六进制数据
with open('1.txt', 'r') as file:
hex_data = file.read().strip()
# 将十六进制数据写入到文件res.rar
with open('res.rar', 'wb') as out:
out.write(binascii.unhexlify(hex_data))
接下来用工具爆破压缩包密码,打开解密的压缩包。得到一张破损图片,用010看看,弹出提示
检查文件头和尾部
文件头为89504E47 文件尾为FFD9
应该是jpg图片被改成png的文件头,把8950…改成FFD8即可拿到flag
你能看懂音符吗
考点:音符解密、word文件转压缩包
解题:打开是一个损坏的rar文件,检查文件头,将文件头修复即可打开文件,解压出来,得到一个word文件
把后缀名改成rar文件,打开后检查一下各类文件,可能出存在一些信息,找到一个document.xml文件,进入可以看到音符
♭♯♪‖¶♬♭♭♪♭‖‖♭♭♬‖♫♪‖♩♬‖♬♬♭♭♫‖♩♫‖♬♪♭♭♭‖¶∮‖‖‖‖♩♬‖♬♪‖♩♫♭♭♭♭♭§‖♩♩♭♭♫♭♭♭‖♬♭‖¶§♭♭♯‖♫∮‖♬¶‖¶∮‖♬♫‖♫♬‖♫♫§=
进行音符解密文本加密为音乐符号,可自设密码|文本在线加密解密工具 (qqxiuzi.cn) 得到flag
我吃三明治
考点:base32解密、双图拼接
解题:打开附件,为一张图片,打开010查看,很明显有两张图片,两图之间夹着一串base32密文
MZWGCZ33GZTDCNZZG5SDIMBYGBRDEOLCGY2GIYJVHA4TONZYGA2DMM3FGMYH2
解密后为flag{6f1797d4080b29b64da5897780463e30}
NTFS数据流
考点:NTFS数据流扫描
[硬盘取证]初探NTFS隐写 – 简书 (jianshu.com)、谈谈NTFS数据流文件_ntfs流-CSDN博客
解题:打开附件,注意:这里解压的时候使用Win RAR解压,涉及NTFS流的都需要Win RAR解压
解压完之后,使用NtfsStreamsEditor
工具扫描flag
文件
导出flag.txt
得到flag
sqltest
考点:sql注入之布尔盲注、流量审计
解题:打开附件流量包,一眼就看到了sql语句,url中有select
, SCHEMA_name
等,可以确定是对mysql数据库的盲注,过滤HTTP协议,然后检索一下有无flag字眼。
导出HTTP对象
或者用tshark提取更方便
tshark -r sqltest.pcapng -Y "http.request" -T fields -e http.request.full_uri > data.txt
-r 读取文件
-Y 过滤语句
-T pdml|ps|text|fields|psml,设置解码结果输出的格式
-e 输出特定字段
http.request.uri http请求的uri部分
从末尾可以看到,黑客已经爆破出数据库名,表名,字段名,而我们本道题要的是flag
,所以仅仅需要判断字段内容即可,因为黑客使用的SQL布尔盲注,我们只需解出ASCII
即可
具体分析注入过程:
1.获取数据库名
获取information_schema.SCHEMATA中数据行数的长度,从中可以知道长度是1
获取information_schema.SCHEMATA中数据行数chr(53) = '5'
,即infomation_schema.SCHEMATA有5行数据information_schema.SCHEMATA中保存了所有数据库
(第19行-第61行+第65,66行) 开始获取每一个数据库的长度,这一部分是并发执行的
(62,63,64,第67-417行) 开始获取每一个数据库库名,并发执行
2.获取表名
418行已经获取到了库名,开始获取表名个数的长度
然后获取表名个数
然后是表名长度
然后是表名(445-510)
511看到已经获取了表名,并开始获取字段个数的长度
3.获取字段名
然后获取字段个数
然后获取每一个字段长度
然后并发获取每个字段字段名(546-601)
4.获取值
然后获取值个数的长度
然后获取值的个数,值的个数为1
然后获取值的长度,这一个值的长度是38
然后获取值的内容(628-972)
这一步就是我们要找的flag
写一个脚本提取一下。我们知道注入语句为
id=1 and ascii(substr(((select concat_ws(char(94), flag) from db_flag.tb_flag limit 0,1)), {第i个字符}, 1))>{字符的ascii值}
我们把第i个字符
和ascii值
提取出来,取i变化时的值,脚本为:
import urllib.parse
f = open("data.txt","r").readlines()
s = []
for i in range(627,972):
data = urllib.parse.unquote(f[i]).strip()
payload = data.split("and")[1]
positions = payload.find("from db_flag.tb_flag limit 0,1)), ")
data1 = payload[positions+35:].split(",")[0]
data2 = payload[positions+35:].split(">")[1]
s.append([data1,data2])
for i in range(1,len(s)):
if s[i][0]!=s[i-1][0]:
print(chr(int(s[i-1][1])),end="")
print(chr(int(s[-1][1])))
得到flag
swp
考点:wget流量审计、伪加密
解题:解压打开流量包,导出http,可以看到一个疑似secret.zip的文件
打开该压缩文件,得到两个文件flag.file和.flag.swp文件
看起来似乎有加密存在,检查一下,发现是伪加密。
用工具ZipCenOp.jar恢复伪加密或者用winhex改正。这里不知道为什么我用010修改文件头并没有解决伪加密
zipcenop的命令
java -jar .\ZipCenOp.jar r .\secret.zip
还有一点,360压缩貌似能够自己解决伪加密
解压出.flag.swp后即可得到flag
SXMgdGhpcyBiYXNlPw==
考点:base64隐写、[MISC]Base64隐写-CSDN博客
解题:将题目用base64解密成Is this base?
将附件全部用base64解密,就可以成为
这样一首歌,但是没有其他提示信息,于是猜测为base64隐写
然后进行base64解密,脚本如下:
def base64value(c):
table = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
for i in range(64):
if table[i] == c:
return i
return 0
def base64stego():
f = open("flag.txt","rb")
lines = f.readlines()
x = ''
for line in lines:
l = str(line, encoding = "utf-8").strip()
if l[-1] == '=':
if l[-2] == '=':
x += bin(base64value(l[-3]))[-4:]
else:
x += bin(base64value(l[-2]))[-2:]
flag = ''
for i in range(0, len(x), 8):
flag += chr(int(x[i:i+8],2))
print(flag)
if __name__ == '__main__':
base64stego()
得到flag
find_me
考点:盲文隐写
解题:下载网页上的图片,简单查看一下属性,
应该是盲文隐写,解密盲文即可
文本加密为盲文,可自设密码|文本在线加密解密工具 (qqxiuzi.cn)
gakki
考点:字频统计
解题:打开附件,查看属性、010查看十六进制,发现含有rar文件,用binwalk提取,得到压缩包,再用密码爆破得到flag.txt,打开文件
大量无特征、无规律字符,联想到之前做过的字频统计,编写脚本如下
# 设置Python源文件的编码为UTF-8
# 作者:mochu7
# 定义一个包含大小写字母、数字以及特殊字符的字符串,用于后续匹配字符
alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()_+- =\\{\\}[]"
# 打开当前目录下的flag.txt文件,并读取其内容到字符串变量strings中
strings = open('./flag.txt').read()
# 初始化一个空字典result,用于存储每个字符及其在strings中出现的次数
result = {}
# 遍历alphabet中的每个字符
for i in alphabet:
# 计算字符i在strings中出现的次数
counts = strings.count(i)
# 将字符转换为字符串格式,以便作为字典的键
i = '{0}'.format(i)
# 在字典result中为字符i设置对应的计数
result[i] = counts
# 根据字符出现的次数对字典result进行降序排序,结果存储在res中
res = sorted(result.items(), key=lambda item: item[1], reverse=True)
# 遍历排序后的结果,打印每个字符及其出现的次数
for data in res:
print(data)
# 再次遍历排序后的结果
for i in res:
# 获取字符,由于i是一个元组,i[0]是字符本身
flag = str(i[0])
# 打印字符,但不换行,使用end=""保持在一行输出
print(flag[0], end="")
解密得到flag
我有一只马里奥
考点:ntf命令
解题:[BUUCTF-MISC-SWPU2019]我有一只马里奥~sqltest-CSDN博客
我的方法,不知道为什么我运行出来和题解完全不同
于是我直接将文件后缀改成rar。
此时我才意识到可能是ntf,但是我这里都解压出来了直接查看即可
single dog
考点:aaencode颜表情解密
解题:下载附件,用010看看,发现端倪,用binwalk解出一个压缩包,打开里面的1.txt发现编码为颜表情编码
AAEncode加密/解密 – 一个工具箱 – 好用的在线工具都在这里! (atoolbox.net)
通过链接解密,得到下面的代码和flag
function a()
{
var a="SUCTF{happy double eleven}";
alert("双十一快乐");
}
a();
穿越时空的思念
考点:音频转莫斯
解题:下载附件,然后用Audacity打开,发现应该是被分成了两段摩斯密码
xxxxxxxxxx ..-. ----- ..--- ----. -... -.. -.... ..-. ..... ..... .---- .---- ...-- ----. . . -.. . -... ---.. . ....- ..... .- .---- --... ..... -... ----- --... ---.. -....
上面是前半段,第二段如下:
..-. ----- ..--- ----. -... -.. -.... ..-. .....
摩尔斯电码转换器:在线进行摩尔斯电码和英文字母的相互转换,可以把莫尔斯电码转换为英文字母,也可把英文字母转换为摩尔斯电码 (zhongguosou.com)
转换解密即可,记得转小写
伟大的侦探
考点:EBCDIC编码EBCDIC、ASCII与EBCDIC的关系及相互转化、福尔摩斯小人加密福尔摩斯破案——“跳舞小人”的暗号与密码
解题:打开附件,密码.txt可解压,misc文件夹需要解压密码,将密码.txt使用010 Editor打开,使用EBCDIC编码即可发现密码明文,在视图栏可找到
可以看到解压密码:
wllm_is_the_best_team!
然后返回附件压缩包解压misc文件夹,打开可以看到一堆小人图片,结合题目(伟大的侦探)判断为福尔摩斯小人加密
网上搜索根据密码表可解除flag,密码表如下: