menu Ga1@xy's Wor1d
De1CTF_Misc部分wp
296 浏览 | 2020-05-04 | 阅读时间: 约 4 分钟 | 分类: wp,MISC | 标签: Misc,比赛wp
请注意,本文编写于 204 天前,最后修改于 185 天前,其中某些信息可能已经过时。

Misc杂烩/Misc Chowder

附件链接:https://pan.baidu.com/s/1GLqD6hRriLnG7KRwjWM9Nw

提取码:ptzb

题目描述

题目详解

下载附件得到一个流量包,导出http对象→按照大小顺序排序,可以在最下面发现七个php文件

将这几个文件导出后打开查看,可以发现每个php文件中都包含了一个图片(PNG/JPG),删去开头多余的部分(结尾部分不影响图片的查看,所以可以不删除),可以正常看到图片,其中一张图片(也是唯一的PNG)内容是一个Google网盘的地址

访问该地址可以下载得到一个docx文档,binwalk分析可以发现其中含有一个名字很特殊的压缩包

将其分离出来发现被加密,根据题目所给hint采用掩码爆破DE????,得到压缩包密码:DE34Q1

解压后得到一张图片,再用binwalk分析可以发现图片中藏有rar压缩包,分离出来

此处涉及到一个小知识点:NTFS数据流隐写通常都会采用WinRAR的rar压缩形式,这样才不会损坏文件附带的NTFS数据流

看到rar压缩文件,再结合文件中的内容,第一反应想到NTFS数据流隐写,直接cmd中dir /r查看即可发现在666.jpg后附有数据流,notepad查看即可得到flag

当然NTFS数据流隐写在360压缩和7z压缩都可以直接解压出来,也算是一种特殊的解法(下图以7z为例)

life

附件链接:https://pan.baidu.com/s/157d06EZeBdTqqKAjnxIU_g

提取码:ecr2

题目描述

题目详解

下载附件得到一张图,图名为game,内容是动漫游戏人生剧场版宣传报,binwalk分离可以得到一张图片和一个加密的压缩包,推测压缩包中信息即为flag

观察图片,刚开始推测是二维码之类的东西,数了一下像素点,是27x27的格式,但是二维码并没有这种规格,而且缺少存放格式化信息的数据块,根本无法还原二维码,还推测为DataMatrix,但也由于差距太大不相符,各种码没有进展,转而思考题目中包含的信息

题干名为life,附件名为game,题目描述为No Game No Life!,联系在一起想到life game生命游戏

什么是生命游戏

查看可知这种游戏也可以由像素点形式实现,和binwalk得到的图片非常相似,于是尝试以图片内容构造游戏,有网站可以实现在线游戏(戳这里

按照图片上的像素点位置点出图案,然后进行一次单步操作,即可得到一个二维码

扫码即可得到解压密码:AJTC8ADEVRA13AR

解压zip包,得到一个txt文件,观察文件名txt.pilf.txt,而中间pilf正是flip的翻转,其词义也是翻转,于是联想到将文件内容进行翻转,先翻转内容解base64,再将结果翻转decode('hex'),即可得到flag

a='0QjN1MTM0MTN0QjN3ImNjNzM3QTNmdTN3MTNmdzMzcjNxcjM3QTNmdDN2gzMzUjZ2czM0YDZzMjMxcDZ'
a=a[::-1].decode('base64')
flag=a[::-1].decode('hex')
print flag

mc_easybgm

注:本题原本是在所给网址中自行下载背景音乐,下面的附件为下载好的mp3文件,并非题目自带

附件链接:https://pan.baidu.com/s/1-AkTG8exi9i4XqjIHlug1w

提取码:xvqa

题目描述

题目详解

对应MP3文件,常见的隐写方式即mp3stego,刚开始也对本题进行了尝试,而且使用mc部分的音乐名称小写moogcity2作为key可以成功得到一个txt文件,但是文件中显示信息却是乱码,十六进制查看也得不到什么有用的信息(还包括对其进行异或等操作),一时间就卡住了,后来才知道是一种新形式的隐写:MP3的private位隐写

注:这里附上一篇与此隐写有关的paper,如果有哪位师傅翻译了可以发给我,定感激不尽!

附件链接:https://pan.baidu.com/s/1Qjzjzgk3Gfru2uXphJGhXQ

提取码:uvq7

摘取paper中的两句话

One bit we know we can use with confidence is the “Private” bit.
This should not be used by anything for any reason (except by us).

即大概意为这个private位本身不会用于其他的用途,所以即使将其修改作为隐写手段也不会影响文件本身,所以我们可以用它来进行隐写

用010editor查看文件,可以清楚的看到这一位的信息,它包含在数据帧帧头

上图即是一个FRAME块中FrameHeader的结构,其中就有private_bit这一位,在一个MP3文件中有很多个FRAME块,以本题的文件为例,一共有3285块,也就意味着一共有3285个private位可以用来隐藏信息,但是我们可以发现这一位的值只有0和1两种,所以我们可以用二进制的形式来隐藏信息,本题的考点就是这样

以本题为例,FF FB 91 40这四位即是第0个FRAME块的头部,每个头部由4字节组成,具体结构如下图

本题利用了保留字这一位置,其实版权位也可以修改用来隐写,以后单独用一篇文章探讨基于本篇论文的MP3的多种隐写姿势(一定不咕)

在010editor中尝试修改这一位置,可以发现这一位的值对应了940中间的那一位,即FF FB 9(private) 40这种结构,而且只有0和1这两种值,于是可以用脚本来提取private位的信息(借用了fz师傅脚本的思路)

f = open('bgm.mp3','r').read()
f = [ord(i) for i in f]
start = 0x28a3   # 第0个头部的开始位置
i = 0x28a3  # 遍历位置
out = ''
while i < len(f):
    # 本题的mp3文件中FrameHeader结构都为:FFFB9(private)
    if (i >= start and i + 2 < len(f)) and (f[i] == 0xff and f[i + 1] == 0xfb and f[i + 2] / 16 == 9):
        out += str(f[i + 2] % 2)
        i += 0x1a1  # 每一个FRAME块的大小都为1A1h
    else:
        i += 1

print out

运行脚本得到一长串的01序列,后面有很多多余的0可以删掉,由于是01序列,很容易想到将其转为ASCII码对应字符(32~126),所以要保留8的倍数

101111101000010010101110011010101000001001010110110011000010001011111010001000101000110001001110000011001110101011111010001011100110001000101100010010101100001011001100111011001001011010110010111110100000110000101110111110101100110010110110000011001100011010001100110011001110101011011110011000100010101011000010100011001010011000100010

直接转为字符却得到一堆乱码,所以尝试逆序再转换,即可成功得到flag

Easy Protocol

附件链接:https://pan.baidu.com/s/1skZTgj9sJ5EP_mDO-ZI-9A

提取码:t74v

发表评论

email
web

全部评论 (暂无评论)

info 还没有任何评论,你来说两句呐!