拿到题目一看就是sql注入,所以还是老样子账号admin密码随便输入,回显但是密码错误
当用户名随便输入时,回显用户名错误,说明是先检测用户名,再检测密码
应该是存在过滤
通过burp爆破大致找出过滤字符,还有就是在响应包里发现了类似加密字符串
看起来像base32,成功解码,但是解码后又是一串加密字符,看起来就像base64
解码成功,是一串sql代码
意思是:查询来自user表中username字段为$name的所有数据
可能是个后端源码提示,意味着这题的核心在于用户名
尝试大小写绕过or成功
不过可惜的是这道题把()给过滤掉了,url编码也不能绕过,意味着联合注入是不行的
经过查看wp得知
在联合查询并不存在的数据时,联合查询就会构造一个虚拟的数据。
所以,如果我们使用联合查询,一个真实存在的用户名和一个我们自己编造的密码,就会使虚拟数据混淆admin密码,从而使我们成功登录,得到 flag
如下:
我们正常使用查询test中的所有值
在添加联合查询后,就会发现自动生成了一列,当然这个的前提是字段数量必须一样,否则会报错
前面已经知道了,一共包含三个字段所以构造:
'union select 1,2,'admin'#
发现回显时用户名错误,说明用户名的位置搞错了
尝试把用户名放在第二位,回显密码错误,说明位置正确,接下来就是密码,盲猜是在第三位
查看wp后证实了我的想法,然后说后端密码一般是通过md5加密的,所以我们构造的密码也要经过md5加密
记得选32位的md5
然后md5的解码值和输入的密码要一致就可以拿到flag了