简单的fuzz一下
红色框里的被过滤
然后简单手工测一下发现大小写都可以绕过去了
那就首先试试报错注入吧(因为能看到报错信息)
发现不行
那也不想麻烦去绕这个了
union和select都没过滤
那就可以尝试联合查询
确定有三列
发现这个题小括号好像被ban了
而且这个题好像没有可以回显的位置
没有小括号盲注个der
进入正题
F12发现可疑注释
base32+base64解码得到
select * from user where username = '$name'
buu的题目好像少了题目描述
题目描述:刚学完sqli,我才知道万能口令这么危险,还好我进行了防护,还用md5哈希了密码!
通过base解出的sql语句是只查了username
没有and password的条件
也就是说账号和密码不是同时进行判断的
看下面这个图
当查找不存于数据库中的数据
联合查询的数据会补上
为了和本题的列一致
我把我本地的数据也加到三列
然后查询
上面这两个查询的结果是不是一样的
但实际上第一张图显示的是我们自己构造的username和password
第二张图显示的是数据库里的username和password
这里看下源码会更加清晰
它是先根据name查询到一条数据,比如id=1,name=admin,password=nwioefvnuwinfwwujnkiwe
然后再把我们提交的password经过md5加密去和上面这个password进行比较
这两个password都是我们可控的
name=-1'union select 1,'admin','e10adc3949ba59abbe56e057f20f883e'#
123456的md5是e10adc3949ba59abbe56e057f20f883e
这里的结果就是它查询-1查不到然后把我们的数据补上了
然后我们提交的数据
pw=123456
所以连起来有最后的payload