点击蓝字
关注我们
始于理论,源于实践,终于实战
老付话安全,每天一点点
激情永无限,进步看得见
严正声明
本号所写文章方法和工具只用于学习和交流,严禁使用文章所述内容中的方法未经许可的情况下对生产系统进行方法验证实施,发生一切问题由相关个人承担法律责任,其与本号无关。
特此声明!!!
什么是服务器模版
服务器端模板是一种在服务器上执行的模板语言,用于生成动态内容。它允许开发者将数据与模板结合,生成HTML、XML或其他格式的内容。服务器端模板通常由服务器端渲染,然后将生成的内容发送到客户端浏览器显示。如,在使用Express框架和art-template模板引擎的Node.js 应用中,服务器端模板可以用来生成动态的HTML页面,其中包含从数据库获取的用户数据。有服务器端模板就有前端模版,它们有什么区别:
|
前端模板 |
服务器端模版 |
处理位置 |
在客户端浏览器上 |
在服务器上 |
处理时机 |
页面加载到浏览器后,JavaScript等前端技术会根据需要动态地渲染模板,将数据填充到模板中,生成最终的页面内容。 |
通常在用户请求页面时,服务器会先处理模板,将模板与数据结合,生成完整的HTML页面,然后发送给客户端浏览器。 |
技术栈 |
主要依赖于JavaScript和前端框架/库(如React、Vue.js 、Angular等)。 |
通常与服务器端编程语言(如Java、Python、PHP等)和框架(如Spring、Django、Express等)紧密相关。 |
工具 |
前端模板通常通过JavaScript库或框架提供的模板机制来实现,如React的JSX、Vue.js 的模板语法等 |
常见的服务器端模板引擎有JSP、Thymeleaf(Java)、Jinja2(Python)、EJS(Node.js )等。 |
模板引擎 |
Mustache:逻辑最少的模板引擎,支持多种编程语言,强调模板的可重用性和简洁性。 Handlebars:基于Mustache的模板引擎,增加了更多功能和灵活性,常用于JavaScript应用中。 EJS (Embedded JavaScript Templates):允许在HTML中嵌入JavaScript代码,适用于Node.js 和浏览器环境。 Pug (原名Jade):一种高效的、缩进驱动的模板引擎,适用于Node.js 环境。 Vue.js :虽然Vue.js 是一个前端框架,但它也提供了一种基于HTML的模板语法,用于声明式地将DOM绑定到应用的数据状态。 React JSX:虽然不是传统意义上的模板引擎,但JSX语法允许在JavaScript中编写类似HTML的结构,用于构建React组件。 |
JSP (JavaServer Pages):主要用于Java EE平台,允许开发者在HTML页面中嵌入Java代码。 Thymeleaf:一种现代的服务器端Java模板引擎,特别适合与Spring框架集成。 FreeMarker:功能强大的模板引擎,常用于Java平台,支持复杂的模板逻辑。 Velocity:Apache基金会下的开源模板引擎,适用于Web应用和电子邮件模板等。 Blade:Laravel框架中的模板引擎,以其简洁的语法和强大的功能著称。 ERB (Embedded Ruby):Ruby on Rails框架中的默认模板引擎,允许在HTML中嵌入Ruby代码。 Django Template Language:Python Django框架中的模板引擎,简单易用且功能强大。 |
Web应用程序可以使用模板引擎来生成动态内容,具体步骤如下:
-
选择合适的模板引擎:根据项目的需求和技术栈,选择适合的模板引擎。常见的模板引擎有Mustache、Handlebars、EJS等。
-
引入模板引擎库:在项目中引入所选模板引擎的库文件,可以通过下载文件、使用包管理工具(如npm、yarn等)或通过CDN链接等方式引入。
-
创建模板文件:创建一个或多个模板文件,用于定义页面的布局和结构。模板文件中可以包含静态内容和占位符,占位符用于表示动态内容的位置。
-
准备数据:在服务器端或客户端准备需要填充到模板中的数据。数据可以来自数据库、API请求或其他数据源。
-
渲染模板:使用模板引擎的API或方法,将数据与模板结合在一起,生成最终的动态内容。具体的渲染方法取决于所选模板引擎的使用方式。
-
输出结果:将渲染后的动态内容输出给客户端,可以是直接返回给浏览器的HTML页面,也可以是通过AJAX请求返回的JSON数据等。
-
处理用户交互:根据需要,在生成的动态内容中添加JavaScript代码,用于处理用户的交互操作,如点击事件、表单提交等
什么是服务器端模板注入
服务器端模板注入是指攻击者能够使用原生模板语法将恶意负载注入模板,然后在服务器端执行。
模板引擎通过将固定模板与易失性数据相结合来生成网页。当用户输入直接连接到模板中,而不是作为数据传入时,可能会发生服务器端模板注入攻击。这允许攻击者注入任意模板指令以操纵模板引擎,使之能够完全控制服务器。顾名思义,服务器端模板注入有效负载是在服务器端交付和评估的,这可能使它们比典型的客户端模板注入危险得多。因此,这种漏洞的成因是渲染函数在渲染时对用户输入的变量没有进行适当的处理,导致用户输入直接连接到模板中,从而改变了程序的执行逻辑。
服务器端模板注入有什么影响
对Web应用程序的影响
-
数据泄露:攻击者可以通过SSTI漏洞访问和窃取敏感数据,如用户个人信息、数据库凭证等。
-
功能篡改:攻击者可以操纵模板引擎,改变应用程序的行为,甚至添加恶意功能。
-
服务中断:通过注入恶意代码,攻击者可能导致应用程序崩溃或变得不可用,从而造成服务中断。
对服务器的影响
-
远程代码执行:在某些情况下,攻击者可能通过SSTI漏洞实现远程代码执行,完全控制后端服务器。
-
权限提升:攻击者可能利用SSTI漏洞提升其在服务器上的权限,从而访问更多系统资源。
-
进一步攻击的基础:一旦攻击者控制了服务器,他们可以利用这个立足点对内部基础设施进行进一步攻击,如横向移动到其他系统或网络。
服务器端模板注入漏洞是如何产生的
服务器端模板注入(SSTI)漏洞通常是由于Web应用程序在处理用户输入时没有进行适当的验证和清理,导致用户输入的恶意有效负载被错误地解释为模板指令,从而被模板引擎执行。
漏洞产生的详细过程:
1. 用户输入的处理
在许多Web应用程序中,用户输入的数据会被传递到模板引擎进行处理。模板引擎会将这些数据插入到预定义的模板中,以生成动态内容。例如,一个简单的模板可能包含以下内容:
<h1>Hello, {{ user.name }}!h1>
这里的{{ user.name }} 是一个占位符,用于插入用户的名字。
2. 缺乏适当的验证和清理
如果应用程序没有对用户输入进行适当的验证和清理,攻击者就可能注入恶意的有效负载。例如,如果攻击者输入以下内容:{{ 5 * 9 }},并且这个输入被直接传递到模板引擎,那么模板引擎可能会将这个表达式解释为模板指令,而不是普通文本。
3. 模板引擎执行恶意有效负载
当模板引擎处理这个恶意有效负载时,它会执行其中的指令。在上面的例子中,模板引擎会计算 5 * 9 的结果,并将其插入到模板中。然而,攻击者可以构造更复杂的恶意有效负载,以执行任意代码或访问敏感数据。
END
老付
欢迎扫码
关注我们
网络安全
原文始发于微信公众号(老付话安全):利用服务器端模板注入攻击
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论