MySQL约束攻击的原理和复现

在MySQL数据库中,数据是有字符长度限制的。

对于下面这个数据库:

MySQL约束攻击的原理和复现_第1张图片

 username和password的限制都是设置为15个字符。当尝试注册一个超过15字的字符串时,系统就会报错。MySQL约束攻击的原理和复现_第2张图片

 这是由于在MySQL环境变量sql_mode中添加了STRICT_TRANS_TABLES字样,规定了严格模式。

但如果有些数据库没有设置严格模式,系统就会对输入的非法字符串进行转换,于是就出现了SQL约束攻击:

在SQL注册的时候,是不能够注册已经存在的用户名的(即使在后面加空格也不可以),但是可以考虑创建一个名字叫‘admin                1’的超长字符串用户,在SQL比对时,它显然是和admin不同的(因为末尾有一个1,所以空格是有效的),但是在非严格模式下,SQL会去掉后面多余的字符,将“admin          ”注册到用户中,数据库就变成了这样:

MySQL约束攻击的原理和复现_第3张图片

 发现数据库中出现了两个admin,然后再使用admin、mypass登陆,由于比对的时候,末尾的空格是被忽略掉的,所以就成功登入了admin。MySQL约束攻击的原理和复现_第4张图片

 

你可能感兴趣的:(CTF,安全,数据库,mysql)