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.此类攻击的防范方法:限制网页端输入用户名的最大长度。
来源:CSDN
作者:河鱼不高兴
链接:https://blog.csdn.net/saislanti/article/details/103820680