BUUMisc通关1

【WUSTCTF2020】spaceclub

知识点:(空格隐写)

空格在普通文本下无法显示,但使用 Sublime Text 编辑器可以清楚点看见空格

出题人常会在这里出 摩斯电码 或者二进制01

image-20210629155438019

题目分析

这里是二进制01,转ASCII编码

短的空格是0,长空格是1

代码:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
s = ''

for i in open('attachment.txt'):    
    if (len(i) == 7):
        s +='0'
    else:
        s +='1'
print(s)
s = int(s,2)
from libnum import*
print(n2s(s))

wctf2020{h3re_1s_y0ur_fl@g_s1x_s1x_s1x}

粽子的来历

知识点:doc文件损坏,二进制01

这题没考察啥,就纯杂项,杂。

题目分析

打开.doc发现文件损坏,拖进 010editor查看,将被修改的部分16进制全部写成FF

image-20210629163129530

打开后,发现每行诗的行间距不同,1.5倍行距为1,1倍行距为0。题目提示flag常在有 DBAPP标记的文件中,搜了一下只有第3个.doc文件中有这个标记。将得到的二进制01数据进行md5加密,拿到flag

flag{d473ee3def34bd022f8e5233036b3345}

寂静之城

题目分析

本来是道社工题,但好像题目没了,看了下别人很久前写的WP:

flag{31010419920831481363542021127}

派大星的烦恼

知识点:二进制01逆序,ASCII,图片隐写

二进制逆序:01011010,逆序输出01011010

图片隐写:使用010editor打开,分析16进制数据

ASCII:将二进制数据转化为ASCII字符

题目分析

由题目给的条件可以知道:

1
2
3
4
5
#0x22,0x44代表伤疤两种细胞,0xf0则是派大星的赘肉。
猜测为二进制01,0x22为0,0x44为1

#答案为32位的一串字符串
说明flag为32位的字符串

使用010editor打开得到二进制数据:

0110110000101100000011000110110010011100101011000000110010000110101011000010110010001100000111000010110001000110001001101010110001100110101001100110110001000110011011001010011010101100010001100010110011000110101001100010110011001100000111001100110001001100

将二进制数据转ASCLL,这里分析一下,为什么是下面这样写:

拿到二进制数据后,我们直接进行ASCII转码会得到一串乱码,将二进制数据每8位一组分割,可以发现:

01101100,00101100,00001100第组数据明显不能得到正常的字符,但逆序后00110000=>48,ASCII值为0。

所以我们将每组的数据都进行逆序,但每组数据的位置保持不变,得到的数据提交后正确。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
from libnum import*
s1 = '0110110000101100000011000110110010011100101011000000110010000110101011000010110010001100000111000010110001000110001001101010110001100110101001100110110001000110011011001010011010101100010001100010110011000110101001100010110011001100000111001100110001001100'
x1 = []
for i in range(0,len(s1),8):
    x1.append(s1[i:i+8])
print(x1)
for j in x1:
    print(chr(int('0b'+j[::-1],2)),end='')

'''
s1 = s1[::-1]
print(n2s(int(s1,2)))
# 23834ec4b5e6b6ef5db48145a0596046
m = '23834ec4b5e6b6ef5db48145a0596046'
#这里的写法也是一样的道理,要逆序两次,才能和第一种写法一样。
print(m[::-1])
'''

flag{6406950a54184bd5fe6b6e5b4ce43832}

【ACTF新生赛2020】music

知识点:mp4文件头,文件异或

mp4(.m4a):文件头信息为(0000 0018 6674 7970 6973 6f35 0000 0200)

文件异或:将文件进行异或操作即可

题目分析

打开vip.m4a 文件提示文件损坏,打开010editor查看,发现文件头中有大量的 A1 ,将源文件与 A1进行异或。

使用010 Editor工具 -> 十六进制运算 -> 二进制异或 对整个文件内容进行异或

image-20210629192355393

修复文件后,打开录音得到:actfabcdfghijk

flag{abcdfghijk}

