西电CTF平台——NewYear CTF 2025 WriteUP
Misc
猜谜
sublime text打开,第一反应肯定是零宽字符隐写,不过试了好久都没有结果。再看字符的规律,只有<0x2004>、<0x2005>、<0x2006>三种,,猜测有没有可能是摩斯密码,一个代表.,一个代表-,一个代表/。转换一下..../....-/.--./.--./-.--/..--.-/-././.--/..--.-/-.--/./.-/.-./-.-.--/-.-.--,解码得到H4PPY_NEW_YEAR!!。

包上flag提交即可。
進撃の巨人
拿到一个jpg文件和不知后缀的文件。拿到图片的第一反应就是kali里一顿梭,却没有任何结果。再对不知后缀的文件进行处理,用file判断是个数据流,用binwalk判断没有隐藏文件,没有任何头绪了。最后才知道需要用到VeraCrypt软件,key.jpg是加载的密钥。加载得到流量包。

导出http对象。

打开encrypted_new_year.txt。

base64解码得到flag。

Web
新年快乐,红包拿来
查看页面源代码,看到有个/src目录。

访问一下,拿到代码。

美化一下。
from fastapi import FastAPI, Request
from fastapi.responses import HTMLResponse
from jinja2 import Environment, BaseLoader
import uvicorn
import os
app = FastAPI()
FLAG = os.getenv('FLAG', 'flag{test}')
class SafeEnvironment(Environment):
def __init__(self):
super().__init__(loader=BaseLoader())
def is_safe_attribute(self, obj, attr, value):
if attr.startswith('__'):
return False
return True=
@app.get(\"/\", response_class=HTMLResponse)
async def index():
return '''
<h3>小明过年要红包,越多越好,你打算给他多少钱?</h3>
<form method=\"GET\" action=\"/render\">
<input type=\"text\" name=\"template\">
<input type=\"submit\" value=\"发红包\">
</form>
<!--/src-->
'''
@app.get(\"/src\")
async def source():
with open(__file__, 'r') as f:
return f.read()
@app.get(\"/render\")
async def render(request: Request, template: str = ''):
if not template:
return {\"message\": \"请输入金额\"}
if len(template) >= 10:
return {\"message\": \"我没有这么多钱\"}
try:
env = SafeEnvironment()
result = env.from_string(template).render()
if float(result) > 1000000000000000000000000000000000:
return {\"message\": f\"{result}, 哇!这么多!给你flag: {FLAG}\"}
return {\"result\": f\"你给了小明{result}元红包,小明没说谢谢就走了\"}
except Exception as e:
return {\"error\": str(e)}
if __name__ == '__main__':
uvicorn.run(app, host='0.0.0.0', port=8000)
需要满足两个条件才能拿到flag。一个是len(template) < 10;一个是float(result) > 1000000000000000000000000000000000,两个条件是互相矛盾的,不过可以采用科学计数法的形式来绕过。
输入10e99,成功拿到flag。

浙公网安备 33010602011771号