Mybatis注入漏洞及防范方法

这篇具有很好参考价值的文章主要介绍了Mybatis注入漏洞及防范方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言Mybatis注入是一种常见的安全漏洞,本文将介绍Mybatis注入的四种方式,并提供相应的安全防范方法。测试环境


测试环境使用以下配置:

  • Mysql:5.7

  • Springboot:2.1

  • Mybatis:3.5

数据库


在Mybatis数据库中创建了一个测试用的表"users",结构如下:

CREATE TABLE `users` (
  `uid` int(10) NOT NULL AUTO_INCREMENT,
  `uname` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL,
  `uage` int(10) NULL DEFAULT NULL,
  PRIMARY KEY (`uid`) USING BTREE
) ENGINE = MyISAM AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = Dynamic;
INSERT INTO `users` VALUES (1, 'Sentiment', 20);
INSERT INTO `users` VALUES (2, 'Shelter', 20);
INSERT INTO `users` VALUES (3, 'Tana', 18);

SQL注入的四种方式


#{}和${}

接口

java

List selectOne(@Param("uname") String uname);

配置

xml

测试

java

@GetMapping("/inject/1")
@ResponseBody
public List selectOne(@RequestParam("uname") String uname) {
    return userService.selectOne(uname);
}

在这种方式中,执行语句是 select * from users where uname = '${uname}',可以直接使用单引号闭合进行注入。例如,使用万能密码1' or '1'='1进行测试:

bash

http://127.0.0.1:8080/inject/1?uname=1' or '1'='1

安全防范

将 ${} 替换为 #{} ,使用预编译的方式可以有效避免SQL注入问题。

模糊查询


模糊查询中有三种方式,分别是:

select * from t_user where username like '%${mohu}%'
select * from t_user where username like "%"#{mohu}"%"
select * from t_user where username like concat('%',#{mohu},'%')

在第二种方式中,"%"#{mohu}"%"预编译前后的%是独立的,写成'%#{mohu}%'的形式会导致预编译时将 % 视为字符处理,从而导致报错。而如果不够经验,将 #改为$,如 '%${mohu}%' ,就会导致SQL注入问题。

In查询


当查询语句使用了in操作符时,只需要对in后面的内容进行闭合,即可绕过安全检查。

配置

xml

测试

例如,使用以下注入语句进行测试:

css

http://127.0.0.1:8080/inject/3?uid=1) or updatexml(1,concat(0x7e,(select database()),0x7e),1)--+

安全防范

为了防止In查询的注入问题,建议使用预编译方式,并严格验证和过滤传入的参数。

order by注入


order by注入的原理与In查询基本相同。

配置

xml

测试

例如,使用以下注入语句进行测试:

css

http://127.0.0.1:8080/inject/4?uid=1 and(updatexml(1,concat(0x7e,(select database())),0));

安全防范

为了防止order by注入问题,同样建议使用预编译方式,并对传入的参数进行严格验证和过滤。

综上所述,为了避免Mybatis注入问题,最好的方式是使用预编译方式,即将${}替换为#{},并对传入的参数进行验证和过滤。文章来源地址https://www.toymoban.com/news/detail-441677.html

到了这里,关于Mybatis注入漏洞及防范方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Web安全:SQL注入漏洞测试.

    SQL注入就是 有些 恶意用户在提交查询请求的过程中 将SQL语句插入到请求内容 中,同时程序的本身对用户输入的内容过于相信, 没有对用户插入的SQL语句进行任何的过滤 ,从而 直接被SQL语句直接被服务端执行 ,导致数据库的原有信息泄露,篡改,甚至被删除等风险。 SQL注

    2024年02月05日
    浏览(56)
  • 【网络安全】「漏洞原理」(二)SQL 注入漏洞之理论讲解

    严正声明:本博文所讨论的技术仅用于研究学习,旨在增强读者的信息安全意识,提高信息安全防护技能,严禁用于非法活动。任何个人、团体、组织不得用于非法目的,违法犯罪必将受到法律的严厉制裁。 【点击此处即可获取282G网络安全零基础入门学习资源】 信息搜集在

    2024年02月06日
    浏览(50)
  • Web安全:SQL注入漏洞测试(防止 黑客利用此漏洞.)

    SQL注入就是 有些 恶意用户在提交查询请求的过程中 将SQL语句插入到请求内容 中,同时程序的本身对用户输入的内容过于相信, 没有对用户插入的SQL语句进行任何的过滤 ,从而 直接被SQL语句直接被服务端执行 ,导致数据库的原有信息泄露,篡改,甚至被删除等风险。 SQL注

    2024年02月13日
    浏览(40)
  • 【网络安全】「漏洞原理」(一)SQL 注入漏洞之概念介绍

    严正声明:本博文所讨论的技术仅用于研究学习,旨在增强读者的信息安全意识,提高信息安全防护技能,严禁用于非法活动。任何个人、团体、组织不得用于非法目的,违法犯罪必将受到法律的严厉制裁。 SQL 注入(SQL Injection) 是一种常见的网络攻击技术,它利用应用程序

    2024年02月06日
    浏览(50)
  • web安全漏洞-SQL注入攻击实验

    实验目的 学习sql显注的漏洞判断原理 掌握sqlmap工具的使用 分析SQL注入漏洞的成因 实验工具 sqlmap是用python写的开源的测试框架,支持MySQL,Oracle,PostgreSQL,Microsoft SQL Server,Microsoft Access,IBM DB2,SQLite,Firebird,Sybase,SAP,MAXDB并支持6种SQL注入手段。 实验内容 SQL注入(SQL I

    2024年02月06日
    浏览(56)
  • 【网络安全】SQL注入漏洞的修复建议

    SQL注入是Web应用程序常见的安全漏洞之一,攻击者通过恶意构造的SQL查询语句,成功在应用程序的数据库中执行任意操作,导致数据泄露、篡改或其他安全问题。 本篇技术博客将详细介绍SQL注入漏洞的修复建议,包括过滤危险字符和使用预编译语句,通过具体的代码案例帮助

    2024年02月06日
    浏览(52)
  • Web安全 SQL注入漏洞测试.(可以 防止恶意用户利用漏洞)

    SQL注入就是 有些 恶意用户在提交查询请求的过程中 将SQL语句插入到请求内容 中,同时程序的本身对用户输入的内容过于相信, 没有对用户插入的SQL语句进行任何的过滤 ,从而 直接被SQL语句直接被服务端执行 ,导致数据库的原有信息泄露,篡改,甚至被删除等风险。 SQL注

    2023年04月20日
    浏览(51)
  • 【安全】mybatis中#{}和${}导致sql注入问题及解决办法

    使用mybatis的时候遇到了#{}和${}可能导致sql注入的问题 #{} 底层通过prepareStatement对当前传入的sql进行了预编译,一个 #{ } 被解析为一个参数占位符 ?; #{} 解析之后会将String类型的数据自动加上引号,其他数据类型不会 #{} 很大程度上可以防止sql注入(sql注入是发生在编译的过程

    2024年01月19日
    浏览(41)
  • SQL注入漏洞复现:探索不同类型的注入攻击方法

    这篇文章旨在用于网络安全学习,请勿进行任何非法行为,否则后果自负。  准备环境 sqlilabs靶场 安装:Sqli-labs靶场搭建(适合新手小白围观)_sqlilabs靶场搭建-CSDN博客   注入讲解 介绍         基于错误的注入(Error-based Injection)是一种 利用应用程序返回的错误信息来

    2024年02月11日
    浏览(44)
  • SQL 注入漏洞原理以及修复方法

    漏洞名称 :SQL注入 、SQL盲注 漏洞描述 :所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过

    2024年01月24日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包