注:
1.本文是对安全牛《CTF从入门到提升》课程课时2第一部分约束条件的安全测试的记录

首先新建一张用于记录用户登录信息的表

1
2
3
4
5
6
create table user(
id int not null auto_increment,
username varchar(30) not null,
password varchar(30) not null,
primary key(id);
)

然后用户注册时会插入数据

1
insert into user values('','admin','123456789');

登陆时则会执行有约束条件的查询语句

1
select * from user where username='admin' and password='123456789';

看起来没有什么问题,可以如果用户输入的用户名超过30个字符呢?

1
insert into user values('','0123456789012345678901234567890123','123456789');

可以发现此时mysql会舍弃后面的0123,插入一个username为’012345678901234567890123456789’的用户

因此可以利用这一点再次注册一个admin用户

1
insert into user values('','admin                                                                       1','0123456');

这样子就会存在两个admin用户,两个密码都可以登录

例题:bugku login1(SKCTF)