zoukankan      html  css  js  c++  java
  • MD5绕过的技巧

    MD5函数漏洞

    $str1 = $_GET['str1'];
    $str2 = $_GET['str2'];
    if (md5($str1) == md5($str2)){
    die('OK'); }

    • php弱类型比较产生的漏洞

      • 想要满足这个判断只需要构造出MD5值为0e开头的字符串,这样的话弱类型比较会认为是科学技术法,0的多少次方都是0,因此可以绕过
    • 有一些字符串的MD5值为0e开头,这里记录一下

      • QNKCDZO
      • 240610708
      • s878926199a
      • s155964671a
      • s214587387a
    • 还有MD5和双MD5以后的值都是0e开头的

      • CbDLytmyGm2xQyaLNhWn
      • 770hQgrBOjrcqftrlaZk
      • 7r4lGXCH2Ksu2JNT3BYM

    PHP特性

    $str1 = $_GET['str1'];
    $str2 = $_GET['str2'];

    if (md5($str1) === md5($str2)) {
    die('OK');
    }

    • 因为是强类型比较,用0e开头的字符串是没办法绕过的了,但是PHP自身的特性使得可以提交一个数组,而md5函数传入数组的返回值都是NULL,这样就可以绕过强类型比较了。所以这里用GET传入?str1[]=1&str2[]=2就行了
      • 补充:md5()或者sha1()之类的函数计算的是一个字符串的哈希值,对于数组则返回false,如果$str1$str2都是数组则双双返回FALSE, 两个FALSE相等得以绕过

    MD5碰撞

    $str1 = (string)$_GET['str1'];
    $str2 = (string)$_GET['str2'];

    if (md5($str1) === md5($str2)) {
    die('OK');
    }

    • 由于强制类型转换,传数组就不可行了,这里就需要MD5碰撞,对于需要两个内容不同但是MD5值相同的文件,使用Fastcoll就可以了

    绕过md5()来构造攻击语句

    select * from 'admin' where password=md5($pass,true)

    • ffifdyop
      • 这个点的原理是 ffifdyop 这个字符串被 md5 哈希了之后会变成 276f722736c95d99e921722cf9ed621c,这个字符串前几位刚好是 ‘ or ‘6,
        而 Mysql 刚好又会吧 hex 转成 ascii 解释,因此拼接之后的形式是select * from 'admin' where password='' or '6xxxxx'。等价于 or 一个永真式,因此相当于万能密码,可以绕过md5()函数
  • 相关阅读:
    Linux上的.NET框架Mono 2.0发布
    WordPress数据库管理中五个实用的phpMyAdmin技巧
    美国十三个性价比较好的空间推荐 建站可优选
    众多站长将网站移民海外 该如何选择国外VPS
    Mono 开发 (使用.NET技术的你,绝对不能忽略Mono)
    数据库访问的性能问题与瓶颈问题【z】
    IE和FireFox中的event事件
    经典国外网站大放送
    AppScan 7.8.1 简体中文
    用lighttpd+mono在Linux上面跑ASP.NET程序
  • 原文地址:https://www.cnblogs.com/hacker-snail/p/13955722.html
Copyright © 2011-2022 走看看