1.情报收集
1.1.黑客密室逃脱
按照题目中的要求访问各个页面中的信息,找到输出的密钥,同时找到加密的代码如下L

随后通过爆破和猜测找到了本题目的核心代码app.py文件
import os
from flask import Flask, request, render_template
from config import *
# author: gamelab
app = Flask(__name__)
# 模拟敏感信息
sensitive_info = SENSITIVE_INFO
# 加密密钥
encryption_key = ENCRYPTION_KEY
def simple_encrypt(text, key):
encrypted = bytearray()
for i in range(len(text)):
char = text[i]
key_char = key[i % len(key)]
encrypted.append(ord(char) + ord(key_char))
return encrypted.hex()
encrypted_sensitive_info = simple_encrypt(sensitive_info, encryption_key)
# 模拟日志文件内容
log_content = f"用户访问了 /secret 页面,可能试图获取 {encrypted_sensitive_info}"
# 模拟隐藏文件内容
hidden_file_content = f"解密密钥: {encryption_key}"
# 指定安全的文件根目录
SAFE_ROOT_DIR = os.path.abspath('/app')
with open(os.path.join(SAFE_ROOT_DIR, 'hidden.txt'), 'w') as f:
f.write(hidden_file_content)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/logs')
def logs():
return render_template('logs.html', log_content=log_content)
@app.route('/secret')
def secret():
return render_template('secret.html')
@app.route('/file')
def file():
file_name = request.args.get('name')
if not file_name:
return render_template('no_file_name.html')
full_path = os.path.abspath(os.path.join(SAFE_ROOT_DIR, file_name))
if not full_path.startswith(SAFE_ROOT_DIR) or 'config' in full_path:
return render_template('no_premission.html')
try:
with open(full_path, 'r') as f:
content = f.read()
return render_template('file_content.html', content=content)
except FileNotFoundError:
return render_template('file_not_found.html')
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0')
随后根据代码中的SAFE_ROOT_DIR找到密钥

其中核心代码为中间加解密部分,通过替换和等方法,得到如下的代码:
def simple_encrypt(sensitive_info, sensitive_info):
encrypted = bytearray()
for i in range(len(text)):
char = text[i]
key_char = key[i % len(key)]
encrypted.append(ord(char) + ord(key_char))
return encrypted.hex()
“d9d1c4d9e0ab8fcf97dc626b6b62a8ca97a992a8c1a09ca66999696da09996a4c8ab919f97de656d6cb2” = simple_encrypt(sensitive_info, sensitive_info)
最终得到解密代码如下
def simple_decrypt(encrypted_hex, key):
encrypted = bytearray.fromhex(encrypted_hex)
decrypted = []
for i in range(len(encrypted)):
key_char = key[i % len(key)]
original_char = encrypted[i] - ord(key_char)
decrypted.append(chr(original_char))
return ''.join(decrypted)
encrypted_hex = "d9d1c4d9e0ab8fcf97dc626b6b62a8ca97a992a8c1a09ca66999696da09996a4c8ab919f97de656d6cb2"
secret_key = "secret_key1575"
sensitive_info = simple_decrypt(encrypted_hex, secret_key)
print(sensitive_info)
2.数据分析
2.1.ezEvtx
根据题目意思找到访问文件的id直接找到唯一结果

2.2.flowzip
直接使用NetS工具,自动化找到流字节中的flag

3.密码破解
3.1.Enigma
原汤化原食,直接使用给定的参数化解即可。

4.逆向分析
4.1.ShadowPhases
本题是一个经典的if-else试题,直接通过动态调试找出代码中的str2在内存中的flag值(ps:当然了逆向代码也没什么不好只是容易掉头发)



5.漏洞挖掘分析
5.1.星际XML解析器
本题目考察对于XML注入的掌握,直接使用常用的XML注入方法对本题目实时注入
