MD5扩展攻击

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
include "secret.php";
@$username=(string)$_POST['username'];
function enc($text){
global $key;
return md5($key.$text);
}
if(enc($username) === $_COOKIE['verify']){
if(is_numeric(strpos($username, "admin"))){
die($flag);
}
else{
die("you are not admin");
}
}
else{
setcookie("verify", enc("guest"), time()+60*60*24*7);
setcookie("len", strlen($key), time()+60*60*24*7);
}
show_source(__FILE__);

小结:就是在不知道key的具体值的时候 我们可以通过某些条件比如key的长度 某个已知明文通过MD5($key.已知明文)MD5值去推MD5($key.任意值)的MD5

0x03 MD5扩展攻击的具体实现流程(例子分析,使用hashpump)

www.shiyanbar.com/ctf/1848

关键代码:

1
2
3
4
5
6
7
8
9
10
11
<?php
$secret="XXXXXXXXXXXXXXX"; // This secret is 15 characters long for security!
$username="admin";
$password = $_POST["password"];
if($COOKIE["getmein"] === md5($secret . urldecode($username . $password))){
echo "Congratulations! You are a registered user.\n";
die ("The flag is ". $flag);
}else{
die("Your cookies don't match up! STOP HACKING THIS SITE.");
}
?>

在题目里可以得到:

1
md5($secret."adminadmin")的值为571580b26c65f306376d4f64e53cb5c7

稍微整理下我们已经知道的:

1
2
3
$secret是密文,长度为15,如果再算上后面第一个admin,长度就是20
而数据是admin
签名(哈希值)是571580b26c65f306376d4f64e53cb5c7

这时候我们使用HashPump,附加数据至少1位以上:

1
2
3
4
5
6
7
8
9
10
# hashpump
Input Signature: 571580b26c65f306376d4f64e53cb5c7
Input Data: admin
Input Key Length: 20
Input Data to Add: pcat
或者直接
hashpump -s 571580b26c65f306376d4f64e53cb5c7 -d admin -k 20 -a pcat
就会得到
3e67e8f0c05e1ad68020df30bbc505f5
admin\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc8\x00\x00\x00\x00\x00\x00\x00pcat

第一个是新的签名,把它设置到cookies的getmein里。

1
2
第二个先把\x替换为%后,post提交
password=admin%80%00%00%00%00%00%00%00%00%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%00pcat

就可以通过了。

0%