[GXYCTF2019]BabySQli1

单引号闭合,列数为三列,但是没有期待的1 2 3回显,而是显示wrong pass。

[GXYCTF2019]BabySQli1_第1张图片

尝试报错注入时发现过滤了圆括号,网上搜索似乎也没找到能绕过使用圆括号的方法,那么按以往爆库爆表爆字段的方法似乎无法使用了

[GXYCTF2019]BabySQli1_第2张图片

在响应报文找到一段注释,解码后发现是这样的,数据库根据我们输入的用户名查找三列信息

select * from user where username = '$name'

[GXYCTF2019]BabySQli1_第3张图片

 

我们发现当用户名填在第二列时,回显从wrong user变成了wrong pass,说明sql查询时先查询了username存在性

[GXYCTF2019]BabySQli1_第4张图片 

根据经验这里猜测第三列存放的是账号对应的密码,而从sql库中获取密码后就会与我们输入的pw作对比,如果相等则成功登入。(这里莫名其妙地sqli注入的目的从爆库变成了登录)

也就是说只要我们select的第三列和我们输入的pw相等就能成功登入。

我先尝试了明文存储,失败了,因为一般也不会明文存储隐私信息在数据库内

[GXYCTF2019]BabySQli1_第5张图片 

这里尝试MD5加密,成功登入,出现了flag 

[GXYCTF2019]BabySQli1_第6张图片 

第一次接触这种题,属实是摸不着头脑,因为正常思路目的是爆库在库里找到flag字段,这道题不是这么想的,而是把目标放在了绕过原有的密码成功登入。 

你可能感兴趣的:(web)