打开一登入框,尝试一下admin,admin
发现给出pass错误的响应,怀疑是存在admin账号的
尝试一下其他用户名,给出user错误,那么admin用户肯定存在
既然知道了存在admin用户,**一手弱口令肯定没肯定不会亏。(无法爆出来)
查看源代码,有一段base32,解码再解base64select * from user where username = ‘$name’
是一sql查询语句
接下来尝试注入,输入or的时候发现被过滤登入框fuzz一下,发现or,(),=,被过滤。
大小写可以过or,其他两个就没办法了,
联合查询发现有三列,
尝试了一下堆叠,没有,到这自己的思路就没了。只能看大佬的wp
学到一个联合注入新知识
在联合查询并不存在的数据时,联合查询就会构造一个虚拟的数据。
下面是一个自己的本地环境
数据库原本这几个用户名和密码
执行select * from flag WHERE username=‘admi’ union select 1,‘admin’,'ababa’语句时,就会虚构一个如下图的数据
回到题目;
select * from user where username = ‘$name’
username的查询语句是这样的,password判断大概率就是满足admin后,判断密码是否相等,放入数据库的密码一般是加密,一般加密就那么几种,这里尝试出是md5
构造playload:name=1’ union select 0,‘admin’,‘81dc9bdb52d04dc20036dbd8313ed055’%23&pw=1234
以上playload是利用联合查询构造虚拟数据,让其判断admin,和其密码的md5值,只要我们构造对应密码的md5值,就可以利用虚拟身份绕过审核机制。