CTF-安全杂项(八)

声明:以下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}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值