Bugku Web CTF-login1(SKCTF)

半腔热情 提交于 2020-01-04 03:06:47

Bugku Web CTF-login1(SKCTF)

该题打开是一个登录页面,仔细看看还有注册的功能。看了看题目的提示,SQL约束攻击

于是去搜索了一下约束攻击相关资料,看这篇文章讲的比较详细基于约束的SQL攻击

大概意思就是,SQL在处理字符串数据时,会“贴心”的将末尾的空格字符除掉,即"admin"等同于"admin "。比如下面这句话:

SELECT * FROM users WHERE username = 'admin    ';

效果等同于username = 'admin'

并且,在INSERT语句中,SQL会根据varchar(n)来对字符串的进行限制,比如限制最大长度为10,当输入字符串长度为15,则在执行INSERT语句时,实际只会插入前10个字符。需要注意的是,这里的长度限制是针对INSERT,执行SELECT是不会有这种长度限制的。

于是可以有以下思路:先注册用户名为'admin[若干空格]1',密码任意,这样在注册的时候,不会因为重名而无法注册(因为可能用的是SELECT语句)。在执行INSERT插入用户名时,会因为截断而去掉后面的1,所以实际插入的用户名为'admin '

那么在检索admin时,就会返回两个用户'admin''admin '。如果使用用户名'admin'+自己注册用户时输入的密码登录时,基于该用户名的SELECT查询返回的都是第一个数据(即原始的数据记录),这样我们就能以原始用户身份登录。

最终登录,可获取到flag为:SKCTF{4Dm1n_HaV3_GreAt_p0w3R}

PS.此类攻击的防范方法:限制网页端输入用户名的最大长度。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!