• 【南邮】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}


  • 相关阅读:
    Android笔记(adb命令--reboot loader)
    Android笔记(预安装APK)
    Linux驱动学习(编写一个最简单的模块)
    const关键字与指针
    C++函数重载遇到了函数默认参数情况
    uboot环境变量分析
    ftp服务
    Samba服务
    mariadb_2 单表的增删改查
    mariadb_1 数据库介绍及基本操作
  • 原文地址:https://www.cnblogs.com/liuyimin/p/7912192.html
Copyright © 2020-2023  润新知