今天打sqlilab的时候发现limit0,1会影响到回显,注释掉回显正常,不注释就不正常,而且不注释会影响到之后回显的查询。想请教一下是什么原理。
这是保留limit 0.1情况,回显出现了不正常的1
这是不保留情况,回显也是正常的2,3
而且在保留情况下,后续查询也会出错,比如:
http://localhost/sqli-labs-master/Less-28a/?id=0%27) unionunion select select 333,(select group_concat(table_name) from information_schema.tables where table_schema=database()),3 and ('1'='1
结果如下:
想请教下这是怎么回事?
在SQLi中使用limit语句时,limit 0,1 表示只返回第一行结果。如果在某些情况下没有任何结果,这意味着该查询不会返回任何结果,因此也不会有回显。
更具体地说,在SQLi中,目标检测通常是通过布尔盲注来实现的。当我们尝试使用 limit 0,1 限制结果集时,如果查询不返回任何数据,则无法执行有效的布尔盲注攻击,因此无法获得回显。
至于为什么在保留 limit 0,1 的情况下后续查询会出错,可能是由于查询结果被限制为一行。如果查询的结果集超过限制,可能会导致SQLi引擎出错,从而影响后续操作。
建议您在使用SQLi时,根据情况选择是否使用 limit 0,1,以及如何使用它。同时,对于查询结果集的大小有限制的情况,可以逐步增加限制,以避免出现错误。
假设现在有employee员工表,要找出一个名字叫jay的人.
CREATE TABLE `employee` (
`id` INT ( 11 ) NOT NULL,
`name` VARCHAR ( 255 ) DEFAULT NULL,
`age` INT ( 11 ) DEFAULT NULL,
`date` datetime DEFAULT NULL,
`sex` INT ( 1 ) DEFAULT NULL,
PRIMARY KEY ( `id` )
) ENGINE = INNODB DEFAULT CHARSET = utf8;
反例:
SELECT
id, NAME
FROM
employee
WHERE
NAME = 'jay'
正例
SELECT
id, NAME
FROM
employee
WHERE
NAME = 'jay'
LIMIT 1;
理由: