约束攻击,学习姿势
背景
在bugku做ctf题目的时候,发现了约束攻击这种手法,于是上google学习了新的姿势。感谢作者Dhaval Kapil的文章SQL Attack (Constraint-based)
知识点
数据库字符串比较:数据库在进行字符串比较是会将两个字符串长度保持一致,短的字符串增加长度。假设A字符串为hello
,B字符串为hell
,数据库会把字符串B变成hell
,增加一个空格以保持两个字符串长度一致
INSERT截断:这是数据库的另一个特性,当设计一个字段时,我们都必须对其设定一个最大长度,比如CHAR(10),VARCHAR(20)等等。但是当实际插入数据的长度超过限制时,数据库就会将其进行截断,只保留限定的长度。
具体场景
我们来创建一个数据表
1 | create table te_constraint( |
然后向其中插入两组数据,第二组数据后面加入了6个空格
1 | insert into te_constraint values('admin','123456'), |
然后我们发现查处了两组数据
CTF中的约束攻击
来自bugkuctf的login1(SKCTF)
首先我们没用账号,所以先注册一波账号。
然后发现提示
然后我们就去注册一个admin账户
发现admin账户已经存在,如果是挖漏洞的话我会考虑弱口令,注入,xss,csrf等漏洞,这里的话已经知道是约束攻击,我们也不知道admin这个用户名长度是多少,就在admin后面加尽可能多的空格吧,如果不行就再多加一点空格,构造一个新的admin账户。
然后注册成功,得到flag