学习的第七天
七、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="**" ;
试想我们输入了正确的username
和password
指令就会返回真值,从而可以成功登陆。
如果能用某种方法绕过判断,使它不用成功匹配用户名和密码就能返回真值,是否也能成功登录呢。
下面就是大佬们的"万能密码":
在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
一定为真,所以结果会返回真值。
理论成立,开始实践。
成功!大佬们真强!