php中hash比较缺陷

本文探讨了PHP中处理哈希时存在的潜在缺陷,尤其是以0e开头的哈希值可能导致的等价性错误。当两个不同密码的哈希值以0e开头时,PHP可能会误判它们相等。此外,还介绍了弱类型比较中的问题,以及如何通过数组绕过某些验证。文章提到了MD5的强碰撞问题,并提供了示例来说明即使字符串不同,它们的MD5值也可能相同,从而揭示了安全风险。
摘要由CSDN通过智能技术生成

php中hash比较缺陷

哈希算法(Hash Algorithm)又称散列算法、散列函数、哈希函数,哈希算法主要有MD4MD5SHA

php中处理hash时的缺陷

我们比较 hash字符串的时候,常常用到 等于( == )、不等于( != )来进行比较

一个hash的值如果是以0e开头,并且后面全是数字的话,在php中这种特殊的hash(也就是所谓的Magic Hash),会被解析为科学计数法0 x 10^n,即和0相等

所以如果两个不同的密码经过哈希以后,其哈希值都是以0e开头的,那么php将会认为他们相同,都是0

此外,0 == 字符会被认为是正确的,可以绕过验证

强弱类型比较

  • == 弱类型比较中,字符'0e123'和字符'0e456'虽然是字符类型,但是因为 == 比较不比较数据类型,只比较值,结果都是0,所以相等,返回true
  • === 强类型比较中,字符'0e123'和字符'0e456'在比较数据类型的时候就被当作字符类型,而字符'0e123'和字符'0e456'当然不相等,所以返回false

这种缺陷在PHP程序中使用哈希算法加密(如md5md4SHA1等)进行有关强弱类型比较的地方很容易被用来进行绕过,在CTF题目中算是比较常见的

Magic Hashes

  • hash以0e开头
    • MD5
    Plaintext MD5 Hash
    240610708 0e462097431906509019562988736854
    QLTHNDT 0e405967825401955372549139051580
    QNKCDZO 0e830400451993494058024219903391
    PJNPDWY 0e291529052894702774557631701704
    NWWKITQ 0e763082070976038347657360817689
    NOOPCJF 0e818888003657176127862245791911
    MMHUWUV 0e701732711630150438129209816536
    MAUXXQC 0e478478466848439040434801845361
    IHKFRNS 0e256160682445802696926137988570
    GZECLQZ 0e537612333747236407713628225676
    GGHMVOE 0e362766013028313274586933780773
    GEGHBXL 0e248776895502908863709684713578
    EEIZDOI 0e782601363539291779881938479162
    DYAXWCA 0e424759758842488633464374063001
    DQWRASX 0e742373665639232907775599582643
    BRTKUJZ 00e57640477961333848717747276704
    ABJIHVY 0e755264355178451322893275696586
    aaaXXAYW 0e540853622400160407
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值