请看如下网页源码
1 | <?php |
如何使以上的条件判断成立?
明白这个问题需要知道md5这个算法的结构
Merkle-Damgård结构
该结构,会将输入的数据进行填充并分割成压缩函数f能处理的长度,然后处理分割后的数据
hash的计算方式如下
一开始的压缩函数以一个固定的向量和第一个分组数据为输入
产生的结果为下一次压缩函数调用需要的向量,与下一组数据同时作为输入进行计算
通过长度拓展劫持加密过程
一个hash的输入必须被填充为512bits的倍数+448bits
即 输入的长度(单位bit)和448关于512同模
再次回顾上面的代码
random的md5实际上是填充后的结果
如果将md5和extension作为输入,再算一次,就能得到random+padding+extension的md5值
1 | $md5 = $_POST['md5']; |
代码的这一部分
只要构造extension=padding+extension,就能控制靶机网页的md5计算过程,使其计算出计划中的新md5值