声明:以下CTF题均来自网上收集,在这里主要是给新手们涨涨见识,仅供参考而已。需要题目数据包的请私信或在下方留言。
15.Snake(来源:实验吧)
1.关卡描述
2.解题步骤
分析:
点击解题链接发现是一张蛇的图片,将其下载下来
发现是jpg格式的图片,如果是一张正常的jpg图片,那么它的结尾应该是FF D9结尾,所以用WinHex打开该图片,发现这个并不是以FF D9结尾,其后面还有内容--明显有zip压缩包的痕迹!-ZIP Archive (zip),文件头:504B0304
所以知道这并不是一个简单的图片,可能其中含有其他的文件被隐藏起来,所以我打开虚拟机的kali系统,使用里面的binwalk分析该图片,发现里面果然含有一个zip格式的文件
或者把图片格式改成zip结尾,
或者 编辑-复制-新文件-1.zip
我首先想到的是key文件里应该就是我想要找的flag,所以我首先用记事本打开了key文件,发现是一串经过加密的字符串
应该是base加密方法,所以解码,解出一句英文“What is Nicki Minaj’s favorite song that refers to snakes?”
尼基·米娜最喜欢的关于蛇的歌是什么?
好吧,虽然我英文不是太好,还是能看懂一点,发现这并不是我想要的flag,想要得到flag还要根据这句英语继续往下解密,看来是我想的太简单,所以我就去网上百度这句话(不得不吐槽出题人的折磨人程度),经过在网上百度,发现英文中Nicki Minaj是一个歌手,这句话指的是她的一个视频变成的歌曲,名字叫“Anaconda”,这个单词的意思就是蟒蛇
打开jpg图片后有两个文件,而key文件已经被我走到无路可走了,最终的解题之路肯定是在另一个文件cipher里,因此猜想cipher文件被一种加密方式加密,此加密方式还需要密钥,而秘钥就是刚才从key文件解出来的单词。
并且这题如果是有秘钥的而且是解出来的单词,那么应该就是公钥加密的的一种,所以我网上百度了一下共要公钥的算法,找了好多,最后在AES中在百度里看到这个算法
这个单词的英文意思就有蛇的意思,与本道题直接相关
所以我在线找了一下这个算法的解密网站,最后根据从key中得到的秘钥解出了flag
http://serpent.online-domain-tools.com/ ---(集各种工具与web端)
CTF{who_knew_serpent_cipher_existed}
了解密码学的都知道,有公钥加密和私钥加密!!!
此题为公钥加密,而公钥加密最著名的就是AES
这里的key是小写的:anaconda ----坑
16.SOS(来源:实验吧)
1.关卡描述
2.解题步骤
分析:
首先对这种文件先使用file命令查看一下文件类型,sos: Linux rev 1.0 ext2 filesystem data, UUID=0b92a753-7ec9-4b20-8c0b-79c1fa140869,是一个linux文件系统,
可以使用mount挂载查看内容,也可以直接使用binwalk -e SOS提取(注:使用foremost提取失败),提取的结果是242个压缩包,每个压缩包中各有一个字符
以下3.py脚本是在kali上运行的待研究:
#!/usr/bin/env python
# coding=utf-8
import gzip
import os
OUT_DIR_NAME = 'out'
if not os.path.exists(OUT_DIR_NAME):
os.mkdir(OUT_DIR_NAME)
OUT_DIR = os.path.join(os.path.abspath(os.path.dirname(__file__)), OUT_DIR_NAME)
# 解压缩所有压缩包
def un_gz(file_name):
f_name = file_name
g_file = gzip.GzipFile(file_name)
open(os.path.join(OUT_DIR, f_name), 'w').write(g_file.read())
g_file.close()
# 读取所有文件拼凑字符串
def conbine():
out = ''
for i in xrange(1, 243):
with open(os.path.join(OUT_DIR, str(i)), 'r') as f:
out += f.read()
print(out)
if __name__ == '__main__':
all_file = os.listdir('.')
all_file.remove(__file__)
for i in all_file:
if os.path.isfile(i):
un_gz(i)
conbine()
运行代码后,得到输出字符I'm from Black Eye Galaxy,Our spaceship broke down when we passed Mars.We need your help and we are available at any terminal.The key to contact us is CTF{131Ack_3Y3_gA1AxY}.Please contact us as soon as possible.we need your help desperately.
翻译:
我来自黑眼星系,我们的宇宙飞船在经过火星时抛锚了。我们需要你的帮助,我们在任何一个终端都能找到。联系我们的关键是CTF 131ACK 3Y3 GA1axy。请尽快联系我们。我们急需你的帮助。
_sos.extracted文件夹里有242个文件:
下面运用pcat大神的脚本:(windows下运行)
# -*- coding: utf8 -*-
def foo():
path=r".\_sos.extracted\%d"
s=""
for i in xrange(1,242+1):
f=open(path % i).read()
s+=f
print s
pass
if __name__ == '__main__':
foo()
print 'ok'
这个脚本运行后会有乱码,估计用2.7.9会好点?
解决方法:提出来全是乱码那是因为都是压缩文件,加一个解压缩的步骤就去可以了
import gzip
def foo():
path="./_sos.extracted/%d"
s=""
for i in range(1,242+1):
with open(path % i, 'rb') as f:
s+=gzip.decompress(f.read()).decode()
print(s)
if __name__ == '__main__':
foo()
print('ok')
注意:如果把print(s)与s+下面且对其,会打印出242点渐进的结果:
CTF{131Ack_3Y3_gA1AxY}