``username=``_COOKIE[‘username’];
``sess=``_COOKIE[‘session’];
由上面两行代码可知`username`与
sess通过修改cookie来赋值。因为`this->token`
为未知量,所以我们即使修改了`username`的值,也无法获得与之对应的md5值。所以这里我们就需要利用md5算法分组运算的机制。`
????????????????????admin`的md5值既然是已知的,那我们就把它作为第一段(512bit)的加密内容,这样我们就可以以它的md5值来求得用于第二段加密运算的初始序列。然后我们会发现要是能把字符串扩展到512bit以上,并保证第一段的md5算法运算结果不改变,那么我们在不知道第一段的加密内容的情况下仍然能够求得整体的md5值。
所以我们首先要做的就是模仿md5算法的补位方式来进行补位。这里以16进制来举例
根据最开始的算法图,在加密内容的后方加100000直到448位,剩下64位储存数据长度信息。即16进制中在数据后方加%80%00%00直到剩下最后8个字节表示长度及上图中的%C8%00%00%00%00%00%00%00
。至此,第一段内容补位完成,第一段加密后的md5即为初始的$sess
的值。然后将ae8b63d93b14eadd1adb347c9e26595a
分成8字节唯一组的四组,ae8b63d9,3b14eadd,1adb347c,9e26595a。然后对他们进行小段排序,得到第二段的初始序列。
A=0xd9638bae
B=0xddea143b
C=0x7c34db1a
D=0x5a59269e
之后在字符串上加上第二段的内容,内容随意。
????????????????????admin%80%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%C8%00%00%00%00%00%00%00Hacker
将我们求出来的ABCD序列作为初始序列,对Hacker
这个字符串进行md5加密。
得到md5值:
bdbe1c6fb9d921e4ba3d9d4072b702f7
修改cookie:
username=admin%80%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%C8%00%00%00%00%00%00%00%00Hacker
session=bdbe1c6fb9d921e4ba3d9d4072b702f7
complated。