md5 collision(md5碰撞)
题目来源:南京邮电大学网络攻防训练平台 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碰撞)相关推荐
- md5 collision(NUPT_CTF)
md5 collision(NUPT_CTF)(100) md5碰撞 访问题目链接,得到提示input a,而题目是md5 collision,md5碰撞. 根据==用法,0 == 字符串是成立的,从 ...
- bugku-Web writeup md5 collision(NUPT_CTF)
访问题目链接,得到提示input a,而题目是md5 collision,md5碰撞.所以找一个md5是oe开头的值,get方式传参过去,PAYLOAD 120.24.86.145:9009/md5. ...
- 从入门到入土:[SEED-Lab]MD5碰撞试验|MD5collgen实验|linux|Ubuntu|MD5 Collision Attack Lab|详细讲解
此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...
- BugkuCTF_Web——“never give up”、“你从哪里来”、“md5 collision(NUPT_CTF)”、“程序员本地网站”
文章目录 一."never give up" 二."你从哪里来" 三."md5 collision(NUPT_CTF)" 四."程 ...
- bugku ctf md5 collision(NUPT_CTF)
这道题现在来看应该是少给了 源码 我在网上搜别人的解析都有源码也不知道他们在那里找到的嘻嘻嘻 附上把 <?php $md51 = md5('QNKCDZO'); $a = @$_GET['a'] ...
- 一文读懂md5,md5有什么用,什么是md5加盐
md5是一种密码散列函数,在计算机安全领域得到广泛的应用.本文将带大家了解一些md5的知识点,什么是md5,md5有什么用,什么是md5加盐,为什么md5不可逆,为什么md5可能会被解密?帮助大家快速 ...
- 【MD5】什么是MD5?md5的简要描述
什么是MD5 一.MD5概述 二.MD5的主要特点 三.MD5的性质 四.MD5破解 五.MD5防破解 六.MD5的用途 一.MD5概述 MD5:英文全称是 Message-Digest Algori ...
- 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) 报错截图: 分 ...
- 什么叫MD5,MD5通常做什么用处,为什么MD5不可逆,用做密码加密的时候仍然可能会被解密?
这里是修真院后端小课堂,每篇分享文从 [背景介绍][知识剖析][常见问题][解决方案][编码实战][扩展思考][更多讨论][参考文献] 八个方面深度解析后端知识/技能,本篇分享的是: [什么叫MD5, ...
最新文章
- 【AMAD】import-string -- 通过字符串来import一个对象
- oracle bom展开 sql,Oracle EBS-SQL (BOM-15):检查多层BOM(含common BOM).sql
- [改善Java代码]构造函数尽量简化
- 防火墙和路由器的滑铁卢:NAT Slipstreaming攻击
- 配置oracle方言类,Oracle环境下的Hibernate方言配置
- java executor_Java并发编程73道面试题及答案——面试稳了
- python 判断点在随机多边形内_Python确定散点是否在多边形内,python,判断,内部
- 分享超级表格用户在知乎上与我们的对话
- 陕西省高等数学竞赛_陕西省高等数学竞赛试题答案
- 三种修改windows系统MAC地址方法
- 【codeforces 417D】Cunning Gena
- python自动登录qq邮箱_python实现自动登录qq邮箱,写邮件并发送
- 化痰止咳平喘药题库【1】
- 【沃顿商学院学习笔记】宏观经济学——11全球治理Global Governance
- 计算机专业毕业设计致谢,那些笑哭的毕业论文致谢
- 授信合同与贷款合同的区别
- 关于HTML在线编辑文本的编码与解码
- MySQL通过sql语句获取当前日期|时间|时间戳
- 笑破肚皮!考驾照现场的爆笑故事!
- C# 图片压缩(指定大小压缩和指定尺寸压缩)