基于约束的SQL攻击原理:
没有将字段设置为唯一字段,导致可以利用mysql会略去空格(前提:空格后面没有字符)这一特性,查询或插入敏感信息

先创建一个user表,定义三个字段(id、username、password)

CREATE TABLE user(
id INT NOT NULL auto_increment,
username VARCHAR(30) NOT NULL,
password VARCHAR(30) NOT NULL,
PRIMARY KEY(id));

id:int型,非空,自动增加
username:30个字符长度,非空
password:30个字符长度,非空
主键是id

向user表中插入数据,假设插入如下所示数据

insert into values ('','admin','123456');


常见的查询语句:

select * from user where username='admin';


但注意,我们使用select * from user where username='admin ';查询时,依旧可以查询到数据,为什么呢?因为,mysql会略去空格去查询

我们上面创建了一个表,username限制的位数是30位,但如果我们插入31位数据呢?它会自动将30位后面的数据自动删去
假设我们向user表中插入数据,Mysql先查询该数据是否存在于数据库中,不存在才会插入
例:
SQL语句:
insert into user values ('','adminadminadminadminadminadmink','123456');
结果插入成功,并且发现,插入的username为adminadminadminadminadminadmin,第31位的k被删去了

注:此时去查询adminadminadminadminadminadmink是不存在的
如:

所以我们可以利用这一特性,插入一个和第一个admin同名不同密码的admin
例:

只要记住三点:
①不管sql查询还是插入,都会略去空格(前提:空格后面没有字符)
②插入数据时,先查询该username在数据库中是否存在,不存在,则插入
③插入数据时,会删去高出限制的字符
insert into user values ('','admin 1','peak');的执行流程:
(1)先查询username为admin 1在数据库中是否存在,结果不存在
(2)将admin 1插入到数据库中,因为username限制为30位,所以插入时删除1,插入admin,又因为插入数据时会略掉空格,所以最终插入的username为admin,查询admin时,会出现两个数据,如下

注:这里可能有人要问,sql查询时也会略去空格,那么你查询admin 1时怎么没有略去,因为空格后面有字符1,所以不能略去;而且user表的30位长度限制,是限制插入数据的,所以user表中不可能存在超过30位的username,你现在查超过30位的username,user表中怎么可能存在,所以可以进行下一步,也就是插入数据。

实例:

1、随便注册个账号,发现如下所示

2、看来需要获取管理员权限,题目提示这里存在sql约束攻击,根据题目示意,我们应该可以注册一个admin的管理员账号,密码自己设定

这个原理简单再说下,你既然要注册,那么注册时,肯定会判断你注册的用户名是否存在,存在是不可以注册的,不存在才可以注册,这里注册的用户名为admin无数个空格1,数据库在判断该用户名是否存在时,肯定是不存在的,所以可以注册;关键是插入注册的数据时,因为无数个空格,超过了用户名长度的限制,所以最后的sql插入语句为admin无数个空格,插入时再略去空格,最后成功插入admin
3、以admin登录,密码自己刚设置的,即可获得flag

