BUUCTF_刷题记录(二)

目录

[ACTF新生赛2020]base64隐写

[ACTF新生赛2020]music

[ACTF新生赛2020]NTFS数据流

[ACTF新生赛2020]outguess

[ACTF新生赛2020]swp

[ACTF新生赛2020]明文攻击

[MRCTF2020]CyberPunk

[[MRCTF2020]Hello_ misc](#[MRCTF2020]Hello_ misc)

[MRCTF2020]pyFlag

[MRCTF2020]Unravel!!

[MRCTF2020]不眠之夜

[MRCTF2020]你能看懂音符吗

[MRCTF2020]千层套路


[ACTF新生赛2020]base64隐写

点击跳转至题目

得到附件

脚本运行

flag{6aseb4_f33!}

[ACTF新生赛2020]music

点击跳转至题目

得到附件vip.m4a

放进010中发现有很多A1

使用二进制异或

得到了正常的音频

听音频得到:actfabcdfghijk

flag{abcdfghijk}

[ACTF新生赛2020]NTFS数据流

点击跳转至题目

下载附件得到

用WinRAR打开并解压,得到文件tmp,再次用WinRAR解压flag.rar

涉及NTFS流的都需要Win RAR解压

解压完之后,使用NtfsStreamsEditor工具扫描flag文件

导出文件,得到flag

[ACTF新生赛2020]outguess

点击跳转至题目

得到附件

mmm.jpg

查看属性发现备注

解密得到abc

flag.txt

在根据题目为outguess,可知是outguess隐写

outguess解密命令:

outguess -k 'key' -r 输入文件 输出文件

得到flag

[ACTF新生赛2020]swp

点击跳转至题目

下载附件并解压 得到wget.zip 再次解压 得到流量包

文件--导出对象--HTTP

在导出的文件中发现一个压缩包

第一种情况:用7-Zip打开压缩包--用记事本打开.flag.swp

找到flag

第二种情况:

使用其他压缩软件打开 发现需要密码 是伪加密

用010打开 将伪压缩文件恢复到未加密

修改后解压 用记事本打开.flag.swp 得到flag

[ACTF新生赛2020]明文攻击

点击跳转至题目

得到两个文件

题目提示是明文攻击,需要找和压缩包中相同的文件

将图片放到010,发现flag.txt文件,并且压缩包的文件头被修改了,将其修改回来

然后将图片分离,解压压缩包,得到flag.txt

对比两个flag.txt文件,发现CRC32是一样的,可以进行明文爆破

使用工具ARCHPR,选择攻击类型为明文

点击开始后,运行一段时间,再暂停就行,不用让它跑完

点击确定,保存压缩包

打开secret.txt文件,得到flag

ACTF{3te9_nbb_ahh8}

[MRCTF2020]CyberPunk

点击跳转至题目

运行程序 发现有个时间2020.9.17

更改时间

再次运行程序得到flag

[MRCTF2020]Hello_ misc

点击跳转至题目

得到两个附件

先看图片

先到Stegsolve.jar里,在Red0发现png图片数据,Save Bin保存图片为png文件

得到zip-password密码:!@#$%67*()-+

用010打开try to restore it.png,在末尾找到了PK,所以里面有zip文件

foremost分离

得到一个加密的压缩包,密码为:!@#$%67*()-+,得到out.txt

复制代码
def decode_msb2(data):
    """
    2位高位隐写 解码函数
    :param data: 隐写后的数字列表
    :return: 解码后的明文
    """
    bits = []
    for num in data:
        # 取每个数字的 最高2位 (右移6位)
        high2 = (num >> 6) & 0b11
        bits.append(f"{high2:02b}")
    
    # 拼接比特并按8位转字符
    bit_str = "".join(bits)
    result = []
    for i in range(0, len(bit_str), 8):
        byte = bit_str[i:i+8]
        if len(byte) == 8:
            result.append(chr(int(byte, 2)))
    
    return "".join(result)

def read_numbers_from_txt(file_path):
    """
    从txt文件中自动提取所有数字(无视逗号、空格、换行)
    """
    with open(file_path, 'r', encoding='utf-8') as f:
        content = f.read()
    
    # 提取所有数字(自动过滤符号、空格、换行)
    import re
    numbers = list(map(int, re.findall(r'\d+', content)))
    return numbers

if __name__ == "__main__":
    # 自动读取 out.txt 中的所有数字
    file_name = "out.txt"
    your_stego_data = read_numbers_from_txt(file_name)
    
    # 解码并输出结果
    decoded_text = decode_msb2(your_stego_data)
    print("✅ 从 out.txt 提取的数字:", your_stego_data)
    print("🔓 隐写解码结果:", decoded_text)

得到rar-passwd:0ac1fe6b77be5dbe

是flag.rar的解压密码

打开fffflag.docx,CTRL+A全选,改变文字颜色

https://github.com/jerrita/b64steg

python b64steg.py -f flag.txt -s output.txt

flag{He1Lo_mi5c~}

[MRCTF2020]pyFlag

点击跳转至题目

附件

放到010,发现每个图片的末尾都有一部分的zip数据

将zip数据按顺序组合,拼接在一起,保存为zip文件

发现需要密码

暴力破解

密文

提示

复制代码
#!/usr/bin/env python

import base64
import re

def baseDec(text,type):
    if type == 1:
        return base64.b16decode(text)
    elif type == 2:
        return base64.b32decode(text)
    elif type == 3:
        return base64.b64decode(text)
    elif type == 4:
        return base64.b85decode(text)
    else:
        pass

def detect(text):
    try:
        if re.match("^[0-9A-F=]+$",text.decode()) is not None:
            return 1
    except:
        pass
    
    try:
        if re.match("^[A-Z2-7=]+$",text.decode()) is not None:
            return 2
    except:
        pass

    try:
        if re.match("^[A-Za-z0-9+/=]+$",text.decode()) is not None:
            return 3
    except:
        pass
    
    return 4

def autoDec(text):
    while True:
        if b"MRCTF{" in text:
            print("\n"+text.decode())
            break

        code = detect(text)
        text = baseDec(text,code)

with open("flag.txt",'rb') as f:
    flag = f.read()

autoDec(flag)

MRCTF{Y0u_Are_4_p3rFect_dec0der}

[MRCTF2020]Unravel!!

点击跳转至题目

得到3个文件

JM.png

放进010查看,发现有压缩包

分离,解压压缩包,得到图片

图片名称是aes.png,已经提示我们跟AES有关

再看Look_at_the_file_ending.wav,名称提示我们要查看文件结尾

010查看,发现字符串

https://www.wgstart.com/help/docs117d.html

AES在线解密

得到win-win.zip解压密码:CCGandGulu

使用工具SilentEye

MRCTF{Th1s_is_the_3nd1n9}

[MRCTF2020]不眠之夜

点击跳转至题目

下载附件得到一堆碎片

用PS将图片拼接起来

MRCTF{Why_4re_U_5o_ShuL1an??}

[MRCTF2020]你能看懂音符吗

点击跳转至题目

010打开

修改文件头为:52617221

后缀名添加:rar

解压得到

解码

flag{thEse_n0tes_ArE_am@zing~}

[MRCTF2020]千层套路

点击跳转至题目

下载附件发现是一个嵌套加密的压缩包

用ai写一个脚本

复制代码
import os
import zipfile
import sys

def unzip_recursive(start_zip_path: str):
    """
    递归解压嵌套压缩包,密码 = 压缩包文件名(不带后缀)
    修复:所有文件解压到同一目录,避免路径过长
    """
    current_zip = start_zip_path
    # 所有解压都在当前脚本目录,不创建嵌套长路径(核心修复)
    base_dir = os.getcwd()

    while True:
        if not os.path.exists(current_zip):
            print(f"✅ 已无更多压缩包,解压完成!")
            break

        # 获取密码:文件名去掉.zip
        zip_filename = os.path.basename(current_zip)
        password = os.path.splitext(zip_filename)[0]
        print(f"\n📦 正在解压:{current_zip}")
        print(f"🔑 使用密码:{password}")

        try:
            # 解压到根目录,不创建嵌套文件夹(关键修复)
            with zipfile.ZipFile(current_zip, 'r') as zf:
                zf.setpassword(password.encode('utf-8'))
                zf.extractall(base_dir)  # 全部解压到当前目录
                print(f"✅ 解压成功")

            # 删除已经解压过的压缩包,避免干扰
            if os.path.exists(current_zip):
                os.remove(current_zip)

            # 查找目录中下一个.zip文件
            next_zip = None
            for file in os.listdir(base_dir):
                if file.lower().endswith('.zip'):
                    next_zip = os.path.join(base_dir, file)
                    break

            if not next_zip:
                print("\n🎉 所有嵌套压缩包已全部解压完成!")
                break

            current_zip = next_zip

        except zipfile.BadZipFile:
            print(f"❌ 错误:不是有效的 ZIP 文件")
            break
        except RuntimeError as e:
            print(f"❌ 解压失败:密码错误或文件损坏 → {e}")
            break
        except Exception as e:
            print(f"❌ 错误:{str(e)}")
            break

if __name__ == "__main__":
    print("=" * 50)
    print("      无限层级嵌套压缩包自动解压工具(修复路径过长)")
    print("=" * 50)
    
    first_zip = "0573.zip"  # 这里改成你的第一个压缩包
    if len(sys.argv) > 1:
        first_zip = sys.argv[1]

    unzip_recursive(first_zip)

得到一个qr.txt文件,文件名"qr"提示我们最终会是一个二维码

放到随波逐流,图片--RGB数据串转图片

扫一扫得到flag

相关推荐
0vvv01 天前
2026-NCTF-web-N-RustPICA
前端·ctf
yv_302 天前
ssti靶场练习(sstilabs,重庆橘子科技)
ctf·ssti
祁白_5 天前
Bugku:备份是一个好习惯
笔记·学习·web安全·ctf
蒲公英eric6 天前
攻防世界 misc题GFSJ0403-【intoU】
ctf·misc·攻防世界·音频题
kali-Myon8 天前
CTFshow-Pwn142-Off-by-One(堆块重叠)
c语言·数据结构·安全·gdb·pwn·ctf·
三七吃山漆9 天前
BUUCTF[极客大挑战 2019]Http
web安全·网络安全·ctf·极客大挑战
unable code10 天前
[HNCTF 2022 WEEK2]ez_ssrf
网络安全·web·ctf·1024程序员节
unable code10 天前
[NISACTF 2022]easyssrf
网络安全·web·ctf·1024程序员节
0vvv011 天前
md5值相同,但未计算md5的值不同的绕过
ctf