Day66:WEB攻防-Java安全SPEL表达式SSTI模版注入XXEJDBCMyBatis注入

目录

JavaSec搭建

Hello-Java-Sec搭建

Java安全-SQL注入-JDBC&MyBatis

Java安全-XXE注入-Reader&Builder

Java安全-SSTI模版-Thymeleaf&URL

Java安全-SPEL表达式-SpringBoot框架


知识点:

1、Java安全-SQL注入-JDBC&MyBatis

2、Java安全-XXE注入-Reader&Builder

3、Java安全-SSTI模版-Thymeleaf&URL

4、Java安全-SPEL表达式-SpringBoot框架

JavaSec搭建

项目下载地址:https://github.com/bewhale/JavaSec

使用java8运行jar文件

Hello-Java-Sec搭建

java8 -jar javasec-1.11.jar

Java安全-SQL注入-JDBC&MyBatis

Java操作数据库的三种方式:JDBC,MyBatis,Hibernate

-Hibernate

Hibernate是一个Java持久化框架,它提供了一种将对象映射到关系数据库表的机制。通过Hibernate,开发人员可以使用面向对象的方式来操作数据库,而不需要编写复杂的SQL语句。

Hibernate的核心思想是对象关系映射(Object-Relational Mapping,ORM),它将Java对象和数据库表之间建立了映射关系,使开发人员可以通过操作Java对象来实现对数据库的操作,而无需直接操作SQL语句。

Hibernate提供了一系列的API和工具,用于处理对象的持久化、查询、缓存和事务管理等方面。它还提供了一个强大的查询语言HQL(Hibernate Query Language),类似于SQL语法,但更加面向对象。

使用Hibernate可以简化开发过程,提高效率,并且具有良好的跨数据库兼容性。它是Java开发中最流行的ORM框架之一,被广泛应用于企业级应用程序的开发中。
Hibernate作为一个成熟的框架,在安全性方面表现良好,并且经过了广泛的安全测试和修复。

-JDBC
1、采用Statement方法拼接SQL语句
2、PrepareStatement会对SQL语句进行预编译,但如果直接采取拼接的方式构造SQL,此时进行预编译也无用。
3、JDBCTemplate是Spring对JDBC的封装,如果使用拼接语句便会产生注入
安全写法:SQL语句占位符(?) + PrepareStatement预编译

-MyBatis
MyBatis支持两种参数符号,一种是#,另一种是$,#使用预编译,$使用拼接SQL。
1、order by注入:由于使用#{}会将对象转成字符串,形成order by "user" desc造成错误,因此很多研发会采用${}来解决,从而造成注入.
2、like 注入:模糊搜索时,直接使用'%#{q}%' 会报错,部分研发图方便直接改成'%${q}%'从而造成注入.
3、in注入:in之后多个id查询时使用 # 同样会报错,从而造成注入.

-代码审计案例:inxedu后台MyBatis注入

JDBC:Java语言连接数据库操作

方式一:采用Statement方法拼接SQL语句(没有预编译)

URL编码解码平台:https://tool.chinaz.com/tools/urlencode.aspx

updatexml(1,concat(0x7e,(SELECT user()),0x7e),1) 

  • 将一个波浪符(~)与当前用户的用户名拼接起来,并将该值作为XML节点的新值更新到XML文档中。
  • 括号中的concat(0x7e,(SELECT user()),0x7e)表示将波浪符与当前用户的用户名连接起来。
  • 0x7e是一个十六进制数,表示的是一个特定的 ASCII 字符,即波浪符(~)。

方式二:PrepareStatement会对SQL语句进行预编译,但如果直接采取拼接的方式构造SQL,此时进行预编译也无用。

这种方式不能避免SQL语句的拼接

JDBCTemplate是Spring对JDBC的封装,如果使用拼接语句便会产生注入

安全写法:SQL语句占位符(?) + PrepareStatement预编译

事实证明,最框架的不安全使用会造成SQL注入漏洞

大型网站不用想,小型网站有测试的价值

MyBatis( mybatis是一个优秀的基于java的持久层框架,它内部封装了 jdbc)
MyBatis支持两种参数符号,一种是#,另一种是$,#使用预编译,$使用拼接SQL。(造成注入原因也是因为使用了$进行拼接)

order by 造成SQL注入:由于使用#{}会将对象转成字符串,形成order by “user” desc造成错误,因此很多研发会采用${}来解决,从而造成注入

