基于约束的SQL攻击
基于约束的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攻击相关推荐
- 【java毕业设计】基于java+Eclipse +SQL Server的工厂进销存管理系统设计与实现(毕业论文+程序源码)——工厂进销存管理系统
基于java+Eclipse +SQL Server的工厂进销存管理系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+Eclipse +SQL Server的工厂进销存管理系统 ...
- 基于共轭梯度法的对抗攻击
1 引言 深度学习模型容易受到对抗样本的攻击,尽管基于最速下降的现有方法已经取得了很高的攻击成功率,但优化的病态问题偶尔会降低它们的攻击性能.为了解决这个问题,在该论文中作者借鉴对此类问题有效的共轭 ...
- 浅析防御僵尸网络基于应用层的DDOS攻击
近期数据显示,针对应用层的DDOS攻击有加速的趋势.据预测,基于应用层的DDOS攻击每年以三倍的速度增长,Gartner预测DDOS攻击会占2013年所有的应用层攻击中的25%左右.研究指出,黑客现在 ...
- 基于oracle的sql优化
[基于oracle的sql优化] 基于oracle的sql优化 [博主]高瑞林 [博客地址]http://www.cnblogs.com/grl214 一.编写初衷描述 在应有系统开发初期,由于数据库 ...
- 如何分表分库 Mycat 与shadingjdbc 区别? Mycat 是基于服务器端的形式实现数据库代理 基于服务器端的形式 改写sql语句 shadingjdbc 基于客户端 改写sql语
如何分表分库 Mycat 与shadingjdbc 区别? Mycat 是基于服务器端的形式实现数据库代理 基于服务器端的形式 改写sql语句 shadingjdbc 基于客户端 改写sql语句的形式 ...
- 崔华 oracle简历,2013数据库大会:崔华-基于Oracle的SQL优化案例分析
2013数据库大会:崔华-基于Oracle的SQL优化案例分析 崔华的新书即将出版,其数据库大会上的演讲也非常精彩,他的新书十分值得期待. 2013年中国数据库技术大会第二天的"Oracle ...
- PreparedStatement JDBC域处理/SQl攻击
感谢传智播客提供的学习视频 ,希望传智播客越来越好 l 它是Statement接口的子接口: l 强大之处: Ø 防SQL攻击: Ø 提高代码的可读性.可维护性: Ø 提高效率! l 学习 ...
- 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 ...
- 基于机器学习的DDos攻击检测
2基于机器学习的DDoS攻击检测方法 环境:pycharm+python3.4 2.1数据分析与特征工程 2.1.1数据来源 kaggle 2.1.2数据大小 训练集:80万条 测试集:30万条 2. ...
最新文章
- Java记录 -55- Set下的HashSet
- 【告别信】三年了,是该离开了!
- 软件工程---团队作业四
- 《无人机DIY》——4.2 项目1:MakerBeam机身
- None.org.apache.spark.api.python.PythonAccumulatorV2
- Hadoop 之 Distcp官网介绍和注意事项
- css table布局大法,解决你大部分居中、多列等高、左右布局的问题
- S太赞了!大佬竟然用ELK搭建起了支撑TB级的日志监控系统...
- Android使用NanoHttpd在app内搭建https server(二)
- 自己写得一个分布式海量文件搜索引擎
- android gsm功能,Android手机-GSM网络与WCDMA网络选择的设置
- c语言10以内随机数生成器,C语言随机数生成器
- Pollard Rho算法
- 广发信用卡联名南航,申卡这样操作
- 互联网创业公司融资、产品、运营快速迭代和人才模式总结
- 高效通过,PMI-ACP 备考知识突击(九阴真经版)
- 180多个Web应用程序测试示例测试用例
- 使用 Web Speech API 在浏览器中朗读文本
- 普通打印机如何在A4纸上打印不同内容的标签
- 16、注册中心-consul