type
status
date
slug
summary
tags
category
icon
password
回顾上次提到的模板引擎概念
模板引擎(这里特指用于Web开发的模板引擎)是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的HTML文档。
MVC
在概念中提及用户界面于业务数据分离,涉及一个概念,MVC.
MVC模式是指model(模型),view(视图),controller(控制器),MVC模式目的是将M和V进行代码解耦分离,从而提高复用性.
在MVC中,view-视图的概念想而易见,是用户直观所能看到的用户界面.
model-模型的概念和controller容易混淆,包括我一开始也是认为model就是数据模型,作为封装一些业务数据存在,例如pojo等,这里的混淆主要是未对controller和model的工作流程进行思考,其实仔细想一下就不难理解,contr控制器中并未承载业务逻辑,实际上就是作为中立存在联系view和model.
model-模型是指业务模型,代表业务逻辑和业务数据,三者的关系通俗来讲,model进行数据和业务处理把结果通过controller传递到view进行显示.
Apache Solr Velocity模板注入漏洞
Velocity是一个基于java的模板引擎(template engine),它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。它作为一款成熟的基于java的模板引擎,能够帮我们实现页面静态化,同时它将Java代码与网页分开,使网站在其生命周期内更加可维护,并为Java Server Pages(JSP)或PHP提供了可行的替代方案。
CVE-2019-17558
版本
Apache Solr 5.0.0到Apache Solr 8.3.1
漏洞原理
VelocityResponseWriter插件的初始化参数 params.resource.loader.enabled,用来控制是否允许参数资源加载器在Solr请求参数中指定模版,默认设置是false攻击者可通过访问Solar的admin页面(登录认证功能默认不开启),通过构造POST请求包,修改配置。,当用户设置为true时,攻击者可以通过构造一个恶意的请求,在服务器上进行命令执行,从而获取服务器的权限。
代码流程
http://ip:port/solr/victim/config,可以查看Core“victim”的相关配置,可以看到params.resource.loader.enabled参数的默认值为“false”
通过构造POST请求包访问隐藏的api接口可以开启设置
使用Payload注入Velocity模板即可执行任意命令
修复和防御
1.更新Apache Solr的官网版本.
2.params.resource.loader.enabled参数值设置为“false”并禁止通过访问api修改参数,或者更api参数路径.
3,使用WAF进行恶意http请求拦截,对用户输入的恶意参数进行过滤.