最近一直着迷CTF,记录一下WEB中的一个题目解题心得。
这道题已经提示了 使用sql约束攻击。
于是准备试试,
先注册一个用户
注册成功!有点爽了感觉,然后登陆这个用户
登陆提示
冷静下来想了想 提示是利用SQL约束攻击,那么办法来了,既然上面显示只有管理员才能看见flag 那么我们先要尝试一下管理员是哪个账号,在注册界面 使用账户名admin走一发 看看账户是否是存在,如果存在代表admin肯定就是这个系统的管理员账号。
注册界面输入admin 密码乱输即可
那就好办了,利用SQL约束攻击,构造一个admin很长的字串 以admin开头 中间是空格 (_代表空格) admin 1密码输入自己的密码就可以
用户信息:admin 1
密码:Xxxxxxx123456
然后注册 提示注册成功!
然后再登陆!发现flag出来了 ~~~~~~ get it!
原理:
SQL约束攻击,其实利用的是数据库建表时,约束了字段的长度,例如username如果约束长度是2的话 输入超长的长度是只会保留约束长度的,例如varchar username(5) 那么当你输入一个用户名是helloworld 的时候 数据库只会存入 hello 。
所以这道题目里面 如果你构造一个很长的admin用户名 例如 admin 1 那么数据库只会存入admin(后面很多空格数据库是不存入的) 所以相当于 存入了很多admin的同名用户,密码当然是你自己注册那个密码了。所以一切搞定。
防范措施:
对于insert操作时,对于用户的check 不要使用namecheck 而使用idcheck。
一篇不错的讲解文章,做题思路来自于此感谢作者:
https://www.freebuf.com/articles/web/124537.html
题目做了很多了,都没有记录下来。这道题算开个头吧。