BUUCTF:7月做题记录

本文详细记录了一位参赛者在多次CTF比赛中的解题过程,涉及文件修复、隐写术、压缩包解密、音频分析、密码学、图像处理等多个领域。从修复PNG文件头、使用特殊工具如binwalk、StegSlove、Audacity,到解密AES、Base64、DES,再到二维码扫描和音视频处理,作者展示了丰富的信息安全技能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[UTCTF2020]fileheader

白给题目,补PNG文件头

89 50 4E 47

在这里插入图片描述
有点简单过头了。
在这里插入图片描述
flag:

flag{3lit3_h4ck3r}

[BSidesSF2019]zippy

找到了压缩包的密码

supercomplexpassword

在这里插入图片描述
kali中binwalk分离出压缩包,得到flag

flag{this_flag_is_your_flag} 

[UTCTF2020]basic-forensics

修改后缀为txt直接查到flag。。。。
在这里插入图片描述
flag:

flag{fil3_ext3nsi0ns_4r3nt_r34l}

[MRCTF2020]Hello_ misc

利用binwalk直接梭出来图片中的信息。
在这里插入图片描述
stegsolve对该图片发现存在隐写,得到一张图片,上面有压缩包的密码。在这里插入图片描述
在这里插入图片描述
然后压缩包密码!@#$%67*()-+解开binwalk分离出来的加密的zip发现txt存在127,63,255,191在这里插入图片描述

a='{:08b}'.format(63)
b='{:08b}'.format(127)
c='{:08b}'.format(191)
d='{:08b}'.format(255)
#00111111
#01111111
#10111111
#11111111

很明显在这里,每个数的二进制数只有前两位不同,因此可以将其全部转换后,进行打印
得到压缩包密码

with  open('out.txt','r') as file:
    str=''
    for i in file.readlines():
        d='{:08b}'.format(int(i))
        str+=d[0:2]
for j in range(0,len(str),8):
    b=str[j:j+8]
    print(chr(int(b,2)),end="")

在这里插入图片描述

rar-passwd:0ac1fe6b77be5dbe

