当前位置: 首页 > article >正文

2024春秋杯冬季赛-Misc部分WP

推荐LovelyForm取证工具

ez_forennsics手搓搓不出来文件,LovelyForm一把梭,太强了!!!

See anything in these pics?

拿到一个类似于二维码的图片,根据文件名提示Aztec,想到Aztec 条码,在线网站解码拿到密钥

解压压缩包后拿到jpg文件可以发现文件尾不正常

foremost分离文件拿到黑白图片,

爆破宽高拿到flag

enc

根据题目提示,直接爆破异或,拿到flag

def xor_brute_force(ciphertext):
    for i in range(256):  # 遍历所有可能的 ASCII 字符
        key = chr(i)
        result = ""
        for c in ciphertext:
            # 对密文中的每个字符和密钥进行异或操作
            result += chr(ord(c) ^ ord(key))
        print(f"Key: {key}, Result: {result}")


# 密文
ciphertext = "ys~xdg/m@]mjkz@vl@z~lf>b"
xor_brute_force(ciphertext)

压力大,写个脚本吧

压缩包递归爆破,密码在password中,不过需要base64解码,同时还要注意文件名在变化,写个脚本  

import zipfile
import base64
import os

def extract_zip(zip_path, password=None, extract_to='aaa'):
    """解压ZIP文件到指定目录"""
    try:
        # 确保解压目录存在,不存在则创建
        if not os.path.exists(extract_to):
            os.makedirs(extract_to)

        with zipfile.ZipFile(zip_path, 'r') as zip_ref:
            # 如果提供密码,则尝试使用密码解压
            if password:
                zip_ref.setpassword(password.encode('utf-8'))
            zip_ref.extractall(extract_to)  # 解压到指定目录
            print(f"成功解压: {zip_path} 到 {extract_to}")
    except Exception as e:
        print(f"解压失败: {zip_path}, 错误: {e}")

def decode_base64(password_file):
    """从文件中解码Base64密码"""
    try:
        with open(password_file, 'r') as f:
            encoded_password = f.read().strip()
        decoded_password = base64.b64decode(encoded_password).decode('utf-8')
        return decoded_password
    except Exception as e:
        print(f"读取或解码密码失败: {password_file}, 错误: {e}")
        return None

def main():
    # 假设所有文件都在同一个文件夹下
    current_dir = os.getcwd()  # 获取当前工作目录
    extract_to = os.path.join(current_dir, 'aaa')  # 解压目标目录为当前目录下的 'aaa'

    # 初始的ZIP文件为zip_100.zip
    zip_file = os.path.join(current_dir, 'zip_100.zip')
    
    while True:
        print(f"正在检查文件: {zip_file}")
        
        # 检查当前ZIP文件是否存在
        if os.path.exists(zip_file):
            print(f"正在处理文件: {zip_file}")
            
            # 解压当前ZIP文件
            if zip_file == os.path.join(current_dir, 'zip_100.zip'):
                # zip_100.zip不需要密码直接解压
                extract_zip(zip_file, extract_to=extract_to)
            else:
                # 获取对应的密码文件路径
                password_file = zip_file.replace('.zip', '_99.txt')
                if os.path.exists(password_file):
                    password = decode_base64(password_file)
                    if password:
                        extract_zip(zip_file, password, extract_to)
                    else:
                        print(f"跳过解压 {zip_file},因为无法获取密码")
                        break
                else:
                    print(f"没有找到密码文件: {password_file}")
                    break

            # 下一层压缩包的文件名为zip_xxx.zip,路径应当指向'aaa'目录
            next_zip_file = os.path.join(extract_to, zip_file.replace('.zip', '_99.zip').split(os.sep)[-1])

            # 打印调试信息,检查路径是否正确
            print(f"下一文件: {next_zip_file}")

            # 如果下一个ZIP文件不存在,退出
            if not os.path.exists(next_zip_file):
                print("没有找到下一个ZIP文件,解压结束。")
                break
            
            # 更新zip_file为下一个ZIP文件
            zip_file = next_zip_file
        else:
            print(f"{zip_file} 文件不存在,解压结束。")
            break

if __name__ == '__main__':
    main()

拿到flag-hint

PASSWORD+PASSWORD.png

怀疑flag是把所有的密码合并到一起,写个脚本  

import zipfile
import base64
import os

def extract_zip(zip_path, password=None, extract_to='aaa'):
    """解压ZIP文件到指定目录"""
    try:
        # 确保解压目录存在,不存在则创建
        if not os.path.exists(extract_to):
            os.makedirs(extract_to)

        with zipfile.ZipFile(zip_path, 'r') as zip_ref:
            # 如果提供密码,则尝试使用密码解压
            if password:
                zip_ref.setpassword(password.encode('utf-8'))
            zip_ref.extractall(extract_to)  # 解压到指定目录
            print(f"成功解压: {zip_path} 到 {extract_to}")
    except Exception as e:
        print(f"解压失败: {zip_path}, 错误: {e}")

def decode_base64(password_file):
    """从文件中解码Base64密码"""
    try:
        with open(password_file, 'r') as f:
            encoded_password = f.read().strip()
        decoded_password = base64.b64decode(encoded_password).decode('utf-8')
        return decoded_password
    except Exception as e:
        print(f"读取或解码密码失败: {password_file}, 错误: {e}")
        return None

def append_password_to_file(password, file_path="1.txt"):
    """将密码追加到1.txt文件"""
    try:
        with open(file_path, 'a') as f:
            f.write(password + "\n")  # 每个密码占一行
        print(f"密码 {password} 已添加到 {file_path}")
    except Exception as e:
        print(f"写入密码到文件失败: {file_path}, 错误: {e}")

def main():
    # 假设所有文件都在同一个文件夹下
    current_dir = os.getcwd()  # 获取当前工作目录
    extract_to = os.path.join(current_dir, 'aaa')  # 解压目标目录为当前目录下的 'aaa'

    # 创建 1.txt 文件,如果已存在则清空
    password_file_path = os.path.join(current_dir, "1.txt")
    if os.path.exists(password_file_path):
        os.remove(password_file_path)

    # 初始的ZIP文件为zip_100.zip
    zip_file = os.path.join(current_dir, 'zip_100.zip')
    
    while True:
        print(f"正在检查文件: {zip_file}")
        
        # 检查当前ZIP文件是否存在
        if os.path.exists(zip_file):
            print(f"正在处理文件: {zip_file}")
            
            # 解压当前ZIP文件
            if zip_file == os.path.join(current_dir, 'zip_100.zip'):
                # zip_100.zip不需要密码直接解压
                extract_zip(zip_file, extract_to=extract_to)
            else:
                # 获取对应的密码文件路径,密码文件的命名规则是 'password_数字.txt'
                current_number = int(zip_file.split('_')[1].split('.')[0])  # 获取当前zip文件的数字部分
                password_file = os.path.join(extract_to, f'password_{current_number}.txt')  # 构造密码文件的路径

                if os.path.exists(password_file):
                    password = decode_base64(password_file)
                    if password:
                        # 将密码添加到1.txt
                        append_password_to_file(password, password_file_path)
                        extract_zip(zip_file, password, extract_to)
                    else:
                        print(f"跳过解压 {zip_file},因为无法获取密码")
                        break
                else:
                    print(f"没有找到密码文件: {password_file}")
                    break

            # 下一层压缩包的文件名为zip_xxx.zip,路径应当指向'aaa'目录
            # 通过提取当前文件名中的数字部分递减
            current_number = int(zip_file.split('_')[1].split('.')[0])  # 获取当前zip文件的数字部分
            next_number = current_number - 1  # 递减数字
            next_zip_file = os.path.join(extract_to, f"zip_{next_number}.zip")  # 构造下一个ZIP文件的路径

            # 打印调试信息,检查路径是否正确
            print(f"下一文件: {next_zip_file}")

            # 如果下一个ZIP文件不存在,退出
            if not os.path.exists(next_zip_file):
                print("没有找到下一个ZIP文件,解压结束。")
                break
            
            # 更新zip_file为下一个ZIP文件
            zip_file = next_zip_file
        else:
            print(f"{zip_file} 文件不存在,解压结束。")
            break

