什么是sql注入?

通俗来讲就是通过 将可执行sql语句作为参数 传入查询sql 中,在sql编译过程中 执行了传入进来的恶意 sql,从而 得到 不应该查到或者不应该执行的sql语句,对网站安全,信息 造成了威胁。

简单sql注入的几种情况

1.第一种情况:闭合 where条件 的语句来进行 查询 不属于自己 的内容

select * from account where mobile = '';   

这是一条普通的sql语句。可见 where 条件  是按照  ''  英文引号 闭合来确定  条件是什么。

(1)假设我们传的参数是这样的  '' or 1= 1。则会闭合住引号从而导致查询出全库的数据来

http://local.com:8999/login/ajax-get-account?mobile='' or 1 = 1

2.第二种情况:通过  特殊sql句中注释符号   –  来强行将后面的查询条件省略

http://local.com:8999/login/ajax-get-account?mobile='' or 1 = 1-- sql

3.第三种情况:通过传各种异常参数 通过你的 报错信息来确定你的数据库名,表名,甚至查询语句都是什么

http://local.com:8999/login/ajax-get-account?mobile='' or 1=(SELECT count(1) from acc)

"message": "\n### Error querying database.  Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'busi.acc' doesn't exist\n### The error may exist in com/itshare/jj/module/Account/dao/IAccountDAO.java (best guess)\n### The error may involve com.itshare.jj.module.Account.dao.IAccountDAO.getAccountsByMobile-Inline\n### The error occurred while setting parameters\n### SQL: select * from account.account where mobile = '' or 1=(SELECT count(1) from acc) and status = 0\n### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'business.acc' doesn't exist\n; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'business.acc' doesn't exist",

这是这次操作报出来的异常信息。能看出查询语句。库名,表名。

4.第四种情况:指定多条语句,通过闭合参数里面的   英文引号  + ; + 另一句sql + ; + – (忽略后面语句)

例如 :

select * from account.account where mobile = '' or 1 = 1;update account set status = 1;-- in and status = 0

目前我们系统用的是  mybatis,我们主要用他的预编译功能来避免上述问题,预编译之后,上述查询语句就变成了

select * from account where mobile =  ; 

可见  参数处成了占位符,参数和 语句分离运行,参数仅作为字符串参数 替换占位符,不再将参数中的任何语句编译,从而达到不执行 参数中语句的功能。但是这就没问题了吗,当然不是

(1)mybatis中   如果变量占位符用的是  #{变量}  那么会执行预编译动作,生成不会被注入的sql语句,但是使用${变量} 不会进行预编译,从而还是会出现  sql注入问题。

