让我们来看看这个文件
/include/shopcar.class.php
提取关键加解密函数代码
是不是感觉很熟悉?看这里-->http://**.**.**.**/bugs/wooyun-2014-062391
一样的算法,只不过将microtime 替换成了 md5(rand(0, 32000)),按照 海贼牛的方法的话,我们需要暴力 穷举32^36次,这数太大,我不敢算,我们真的需要暴力破解么??
直接来看看 解密函数吧。
现在 我们假设 密文为 ABCDEF....(base_decode后的) 。通过上述代码 可以发现 解密函数中 参与 运算的是 key的MD5值。我们假定为 K1 k2 k3 k4 k5 k6........k32.
首先带入 setKey函数,
然后将 M1~6 带入decrypt后的操作。
abc 即为 我们的明文
对于异或算法 我们知道 它有以下特性
密文A B 与明文 a 所对应的的关系为。
联立得(尼玛像是在做奥数。。) A^K1^B^K2 =a 即 A^B^a = K1^K2,同理可得到 C^D^b = K3^K4 E^F^c=K5^K6
k1~32是 密匙k的32位 md5值,是固定不变的。
那么 得到如下 如下关系: 任何密文的i ,i+1 位 与其所对应的的 明文的 i 位 做异或运算(i为偶数) 结果是一个固定不变的值(Ki^Ki+1)
so,我们只需要一个已知明文的密文就可以 构造任意密文了。
poc如下,
在 plus/carbuyaction.php
将解密后的数据带入了数据库。
本以为到这里就结束了,然而,dede自带的防护sql注入的函数做了更新,以前的@,char都不能用了。
想了很久终于想到了办法,
我们可以用双引号来包裹 ' 再用逗号分隔 两个相连的 ''。
首先,注册用户,将一个商品加入购物车,来到plus/car.php页面,此时查看cookie
Shop_De开头的和 DedeUserID就是我们所需要的~
调用poc里的函数
得到 最终playload
修改cookie,提交订单
可以看到mysql的执行日志
查看商品,ok,数据出来了~