学习的第七天

七、BUUCTF[极客大挑战 2019]EasySQL

打开网站得到了一个很帅的页面,习惯性的F12,嗯,一无所获。
学习的第七天

开始尝试注入

首先先看看结构,输入 1,1',1",结果只有1'报错,可以得知筛选的语句是一个以'结尾的闭合结构。
学习的第七天
再然后,用常规的1';show databases;,1';show tables;等指令进行尝试,看看有没有什么有用的东西。
学习的第七天
似乎没什么用,那就看看字段数:
1' order by 1#,没有报错,
1' order by 2#,没有
1' order by 3#,没有
1' order by 4#,终于,
可以得知有四个字段,那就随便试试吧
'1' union select 1,2,3#
学习的第七天
这。。。。感觉有了啊,试试,试试。
学习的第七天

舒服,决定去看看大佬们的wp。
震惊!!居然还有“万能密码”这种又简单又能得到flag的东西。忒强了啊!
我尝试用我自己的语言翻译了一下,什么叫“万能密码”,大概就是:
用户登录界面的筛选代码一般都为
select * from **(表名) where username='**' and password="**" ;
试想我们输入了正确的usernamepassword指令就会返回真值,从而可以成功登陆。
如果能用某种方法绕过判断,使它不用成功匹配用户名和密码就能返回真值,是否也能成功登录呢。
下面就是大佬们的"万能密码":
在sql语句中#后的内容被省略,假设我们的用户名为1' or 1=1 #
那么判定的语句就为select * from **(表名) where username=’1’ or 1=1 # and password="**" ;
又因为#后的省略,所以语句可以视作select * from **(表名) where username=’1’ or 1=1
又因为在or语句中只要有一侧为真,则返回真值,而1=1一定为真,所以结果会返回真值。
理论成立,开始实践。
学习的第七天
成功!大佬们真强!
学习的第七天