题目链接:http://www.shiyanbar.com/ctf/33
今天小编在写这道题题解的时候才发现,原来实验吧有这道题的视频讲解。看了一下,视频讲的不是很清楚,而且用的还是sqlmap进行注入的,那么小编这里还是用手工注入的角度来讲解一下这道题如何去注入。
这道题其实蛮简单的,点开题目,我们能看到一个疑似sql查找结果的表:
看下URL,我们可以看到URL中传入id=1这个参数。
那么第一步,确定是否有注入,确定的方法当然是经典的单引号、1=1、1=2。
尝试发现这里是存在注入的,那么接下来我们开始爆数据库,爆表,爆字段。
首先是爆数据库:
union select 1,schema_name from information_schema.schemata
这里我们爆出的数据库,可以看到爆出my_db这个数据库。
接下来我们爆表:
union select 1,table_name from information_schema.tables where table_schema='my_db'
爆出的表中我们可以看到thiskey,应该这就是我们要找的表。
然后是爆字段:
union select 1,column_name from information_schema.columns where table_name='thiskey'
很明显这个k0y就是我们的目标字段。
最后查询这个字段得到我们的结果:
union select 1,k0y from thiskey
因为这道题似乎没有对一些字段进行过滤,所以我们注入非常的轻松^v^。
这里回答一下上一次在"简单的sql注入"题解下面问我关于单引号的问题的那位同学。
我们在sql注入的时候,什么时候用单引号闭合的问题要根据实际情况进行分析,像这道题为什么没有用到单引号进行闭合呢?因为这道题的注入的参数类型是数字型,所以后台的查询应该是
Select * from 表名 where 字段=1
但是如果参数的类型是字符型,后台应该为:
Select * from 表名 where 字段=’字符’
所以只有遇到字符型的时候我们才需要用单引号进行闭合。