首页 > 数据库 >【SQL注入】代码安全审计经验分享

【SQL注入】代码安全审计经验分享

时间:2024-08-31 19:36:09浏览次数:11  
标签:审计 分享 JPA 拼接 参数 SQL 序列化 注入

一、MyBatis框架中的注入漏洞

Mybatis框架支持的CURD功能可以直接搜索XML文件中的${和${}拼接的SQL语句,如果SQL的参数可控,就可能造成注入风险。

另外,有的SQL语句使用的是注解开发,把SQL语句可以直接写在了代理接口方法上方,审计的时候可以将两种情况都注意一下,或许有不同的发现。

安全的方式应该是使用#号接收参数,但很多时候如数据库表的字段名,又只能使用$符接收参数。
白名单的方案是可以将数据库表的字段名维护为一个数组,再检查参数是否在数组内,经过拼接的payload就不能通过检查, 例如:对于排序,只用了到ASC、DESC中的一个,把这两做成白名单即可,SQL注入的payload不在这个名单中,在反序列化时就会被拦截。

二、JPA中的SQL注入

JPA受SpringBoot官方支持直接提供启动依赖,和MyBatis一样,JPA框架方便开发人员完成与数据库的各种交互操作。

对于JPA中的SQL注入,一般出现时使用的是+号直接拼接。

安全的方式应该用冒号或者问号进行参数绑定:

三、无法利用的SQL注入

在文章开头提到,如果SQL参数可控可能造成注入风险,即使直接拼接到SQL语句的参数可控,也并不意味着这个SQL注入漏洞可以被利用。

比如前端将JSON传送到后端后,会有一个反序列化的操作,将JSON串反序列化为目标类,期间会有一个数据类型转换过程。

查看如下两个字段在实体类的定义,发现是int类型,但是SQL注入的payload是字符串类型(形如”OR IF(SLEEP(5), 0, 1)--+"的字符串),数据类型不匹配,在反序列化这一步的数据类型转换就通过不了,因此这个注入漏洞并不能利用。
的参数可控,就可能造成注入风险。

原创 洞源实验室

标签:审计,分享,JPA,拼接,参数,SQL,序列化,注入
From: https://www.cnblogs.com/o-O-oO/p/18365799

相关文章

  • MySQL教程:从基础到实战
    引言MySQL是一个流行的开源关系型数据库管理系统(RDBMS),广泛应用于各种Web应用程序和服务器中。本教程将详细介绍MySQL的基础知识,并通过实战作业帮助你巩固所学内容。MySQL的作用?/为什么要学MySQL作为一款流行的开源关系型数据库管理系统(RDBMS),具有高效、可靠、易用和灵活的特......
  • 分享一个js 抢红包随机算法,其他语言思路也一样
    直接调用这个方法就行传递q(金额)和r(人数就行)保证人均最少一分钱当剩余金额大于80%的时候,会在金额20%的区间内取大红包随机分配;基础分配规则为,按照每人可以随机5次的要求,得出每次随机的金额,随机分给其中一人functionfen(q,r){//q=红包金额单位元,最小0.01r=分配人数if......
  • 20240831-PostgreSQL小课持续更新
    PostgreSQL小课专栏介绍PostgreSQL小课目前已累积了近21万字。小课最新的大纲:目前已完成大概95%的进度:(venv312)➜mypostgresgit:(dev)shscripts/word_statistics_pg_style.shFilename|Chinese|English......
  • 代码审计笔记
    渗透测试白盒:基于内部的测试,黑盒:基于外部的测试灰盒:既有功能点又有源代码在php文件包含:include\require代码审计:1.找关键函数2.全文通读文件包含:include、require漏洞:如何控制漏洞呢------传参点include('./inc.php');include("$_POST[1]")第八行:include$_REQUEST['t......
  • SQL注入
    SQL注入(SQLInjection)是一种网络攻击技术,攻击者通过在输入字段中注入恶意的SQL代码,使得应用程序执行非预期的SQL查询,进而绕过身份验证、读取、修改甚至删除数据库中的数据。SQL注入是由不安全的SQL查询引起的,通常是因为应用程序直接将用户输入拼接到SQL查询中,而没有对输入进行充分......
  • SQL Server高级进阶之索引碎片维护
    SQLServer高级进阶之索引碎片维护 一、产生原因及影响索引是数据库引擎中针对表(有时候也针对视图)建立的特别数据结构,用来帮助查找和整理数据,它的重要性体现在能够使数据库引擎快速返回查询结果。当对索引所在的基础数据表进行增删改时,若存储的数据进行了不适当的跨页(SQLServer......
  • 使用python基于fastapi发布接口(二)-连接mysql数据库查询数据
    上一章在这里操作MySQL数据库使用mysql-connector-python库安装mysql-connector-pythonpipinstallmysql-connector-python代码编写在原来代码基础上添加数据库连接配置fromtypingimportUnionfromfastapiimportFastAPIapp=FastAPI(......
  • Centos 7 制作MySQL 5.7 RPM包
    系统:Centos7.2 1、安装依赖包yuminstallmakegccrpm-buildrpmdevtools-yyuminstallmakecmakegccgcc-c++bisonlibaioncurses-develperlperl-DBIperl-DBD-MySQLperl-Time-HiResreadline-develnumactlzlib-develcurldevel 2、rpm工具相关路径mkdir......
  • MySQL字符集详解
    一、内容概述在MySQL的使用过程中,了解字符集、字符序的概念,以及不同设置对数据存储、比较的影响非常重要。不少同学在日常工作中遇到的“乱码”问题,很有可能就是因为对字符集与字符序的理解不到位、设置错误造成的。本文由浅入深,分别介绍了如下内容:字符集、字符序的基本概念......
  • MySQL怎么全局把一张表的数据回滚
    在数据库管理中,回滚操作是至关重要的功能之一。当我们执行了错误的操作,或者需要将数据恢复到某个之前的状态时,回滚操作可以帮助我们避免数据丢失和错误传播。本文将详细探讨在MySQL中如何全局回滚一张表的数据,包括使用事务、备份与恢复、触发器等多种方法,并提供相应的代码示例和详......