0x00 MD5加密原理
MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。
0x01 MD5拓展攻击目的
攻击场景:
1.假设我们实现文件下载file=filename&hash=md5($key.filename)
然后判断hash是否等于md5($key.filename) 如果相等就进行下载
也就是说这里我们只要推出config.php 的md5($key.’config.php’)的hash
那么就可以实现任意下载config.php的功能
2.某ctf的题目 有点为出题而出题的意思
1 | <?php |
小结:就是在不知道key的具体值的时候 我们可以通过某些条件比如key的长度 某个已知明文通过MD5($key.已知明文)MD5值去推MD5($key.任意值)的MD5
0x03 MD5扩展攻击的具体实现流程(例子分析,使用hashpump)
关键代码:
1 | <?php |
在题目里可以得到:
1 | md5($secret."adminadmin")的值为571580b26c65f306376d4f64e53cb5c7 |
稍微整理下我们已经知道的:
1 | $secret是密文,长度为15,如果再算上后面第一个admin,长度就是20 |
这时候我们使用HashPump,附加数据至少1位以上:
1 | # hashpump |
第一个是新的签名,把它设置到cookies的getmein里。
1 | 第二个先把\x替换为%后,post提交 |
就可以通过了。