首页 > 编程语言 >【第66课】Java安全&SPEL表达式&SSTI模版注入&XXE&JDBC&MyBatis注入

【第66课】Java安全&SPEL表达式&SSTI模版注入&XXE&JDBC&MyBatis注入

时间:2024-08-20 10:54:40浏览次数:10  
标签:JDBC Java 安全 SQL MyBatis 注入

免责声明

本文发布的工具和脚本,仅用作测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。

如果任何单位或个人认为该项目的脚本可能涉嫌侵犯其权利,则应及时通知并提供身份证明,所有权证明,我们将在收到认证文件后删除相关内容。

文中所涉及的技术、思路及工具等相关知识仅供安全为目的的学习使用,任何人不得将其应用于非法用途及盈利等目的,间接使用文章中的任何工具、思路及技术,我方对于由此引起的法律后果概不负责。

#知识点:
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

在这里插入图片描述

JDBC(Java语言连接数据库操作)

在这里插入图片描述

1、采用Statement方法拼接SQL语句(没有预编译)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

安全写法

SQL语句占位符(?) + PrepareStatement预编译

MyBatis( mybatis是一个优秀的基于java的持久层框架,它内部封装了 jdbc)

MyBatis支持两种参数符号,一种是#,另一种是$,#使用预编译,$使用拼接SQL。(造成注入原因也是因为使用了$进行拼接)
在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

3、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解析功能允许外部实体引用时,攻击者可利用这一可引发安全问题的配置方式,实施任意文件读取、内网端口探测、命令执行、拒绝服务等攻击。

XMLReader

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

SAXReader

SAXBuilder

Unmarshaller

DocumentBuilder

 审计的函数
 1. XMLReader
 2. SAXReader
 3. DocumentBuilder
 4. XMLStreamReader
 5. SAXBuilder
 6. SAXParser
 7. SAXSource
 8. TransformerFactory
 9. SAXTransformerFactory
 10. SchemaFactory
 11. Unmarshaller
 12. XPathExpression

三、演示案例-Java安全-SSTI模版-Thymeleaf&URL

SSTI(Server Side Template Injection) 服务器模板注入, 服务端接收了用户的输入,将其作为 Web 应用模板内容的一部分,在进行目标编译渲染的过程中,执行了用户插入的恶意内容。

1、URL作视图

2、Velocity

3、Thymeleaf

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
其他语言参考:https://www.cnblogs.com/bmjoker/p/13508538.html

四、演示案例-Java安全-SPEL表达式-SpringBoot框架

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

1、Spring表达式

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
参考:https://www.jianshu.com/p/e3c77c053359

标签:JDBC,Java,安全,SQL,MyBatis,注入
From: https://blog.csdn.net/Lucker_YYY/article/details/141352138

相关文章

  • 【第67课】Java安全&JNDI&RMI&LDAP&五大不安全组件&RCE执行&不出网
    免责声明本文发布的工具和脚本,仅用作测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。如果任何单位或个人认为该项目的脚本可能涉嫌侵犯其权利,则应及时通知并提供身份证明,所有权证明,我们将在收到认证文件后删除相关内容。文中所涉......
  • 【第68课】Java安全&原生反序列化&SpringBoot攻防&heapdump提取&CVE
    免责声明本文发布的工具和脚本,仅用作测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。如果任何单位或个人认为该项目的脚本可能涉嫌侵犯其权利,则应及时通知并提供身份证明,所有权证明,我们将在收到认证文件后删除相关内容。文中所涉......
  • 在java中实现使用文件名称和文件路径从一个服务器保存文件到另一个服务器
    要在Java中实现从一个服务器下载文件并将其保存到另一个服务器的功能,你可以采用以下步骤:从源服务器下载文件。将文件保存到目标服务器。这里我们将使用Java的HttpURLConnection来处理HTTP请求,并使用FTP协议通过JSch或ApacheCommonsNet库将文件上传到另一台服务器。首先,你需......
  • Java单例模式
    定义单例模式(SingletonPattern)是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来访问该实例。这种模式的核心在于控制类的实例化过程,保证在任何时间点,一个类只有一个实例存在,并且这个实例可以被系统的所有其他部分通过一个公共的访问点访问。1、唯一实例:单......
  • 深入理解Java虚拟机(类加载机制)
    文章收录在网站:http://hardyfish.top/文章收录在网站:http://hardyfish.top/文章收录在网站:http://hardyfish.top/文章收录在网站:http://hardyfish.top/类加载机制类加载机制的过程是什么呢?JVM把描述类的数据从Class文件中加载到内存中,并对其进行校验,解析,初始化......
  • Java计算机毕业设计的学生宿舍管理系统(开题+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景:随着高等教育规模的不断扩大,学生宿舍作为学生日常生活与学习的重要场所,其管理水平直接关系到学生的生活质量与校园安全。传统的学生宿舍管理方式往往......
  • java计算机毕业设计中华美食菜谱系统设计与实现(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在中华大地,美食文化源远流长,博大精深,每一道菜肴都蕴含着丰富的历史底蕴与地方特色。随着信息技术的飞速发展,人们获取信息的方式日益多样化,但如何在浩......
  • java计算机毕业设计校园招聘管理系统(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着高等教育的普及与就业市场的日益竞争激烈,校园招聘已成为连接企业与高校人才的重要桥梁。然而,传统的校园招聘模式往往面临着信息不对称、流程繁琐......
  • java计算机毕业设计疫情期间的物业管理系统(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在新冠疫情全球蔓延的背景下,社区作为疫情防控的第一线,其管理水平与效率直接关系到居民的健康安全与社会的稳定。传统物业管理方式在面对突发公共卫生......
  • Java格式化
    //格式化输出publicclassMain{publicstaticvoidmain(String[]args){doubled=3.1415926;System.out.printf("%.2f\n",d);//显示两位小数3.14System.out.printf("%.4f\n",d);//显示4位小数3.1416}}Java的格式化功能......