这个SQL语句的目的是将0x7e以及当前用户的用户名插入到指定的XML字段中,从而执行恶意操作或泄露敏感信息。

  • 第一个参数是要更新的XML字段
  • 第二个参数是XPath表达式  ~admin
  • 第三个参数是要更新的新值。

在这个例子中,使用了concat函数来拼接字符串,包括特殊字符0x7e(波浪符)以及查询当前用户的子查询select user()。

like 注入:模糊搜索时,直接使用’%#{q}%’ 会报错,部分研发图方便直接改成’%${q}%'从而造成注入.

in注入:in之后多个id查询时使用 # 同样会报错,从而造成注入.

白盒审计

在真实情况下,需要先分析源码里用了那种方式操作数据库(JDBC还是MyBatis),然后在针对性看代码写法,JDBC如果没用到安全写法,那么就容易出现问题。MyBatis看代码用了$还是#,#号就可以不用看了,$符号就看是不是在order by、like、in里面,在就恭喜了。

代码审计案例:inxedu后台MyBatis注入

1、配置安装源码

端口要与配置文件一致

默认/inxedu_war路径即可

启动项目后报错:

2、代码审计分析

通过java文件名判断应该是admin目录,登录后台。

直接把整个请求数据包放到txt给sqlmap跑即可

Java安全-XXE注入-Reader&Builder

XXE  ( XML  External Entity Injection ),  XML外部实体注入,当开发人员配置其XML解析功能允许外部实体引用时,攻击者可利用这一可引发安全问题的配置方式,实施任意文件读取、内网端口探测、命令执行、拒绝服务等攻击。

XML(可扩展标记语言)是一种用于表示和传输结构化数据的标记语言。它被设计成具有可读性强且可扩展的特点,常用于在不同系统之间进行数据交换和存储。

XML使用标签来描述数据的结构和含义。每个XML文档都由标签和内容构成,标签用于标识数据的元素,而内容则是元素的具体值或子元素。标签可以嵌套,形成层次结构,以便表示复杂的数据关系.

在代码审计时需要审计这些XML处理函数,这是一些与XML处理相关的类和接口的列表。它们通常在编程语言中的XML解析库或API中使用,用于读取、解析、转换和处理XML数据。

  • XMLReader:用于顺序读取XML文档的内容,并提供了一种基于事件的方式来处理XML数据。
  • SAXReader:一种用于读取和解析XML文档的SAX(Simple API for XML)解析器。
  • DocumentBuilder:用于创建DOM(Document Object Model)对象的接口,可以将XML文档加载到内存中进行操作。
  • XMLStreamReader:一种用于读取和解析XML文档的StAX(Streaming API for XML)解析器。
  • SAXBuilder:用于构建SAX解析器的类,用于读取和解析XML文档。
  • SAXParser:一种用于解析XML文档的SAX解析器。
  • SAXSource:用于将SAX事件作为输入源的对象,可以用于将SAX解析器与其他处理器(如XSLT转换器)进行连接。
  • TransformerFactory:用于创建Transformer对象的工厂类,可以将XML文档进行转换、处理和生成。
  • SAXTransformerFactory:用于创建SAXTransformerHandler对象的工厂类,可以在SAX事件处理期间进行XML转换和处理。
  • SchemaFactory:用于创建XML Schema验证器的工厂类,可以用于验证XML文档的结构和内容。
  • Unmarshaller:用于将XML文档解组为Java对象的接口,通常与Java的XML绑定技术(如JAXB)一起使用。
  • XPathExpression:用于执行XPath查询的接口,可以在XML文档中查找和选择特定的元素和属性。

 造成XXE常见的函数:

XXE常见Payload

如何配置XML允许引入外部解析实体?

在XML中启用外部实体解析需要进行相关配置。具体的配置方法可能因为使用的XML解析器和库的不同而有所差异。下面是一些通用的配置方法:

// 使用DocumentBuilderFactory:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", true);// 使用SAXParserFactory
SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", true);// 使用TransformerFactory
TransformerFactory factory = TransformerFactory.newInstance();
factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, false);

这些配置方法通常通过设置相关的特性或属性来实现。具体要设置的特性或属性名称可能因使用的解析器和库的不同而有所差异。上述示例中提到了一些常用的特性或属性名称,但具体的名称可能需要根据你使用的解析器和库进行适当的调整。

Java安全-SSTI模版-Thymeleaf&URL

SSTI(Server Side Template Injection) 服务器模板注入, 服务端接收了用户的输入,将其作为 Web 应用模板内容的一部分,在进行目标编译渲染的过程中,执行了用户插入的恶意内容。
1、URL作视图
2、Velocity
3、Thymeleaf
其他语言参考:https://www.cnblogs.com/bmjoker/p/13508538.html

URL作视图

Velocity

参考文章:https://www.cnblogs.com/bmjoker/p/13508538.html

Thymeleaf

Java安全-SPEL表达式-SpringBoot框架

SpEL Spring Expression Language )表达式注入 ,  是一种功能强大的表达式语言、用于在运行时查询和操作对象图,由于未对参数做过滤可造成任意命令执行。

1Spring表达式

2Spring反射绕过

参考:https://www.jianshu.com/p/e3c77c053359

Spring表达式

Spring反射绕过(黑名单过滤)

原有注入手段失效

被关键字段检测到

把关键字拆分组合绕过

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/750050.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

综合实验---Web---进阶版

实验配置: 7-1为内网Nginx服务器;7-2和7-3为Web服务器;7-4为网关服务器;7-5为外网客户机; yum安装Nginx;yum安装Mysql; 编译安装PHP;编译安装 由于我们Nginx和Mysql都是yum安装&…

java数据库关系型数据库设计(上)

目录 1.数据库设计的重要性及定义 1.数据库设计的重要性 1.失败的数据库设计造成的后果 2.优秀的数据库设计带来的好处 2.数据库设计的定义 2.数据库需求分析 1.需求分析的步骤 1.收集信息 2.标识实体 3.标识每个实体详细信息 4.标识实体之间的联系 1.数据库设…

架构实战:海量存储系统与分布式概念解析

在当今的互联网时代,海量数据的存储和处理成为了技术领域的热门话题。为了应对数据量的激增,传统的单体存储系统逐渐暴露出其局限性,而分布式系统因其高扩展性、高可用性和容错性等优势,成为了解决这一问题的关键技术。本文将通过…

同城预约上门服务APP小程序开发 打造快捷便利生活

随着移动互联网的快速发展,人们的生活方式正在发生深刻的变化。特别是在城市生活中,人们越来越依赖移动应用来解决日常生活中的各种问题。其中,同城预约上门服务APP正成为一种新型的生活服务平台,为人们提供了更加便利和快捷的服务…

腾讯云图形验证码的PHP示例

需要准备的 1.API密钥 SecretId 及 SecretKey 两部分, SecretId 用于标识 API 调用者的身份, SecretKey 用于加密签名字符串和服务器端验证签名字符串的密钥。 前往API密钥管理页面,即可进行获取 https://console.cloud.tencent.com/cam/ca…

idea将非UTF-8的properties修改为UTF-8编码的文件

需求背景 由于项目初始化时,properties文件的编码格式为ASCII编码格式,此时用idea打开该文件会默认展示UTF-8的编码内容,其中汉字可以正常展示,但是使用notepad打开却依旧时ASCII编码格式 idea配置 打开idea-setting-editor-f…

【MySQL】5. 数据类型

数据类型 1. 数据类型分类 2. 数值类型 2.1 tinyint类型 数值越界测试: mysql> use tt; Database changed mysql> create table t1(-> num tinyint-> ); Query OK, 0 rows affected (0.01 sec)mysql> insert into t1 values(-128); Query OK, 1 r…

代码随想录算法训练营第四十八天 | 121. 买卖股票的最佳时机

好忙这几天&#xff0c;偷个懒小做一点&#xff0c;后面有空补回来 题目链接&#xff1a;121. 买卖股票的最佳时机 - 力扣&#xff08;LeetCode&#xff09; class Solution { public:int maxProfit(vector<int>& prices) {int minrINT_MAX;int result0;for(int …

前端React篇之对 Redux 的理解,主要解决什么问题?Redux 原理及工作流程

目录 对 Redux 的理解&#xff0c;主要解决什么问题&#xff1f;Redux 原理及工作流程 对 Redux 的理解&#xff0c;主要解决什么问题&#xff1f; Redux是一个用于管理数据状态和UI状态的JavaScript应用工具&#xff0c;主要解决了在复杂JavaScript单页应用&#xff08;SPA&a…

飞桨科学计算套件PaddleScience

