CTF-sql-sql约束注入

create table user(
id int not null auto_increment,
username varchar(30) not null,
password varchar(30) not null,
primary key(id));
在现实的开发过程中,我们平常在各大网站上什么注册用户,登录用户什么的,就是与数据库进行交互的过程。如上图,有第一条命令进行创建了一个数据表,这个数据表,你就可以认为是用于你的用户名与密码储存的一个数据表(注意:在这个数据库中每条数据的大小都是有限制的,username与password都为30字节)。而所谓的注册操作,其本质就是数据插入的过程,如上图的第二条命令

如上图,我使用了三种方式来创造了用户admin,
- 第一种:insert into user values ('','admin','12345');
- 第二种:insert into user values ('','admin ','123456')
- 第三种:insert into user values ('','admin 1’,’1234567’);
按道理来说这三种创造方式所创造的用户名是不一样的,但是从最后的查询结果上来看却是一样的(否则只会出现第一条),为什么呢?
原因是:第一种与第二种区别在于admin后面加了许多空格,但是再查询的时候,mysql会自动忽略掉空格,所以在查询admin的时候,由于忽略了空格,就把带有空格的admin也带了出来。而第三种与前两种相比还多了一个‘1’,但是为什么‘1’没有插入进去呢,前面我已经提示到我所定义的用户数据大小是有限制的,由于‘1’所在的字节已经大于了30字节,所以mysql会自动截掉30字节之后的数据,即‘1’被截掉了。之后的查询就与第二种一样了。根据这样的原理,就可以造成sql约束注入。
例如:有一道题是要使用admin用户才能查到flag,但是admin用户的密码我们并不知道,此时我们就可以使用sql约束注入尝试一下,先注册一个用户:
username:admin 1,#空格尽量多,用来超过规定的字节大小
password:123456 #密码随便输
如果sql约束注入成功,超过规定字节大小的数据就会被截掉,即‘1’被截掉,那么就会在数据库中插入一个带空格的admin,由于在查询的时候会自动忽略掉空格,所以我们注册的冒牌admin就会起到与真正admin用户相同的作用,从而带出flag,%e6%b5%85%e6%98%93%e6%b7%b1
例题:bugku中的一道:http://123.206.31.85:49163/
CTF-sql-sql约束注入的更多相关文章
- [转]sql二次注入
01 二次注入原理 二次注入可以理解为,攻击者构造的恶意数据存储在数据库后,恶意数据被读取并进入到SQL查询语句所导致的注入.防御者可能在用户输入恶意数据时对其中的特殊字符进行了转义处理,但在恶意数据 ...
- SQL PRIMARY KEY 约束\SQL FOREIGN KEY 约束\SQL CHECK 约束
SQL PRIMARY KEY 约束 PRIMARY KEY 约束唯一标识数据库表中的每条记录. 主键必须包含唯一的值. 主键列不能包含 NULL 值. 每个表都应该有一个主键,并且每个表只能有一个主 ...
- SQL CREATE TABLE 语句\SQL 约束 (Constraints)\SQL NOT NULL 约束\SQL UNIQUE 约束
CREATE TABLE 语句 CREATE TABLE 语句用于创建数据库中的表. SQL CREATE TABLE 语法 CREATE TABLE 表名称 ( 列名称1 数据类型, 列名称2 数据 ...
- 扩展Exception,增加判断Exception是否为SQL引用约束异常方法!
在设计数据表时,如果将某些列设置为关联其它表的外键,那么如果对其进行增加.修改操作时,其关联表若没有相匹配的记录则报错,或者在对其关联表进行删除时,也会报错,这就是外键约束的作用,当然除了外键还有许多 ...
- sql server手工注入
sql server手工注入 测试网站testasp.vulnweb.com 1. http://testasp.vulnweb.com/showforum.asp?id=0 http://testa ...
- 基础篇 - SQL 的约束
基础篇 - SQL 的约束 约束 一.实验简介 约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性.唯一性.本节实验将在实践操作中熟悉 MySQL 中的几种约束. 二 ...
- SQL CHECK 约束
SQL CHECK 约束 CHECK 约束用于限制列中的值的范围. 如果对单个列定义 CHECK 约束,那么该列只允许特定的值. 如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限 ...
- SQL UNIQUE 约束
SQL UNIQUE 约束 UNIQUE 约束唯一标识数据库表中的每条记录. UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证. PRIMARY KEY 拥有自动定义的 ...
- SQL数据库约束、默认和规则
数据的完整性 实体完整性 又称为行完整性,即数据库中的所有行都具有一个非空且没有重复的主键值 MSSQL中通过唯一索引.PRIMARY KEY约束.UNIQUE约束.INDENTITY属性等来强制主键 ...
- mybatis 的sql语句及使用mybatis的动态sql mybatis防注入
由于看到写的比较详细的文档这里将之前的删掉了,只留下一些我认为能帮助理解的和关于动态sql及防注入的一些理解.文档链接 :mybatis官方文档介绍 <!-- 根据条件查询用户 --> ...
随机推荐
- 录入任务信息(Project)
<Project2016 企业项目管理实践>张会斌 董方好 编著 日历设置好了,就该录入任务了.当然在录入任务之前还要对任务进行一下面分解,就是一个项目,要分几个大步完成,每个大步又分几个 ...
- 当在myeclipse里发送邮件有错误时,不妨把环境都改成jdk的
当在myeclipse里发送邮件有错误时,不妨把环境都改成jdk的, 如果是jre的环境会出错,改成jdk的就行了.
- Sentry 开发者贡献指南 - SDK 开发(性能监控)
内容整理于官方开发文档 系列 Docker Compose 部署与故障排除详解 K8S + Helm 一键微服务部署 Sentry 开发者贡献指南 - 前端(ReactJS生态) Sentry 开发者 ...
- SpringBoot统一日志打印
统一日志打印 @Slf4j @Aspect @Component public class ControllerLog { private static final ThreadLocal<Lo ...
- Java容器源码学习--ArrayList源码分析
ArrayList实现了List接口,它的底层数据结构是数组,因此获取容器中任意元素值的时间复杂度为O(1),新增或删除元素的时间复杂度为O(N).每一个ArrayList实例都有一个capacity ...
- 【LeetCode】106. Construct Binary Tree from Inorder and Postorder Traversal 解题报告
[LeetCode]106. Construct Binary Tree from Inorder and Postorder Traversal 解题报告(Python) 标签: LeetCode ...
- 更快的Maven来了,我的天,速度提升了8倍!
周末被 maven-mvnd 刷屏了,于是我也下载了一个 mvnd 体验了一把.虽然测试的数据都是基于我本地项目,不具备普适性和权威性,但也足以说明问题.它的测试结果远远超出我的预期,下面一起来看. ...
- Dimension reduction in principal component analysis for trees
目录 问题 重要的定义 距离 支撑树 交树 序 tree-line path 重要的性质 其它 Alfaro C A, Aydin B, Valencia C E, et al. Dimension ...
- Salesforce LWC学习(三十九) lwc下quick action的recordId的问题和解决方案
本篇参考: https://developer.salesforce.com/docs/component-library/bundle/force:hasRecordId/documentation ...
- Hbase集群安装Version1.1.5
Hbase集群安装,基于版本1.1.5, 使用hbase-1.1.5.tar.gz安装包. 1.安装说明 使用外部Zookeeper集群而非Hbase自带zookeeper, 使用Hadoop文件系统 ...