基于约束的SQL攻击相关推荐

  1. 【java毕业设计】基于java+Eclipse +SQL Server的工厂进销存管理系统设计与实现(毕业论文+程序源码)——工厂进销存管理系统

    基于java+Eclipse +SQL Server的工厂进销存管理系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+Eclipse +SQL Server的工厂进销存管理系统 ...

  2. 基于共轭梯度法的对抗攻击

    1 引言  深度学习模型容易受到对抗样本的攻击,尽管基于最速下降的现有方法已经取得了很高的攻击成功率,但优化的病态问题偶尔会降低它们的攻击性能.为了解决这个问题,在该论文中作者借鉴对此类问题有效的共轭 ...

  3. 浅析防御僵尸网络基于应用层的DDOS攻击

    近期数据显示,针对应用层的DDOS攻击有加速的趋势.据预测,基于应用层的DDOS攻击每年以三倍的速度增长,Gartner预测DDOS攻击会占2013年所有的应用层攻击中的25%左右.研究指出,黑客现在 ...

  4. 基于oracle的sql优化

    [基于oracle的sql优化] 基于oracle的sql优化 [博主]高瑞林 [博客地址]http://www.cnblogs.com/grl214 一.编写初衷描述 在应有系统开发初期,由于数据库 ...

  5. 如何分表分库 Mycat 与shadingjdbc 区别? Mycat 是基于服务器端的形式实现数据库代理 基于服务器端的形式 改写sql语句 shadingjdbc 基于客户端 改写sql语

    如何分表分库 Mycat 与shadingjdbc 区别? Mycat 是基于服务器端的形式实现数据库代理 基于服务器端的形式 改写sql语句 shadingjdbc 基于客户端 改写sql语句的形式 ...

  6. 崔华 oracle简历,2013数据库大会:崔华-基于Oracle的SQL优化案例分析

    2013数据库大会:崔华-基于Oracle的SQL优化案例分析 崔华的新书即将出版,其数据库大会上的演讲也非常精彩,他的新书十分值得期待. 2013年中国数据库技术大会第二天的"Oracle ...

  7. PreparedStatement JDBC域处理/SQl攻击

    感谢传智播客提供的学习视频 ,希望传智播客越来越好 l  它是Statement接口的子接口: l  强大之处: Ø  防SQL攻击: Ø  提高代码的可读性.可维护性: Ø  提高效率! l  学习 ...

  8. SQL Server中的约束:SQL NOT NULL,UNIQUE和SQL PRIMARY KEY

    This article explains the SQL NOT NULL, Unique and SQL Primary Key constraints in SQL Server with ex ...

  9. 基于机器学习的DDos攻击检测

    2基于机器学习的DDoS攻击检测方法 环境:pycharm+python3.4 2.1数据分析与特征工程 2.1.1数据来源 kaggle 2.1.2数据大小 训练集:80万条 测试集:30万条 2. ...

最新文章

  1. Java记录 -55- Set下的HashSet
  2. 【告别信】三年了,是该离开了!
  3. 软件工程---团队作业四
  4. 《无人机DIY》——4.2 项目1:MakerBeam机身
  5. None.org.apache.spark.api.python.PythonAccumulatorV2
  6. Hadoop 之 Distcp官网介绍和注意事项
  7. css table布局大法,解决你大部分居中、多列等高、左右布局的问题
  8. S太赞了!大佬竟然用ELK搭建起了支撑TB级的日志监控系统...
  9. Android使用NanoHttpd在app内搭建https server(二)
  10. 自己写得一个分布式海量文件搜索引擎
  11. android gsm功能,Android手机-GSM网络与WCDMA网络选择的设置
  12. c语言10以内随机数生成器,C语言随机数生成器
  13. Pollard Rho算法
  14. 广发信用卡联名南航,申卡这样操作
  15. 互联网创业公司融资、产品、运营快速迭代和人才模式总结
  16. 高效通过,PMI-ACP 备考知识突击(九阴真经版)
  17. 180多个Web应用程序测试示例测试用例
  18. 使用 Web Speech API 在浏览器中朗读文本
  19. 普通打印机如何在A4纸上打印不同内容的标签
  20. 16、注册中心-consul

热门文章

  1. MindSDK+yolov5部署及python版图像视频推理实现
  2. 浦银行面试总结(信息科技部)
  3. 《大型网站技术架构》1:概述
  4. spark | scala | 线性代数库Breeze学习
  5. solaris11 format zpool
  6. Ubuntu 16.04安装Cobbler 2.9
  7. 【Lolttery】项目开发日志 (二) 数据库的二三事
  8. OScached页面缓存的入门使用
  9. 从最小二乘到岭回归(Ridge Regression)的深刻理解
  10. Redis的安装与简单部署