【SCTF2019】电单车

知识点:无线电PT224x

参考文章:http://www.kb-iot.com/post/756.html

钥匙信号(PT224X) = 同步引导码(8bit) + 地址位(20bit) + 数据位(4bit) + 停止码(1bit)

钥匙信号(PT226X) = 同步引导码(4bit) + 地址位(8bit) + 数据位(4bit) + 停止码(1bit)

题目分析

使用 AudaCity 打开题目给的 .WAV 文件 ,得到一串音频文件,转化成二进制数据:

0  0111010010101010011000100  011101001010101001100010

通过捕获的数据分析可知前20位就是地址为 01110100101010100110 ,地址码后面的5位是数据位和停止位00100

image-20210629225829655

flag{01110100101010100110}

hashcat

知识点:hashcat破解密码

工具1:

Hashcat 是世界上最快的密码破解程序,是一个支持多平台、多算法的开源的分布式工具。(kali最新版自带)

官方:https://hashcat.net/hashcat/

Github:https://github.com/hashcat/hashcat

工具2:

Accent OFFICE Password Recovery v5.1 CracKed By Hmily 进行破解

工具3:

office2john.py 破解

Github 项目地址 https://github.com/openwall/john

注意:在win下安装的话还需要安装 john ,而kali自带 john(推荐安装在kali使用)

学习文章:

推荐学习:国光师傅的HashCat学习笔记

GPU破解神器Hashcat使用简介

Hashcat 找回office文件密码

HashCat官方文档

题目分析

打开题目后,使用010editor查看,可知文件头为 D0 CF 11 E0,文件为 xls,doc,ppt类型的。

image-20210630180949454

添加后缀名 .ppt ,打开后需要输入密码解密。

方法一:

使用Accent OFFICE Password Recovery v5.1 CracKed By Hmily 进行破解,使用暴力破解。选择4位的数字进行攻击。

image-20210630181620393

image-20210715215057329

得到密码 9919,打开 ppt后,在倒数第二幅图中,将背景换个深色,得到flag

image-20210630182011550

方法二:

使用最强密码破解工具 HashCat ,kali最新版自带。

在使用 Hashcat前,需要先在kali上 clone github上的 office2john.py 程序,使用 office2john.py 来获取文件的hash值,再利用 HashCat 破解 hash值,拿到密码。

1
2
#抓取文件的hash值,并保存为 out.txt 文件
python3 /root/N1nja_Misc_tools/crack_hash/office2john.py test.xlsx > out.txt

image-20210630185513007

1
2
#文件的hash值,保存在out.txt文件
$office$*2010*100000*128*16*265c4784621f00ddb85cc3a7227dade7*f0cc4179b2fcc2a2c5fa417566806249*b5ad5b66c0b84ba6e5d01f27ad8cffbdb409a4eddc4a87cd4dfbc46ad60160c9

准备一个好用的字典(zidian.txt)

1
john --wordlist=zidian.txt out.txt

破解成功后,使用下面命令查看爆破的密码

1
john --show out.txt

--------------------------------------------------------------------------------------

下面的方法是使用 Hashcat 来破解hash值

1
2
3
4
#-m 破解hash类型
#-a 破解模式(这里是蛮力破解)
#?d?d?d?d 使用数字攻击,代表4位的数字
hashcat -m 9500 out.txt -a 3 ?d?d?d?d 

status.....................................Cracked显示已经获得了密码

image-20210630193612155

1
2
3
4
#我们使用
hashcat -m 9500 out.txt -a 3 ?d?d?d?d --show
#来查看密码
#可以看到密码为:9919

image-20210630193825762

image-20210630192437004

【UTCTF2020】zero

知识点:零宽字符隐写

参考文章:

零宽字符 :字节宽度为0的特殊字符

字符包括:

零宽度空格符 (zero-width space) :U+200B 用于较长单词的换行分隔
零宽度非断空格符 (zero width no-break space) :U+FEFF 用于阻止特定位置的换行分隔
零宽度连字符 (zero-width joiner) :U+200D 用于阿拉伯文与印度语系等文字中,使不会发生连字的字符间产生连字效果
零宽度断字符 (zero-width non-joiner) :U+200C 用于阿拉伯文,德文,印度语系等文字中,阻止会发生连字的字符间的连字效果
左至右符 (left-to-right mark) :U+200E 用于在混合文字方向的多种语言文本中(例:混合左至右书写的英语与右至左书写的希伯来语),规定排版文字书写方向为左至右
右至左符 (right-to-left mark) :U+200F 用于在混合文字方向的多种语言文本中,规定排版文字书写方向为右至左

在线加解密网站:(加解密只能使用同一种方式或在同一个网站)

http://330k.github.io/misc_tools/unicode_steganography.html

https://yuanfux.github.io/zero-width-web/

http://www.atoolbox.net/Tool.php?Id=829

其他工具

题目分析

题目提示 zero,打开文本后我还以为是凯撒移位,爆破了下发现不行,回过头看题目不明白 zero有什么含义。查了资料后知道这里考的是零宽字符隐写

加解密时只能使用相同的方式,即使用同一种加密方式解密,或者在同一网站加解密。这里只能在 http://330k.github.io/misc_tools/unicode_steganography.html 这个网站解出flag

flag{whyNOT@sc11_4927aajbqk14}

【*CTF2019】otaku

知识点:伪加密,word隐写,zsteg提取png图片隐写

**伪加密:**直接使用360压缩打开(无视伪加密)或者使用 binwalk 分离

word隐写: Word文字的三种隐藏方法

  • word显示隐藏文本:

    1
    2
    3
    
    #点击word左上角的“文件”,进入后台试图,点击“更多”,点击“选项”,会打开“Word选项”对话框,在“显示”
    #里勾选“隐藏文字”,意思是显示word中的隐藏文字,确定即可。此时word里有隐藏效果的文本下面会有一条
    #虚线,当你打印的时候这些隐藏效果的文本是不存在的。
    

png图片隐写:使用 zsteg 解密

zsteg可以检测PNG和BMP图片里的隐写数据。

1
2
3
4
5
6
7
目前zsteg支持检测

- LSB steganography in PNG & BMP
- zlib-compressed data
- OpenStego
- Camouflage 1.2.1
- LSB with The Eratosthenes set

kali中安装使用命令:

1
 gem install zsteg

zsteg使用帮助命令

1
zsteg-h

题目分析

下载文件为压缩包,伪加密。可以使用360压缩直接解压(可以无视伪加密),或者在kali2021版中使用 binwalk 提取文件

1
2
#binwalk 提取文件命令
binwalk -e xxx.zip

image-20210701101905430

得到文件

1
2
Anime_Intro.doc
flag.zip

打开 Anime_Intro.doc 这里,我的word开启了显示隐藏文字的,经常做杂项的应该会开启。

1
2
#隐藏的文本
Hello everyone, I am Gilbert. Everyone thought that I was killed, but actually I survived. Now that I have no cash with me and Im trapped in another country. I can't contact Violet now. She must be desperate to see me and I don't want her to cry for me. I need to pay 300 for the train, and 88 for the meal. Cash or battlenet point are both accepted. I don't play the Hearthstone, and I don't even know what is Rastakhan's Rumble.

flag.zip文件需要解压密码

flag.zip中我们可以看到里面也有一份文本文件,通过题目的提示(BUU这里没写)

1
提示The txt is GBK encoding.

我们可以知道这里可以利用zip明文攻击,将得到的隐藏文本进行 gbk 编码后,用WINRAR压缩成 .zip 文件。

因为 flag.zip 是用WINRAR压缩的,所有我们的 test.txt文件也要采用一样的压缩方式。

image-20210701104621712

将隐藏文件写入文本,另存为时编码格式采用 ANSI (包含GBK)

image-20210701104812901

压缩后对比 test.zip 和 last words.txt 文件的CRC值一样。用 ARCHPR进行明文攻击。

