请选择 进入手机版 | 继续访问电脑版
查看: 1527|回复: 2

由一道CTF题引申的思考

[复制链接]
  • TA的每日心情

    2018-9-22 14:28
  • 签到天数: 157 天

    [LV.7]常住居民III

    发表于 2016-2-13 19:31:02 | 显示全部楼层 |阅读模式
    很久以前打了场CTF比赛,在论坛里求解,此时90大大丢给了我答案(在这里谢谢90大大),然而我和一些论坛里的朋友并不知道原理。在这里与大家分享一下。
    -------------------------------------------------------------------华丽丽的分割线-----------------------------------------------------------------------------------------
    题目源代码如下:
    [PHP] 纯文本查看 复制代码
    <?php
     //just break the md5 algorithm and make a collision ;)
     include('config.php');
     if(empty($_GET['md5'])) die(show_source(__FILE__));
     if($_GET['md5']!='400035577431' && md5($_GET['md5']) == md5('400035577431')) echo $flag;
     ?>

    然后比赛就是拿flag。这里是要给出一个md5满足不等于400035577431,但是md5加密后==。
    因为php是一种弱类型的语言。双==其实就是弱类型。

    这里举出一些例子:
    [PHP] 纯文本查看 复制代码
    0=='0'//True
    123=='123'//True
    123=='123abc'//True
    'abc'=='0'//True


    现在看一下90大大给的md5=0e091414744693913505115617781878,这一串intval()之后就是0,而400035577431加密后为0e091414744693913505115617781878,intval()之后也是0,所以相等。


    回复

    使用道具 举报

  • TA的每日心情

    3 天前
  • 签到天数: 928 天

    [LV.10]以坛为家III

    发表于 2016-2-13 19:42:24 | 显示全部楼层
    啊想起来了,这题目有段日子了

    点评

    是有些时候了。。。  详情 回复 发表于 2016-2-13 22:11
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2018-9-22 14:28
  • 签到天数: 157 天

    [LV.7]常住居民III

     楼主| 发表于 2016-2-13 22:11:01 | 显示全部楼层
    90_ 发表于 2016-2-13 19:42
    啊想起来了,这题目有段日子了

    是有些时候了。。。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    快速回复 返回顶部 返回列表