最近刚好在了解sql注入的一些知识,然后刚好刷到了这题,记录一下我的思路吧~
看到题目页面一个输入框就觉得是和sql注入有关的题目了,首先查看网页源代码:
看到name=id,在火狐浏览器用maxhackerbar打开传递参数试试:
成功查到了成绩单,并且切换1,2,3都可以成功,再判断是字符型注入还是数值型注入:
id=1成功查询,id=1’查询失败,id=1’#查询成功,所以该注入类型为字符型注入。
简单说明一下为什么:
如果是数值型注入:where id =1 成功 where id=1’失败 where id = 1’# 还是会失败
如果是字符型注入:where id=‘1’成功 where id =‘1’‘失败 where id =‘1’#’ 成功 因为#会注释掉后面的字符 就相当于 where id =‘1’
然后再查询字符段的数目:
这里需要使用联合查询:
select 1 到 select 1,2,3都不成功 只有到select 1,2,3,4才成功,说明有四个字符段,为什么要判断字符段的个数呢,因为union查询需要前后字符段数一致,所以我们的一个个去试。
然后就可以查询数据库名了:
回显:
说明数据库名为skctf
然后再查询表名:
d=11’ union select 1,2,3,table_name from information_schema.tables where table_schema=‘skctf’ #
查询出表名为:
接下再查询列名:
id=11’ union select 1,2,3,column_name from information_schema.columns where table_name=‘fl4g’ #
查询到列名为:
最后查询列的内容:
即可拿下