wp
这个题和以前的一个题很像,很有意思,记录一下。
题目中有提示信息(与答案非常接近),主要是理解,这里会尽量不使用提示。
随意输入进行探测,提示信息页面中查看源代码。
注释中是大写字母和数字的混合,这是base32的特点,base32解密一下
有两个等号,这是base64的特征,解密一下:
这里可以看出这是账号密码不同步sql语句筛选,也就是会先选username,再在结果中比对password
关键就在这里,不同步筛选会产生哪些问题呢?
首先可以考虑group by注入,但是在这里密码不允许为空:
但是,这里只是前端限制
把这里的required删了就行,但是,还屏蔽了关键字password,那看来没办法了。
这里用到的就是虚拟数据,在之前的探测中,我们经常用到select 1,2,3
等来查看回显位置,在数据库中的产生就是这样的
这也是回显产生的原因,但是这个操作并没有创建1,2这个数据,而是强制筛选出一组临时数据。
如果在普通的username和password双验证的情况下,是无法完成这个操作的
但是这里就是先验证username再验证password,也就说我们可以先进行强制筛选,在输入密码与我设置的临时数据相同就可以了。
以下为提示(也可能为答案)
相信你已经能够看到这个提示了,最后多了一次hash。
也就是先强制进行筛选,最后填入设定好的临时数据,password验证正确就登陆成功了。数据库中演示如下(省略了id字段)
在username输入后,筛选出这样一条临时数据。
然后在密码栏输入123
md5($password)=password
验证成功
(提示需要删除md5两边的空格就是答案,当然你也可以换你喜欢的md5值和密码)
临时数据设置时,仅能使用admin,可以在探测中测试出来,所以猜想后台代码如下:
$data = select * from users where username=$name.
if ($data['username'] === 'admin') {
if ($data['password'] === md5($pw)) {
return true;
}
}