实验室:使用文档的服务器端模板注入
从业者
这个实验室很容易受到伤害服务器端模板注入。要解决实验室,请确定模板引擎并使用文档来确定如何执行任意代码,然后删除Morale.txt
从卡洛斯的主目录中归档。
您可以使用以下凭据登录到自己的帐户:
内容管理器:C0NT3NTM4N4G3R
暗示
您应该尝试仅使用文档解决此实验室。但是,如果您真的被卡住了,可以尝试找到@albinowax众所周知的利用,可以用来解决实验室。
解决方案
- 登录并编辑产品描述模板之一。请注意,此模板引擎使用语法
$ {某种表达}
呈现页面上的表达式的结果。要么输入您自己的表达式,要么更改现有的表达式以参考不存在的对象,例如$ {Foobar}
,并保存模板。输出中的错误消息表明正在使用FreeMarker模板引擎。
- 研究FreeMarker文档,并发现附录包含一个常见问题解答,其中包含一个问题:“我可以允许用户上传模板,并且安全含义是什么?”。答案描述了如何
新的()
内置可能是危险的。
- 转到文档的“内置参考”部分,并找到
新的()
。本条目进一步描述了新的()
是安全问题,因为它可用于创建任意实现的任意Java对象TemplateModel
界面。
- 加载Javadoc
TemplateModel
班级,并查看“所有已知实施类”的列表。
- 观察到有一个班级叫
执行
,可用于执行任意外壳命令
试图构建自己的利用,或者找到@albinowax的利用在我们的研究页面上,并将其适应如下:
<#assign ex =“ freemarker.template.utility.execute”?new()> $ {ex(“ rm/home/carlos/morale.txt”)}}
- 删除您之前输入的无效语法,然后将新有效载荷插入模板中。
- 保存模板并查看产品页面以求解实验室。