• 【南邮】md5 collision write up


    源码:

    <?php
    $md51 = md5('QNKCDZO');
    $a = @$_GET['a'];
    $md52 = @md5($a);
    if(isset($a)){
    if ($a != 'QNKCDZO' && $md51 == $md52) {
        echo "nctf{*****************}";
    } else {
        echo "false!!!";
    }}
    else{echo "please input a";}
    ?>

    MD5碰撞的概念:

    从根本上讲,MD5算法是一种摘要算法,它可以从多个字节组成的串中计算出由32个字节构成的“特征串”。对于超过32字节的串来说,MD5计算得出的值必然是其一个子集,所以必然存在两个(或更多)不同的串能够得出相同MD5值的情况。这种情况就叫做MD5碰撞。

    php关于==号是这样处理的,如果一边是整型,另一边也需要是整型。

    0e545993274517709034328855841020
    这是一个整数,在php里是理解为0*10^4549...20的意思,那么其值是0

    同样

    0e342768416822451524974117254469
    这是一个整数,在php里是理解为0*10^34..69的意思,那么其值是0

    md5('s878926199a')=0e545993274517709034328855841020
    md5('s155964671a')=0e342768416822451524974117254469
    //可以看到两者的md5值都是以0e开头的,则
    md5('s878926199a')==md5('s155964671a') //就是True

    所以 构造提交a=s155964671a

    得到flag:nctf{md5_collision_is_easy}


  • 相关阅读:
    php redis操作
    textarea 文本框根据输入内容自适应高度
    ThinkPHP5 微信接口对接公共类
    ThinkPHP5 excel 导入/导出
    NGUI 学习使用
    Unity3d 背景、音效 播放 简单demo
    Unity3D教程:制作与载入AssetBundle
    BuildPipeline.BuildAssetBundle 编译资源包
    C# 如何将对象写入文件
    unity3d IO操作
  • 原文地址:https://www.cnblogs.com/liuyimin/p/7912192.html
Copyright © 2020-2023  润新知