题目来源:南京邮电大学网络攻防训练平台 Web题 md5 collision

解题过程:

点开题目标题,呈现在眼前的是一段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";
}

这段代码什么意思呢?

首先,变量md51的值是经过md5加密的字符串QNKCDZO,字符串QNKCDZO经过md5加密之后的值为:0e830400451993494058024219903391。之后的变量a,分析源代码可知,如果a的值不为QNKCDZO,并且md5的值也为0e830400451993494058024219903391,则会输出flag。根据之前的了解,不过好像除了QNKCDZO,并没有其他字符串的md5值为0e830400451993494058024219903391。再回头看源码,注意到判断md51和md52是否相等的时候,使用$md51 == %md52,这里使用的是 == 而不是 === ,也就是说md51和md52不需要完全相等。

拓展:一个数字和一个字符串进行比较,PHP会把字符串转换成数字再进行比较。PHP转换的规则的是:若字符串以数字开头,则取开头数字作为转换结果,若无则输出0。例如:123abc转换后应该是123,而abc则为0,0==0这当然是成立的啦!所以,0 ==’abc’是成立的。当有一个对比参数是整数的时候,会把另外一个参数强制转换为整数。

这个题目也是这个原理,如果你提前知道md5碰撞的概念,同时知道了在php中md5中的0e的比较,这道题目就非常简单了。

如果md的值是以0e开头的,那么就与其他的0e开头的md5值是相等的,这里给大家列举了一写:常见的MD5碰撞:md5值为0e开头

php代码测试:

<?php
$a = md5('240610708'); // = 0e462097431906509019562988736854
$b = md5('QNKCDZO'); // = 0e830400451993494058024219903391
var_dump($a == $b);
?>

输出:true

这样就更加证明了这一点。

所以,这里我们就给a传值经过md5加密后是0e开头的字符串,以传入字符串s878926199a,为例:

end!

总结:

  • php使用==比较数字和字符串时,将字符串转换成数字后与数字进行比较。
  • php字符串转换成数字的规则是:
    • 字符串以数字开头:取前面的数字
    • 字符串不以数字开头:0
  • 如果==两侧的字符串都是以0e开头,并且后面还是数字,就会被解释成科学计数法,也就是0的多少多少次幂,也就是后面的数字无论是多少,最后结果都为0.
  • 上一点也是这道题的另一种思路。找到另一个字符串,这个字符串的md5值也以0e开头。
  • 以0e开头的串很危险!!!

md5 collision(md5碰撞)相关推荐

  1. md5 collision(NUPT_CTF)

    md5 collision(NUPT_CTF)(100) md5碰撞 访问题目链接,得到提示input a,而题目是md5 collision,md5碰撞. 根据==用法,0 == 字符串是成立的,从 ...

  2. bugku-Web writeup md5 collision(NUPT_CTF)

    访问题目链接,得到提示input a,而题目是md5 collision,md5碰撞.所以找一个md5是oe开头的值,get方式传参过去,PAYLOAD 120.24.86.145:9009/md5. ...

  3. 从入门到入土:[SEED-Lab]MD5碰撞试验|MD5collgen实验|linux|Ubuntu|MD5 Collision Attack Lab|详细讲解

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  4. BugkuCTF_Web——“never give up”、“你从哪里来”、“md5 collision(NUPT_CTF)”、“程序员本地网站”

    文章目录 一."never give up" 二."你从哪里来" 三."md5 collision(NUPT_CTF)" 四."程 ...

  5. bugku ctf md5 collision(NUPT_CTF)

    这道题现在来看应该是少给了 源码 我在网上搜别人的解析都有源码也不知道他们在那里找到的嘻嘻嘻 附上把 <?php $md51 = md5('QNKCDZO'); $a = @$_GET['a'] ...

  6. 一文读懂md5,md5有什么用,什么是md5加盐

    md5是一种密码散列函数,在计算机安全领域得到广泛的应用.本文将带大家了解一些md5的知识点,什么是md5,md5有什么用,什么是md5加盐,为什么md5不可逆,为什么md5可能会被解密?帮助大家快速 ...

  7. 【MD5】什么是MD5?md5的简要描述

    什么是MD5 一.MD5概述 二.MD5的主要特点 三.MD5的性质 四.MD5破解 五.MD5防破解 六.MD5的用途 一.MD5概述 MD5:英文全称是 Message-Digest Algori ...

  8. Xshell安装sql报错:······ RSA sha1 ((MD5) PGP) md5 NOT OK (MISSING KEYS: (MD5) PGP#3a79bd29)

    文章目录 Xshell安装sql报错:······ RSA sha1 ((MD5) PGP) md5 NOT OK (MISSING KEYS: (MD5) PGP#3a79bd29) 报错截图: 分 ...

  9. 什么叫MD5,MD5通常做什么用处,为什么MD5不可逆,用做密码加密的时候仍然可能会被解密?

    这里是修真院后端小课堂,每篇分享文从 [背景介绍][知识剖析][常见问题][解决方案][编码实战][扩展思考][更多讨论][参考文献] 八个方面深度解析后端知识/技能,本篇分享的是: [什么叫MD5, ...

最新文章

  1. 【AMAD】import-string -- 通过字符串来import一个对象
  2. oracle bom展开 sql,Oracle EBS-SQL (BOM-15):检查多层BOM(含common BOM).sql
  3. [改善Java代码]构造函数尽量简化
  4. 防火墙和路由器的滑铁卢:NAT Slipstreaming攻击
  5. 配置oracle方言类,Oracle环境下的Hibernate方言配置
  6. java executor_Java并发编程73道面试题及答案——面试稳了
  7. python 判断点在随机多边形内_Python确定散点是否在多边形内,python,判断,内部
  8. 分享超级表格用户在知乎上与我们的对话
  9. 陕西省高等数学竞赛_陕西省高等数学竞赛试题答案
  10. 三种修改windows系统MAC地址方法
  11. 【codeforces 417D】Cunning Gena
  12. python自动登录qq邮箱_python实现自动登录qq邮箱,写邮件并发送
  13. 化痰止咳平喘药题库【1】
  14. 【沃顿商学院学习笔记】宏观经济学——11全球治理Global Governance
  15. 计算机专业毕业设计致谢,那些笑哭的毕业论文致谢
  16. 授信合同与贷款合同的区别
  17. 关于HTML在线编辑文本的编码与解码
  18. MySQL通过sql语句获取当前日期|时间|时间戳
  19. 笑破肚皮!考驾照现场的爆笑故事!
  20. C# 图片压缩(指定大小压缩和指定尺寸压缩)

热门文章

  1. java swing 路径选择_java swing 文件选择,设置默认文件选择路径,桌面路径
  2. 爱快路由工控机结合爱快AP h1设备使用说明
  3. 第二十三章 使用 %Status 值
  4. 回拨电话该怎样分析和治理
  5. How to find our career ideal?
  6. vue项目启动命令个人笔记
  7. PHP开发搭建游戏联运sdk
  8. Java 14 都快来了,为什么还有这么多人固守Java 8?
  9. TwinCAT 3 控制汇川伺服 startup添加索引列表
  10. matlab显示2dpsk误码率,基于MATLAB的2DPSK调制与解调系统的分析.doc