发现里面存在一个word文件,修改后缀名为doc,打开发现存在base64字符串(需要手动改为红色

在这里插入图片描述
把doc的内容存入txt,然后进行读取解码

import base64

with open('1.txt','r') as file:
    for i in file.readlines():
        d=str(base64.b64decode(i),'utf-8')
        #print(d)
        print(d.replace('1',' '))

在这里插入图片描述
flag:

flag{He1Lo_mi5c~}

[WUSTCTF2020]spaceclub

打开发现长短不一的空格,盲猜长的为0短的为1表示二进制。直接用记事本替换。

011101110110001101110100011001100011001000110000001100100011000001111011011010000011001101110010011001010101111100110001011100110101111101111001001100000111010101110010010111110110011001101100010000000110011101011111011100110011000101111000010111110111001100110001011110000101111101110011001100010111100001111101

然后用tokeii👴网站直接梭
https://ctf.mzy0.com/
在这里插入图片描述
flag:

flag{h3re_1s_y0ur_fl@g_s1x_s1x_s1x}

USB

先将key文件修改后缀为zip,因为利用010可以看见有个pk头。
发现zip里存在有个流量包,里面为键盘流量。
https://github.com/WangYihang/UsbKeyboardDataHacker
直接考虑用脚本梭
在这里插入图片描述
得到了key
对另一个压缩包进行处理,修补rar头部后,发现存在图片
(将7A修改为74)
在这里插入图片描述
利用StegSlove进行查看图片,发现Blue Plane 0存在图片二维码
微信扫一扫得到

ci{v3erf_0tygidv2_fc0}

维吉尼亚解密得到
在这里插入图片描述

再将fa{i3eei_0llgvgn2_sc0}利用栅栏解码得到flag。
在这里插入图片描述
flag:

flag{vig3ne2e_is_c00l}

[MRCTF2020]Unravel!!

先将PNG利用binwalk获取东西
在这里插入图片描述
发现存在aes,和aes密钥Tokyo
在一开始的文件中我们可以发现一个密文
在这里插入图片描述

key=U2FsdGVkX1/nSQN+hoHL8OwV9iJB/mSdKk5dmusulz4=

解密得到
在这里插入图片描述

CCGandGulu

这为win-win.zip的密码。取出一个wav直接用SilentEye梭。
在这里插入图片描述
flag:

flag{Th1s_is_the_3nd1n9}

[ACTF新生赛2020]music

题目提示music,但是下下来是乱码文件。
别人wp说全文出现大量的A1,因此需要与A1异或文件的二进制得到正确的文件。
(因为正常的m4a文件中,主要是00比较多,因此在这里是00和A1异或后,自然出现大量A1)
在这里插入图片描述
保存发现音频里念的就是flag了
flag:

flag{abcdfghijk}

[UTCTF2020]zero

打开发现有套宝最爱的0宽,直接tokeii爷网站梭。
在这里插入图片描述
flag:

flag{whyNOT@sc11_4927aajbqk14}

[MRCTF2020]PYFLAG

三张图片的末尾,存在一部分zip的十六进制,根据顺序将其连在一起
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
得到一个新的zip,进行密码的爆破
在这里插入图片描述
密码为1234
打开后存在一个hint,提示:

我用各种baseXX编码把flag套娃加密了,你应该也有看出来。
但我只用了一些常用的base编码哦,毕竟我的智力水平你也知道...像什么base36base58听都没听过
提示:0x10,0x20,0x30,0x55

以及flag文件

G&eOhGcq(ZG(t2*H8M3dG&wXiGcq(ZG&wXyG(j~tG&eOdGcq+aG(t5oG(j~qG&eIeGcq+aG)6Q<G(j~rG&eOdH9<5qG&eLvG(j~sG&nRdH9<8rG%++qG%__eG&eIeGc+|cG(t5oG(j~sG&eOlH9<8rH8C_qH9<8oG&eOhGc+_bG&eLvH9<8sG&eLgGcz?cG&3|sH8M3cG&eOtG%_?aG(t5oG(j~tG&wXxGcq+aH8V6sH9<8rG&eOhH9<5qG(<E-H8M3eG&wXiGcq(ZG)6Q<G(j~tG&eOtG%+<aG&wagG%__cG&eIeGcq+aG&M9uH8V6cG&eOlH9<8rG(<HrG(j~qG&eLcH9<8sG&wUwGek2)

hint 的意思应该是该部分的flag分别为base16,32,64,85加密后得到的。
网上的脚本应该都是官方的,因此我自己写了个比较垃圾的脚本。。

import base64
import re

with open("flag.txt",'rb') as f:
    flag = f.read()
    
while True:
    f1=0  #标识符,判断是否判断完一次
    if b"MRCTF{" in flag:
        print(flag.decode())
        break
    if  f1==0 and re.match("^[0-9A-F=]+$",flag.decode()) is not None: #base16
        flag = base64.b16decode(flag)
        print(16)
        print(flag)
        f1=1
    if f1==0 and re.match("^[A-Z2-7=]+$",flag.decode()) is not None:  #base32
        flag = base64.b32decode(flag)
        print(32)
        print(flag)
        f1=1
    if f1==0 and re.match('^[A-Za-z0-9+/=]+$',flag.decode()) is not None:  #base64
        flag = base64.b64decode(flag)
        print(64)
        print(flag)
        f1 = 1
    if f1==0: #base85
        flag = base64.b85decode(flag)
        print(85)
        print(flag)

得到flag:
在这里插入图片描述
flag:

{Y0u_Are_4_p3rFect_dec0der}

[CFI-CTF 2018]webLogon capture

在这里插入图片描述
password字段就是flag

from urllib.parse import unquote
str='%20%43%46%49%7b%31%6e%73%33%63%75%72%33%5f%6c%30%67%30%6e%7d%20'

str_1=unquote(str,'utf-8')
print(str_1)

在这里插入图片描述
flag:

flag{1ns3cur3_l0g0n} 

粽子的来历

题目描述看的头疼
doc直接无法打开,用010打开发现存在报错
在这里插入图片描述
修改好后进行打开,发现存在行间距不同的古诗文。
在这里插入图片描述
尝试把1.5当作1,1的当作0,构造二进制字符串,进行进一步md5加密。
最后发现我是C.doc的是正确的。
在这里插入图片描述
flag:

flag{d473ee3def34bd022f8e5233036b3345}

[UTCTF2020]File Carving

修改文件后缀为zip,发现存在hidden_binary文件
利用010搜索找到flag
在这里插入图片描述
复制出来后,去掉不属于数字以及a-f小写字母的部分,得到flag
flag:

flag{2fbe9adc2ad89c71da48cabe90a121c0}

hashcat

通过010发现为一个doc文件,然后利用Passware Kit Forensic爆破打开,得到密码9919
在这里插入图片描述
然后发现打不开,因此根据题目,猜是别的office类型。
最后确认为ppt,在第7页存在一个flag,把文字颜色改为红色就可看到
在这里插入图片描述
flag:

flag{okYOUWIN}

[QCTF2018]X-man-A face

先补全二维码
(我用画图工具补的)
在这里插入图片描述
扫码得到

KFBVIRT3KBZGK5DUPFPVG2LTORSXEX2XNBXV6QTVPFZV6TLFL5GG6YTTORSXE7I=

直接出了
在这里插入图片描述
flag:

flag{Pretty_Sister_Who_Buys_Me_Lobster}

[watevrCTF 2019]Evil Cuteness

修改后缀为zip得到flag
在这里插入图片描述
flag:

flag{7h475_4c7u4lly_r34lly_cu73_7h0u6h}

[SCTF2019]电单车

直接用Audacity打开
在这里插入图片描述
长的为1,短的为0,取最中间的一段得到

0111010010101010011000100

然后发现说需要

PT2242信号:前面4bit表示同步码,中间的20bit表示地址码,后面的4bit表示功能码,最后一位是停止码。

因此flag为

flag{01110100101010100110}

[INSHack2017]sanity

签到?为什么会有这种题。。

flag{Youre_sane_Good_for_you}

[湖南省赛2019]Findme

1.png
看起来有点奇怪
在010里报crc错误
在这里插入图片描述
利用别人祖传的脚本爆破crc

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')
#高为:bytearray(b'\x00\x00\x01\xc5')

修改后得到正确的宽高
在这里插入图片描述
检查发现有两个字段缺少IDAT标识,需要将其补上
在这里插入图片描述
在这里插入图片描述
然后就可以正常打开图片了
利用SteghSlove发现存在一个二维码,直接扫描得到flag的一部分。
在这里插入图片描述
得到第一串

ZmxhZ3s0X3

2.png
文件尾存在大量别的文件,以及2000多个7z
在这里插入图片描述
但是直接用foremost出不了东西,因此考虑将7z改为pk,再进行打开
在这里插入图片描述
最终找到目标的flag部分
在这里插入图片描述

1RVcmVfcPK

3.png
该图片的crc看起来不对劲
在这里插入图片描述
正常图片的crc明显看起来多很多
在这里插入图片描述
因此将这些crc全部提取出来

a=['33','52','6c','5a','33','30','3d']
str=''
for i in a:
    str+=chr(int(i,16))
print(str)

得到结果

3RlZ30=

4.png
末尾有提示
在这里插入图片描述

cExlX1BsY=

5.png末尾同样存在提示
在这里插入图片描述

Yzcllfc0lN

然后要把这五串排列组合进行判断,最后得到flag的为

import re
from itertools import permutations
import base64

str=''
items = ['ZmxhZ3s0X3','3RlZ30=', '1RVcmVfc','Yzcllfc0lN', 'cExlX1BsY']

for p in permutations(items):
    str=p[0]+p[1]+p[2]+p[3]+p[4]
    try:
        flag=base64.b64decode(str)
        if b'flag{' in flag:
            print(flag)
    except:
        pass

在这里插入图片描述
flag:

flag{4_v3rY_sIMpLe_PlcTUre_steg}

voip

voip是一种语音通话技术,在wireshark里可以直接播放
在这里插入图片描述
然后flag就藏在里面
在这里插入图片描述
flag:

flag{9001IVR}

[GUET-CTF2019]soul sipse

wav文件利用Steghide直接梭出隐藏的文件
在这里插入图片描述
密码为空

steghide extract -sf /root/桌面/out.wav   

给了个微云地址去下载图片。打开图片发现文件头不对
在这里插入图片描述
修补文件头打开
在这里插入图片描述

\u0034\u0030\u0037\u0030\u000d\u000a\u0031\u0032\u0033\u0034\u000d\u000a

在这里插入图片描述
得到

4070
1234

结果为两数相加。
flag:

flag{5304}

[ACTF新生赛2020]剑龙

一看题目就是要用stegosaurus,但是还是按着hint的节奏做吧。
hint.zip里面有个txt,存在AAencode编码
在这里插入图片描述
直接工具解就完事
http://www.hiencode.com/aaencode.html
在这里插入图片描述
后面有用的key

welcom3!

hint.zip里的hh.jpg图片放入kali中利用steghide隐写解出得到密文
在这里插入图片描述
这段密文为des加密,密钥在备注里
在这里插入图片描述

想要flag吗?解出我的密文吧~
U2FsdGVkX1/7KeHVl5984OsGUVSanPfPednHpK9lKvp0kdrxO4Tj/Q==

然后就是得到一个已经知道的提示哈哈哈。 没啥用。
https://www.sojson.com/encrypt_des.html

因此直接用剑龙梭就可以了,python版本为(Python 3.7.6
在这里插入图片描述
flag:

flag{3teg0Sauru3_!1}

Business Planning Group

在结尾发现一个BPG
在这里插入图片描述
将该部分取出另存为bpg保存,利用bpg查看器得到图片里的信息

YnNpZGVzX2RlbGhpe0JQR19pNV9iM3R0M3JfN2g0bl9KUEd9Cg==

flag:

flag{BPG_i5_b3tt3r_7h4n_JPG}

[UTCTF2020]spectogram

切换成频谱图就看见flag了
在这里插入图片描述
在这里插入图片描述
flag:

flag{sp3tr0gr4m0ph0n3}

[UTCTF2020]sstv

装个sstv播放就有flag
kali里装

apt-get install qsstv

在这里插入图片描述
flag:

flag{6bdfeac1e2baa12d6ac5384cdfd166b0}

key不在这里

二维码扫码发现直接是bing搜索。
(尴尬的是直接就可以看到wp)
在这里插入图片描述

数字上做文章

from urllib.parse import unquote

str='10210897103375566531005253102975053545155505050521025256555254995410298561015151985150375568'
flag=''

while len(str)!=0:
    if int(str[:3]) < 127:
        flag+=chr(int(str[:3]))
        #print(str[:3])
        str=str[3:]
    else:
        flag+=chr(int(str[:2]))
        #print(str[:2])
        str = str[2:]
    #print(flag)
    print(unquote(flag,'utf-8'))

在这里插入图片描述
flag:

flag{5d45fa256372224f48746c6fb8e33b32}

[HDCTF2019]你能发现什么蛛丝马迹吗

经典取证题,用volatility直接取证

vol.py -f /root/桌面/memory.img imageinfo

在这里插入图片描述
判断为Win2003SP2x86的镜像
习惯性找带png后缀的文件,发现了flag.png

vol.py -f /root/桌面/memory.img --profile=Win2003SP2x86 filescan | grep -E "png"

在这里插入图片描述
把他dump下来

vol.py -f /root/桌面/memory.img --profile=Win2003SP2x86 dumpfiles -Q 0x000000000484f900 -D ./

得到一张二维码,扫描二维码得到

jfXvUoypb8p3zvmPks8kJ5Kt0vmEw0xUZyRGOicraY4=

当然直接解base解不出来,所以再找是不是被什么加密了。
看一下cmdscan,发现了点东西

vol.py -f /root/桌面/memory.img --profile=Win2003SP2x86 cmdscan

在这里插入图片描述
接下来dump进程,然后利用foremost分离,

vol.py -f /root/桌面/memory.img --profile=Win2003SP2x86 memdump -p 1992 -D ./

发现key和iv,采用aes解密得到flag
在这里插入图片描述
解密得到flag
在这里插入图片描述
flag:

flag{F0uNd_s0m3th1ng_1n_M3mory}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值