【ctf知识】php中md5的漏洞

这个来源于bugku的一道题 bugku web 备份是个好习惯

原理

在php中,由于双等号在判断值上有漏洞,分为以下三种:

  1. 如果一个字符串为 “合法数字+e+合法数字”类型,将会解释为科学计数法的浮点数
  2. 如果一个字符串为 “合法数字+ 不可解释为合法数字的字符串”类型,将会被转换为该合法数字的值,后面的字符串将会被丢弃
  3. 如果一个字符串为“不可解释为合法数字的字符串+任意”类型,则被转换为0,如…==0是成立的

也就是下列三种情况输出都为True

  1. 1e10==1
  2. 1'1111==1
  3. 'a'==0

利用

以下的字符串在转换以后均以0e开头,因此在md5($key1) == md5($key2) and $key1 != $key2就可以利用原理中的第一种情况来绕过,以达到True的目的

QNKCDZO
0e830400451993494058024219903391
 
s878926199a
0e545993274517709034328855841020
  
s155964671a
0e342768416822451524974117254469
  
s214587387a
0e848240448830537924465865611904
  
s878926199a
0e545993274517709034328855841020
  
s1091221200a
0e940624217856561557816327384675

参考

md5绕过(Hash比较缺陷)_PHP_Gunther的博客-CSDN博客

PHP渗透中的奇淫技巧–检查相等时的漏洞 - admin-神风 - 博客园

你可能感兴趣的:(#,web方面)