在 include/shopcar.class.php中
先看一下这个shopcar类是如何生成cookie的
简单的说,$key就是cookie的key,value就是value,enCode的作用是将array类型转变为a=yy&b=cc&d=know这样的类型,关键是enCrypt函数
enCrypt的参数$txt 我们是可知的,返回值就是cookie的值,这个我们也是可知的
然后到了enCrypt调用 setKey时的参数$tmp,这个参数在某种意义上,我们也是可知的,因为$encrypt_key = md5(rand(0, 32000));只有32000种可能,我们可以推出32000种可能的$tmp,从而推出32000种可能的md5(strtolower($cfg_cookie_encode)),对了,忘记说了,我们的目的是推测出setKey中$encrypt_key的值,然后才能任意构造出购物车的cookie,从推出的32000种md5(strtolower($cfg_cookie_encode)),简单过滤掉非字母数字的key,就只剩下几百个可能的key,然后我们再从新下一次订单,然后再获取几百个可能的key,然后取交集,得到最终key。
具体代码如下:
cookie1 和 cookie2 是我下了两次订单后分别生成的cookie,
plantxt可以根据页面来自己推算,大概就是这个格式:id=2&price=0&units=fun&buynum=1&title=naduohua1
然后推算出md5(strtolower($cfg_cookie_encode))
得到这个key之后,我们就可以构造任意购物车的cookie
接着看
发现OrderId是从cookie里面获取的
然后
/plus/carbuyaction.php中的
接着我们就可以注入了
通过利用下面代码生成cookie: