网络启示录2025撰写 - 火灾试验
·
3min
·
Juicecat
##审判大火
对于此练习,我们为我们提供了一个带有WebApp和包含源代码的ZIP文件的URL。
查看源代码,我们看到它是由UWSGI和Substisord管理的Docker映像内部的烧瓶WebApp
当我们访问网站时,我们会受到此屏幕的欢迎:
最后一行对我脱颖而出。在源代码中检查此页面的Jinja模板此处向我们显示了明显的解决方案:模板注入:
因此,我现在知道,模板注入可能是胜利的道路。我现在需要的是一个可以将有效载荷注入未逃脱的字段。幸运的是,我们实际上只有一个真正的领域进入了应用程序 - 一开始就进入了战士的用户名。 搜索源以寻找模板,我们看到另一个实例:
因此,这似乎是一个明显的方向。让我们将用户名设置为
_BRACE0_
玩游戏后,我们受到了这个屏幕的欢迎 -
查看数据,有几个有趣的信息:
1。应用程序路径:/app/venv/lib/python3.12/site-packages/flask/app.py
2。访问eval
和exec
之类的危险函数
3。会话数据显示注射工作的工作:'warrior_name': '_BRACE0_'
4。访问当前应用程序上下文:current_app': <HTB 'application.app'>
因此,要找到标志,我们可以:
open
通过__builtins__
函数os
模块- 各种Python执行功能
我最终得到了SSTI有效载荷``{{ url_for.globals.builtins.open('/app/flag.txt').read() }}BT10_,它只是读取标志。不幸的是,Web表单限制了字符名称的长度,因此我们需要实际使用burpsuite拦截请求并用有效载荷替换我们的名称:
然后,播放了序列后,我们被旗帜迎接了:)