码迷,mamicode.com
首页 > 数据库 > 详细

基于约束的SQL注入

时间:2020-08-11 15:54:29      阅读:91      评论:0      收藏:0      [点我收藏+]

标签:原理   varchar   约束   手动   并且   style   添加   长度   min   

# 漏洞原理

在谈论这种攻击手法之前,首先我们需要了解几个关键知识点。

1、在SQL中执行字符串处理时,字符串末尾的空格符将会被删除。换句话说,‘nocoriander’和‘nocoriander    ’几乎是等效的

例如下列代码,和使用用户名‘admin’结果是一样的

1 select * from users where username=nocoriander       ‘;

2、在所有的INSERT查询中,SQL都会根据varchar(n)来限制字符串的最大长度。也就是说,如果字符串的长度大于"n"个字符的话,那么仅使用字符串的前"n"个字符。比如特定列的长度约束为"5"个字符,那么在插入字符串"nocoriander"时,实际上只能插入字符串的前5个字符,即"nocor"。

# 攻击手法

首先创建数据库 test

技术图片

给test库添加users表,表中有两个字段username,password

技术图片

添加数据;username=admin;password=123456

技术图片

查看users表中的数据

技术图片

使用另一种方式查看表中的数据,

发现查看的结果是一样的

技术图片

接下来再次添加数据

username=‘admin            ‘;     注意:admin后面跟了空格

password=‘newpwd‘

技术图片

再次查看表中的数据

技术图片

给定条件,查看users表中,username为admin的数据

技术图片

# 漏洞危害

现在,如果使用用户名“admin”和密码“newpwd”登录的话,则所有搜索该用户名的SELECT查询都将返回第一个数据记录,也就是原始的数据记录。

这样的话,攻击者就能够以原始用户身份登录。

# 防御手段

1、将要求或者预期具有唯一性的那些列加上UNIQUE约束。

2、最好使用‘id‘作为数据库表的主键。并且数据应该通过程序中的id进行跟踪

3、可以用手动调整输入参数的限制长度

基于约束的SQL注入

标签:原理   varchar   约束   手动   并且   style   添加   长度   min   

原文地址:https://www.cnblogs.com/Bcxc/p/13475953.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!