上图~~~
界面很简洁,老样子,试试二次注入,发现然并卵。但是发现了这道题是POST传参。
打开burp suite抓了包并对其进行了篡改,但并没有什么用。
然后看了下他的返回值发现有一行不知道什么的注释,然后百度了下发现是base32编码
然后用base32解码后发现还要base64解码。
出来是select * from user where username = '$name'
这就可以看出这道题是对数据库进行查询的。
然后用刚刚了解到的fuzz测试测了下。啊~我这个fuzz字典感觉不是很好吧。
虽然不是很好,但还是看得出对哪些字符有过滤的,得知对联合查询并没有过滤但是对order、or、=等字符进行了过滤。
这里只能用unions elect代替order by了。
输入1’ unions elect 1,2,3,4# 返回错误 再试试 1’ union select 1,2,3#返回正确。
可以得知有3列字段。
这里使用联合查询数据库,报错注入查询,都不行。感觉没辙了,再试试时间注入。
结果都显示这个。麻了,然后查阅了大佬的博客发现一个新的知识点。
联合查询并不存在的数据时,联合查询就会构造一个虚拟的数据。
上面的尝试中,我们应该可以发现,admin的用户是存在的。
在知识点中,我是这样理解的,在联合查询一个并不存在的数据,他会构造一个虚拟的数据,我们利用这个虚拟的数据是可以登陆成功的。
大佬给的数据是这样的:
密码: 1234
MD5:81dc9bdb52d04dc20036dbd8313ed055
然后构造playload:
账号:1’ union select 1,’admin’,’81dc9bdb52d04dc20036dbd8313ed055’#
密码:1234
注意账号这里不能使用admin 具体我不清楚,我试了是不可以的。然后就直接拿到了flag。就是sqli-labs这个例子。
他是可以显示的,也就说明它虽不是真实的,但它是存在的。
原理就是构造一个虚拟身份来绕过审核机制。
[参考文献] 1.参考大佬博客
2.联合查询构造虚拟数据-知识详解