先上源码:
然后发现了一个存在很大漏洞的函数——extract()
众所周知,它有一个最大的漏洞——变量覆盖,即可以通过我们提交的变量把脚本中原来的变量覆盖掉!
通过阅读代码,可以知道它是用$users这个变量来验证我们提交的是否有效,
所以除了提交username&password之外,我们还需要提交一个users,来把原来的$user覆盖掉
所以如此构造payload:
data={"users":{"admin":"sky"},"username":"admin","password":"sky"}
关于json_decode():
就是把json形式的数据进行解码,这里加上了true这个参数,就是解析成了数组
我们的payloadt提交上去变成了:
["users"] = {["admin"]="sky"}//我不确定是不是这样,求大佬指正
["username"] = "admin"
["password"] = "sky"
再通过extract(),将数组中的元素变成了变量,即
$users={["admin"]="sky"}
$username = "admin"
$password = "sky"