Less 1-5
Less-1 GET - Error based - Single quotes - String(基于错误的GET单引号字符型注入)
注入语句
判断当前查询的数据库表共有几列
http://127.0.0.1/Less-1/?id=-1' order by 4 --+
-
其中
?
代表使用get方法传入参数,参数名称为id
。 -
将
id
赋值为-1
,也就是一个不成立的条件,使系统原本要查绚的东西不回显,因为在这个系统中只回显两个值,如果正常查询的话,注入的语句查询结果就不能回显。此处后面有详细说明。 -
-1
后面的'
作用是闭合后端php语言中传递参数原有的一个引号(传入的参数为字符型)。 -
后面的
order by 4
中通过改变其中数字的值,从1,2,3直到4依次尝试,这里尝试到4页面出现错误信息,代表数据库表共有三列。(order by 在sql语句中表示按照第几列排序输出,默认升序,后跟数字或列名) -
最后的
--+
的作用使注释掉php语言中传入参数最后的那个引号。sql语句中使用--
进行单行注释,这个方法在--
后加入一个空格才有效。而在某些http请求实现过程中+
发送到服务端后会被转化成空格。因此这里使用--+
进行注释,当然将+
换为空格的url编码%20
也可以。同时,mysql数据库中也可以使用#
进行注释,但http请求中并不包含#
,因此要将#
进行url编码为%23
。例:
create database database_1 -- 创建数据库database_1
create database database_1 #创建数据库database_1
查看哪一列的查询会回显
http://127.0.0.1/Less-1/?id=-1' union select 1,2,3 --+
假设存在数据库表
id | username | password |
---|---|---|
1 | Dumb | Dumb |
正常查询传入参数id=1
时既可以查到上述数据。
当注入语句为
http://127.0.0.1/Less-1/?id=1' union select 1,2,3 --+
时,得到结果为:
此时只回显了查询id=1
的部分。这时可以将id
传入为-1,使得查询不成立,这时的结果就为: