limit函数的使用
limit有两种方式
1)limit a,b 后缀两个参数的时候(/*参数必须是一个整数常量*/),其中a是指记录开始的偏移量,b是指从第a+1条开始,取b条记录。(这里计数就是从id=1开始的没有从0开始)
2)limit b 后缀一个参数的时候,是直接取值到第多少位,类似于:limit 0,b 。
这里以dvwa数据库为例,这里面有两个表,
我们查询users表的数据,
limit 0,2从0开始读取2条
limit 2,默认和0 2一样
limit 3,2
limit是可以用于限制任何数据字段的输出用的,因为对应的字段名有很多列,比如这里user_id有5列
而不能用于查询表的字段是什么来使用,因为就只有一个表叫users,也就是说只有1个数据,见sqli-labs(5)
这里查的是表的字段名,而表只有1个,所以不能用limit来设置输出,而且updatxml报错输出是有长度限制的
这里改成了1,1,就没有输出了 是为什么呢?难道limit不起作用了?
并不是没起作用,是因为输出本来就变成一行了,所以1,1 输出的第二行是空的
这里用了group_concat() 会把输出变成一行,去掉这个函数,就可以用limit来搜索了
http://localhost/sqli-labs/Less-5/?id=1' and updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name='users' limit 1,1 ),0x7e),1)--+
在实际环境中可能会遇到有多个数据存在多张user表,那么这样从information表中查出来的就是所有user表的字段,所以加上
and table_schema ='security'
这样是最准确的