if __name__ == '__main__':
    main()

 发现png文件头,不过这里文件头反了,逆序一下

def reverse_lines(file_path):
    """将文件中的所有行逆序,但保持每行内容的顺序不变"""
    try:
        # 读取文件的所有行
        with open(file_path, 'r') as f:
            lines = f.readlines()
        
        # 逆序所有行
        reversed_lines = lines[::-1]
        
        # 写回文件,覆盖原文件内容
        with open(file_path, 'w') as f:
            f.writelines(reversed_lines)
        
        print(f"文件 {file_path} 中的所有行已被逆序。")
    
    except Exception as e:
        print(f"操作失败: {e}")

# 调用函数,传入文件路径
file_path = '1.txt'  # 你要处理的文件路径
reverse_lines(file_path)

拿到二维码,扫描拿到flag

简单镜像提取

拿到流量包,分离文件得到俩个压缩包,解压拿到img镜像文件

可能是非预期了,直接在记事本打开拿到flag

flag{E7A10C15E26AA5750070EF756AAA1F7C}

ez_forensics

volatility文件扫描发现有7z和hint.txt,不过提取hint.txt后是空文件

尝试提取出7z,但是也是空的,工具的问题?

用LovelyForm尝试,成功导出7z压缩包,不过被加密

没有找到其他信息,尝试爆破,john爆了半天没爆出来,想到hint(hint的密文俩次rot就可以)

尝试hashdump

python2 vol.py -f ezforensics.raw --profile=Win7SP1x64 hashdump  

 拿到密码strawberries,解压压缩包拿到mobax的配置文件

如果这里是我的思路,肯定是去破解密钥,连ssh,那么密码在里面

这里就用到了一款对应的工具:github.comhttps://github.com/HyperSine/how-does-MobaXterm-encrypt-passwordhttps://github.com/HyperSine/how-does-MobaXterm-encrypt-password

如果像我这样,忽略掉主密钥的存在,去爆破ssh的秘密,那么就可以坐牢一下午了

如果注意到文件名,把文件名当作主密钥即可出flag

里面的内容base64转码即可


http://www.kler.cn/a/508059.html

相关文章:

  • 光伏储能电解水制氢仿真模型Matlab/Simulink
  • AWTK fscript 中的 输入/出流 扩展函数
  • ant design vue的级联选择器cascader的悬浮层样式怎么修改
  • 使用jupyter notebook没有正常打开浏览器的几种情况解决
  • RK3568平台(音频篇)lineout无声调试
  • qml LevelAdjust详解
  • Red Hat8:搭建FTP服务器
  • 基于单片机的智能生态鱼缸的设计
  • 异步任务与定时任务
  • 二百八十三、Java——IDEA中通过快捷键查看某一类的定义位置
  • Linux下的dev,sys和proc(TODO)
  • OpenCV阈值
  • 【C语言】_内存拷贝函数memcpy与memmove
  • Matplotlib基础
  • 【Elasticsearch】搜索类型介绍,以及使用SpringBoot实现,并展现给前端
  • 深度学习基础--GRU学习笔记(李沐《动手学习深度学习》)
  • 如何用ChatGPT玩转知识图谱?
  • NLP意图识别数据集处理流程
  • PyTorch 神经协同过滤 (NCF) 推荐系统教程
  • 【 MySQL 学习3】查询
  • 当当网书籍信息爬虫
  • 【教程】windows下使用docker部署hyperf框架
  • Java最常用的几种设计模式详解及适用业务场景
  • 论文阅读:Structure-Driven Representation Learning for Deep Clustering
  • Vue2+OpenLayers实现折线绘制功能(提供Gitee源码)
  • MySQL 的mysql_secure_installation安全脚本执行过程介绍