PaddleScience 是一个基于深度学习框架 PaddlePaddle 开发的科学计算套件&#xff0c;利用深度神经网络的学习能力和 PaddlePaddle 框架的自动(高阶)微分机制&#xff0c;解决物理、化学、气象等领域的问题。支持物理机理驱动、数据驱动、数理融合三种求解方式&#xff0c;并提…

c#学习记录

1.使用可以使转义字符无效 class study {static void Main() {string a "123\t123";Console.ReadLine();Console.WriteLine(a); }} 例如&#xff1a;string a "123\t123";&#xff0c;输出123\t123 2.字符的不可变性 例如&#xff1a; class study …

Day40:安全开发-JavaEE应用SpringBoot框架JWT身份鉴权打包部署JARWAR

目录 SpringBoot-身份鉴权-JWT技术 SpringBoot-打包部署-JAR&WAR 思维导图 Java知识点 功能&#xff1a;数据库操作&#xff0c;文件操作&#xff0c;序列化数据&#xff0c;身份验证&#xff0c;框架开发&#xff0c;第三方组件使用等. 框架库&#xff1a;MyBatis&…

SQLiteC/C++接口详细介绍之sqlite3类(十三)

返回目录&#xff1a;SQLite—免费开源数据库系列文章目录 上一篇&#xff1a;SQLiteC/C接口详细介绍之sqlite3类&#xff08;十二&#xff09; 下一篇&#xff1a;SQLiteC/C接口详细介绍之sqlite3类&#xff08;十四&#xff09;&#xff08;未发表&#xff09; 40.sqlite3…

深入探讨医保购药APP的技术架构与设计思路

随着移动互联网的发展&#xff0c;医疗保健行业也迎来了数字化转型的浪潮。医保购药APP作为医保体系数字化的一部分&#xff0c;其技术架构和设计思路至关重要。接下来&#xff0c;小编将为您讲解医保购药APP的技术架构与设计思路&#xff0c;为相关从业者提供参考和启发。 一、…

【知识简略】 简单理解SpringCloud微服务架构:服务注册发现、配置中心、限流、熔断、降级、网关路由等

主要介绍Nacos那一套。 目录 微服务架构1.服务注册发现2.配置中心3.限流、熔断、降级4.网关路由 微服务架构 Spring Cloud 微服务架构中&#xff0c;Nacos 提供了一系列核心组件和服务治理功能&#xff0c;以下是对 Nacos 中涉及的相关组件及其功能的详细解释&#xff1a; 1.…

51单片机基础篇系列-定时/计数器的控制工作方式

&#x1f308;个人主页&#xff1a;会编程的果子君 &#x1f4ab;个人格言:“成为自己未来的主人~” 定时/计数器的控制 80C51单片机定时/计数器的工作由两个特殊功能寄存器控制&#xff0c;TMOD用于设置其工作方式&#xff1a; 1.工作方式寄存器TMOD 工作方式寄存器TMO…

Rust学习02:推荐一本入门书,免费的

都说Rust的学习曲线很陡峭&#xff0c;试过才知雀实不容易。 先说我的基础&#xff0c;非科班&#xff0c;自学Python&#xff0c;写过几个小程序。 我买书从来不扣扣嗖嗖的&#xff0c;所以先啃了几本Rust的入门书&#xff0c;包括&#xff1a; Tim McNamara的《Rust实战》&am…

inux(CentOS)/Windows-C++ 云备份项目(项目文件操作工具类设计,完成项目基本文件操作-读写-压缩-目录操作)

文章目录 1. 项目文件操作工具类设计 1. 项目文件操作工具类设计 根据前面的分析&#xff0c;这个文件类的基本属性如下&#xff1a; 文件大小信息文件最后修改时间文件最后一次访问时间&#xff0c;方便文件的热点管理文件名称&#xff0c;需要从http 请求行上的uri中获取基…

P8780 [蓝桥杯 2022 省 B] 刷题统计 Python

[蓝桥杯 2022 省 B] 刷题统计 题目描述 小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天做 a a a 道题目&#xff0c;周六和周日每天做 b b b 道题目。请你帮小明计算&#xff0c;按照计划他将在第几天实现做题数大于等于 n n n 题? 输入格式 输入一…

JavaWeb(p135-p155)

分页查询 可以利用分页插件PageHelper 1.引入依赖 <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.2</version> </dependency>2.EmpMapper …