buuoj复现

1,佛系青年

下载了之后是一个加密的txt文件和一张图片

分析图片无果,很讨厌这种脑洞题,MISC应该给一点正常的线索加部分脑洞而不是出干扰信息来故意让选手走错方向,当时比赛做这道题的时候也是醉了

接着将压缩包放进010Editor查看是否伪加密和其他线索

发现伪加密,将0900改成0000,保存之后打开txt文件

很明显最后一句是与佛论禅

佛曰:遮等諳勝能礙皤藐哆娑梵迦侄羅哆迦梵者梵楞蘇涅侄室實真缽朋能。奢怛俱道怯都諳怖梵尼怯一罰心缽謹缽薩苦奢夢怯帝梵遠朋陀諳陀穆諳所呐知涅侄以薩怯想夷奢醯數羅怯諸

  在线解密得到:

2,gakki

下载压缩包之后是一张gakki的图片

foremost一下

分离之后得到了压缩包,同时需要密码

尝试数字爆破

得到密码8864

解密之

flag.txt文件里面是一大堆乱七八糟的字符,这种无规律的字符集我们就尝试字频统计

附上官方字频统计exp:(羡慕

# gakki_exp.py
# Author : imagin
alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()_+- ={}[]"
f = open("flag.txt", "r")
data = f.read()
result = {d:0 for d in alphabet} def sort_by_value(d):
items = d.items()
backitems = [[v[1],v[0]] for v in items]
backitems.sort(reverse=True)
return [ backitems[i][1] for i in range(0,len(backitems))] for d in data:
for alpha in alphabet:
if d == alpha:
result[alpha] = result[alpha] + 1 print(sort_by_value(result))

 跑一遍就得到flag了

这道题重在看到题目的意识。

 

3,SXMgdGhpcyBiYXNlPw==

先将题目base64解密

得到  Is this base?

下载附件

压缩包里面是flag.txt

看起来是很多的base64加密,尝试解密第一行的字符串,使用base64解码得到:

Cette nuit,

确实是base64加密,于是我们多行base64解密,得到:

Cette nuit,

Intenable insomnie,

La folie me guette,

Je suis ce que je fuis

Je subis,

Cette cacophonie,

Qui me scie la t锚te,

Assommante harmonie,

Elle me dit,

Tu paieras tes delits,

Quoi qu'il advienne,

On tra卯ne ses cha卯nes,

Ses peines,

Je voue mes nuits,

A l'assasymphonie,

Aux requiems,

Tuant par depit,

Ce que je seme,

Je voue mes nuits,

A l'assasymphonie,

Et aux blasphemes,

J'avoue je maudis,

Tous ceux qui s'aiment,

L'ennemi,

Tapi dans mon esprit,

F锚te mes defaites,

Sans repit me defie,

Je renie,

La fatale heresie,

Qui ronge mon 锚tre,

Je veux rena卯tre,

Rena卯tre,

Je voue mes nuits,

A l'assasymphonie,

Aux requiems,

Tuant par depit,

Ce que je seme,

Je voue mes nuits,

A l'assasymphonie,

Et aux blasphemes,

J'avoue je maudis,

Tous ceux qui s'aiment,

Pleurent les violons de ma vie,

La violence de mes envies,

Siphonnee symphonie,

Deconcertant concerto,

Je joue sans toucher le Do,

Mon talent sonne faux,

Je noie mon ennui,

Dans la melomanie,

Je tue mes phobies,

Dans la desharmonie,

Je voue mes nuits,

A l'assasymphonie,

Aux requiems,

Tuant par depit,

Ce que je seme,

Je voue mes nuits,

A l'assasymphonie,

Et aux blasphemes,

J'avoue je maudis,

Tous ceux qui s'aiment,

Je voue mes nuits,

A l'assasymphonie (l'assasymphonie),

J'avoue je maudis,

Tous ceux qui s'aiment

  有的解码之后因为编码不同出现了乱码。

去百度搜索了一下,原来这个是杀人狂想曲的歌词

但是有的地方好像又跟原曲子不太一样,一般这种文字很多的第一反应就会想到字频加密,不过前一道题目已经考过这个点了。

跑了一下字频加密也没有什么结果,因为是base64加密,所以考虑到是base64隐写,找到一篇介绍base64隐写的文章,贴上链接:

https://www.tr0y.wang/2017/06/14/Base64steg/index.html

base64隐写我记得在一道题里面遇到过。

贴上官方解释,学习一波:

base64是将3个8比特转换成4个6比特,最小的转换单位是24比特(6和8最小公倍数)

因此如果原文内容不足三字节,有一部分比特解码时候不需要,但会组成编码后的某个字符。

比如上图A的 0100 0001 被 base64 识别为 0100 0001 0000 然而最后四个比特解密时无
用。换句话说 0100 0001 0000 和0100 0001 1111 对应的原文都是 A ,因此可以使用这四
个比特进行隐写

如果官方题解没有看懂,简单说一下我自己的理解,base64隐写就是每一次base64编码之后不是都刚好占到了三个字节,当没有占到3个字节的时候,我们将base64编码最后的几个比特修改成我们想要隐藏的信息,同时并不影响base64的解码。

无处不在的隐写

知道原理之后用脚本跑一遍就行了

# -*- coding: cp936 -*-
b64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
with open('flag.txt', 'rb') as f:
bin_str = ''
for line in f.readlines():
stegb64 = ''.join(line.split())
rowb64 = ''.join(stegb64.decode('base64').encode('base64').split())
offset = abs(b64chars.index(stegb64.replace('=','')[-1])-b64chars.index(rowb64.replace('=','')[-1]))
equalnum = stegb64.count('=') #no equalnum no offset
if equalnum:
bin_str += bin(offset)[2:].zfill(equalnum * 2)
print ''.join([chr(int(bin_str[i:i + 8], 2)) for i in xrange(0, len(bin_str), 8)]) #8 位一组

  得到:

[GXYCTF2019] MISC杂项题的更多相关文章

  1. Misc杂项隐写题writeup

    MISC-1 提示:if you want to find the flag, this hint may be useful: the text files within each zip cons ...

  2. buuctf misc 刷题记录

    1.金三胖 将gif分离出来. 2.N种方法解决 一个exe文件,果然打不开,在kali里分析一下:file KEY.exe,ascii text,先txt再说,base64 图片. 3.大白 crc ...

  3. Linux 驱动框架---cdev字符设备驱动和misc杂项设备驱动

    字符设备 Linux中设备常见分类是字符设备,块设备.网络设备,其中字符设备也是Linux驱动中最常用的设备类型.因此开发Linux设备驱动肯定是要先学习一下字符设备的抽象的.在内核中使用struct ...

  4. CTF杂项题解题思路

    下载压缩包解压 如果是图片就先查看图片信息 没有有用信息查看图片看是否是一个图片 如果不是图片就将文件进行还原 从还原文件中查找有用信息 例:这是一张单纯的图片 http://123.206.87.2 ...

  5. UNCTF杂项题Hidden secret 之NTFS交换数据流隐写

    ---恢复内容开始--- 做这道题目的经历比较坎坷,题目中用于隐藏flag的jpg文件出了问题,导致不能被交换数据流隐写所以出题人换了一次题目,最后做法也换了,不过出题人一开始的考察点还是基于NTFS ...

  6. BUUOJ Misc刷题大作战

    你竟然赶我走 随便一个txt文件都可以拿 LSB 当然还有别的,根据里面左右左右变化,在0管道有变化,然后把下面的三个0打钩,导出png,一个二维码,扫出来 乌镇峰会种图 只要会用winhex打开文件 ...

  7. misc刷题

    前言:听说misc打得好,头发多不了 kali自带的字典: cd /usr/share/wordlists/ 字典网站:http://contest-2010.korelogic.com/wordli ...

  8. 01 CTF MISC 杂项 知识梳理

    1.隐写术( steganograhy ) 将信息隐藏到信息载体,不让计划的接收者之外的人获取信息.近几年来,隐写术领域已经成为了信息安全的焦点.因为每个Web站点都依赖多媒体,如音频.视频和图像.隐 ...

  9. 上周日选拔题部分write up

    ---恢复内容开始--- 第一题.平淡无奇的签到题,“百度一下,你就知道”,打开之后会弹出一个百度的网页页面.网页题第一步,先查看它的源代码.从上往下看,发现了这样一行字 看起来有点像base编码,于 ...

随机推荐

  1. javascript-闭包【面试必备】

    闭包 定义:内层函数可以访问外层函数作用域的变量 意义/用途: 1.封装细节 2.实现模块化 3.常用实战li列表 // querySelectorAll es5支持的一个类似于jq的复杂选择器选取d ...

  2. Redis缓存穿透和雪崩

    缓存穿透 用户想要查询一个数据 在redis缓存数据库中没有获取到 就会向后端的数据库中查询. 当用户很多 都去访问后端数据库的话,这就会给数据库带来很大的压力. 常见场景:秒杀活动 等 解决方法: ...

  3. Python - Git仓库忽略提交规则 & .gitignore配置

    Git 忽略文件提交的方法 有三种方法可以实现忽略Git中不想提交的文件. 在Git项目中定义 .gitignore 文件 这种方式通过在项目的某个文件夹下定义  .gitignore 文件,在该文件 ...

  4. PyQt5播放实时视频流或本地视频文件

    目录 编辑UI 新建视频播放类Display 打开相机 关闭相机 显示视频画面 完整源代码 效果图 编辑UI 编辑UI如下图所示: 新建视频播放类Display 定义如下初始化函数 def __ini ...

  5. 面试常问的 25+ 个 Linux 命令

    作为一个Java开发人员,有些常用的Linux命令必须掌握.即时平时开发过程中不使用Linux(Unix)或者mac系统,也需要熟练掌握Linux命令.因为很多服务器上都是Linux系统.所以,要和服 ...

  6. Android开发-AlertDialog,Progress,ProgressDialog,自定义layout

    AlertDialog 默认样式 单选样式 多选样式 自定义样式 效果图   AlertDialog效果图 class OnClick implements View.OnClickListener ...

  7. mysql学习——数据库基本操作

    查看当前数据库 创建数据库 查看数据库定义 删除数据库

  8. 已安装的nginx添加其他模块

    总体操作就是添加新模块并重新编译源码,然后把编译后的nginx可执行文件覆盖原来的那个即可.1 查看已安装的参数nginx -V拷贝那些巴拉巴拉的参数,后面编译的时候使用 2 下载相同版本号的源码,解 ...

  9. Java 枚举 enum 详解

    本文部分摘自 On Java 8 枚举类型 Java5 中添加了一个 enum 关键字,通过 enum 关键字,我们可以将一组拥有具名的值的有限集合创建为一种新的类型,这些具名的值可以作为常规的程序组 ...

  10. 全面解析RayFire的动态对象与静态对象

    我们在日常使用RayFire的过程中,接触得比较多的应该就是RayFire的对象设置了.RayFire的对象包含了动态对象.静态对象与休眠对象,其中动态对象.静态对象可以结合动力学.运动学概念设置动作 ...