什么是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. 04Flutter仿京东商城项目 首页商品列表布局

    Home.dart import 'package:flutter/material.dart'; import 'package:flutter_swiper/flutter_swiper.dart ...

  2. Qt编写自定义控件22-蚂蚁线

    一.前言 关于蚂蚁线控件,相信很多用过PS的人都知道,在选中某个区域以后,边上的线条会有一种动态流动的效果,这种效果就叫做蚂蚁线,百科的解释是:动物的一种本能现象,领头的蚂蚁以随机的路线走向食物或洞穴 ...

  3. 配置Xmanager远程登录

    1.修改/etc/gdm/custom.conf文件找到下面的语句:[security]AllowRemoteRoot=true[xdmcp]Enable=true修改custom.conf后,必须重 ...

  4. OPC API 简介

    ————————————————版权声明:本文为CSDN博主「lgbisha」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明.原文链接:https://blog. ...

  5. Vue Cli 3 初体验(全面详解)

    vue新出了 vue cli 3,并直接改名为 @vue/cli,今天就来盘他. 首先介绍等啰里啰嗦的就不写了,贴个link吧. Vue CLi3 github Vue CLi web 要是想先了解下 ...

  6. java面试考点-HashTable/HashMap/ConcurrentHashMap

    HashTable 内部数据结构是数组+链表,键值对不允许为null,线程安全,但是锁是整表锁,性能较差/效率低 HashMap 结构同HashTable,键值对允许为null,线程不安全, 默认初始 ...

  7. Linux系统下GDB调试

    GDB 一.gdb常用命令: 命令 描述 backtrace(或bt) 查看各级函数调用及参数 finish 连续运行到当前函数返回为止,然后停下来等待命令 frame(或f) 帧编号 选择栈帧 in ...

  8. Django soft-delete软删除

    在django中,实现这个功能很简单,我们采用一个字段用来保存删除的时间.若记录没有被删除,那么设置该值为None,如果被删除,那么设置时间为删除的时间. class BaseSchema(model ...

  9. Guava 工具类之joiner的使用

    joiner主要用于对字符串的连接,也可用于对map中key value的连接 public class JoinerTest { private static final List<Strin ...

  10. [转帖]redis监控工具汇总

    redis监控工具汇总 https://www.cnblogs.com/felixzh/p/11170143.html redis-stat redis-stat是一个比较有名的redis指标可视化的 ...