分析
根据提示,了解一下sql约束攻击(参考资料)
总结:
1、sql处理字符串时(一般是在比较字符串时),会自动删去末尾多余的空格,这是因为,SQL会在内部使用空格来填充字符串,以便在比较之前使其它们的长度保持一致。这一点,对于where和insert语句是成立的,对于like语句无效。
也就是说,"admin"和"admin "是等效的。因此,用where id="admin"查询和用where id="admin "查询的结果相同。
2、SQL中varchar(n)用于限制最大长度,若字符串长度大于n,则只截取前n个字符。如果用varchar(5)限制了insert查询的最大长度,则插入
"admin"和"admin “,最终都会得到"admin”,因此查询"admin "得到的结果是"admin"的信息。
因此,
可以利用这个漏洞来绕过,方法:若注册时已知admin这个用户名存在,则我们可以注册admin(空格空格空格…)这个用户名,密码自定,然后登录时用刚刚注册的用户名和密码即可得到真实的想要的admin信息或权限。
解题
注册admin发现这个用户名存在,则注册admin(后面跟三个空格),再登录即可得到flag。