image-20210701105423775

image-20210701105432180

image-20210701105905155

利用口令My_waifu 解压 flag.zip 后得到 :flag.png 查看了属性3.41M,感觉里面应该进行了数据隐写。

直接用 图片隐写信息快速检测工具——zsteg,(How to use? Google)

image-20210701110907614

*ctf{vI0l3t_Ev3rg@RdeN}

【湖南省赛2019】Findme

知识点:PNG格式信息,TweakPNG,CRC修复宽和高,CRC隐写

学习:PNG文件格式详解 了解PNG的文件格式

使用python脚本 :CRC修复宽和高的脚本

在CRC处隐写16进制信息

分析PNG ,数据CHUNK信息

题目分析

压缩包中有5张图,一张张来分析

第一张图 1.png

用TweakPNG打开,提示IHDR部分的CRC值不正确,在看图片我们可以知道应该是图片的高宽被篡改了。

image-20210701145159232

使用pyhton脚本通过CRC修复图片的宽和高:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import os,sys
os.chdir(sys.path[0])
import zlib
import struct
 
filename = '1.png'
with open(filename, 'rb') as f:
    all_b = f.read()
    crc32key = int(all_b[29:33].hex(),16)
    data = bytearray(all_b[12:29])
    n = 4095            #理论上0xffffffff,但考虑到屏幕实际/cpu,0x0fff就差不多了
    for w in range(n):          #高和宽一起爆破
        width = bytearray(struct.pack('>i', w))     #q为8字节,i为4字节,h为2字节
        for h in range(n):
            height = bytearray(struct.pack('>i', h))
            for x in range(4):
                data[x+4] = width[x]
                data[x+8] = height[x]
            crc32result = zlib.crc32(data)
            if crc32result == crc32key:
                print("宽为:",end="")
                print(width)
                print("高为:",end="")
                print(height)
                exit(0)

得到:

宽为:bytearray(b'\x00\x00\x00\xe3')

image-20220603121348517

在对应位置补齐标识

image-20210701150134658

拿到正确图片:

image-20210701150222425

1
2
3
# 用 zsteg 分析,没得到有效结果

# 用 stegsolve 分析,拿到一张二维码,使用QR research解码

image-20210701150654325

image-20210701154141907

1
# 得到:ZmxhZ3s0X3

第二张图 2.png

用 010editor打开,发现 PNG图片尾有 7z 文件,用 binwalk分离,但没有识别出来。

image-20210701181507922

我用手动分离后新建为 7z.zip 打开发现文件损坏,打开查看16进制,
发现和zip的文件头 504B0304 相似,将全部的 37 7A(7z)修改为 50 4B

image-20210701173710120

7z.zip文件正常打开后,发现里面有 999 个 .txt 文件通审查文件的大小或者 CRC值,
找出618.txt文件中的信息You find it: 1RVcmVfc

第三张图 3.png

还是用010editor审查3.png的信息

发现chunk[0]-chunk[6]的每一个数据块的crc值都很小

并且是可打印的Ascii字符

image-20210701175528606

python.exp

1
2
3
4
5
s = [0x33,0x52,0x6C,0x5A,0x33,0x30,0x3D]
for i in s:
    print(chr(i),end='')

#3RlZ30=

第四张图 4.png

直接在最末尾给出来了

cExlX1BsY=

image-20210701180211561

用 TweakPNG分析PNG图片信息,可以发现PNG中隐写了一个text文本
正确的base信息应该为 cExlX1BsY

image-20210701181218795

第五张图 5.png

Yzcllfc0lN

image-20210701180320506

得到的所有信息:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
ZmxhZ3s0X3
1RVcmVfc
3RlZ30=
cExlX1BsY
Yzcllfc0lN

连接成base64解码
ZmxhZ3s0X3Yzcllfc0lNcExlX1BsY1RVcmVfc3RlZ30=

flag{4_v3rY_sIMpLe_PlcTUre_steg}
updatedupdated2022-06-032022-06-03