简要了解web安全之sql注入
什么是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 ")
|
可见例子:
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注入的更多相关文章
- WEB 安全之 SQL注入 < 三 > 提权
SQL注入是一个比较“古老”的话题,虽然现在存在这种漏洞的站点比较少了,我们还是有必要了解一下它的危害,及其常用的手段,知己知彼方能百战不殆.进攻与防守相当于矛和盾的关系,我们如果能清楚了解 攻击的全 ...
- WEB 安全之 SQL注入 < 二 > 暴库
SQL注入是一个比较"古老"的话题,虽然现在存在这种漏洞的站点比较少了,我们还是有必要了解一下它的危害,及其常用的手段,知己知彼方能百战不殆.进攻与防守相当于矛和盾的关系,我们如果 ...
- web安全学习(sql注入1)
web安全学习(sql注入1) 一.简介 sql语句就是数据库语句,而sql注入就是用户将自己构造的恶意sql语句提交,然后服务器执行提交的危险语句.sql注入可能造成信息泄露以及服务器被控制等危害. ...
- mysql基础语法及拓展到web中的sql注入
本来是想写下javaweb的mvc(tomcat, spring, mysql)的搭建, 昨天搭到凌晨3点, 谁知道jdbcTemplate的jar包不好使, 想死的心都有了, 想想还是休息一下, ...
- web安全之sql注入实例(5.0之前的)
web安全之sql(5.0之前)注入实例 5.0之前的数据库没有information库. 所以这里需要运用的是load_file()函数来获取信息. 1.判断是否有sql注入,用and 1=1 和 ...
- WEB 安全之 SQL注入<一> 盲注
SQL注入是一个比较"古老"的话题,虽然现在存在这种漏洞的站点比较少了,我们还是有必要了解一下它的危害,及其常用的手段,知己知彼方能百战不殆.进攻与防守相当于矛和盾的关系,我们如果 ...
- Web安全 之 SQL注入
随着B/S模式应用开发的发展,使用这种模式编写的应用程序也越来越多.相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患.用户可以提交一段数据库查询代码,根据 ...
- web安全之SQL注入
一.sql注入是一种将sql代码添加到输入参数中 传递到sql服务器解析并执行得一种攻击手法 例: $sql = "SELECT * FROM goods WHERE Id = 1" ...
- 【渗透攻防WEB篇】SQL注入攻击初级
前言不管用什么语言编写的Web应用,它们都用一个共同点,具有交互性并且多数是数据库驱动.在网络中,数据库驱动的Web应用随处可见,由此而存在的SQL注入是影响企业运营且最具破坏性的漏洞之一,这里我想问 ...
随机推荐
- mongodb download
https://www.mongodb.org/dl/win32/x86_64-2008plus-ssl
- 13Flutter页面布局 Wrap组件
/* Flutter页面布局Wrap组件: Wrap可以实现流布局,单行的Wrap跟Row表现几乎一致,单列的Wrap则跟Row表现几乎一致. 但Row与Column都是单行单列的.Wrap则突破了这 ...
- leetcode刷题-559. Maximum Depth of N-ary Tree
题目: https://leetcode.com/problems/maximum-depth-of-n-ary-tree/description/ n-ary-tree的数据结果表示 // Defi ...
- jquery中的$(document).ready(function(){})和$(window).load()比较
1.执行时间 window.onload()即jquery写法中的$(window).load(function(){})必须等到页面内包括图片的所有元素加载完毕后才能执行. $(document). ...
- Spring A 标签链接使用
1.示例 <a th:href="@{/edit/{id}(id=${user.id})}">修改</a> 以@开头前面的{id}是占位符,后面的(id=$ ...
- jdbc配置及使用测试
源码:https://github.com/xiaostudy/jdbc_test1 这是没有使用连接池的 目录 创建的sql语句create.sql DROP TABLE IF EXISTS t_u ...
- 记录下为了玩 docker 安装 CentOS 7 最简化版后遇到的一些问题
今天我的腾讯云服务器在使用docker安装ElasticSearch和Kibana的时候内存不够,安装完直接卡死.所以无奈只能在本地上跑VMWare安装CentOS7来运行测试. 从阿里云镜像地址:h ...
- linux_mysql学习系列
Linux&shell系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 网站架构系列文章:http://www.cnblogs.co ...
- jdk1.8 Maven 的安装教程
1.下载java1.8 URL: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-213315 ...
- quartz报错 org.quartz.impl.StdSchedulerFactory.
quartz任务执行报错 Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFa ...