最近一直着迷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
题目做了很多了,都没有记录下来。这道题算开个头吧。
本文分享了在CTF竞赛中使用SQL约束攻击解决WEB题目的一次经历,详细介绍了如何构造特殊用户名进行管理员权限获取,及背后的原理和防范措施。
580

被折叠的 条评论
为什么被折叠?



