欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 培训 > 2024春秋杯冬季赛-Misc部分WP

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

2025/2/24 2:43:12 来源:https://blog.csdn.net/2301_79355407/article/details/145214401  浏览:    关键词: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 osdef 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_passwordexcept Exception as e:print(f"读取或解码密码失败: {password_file}, 错误: {e}")return Nonedef main():# 假设所有文件都在同一个文件夹下current_dir = os.getcwd()  # 获取当前工作目录extract_to = os.path.join(current_dir, 'aaa')  # 解压目标目录为当前目录下的 'aaa'# 初始的ZIP文件为zip_100.zipzip_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},因为无法获取密码")breakelse: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_fileelse:print(f"{zip_file} 文件不存在,解压结束。")breakif __name__ == '__main__':main()

拿到flag-hint

PASSWORD+PASSWORD.png

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

import zipfile
import base64
import osdef 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_passwordexcept Exception as e:print(f"读取或解码密码失败: {password_file}, 错误: {e}")return Nonedef 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.zipzip_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.txtappend_password_to_file(password, password_file_path)extract_zip(zip_file, password, extract_to)else:print(f"跳过解压 {zip_file},因为无法获取密码")breakelse: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_fileelse:print(f"{zip_file} 文件不存在,解压结束。")breakif __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转码即可

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词