一,题目--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";}
?>
二,分析
由题目的代码分析可知:
1,字符串QNKCDZO进行md5,得到md5值0e830400451993494058024219903391并赋值给变量$md51。
2,GET请求获取提交a的值并赋值给变量$a,并对$a进行md5操作赋值给$md52。
3,若变量$a不为空,且不等于'QNKCDZO',并$md51与$md52的值内容相等,则可以得到 flag。
4,由于$md51为0e830400451993494058024219903391,在==比较时,会被认为是0*10^830400451993494058024219903391,也就是0。
5,那满足条件的变量$a就是其md5值是0e开头的即可
6,由于是GET请求获取变量$a,构造参数flag显现
三,知识点
- 比较运算符及其特点
- md5