哈希(md5)绕过

哈希(md5)绕过

wspzq

2025-05-18 发布19 浏览 · 0 点赞 · 0 收藏

1.md5弱比较
PHP在处理哈希字符串时,会利用!=或==来对哈希值进行比较,他把每一个人以0E开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以0E开头的,那么PHP会认为他们相同,都是0

登录的哈希绕过

$a!=$b

Md($a)==md5($b)

1.弱比较

PHP中的==和===在进行比较时,数字和字符串比较或者涉及到数字内容的字符串,则字符串会被转换为数值并且比较按照数值来进行。按照此理,我们可以上传MD5编码后是0E的字符串,在比较时PHP会将0e开头的数据认为是科学计数法,而后面的数据会被当做0

2.强比较

PHP中的===在比较时先判断字符串类型是否相同,再比较值

数组绕过:MD5不能加密数组,在加密数组的时候会返回NULL,如果设置没有判断变量类型或内容,就可以使用,因此强弱比较都是可以使用数组绕过的

  1. MD5 碰撞攻击

MD5 碰撞是指找到两段不同的数据,使得它们经过 MD5 计算后得到相同的哈希值。虽然理论上可能存在无限多对这样的碰撞数据,但在实际操作中有专门的工具可以帮助快速生成这些数据对。

例如,FastColl 工具可以用来生成具有相同 MD5 值的不同文件1。这种方法通常用于伪造数字签名或替换文件内容而保持校验值不变。

以下是md5碰撞攻击的具体操作方法
1.工具选择
目前最常用的生成 MD5 碰撞的工具有 FastColl 和 HashClash。这些工具能够帮助用户快速生成具有相同 MD5 值的不同文件或消息。

  • FastColl: 专注于生成 PDF 文件或其他二进制格式的碰撞实例。
  • HashClash: 更加灵活,支持多种类型的文件和自定义配置选项。
    2.准备环境
    为了运行上述工具,需先安装必要的依赖库和编译器。以下是以 Linux 平台为例的准备工作:
    sudo apt-get update
    && sudo apt-get install build-essential git python3-pip
    git clone https://github.com/cr-marcstevens/hashclash.git
    cd hashclash/src
    make
  1. 配置参数
    根据需求调整工具的配置文件或命令行参数。例如,在 HashClash 中可通过指定 -m 参数设置要生成的消息类型(如纯文本、图片等)。默认情况下会生成两份二进制数据作为碰撞结果。
  2. 执行生成任务
    启动工具以开始生成碰撞数据对的过程。以下是具体的命令示例:
    ./hashclash -n 2 -o
    collision_output/
    该指令告诉程序创建两个具有相同 MD5 值却完全不一样的文件,并将其保存至 collision_output/ 目录下。
    完成后,您应该能在指定路径看到类似以下命名模式的结果文件:
  • message1.bin
  • message2.bin
    这两个文件即为我们所需的 MD5 碰撞数据对。
  1. 验证结果
    最后一步是对生成的数据进行验证,确认它们确实拥有相匹配的 MD5 散列值。可以借助 Python 脚本来实现这一目的:
    import hashlib
    file_paths =
    ['collision_output/message1.bin', 'collision_output/message2.bin']
    for path in
    file_paths:
    with open(path, 'rb') as
    f:
    data = f.read()
    md5_hash =
    hashlib.md5(data).hexdigest()
    print(f"File {path} has MD5:
    {md5_hash}")
    正常情况下,上述代码打印出来的两条记录应当显示出一致的十六进制字符串表示形式。
请前往 登录/注册 即可发表您的看法…