MD5长度拓展攻击简要笔记

看了好多次,每次总是记不住,所以现在边看边做笔记加深理解。= =

1. MD5加密原理


  1. 首先是分组。MD5加密将二进制字符串按照512位(也就是64字节)分为一组,然后再把每组分成16个子分组,每组32位。
  2. 分完组后就要进行填充,填充分为两部。首先使他补充到N*64+56字节。填充的规则(按照二进制)是先填一个1,之后再填0。按照16进制来算,就是先填一个8,然后填0,直到长度满足N*64+56为止。
  3. 填充的第二步。之前的长度已经是N*64+56字节了,接下来我们还要填充8字节,用来描述原始二进制字符串的长度。这样最后的数据就是(N+1)*64字节。例如,'abcd'这四个字母,他的长度是4个字节也就是32bit,用十六进制来描述其长度的话就是20,这样最后最后八个字节就是20000000。(为什么是20000000而不是00000020呢,因为md5中存储都是用的小端方式)。如果原始二进制字符串的长度超出了64位(8字节)所能表示的,就只取低长度的低64位。
  4. MD5算法中有四个被称作链接变量的整数参数,他们的长度都是32位,分别是:A=0x01234567,B=0x89abcdef,C=0xfedcba98,D=0x76543210。(但是在md5中要按照上面说的小端方式)
  5. 把ABCD的值赋值给abcd,用abcd对一个分组的子分组进行一系列神奇的运算,得出新的abcd,然后这个新的abcd又和下一个分组进行神奇的运算,以此类推,最后就会得出一个128位加密后的值,用16进制来表示也就是我们看到的32位的md5。

2. 加盐措施介绍


以往网站开发人员常常把用户密码的md5值存储在数据库,但攻击者常常把一些常用字符串生成md5字典,通过比较网站数据库密码的md5值得到真正的密码。为了加强安全,开发人员又通过加盐(salt)的方式来存储密码数据,具体措施是自定义一个字符串,这个字符串谁都看不到。当用户进行注册的时候,把md5(salt+密码)的值进行存储,以后用户每次登陆都在后台把用户输入的密码加盐再md5加密与数据库进行比较。由于攻击者不知道盐是什么,很难通过爆破的方式来获取密码。

3. MD5拓展攻击


MD5拓展攻击正是针对加盐措施的一种升级后的攻击手段,我们可以在不知道盐的情况下得出加盐后的md5的值。但需要在以下条件才能实现:

  1. 我们要知道salt的长度。
  2. 要知道任意一个由salt加密后的md5值,并且知道没有加盐的明文。
  3. 用户可以提交md5值。

实现原理

接下来我们一道ctf题作为例子,源码如下:

<?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.");
}
?>

题目里面已知salt的明文长度为15,,并且salt+adminadmin的md5为571580b26c65f306376d4f64e53cb5c7,它是由salt + 'adminadmin' + 填充数据再经过运算得来的。

由之前介绍的md5算法我们得知对每一个子分组进行运算的时候,都是根据上一轮的abcd来算的,我们把已知的md5分为四组并且按照小端排序:

a = 0xb2801557
b = 0x06f3656c
c = 0x644f6d37
d = 0xc7b53ce5

如果我们想在不知道salt的情况下获得salt加密后的md5,也就是**salt + 'adminadmin' + 填充数据 + 'balabala' **的md5值,就可以利用上面的abcd对'balabala'进行上面所说的md5运算就可以了。

这里可以运用一个HashPump的工具

git安装后,直接命令行输入:

hashpump -s 571580b26c65f306376d4f64e53cb5c7 -d admin -k 20 -a balabala

就可以得到:

e6a87a1dac03d979a507a8b3a3a53f50
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\x00balabala

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,311评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,339评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,671评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,252评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,253评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,031评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,340评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,973评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,466评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,937评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,039评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,701评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,254评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,259评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,497评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,786评论 2 345

推荐阅读更多精彩内容