(2)mybatis  中的  like语句很多时候可能会和 $ 一起出现  。比如:'%${finalId}%'   其实可以替换成   concat('%', #{finalId}, '%');   所以可以通过 搜索  %$ 或者  $%  强行让开发替换,这里举个例子:

@Select("select * from fl.fpe_sting where status=1 and final_ids like '%${finalId}%' and is_del =0  ")
List<FpeSettingPO> selectFinalId(@Param("finalId") String finalId);

可见例子:

http://local.com:8999/login/ajax-get-account?mobile=' or 1=1 or mobile like '%

传了这么个奇怪的参数,结果查出了所有的账号

5.第五种情况:利用没有验证的 like型 参数查出不属于自己的东西
http://local.com:8999/login/ajax-get-account?mobile=1

简要了解web安全之sql注入的更多相关文章

  1. WEB 安全之 SQL注入 < 三 > 提权

    SQL注入是一个比较“古老”的话题,虽然现在存在这种漏洞的站点比较少了,我们还是有必要了解一下它的危害,及其常用的手段,知己知彼方能百战不殆.进攻与防守相当于矛和盾的关系,我们如果能清楚了解 攻击的全 ...

  2. WEB 安全之 SQL注入 < 二 > 暴库

    SQL注入是一个比较"古老"的话题,虽然现在存在这种漏洞的站点比较少了,我们还是有必要了解一下它的危害,及其常用的手段,知己知彼方能百战不殆.进攻与防守相当于矛和盾的关系,我们如果 ...

  3. web安全学习(sql注入1)

    web安全学习(sql注入1) 一.简介 sql语句就是数据库语句,而sql注入就是用户将自己构造的恶意sql语句提交,然后服务器执行提交的危险语句.sql注入可能造成信息泄露以及服务器被控制等危害. ...

  4. mysql基础语法及拓展到web中的sql注入

    本来是想写下javaweb的mvc(tomcat, spring, mysql)的搭建,  昨天搭到凌晨3点, 谁知道jdbcTemplate的jar包不好使, 想死的心都有了, 想想还是休息一下, ...

  5. web安全之sql注入实例(5.0之前的)

    web安全之sql(5.0之前)注入实例 5.0之前的数据库没有information库. 所以这里需要运用的是load_file()函数来获取信息. 1.判断是否有sql注入,用and 1=1 和 ...

  6. WEB 安全之 SQL注入<一> 盲注

    SQL注入是一个比较"古老"的话题,虽然现在存在这种漏洞的站点比较少了,我们还是有必要了解一下它的危害,及其常用的手段,知己知彼方能百战不殆.进攻与防守相当于矛和盾的关系,我们如果 ...

  7. Web安全 之 SQL注入

    随着B/S模式应用开发的发展,使用这种模式编写的应用程序也越来越多.相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患.用户可以提交一段数据库查询代码,根据 ...

  8. web安全之SQL注入

    一.sql注入是一种将sql代码添加到输入参数中 传递到sql服务器解析并执行得一种攻击手法 例: $sql = "SELECT * FROM goods WHERE Id = 1" ...

  9. 【渗透攻防WEB篇】SQL注入攻击初级

    前言不管用什么语言编写的Web应用,它们都用一个共同点,具有交互性并且多数是数据库驱动.在网络中,数据库驱动的Web应用随处可见,由此而存在的SQL注入是影响企业运营且最具破坏性的漏洞之一,这里我想问 ...

随机推荐

  1. mongodb download

    https://www.mongodb.org/dl/win32/x86_64-2008plus-ssl

  2. 13Flutter页面布局 Wrap组件

    /* Flutter页面布局Wrap组件: Wrap可以实现流布局,单行的Wrap跟Row表现几乎一致,单列的Wrap则跟Row表现几乎一致. 但Row与Column都是单行单列的.Wrap则突破了这 ...

  3. leetcode刷题-559. Maximum Depth of N-ary Tree

    题目: https://leetcode.com/problems/maximum-depth-of-n-ary-tree/description/ n-ary-tree的数据结果表示 // Defi ...

  4. jquery中的$(document).ready(function(){})和$(window).load()比较

    1.执行时间 window.onload()即jquery写法中的$(window).load(function(){})必须等到页面内包括图片的所有元素加载完毕后才能执行. $(document). ...

  5. Spring A 标签链接使用

    1.示例 <a th:href="@{/edit/{id}(id=${user.id})}">修改</a> 以@开头前面的{id}是占位符,后面的(id=$ ...

  6. jdbc配置及使用测试

    源码:https://github.com/xiaostudy/jdbc_test1 这是没有使用连接池的 目录 创建的sql语句create.sql DROP TABLE IF EXISTS t_u ...

  7. 记录下为了玩 docker 安装 CentOS 7 最简化版后遇到的一些问题

    今天我的腾讯云服务器在使用docker安装ElasticSearch和Kibana的时候内存不够,安装完直接卡死.所以无奈只能在本地上跑VMWare安装CentOS7来运行测试. 从阿里云镜像地址:h ...

  8. linux_mysql学习系列

    Linux&shell系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 网站架构系列文章:http://www.cnblogs.co ...

  9. jdk1.8 Maven 的安装教程

    1.下载java1.8    URL:    http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-213315 ...

  10. quartz报错 org.quartz.impl.StdSchedulerFactory.

    quartz任务执行报错 Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFa ...