什么是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. [Java复习] Spring IoC

    1. Spring bean的生命周期? 1. 对Bean进行实例化(相当于new) 对于BeanFactory 当客户向容器请求一个尚未初始化的bean(或初始化bean需要注入另外一个尚未初始化的 ...

  2. SQL语句中有关单引号、双引号和加号的问题

    字符串数据是用单引号包在外面的,而+号只是用来连接这些字符串的. 数据库里的字段是整型的时候不要加单引号,是字符串的时候要加,其它类型根据实际情况来,双引号就是用来拼接字符串的,单引号是sql文的固有 ...

  3. C++ STL 排序

    #include <iostream>#include <algorithm>#include <deque>#include <vector>#inc ...

  4. 利用subst命令将一个文件夹镜像成本地的一个磁盘

    企业里都是只有一个c盘,因为这样安全性好,性能也好 那么有时候,我们是需要其他的系统盘来做一些事情的,比如远程的时候需要带过去一个系统盘,这个时候,就可以用subset这个命令来解决这个问题. 叫镜像 ...

  5. MySQL 判断数据库和数据表是否存在

    MySQL 判断数据库和数据表是否存在 如何使用SQL查询语句,判断数据库和数据表是否存在? 1.判断数据库是否存在 查询SQL如下: select * from information_schema ...

  6. 使用sproto buff 的陷阱

    当sproto协议包中的数组元素,长度为0时,会出现接收异常.在没有调试断点的情况下,会停止接收其它协议.

  7. jackson 实体转json 为NULL或者为空不参加序列化【转载】

    原博客:https://www.cnblogs.com/yangy608/p/3936848.html 1.实体上 /** * 将该标记放在属性上,如果该属性为NULL则不参与序列化 * 如果放在类上 ...

  8. java新特性stream

    java新特性stream,也称为流式编程. 在学习stream之前先了解一下java内置的四大函数 第一种函数式函数,后面是lambda表达式写法 /*Function<String,Inte ...

  9. GxDlms编译

    目录 GxDlms编译 title: GxDlms编译 date: 2019/12/5 13:36:37 toc: true --- GxDlms编译 C++版本如果要编译动态库,项目>属性需要 ...

  10. redis的发布和订阅操作