记一道CTF题—PHP双MD5加密+”SALT“弱碰撞绕过

news2025/4/3 6:32:39

通过分析源代码并找到绕过限制的方法,从而获取到flag!

部分源码:

<?php
$name=_POST['username'];
$pass=encode(_POST['password']);
$admin_user = "admin";
$admin_pw = get_hash("0e260265122865008095838959784793");
if ($name == $admin_user && $pass == $admin_pw){
  echo $flag;
}
function get_hash($hash) {
  return preg_replace("/[^0-9a-f]/","",$hash);
}
function encode($str) {
  return get_hash(md5(md5($str) . "SALT"));
}

分析代码:

获取用户输入username,password。

如果用户为admin,

密码经过md5(md5($str) . "SALT")加密后是0e260265122865008095838959784793,则显示flag

(这里0e开头且后面全是数字,且==判断,可以用0e绕过)

所以现在主要是需要找到一个符合要求的password,那就需要爆破了。

编写脚本, 爆破脚本如下:(由于字符集大,爆破时间稍长)

import hashlib  # 导入哈希库(用于计算MD5)
import itertools  # 导入迭代工具(用于生成密码组合)
import string  # 导入字符串工具(用于获取字母数字字符集)


def get_hash(h):
    """清理哈希值,只保留十六进制字符(0-9,a-f)
    对应PHP的:preg_replace("/[^0-9a-f]/","",$hash)"""
    return ''.join(c for c in h if c in '0123456789abcdef')


def encode(pwd):
    """双重MD5加盐哈希函数
    对应PHP的:md5(md5($str) . "SALT")"""
    # 第一层MD5哈希
    first_md5 = hashlib.md5(pwd.encode()).hexdigest()
    # 拼接固定盐值
    with_salt = first_md5 + "SALT"
    # 第二层MD5哈希并清理结果
    return get_hash(hashlib.md5(with_salt.encode()).hexdigest())


def find_magic_hash(max_length=6):
    """查找魔术哈希的主函数
    max_length: 尝试的密码最大长度(默认6位)"""

    # 定义搜索的字符集(所有字母+数字)
    chars = string.ascii_letters + string.digits
    # 目标管理员哈希值(来自被攻击系统)
    admin_hash = "0e260265122865008095838959784793"

    print("正在搜索魔术哈希...")

    # 遍历所有可能的密码长度(从1到max_length)
    for length in range(1, max_length + 1):
        # 生成所有可能的字符组合(笛卡尔积)
        for candidate in itertools.product(chars, repeat=length):
            # 将元组组合转为字符串
            pwd = ''.join(candidate)
            # 计算该密码的哈希值
            hashed = encode(pwd)

            # 检查1:是否完全匹配目标哈希
            if hashed == admin_hash:
                print(f"找到精确匹配!密码: {pwd}")
                return pwd

            # 检查2:是否符合魔术哈希模式(0e开头后面全是数字)
            # PHP弱类型比较中,这类哈希会被视为0
            if hashed.startswith('0e') and hashed[2:].isdigit():
                print(f"找到魔术哈希: {pwd} -> {hashed}")
                # 在PHP的==比较中,这将通过验证
                return pwd

    print("在搜索范围内未找到魔术哈希")
    return None


if __name__ == "__main__":
    # 执行查找
    found = find_magic_hash()
    if found:
        # 输出可用于登录的密码
        print(f"使用此密码登录: '{found}' 配合用户名 'admin'")

等待一段时间后,输入结果

v2ZuN
-md5加密->  efaf929f56d048f67d4c5ddaf347d173
-加盐->  efaf929f56d048f67d4c5ddaf347d173SALT
-再md5加密->  0e876767955247762754333885824541

成功拿到flag。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2325262.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器学习的一百个概念(3)上采样

前言 本文隶属于专栏《机器学习的一百个概念》&#xff0c;该专栏为笔者原创&#xff0c;引用请注明来源&#xff0c;不足和错误之处请在评论区帮忙指出&#xff0c;谢谢&#xff01; 本专栏目录结构和参考文献请见[《机器学习的一百个概念》 ima 知识库 知识库广场搜索&…

分秒计数器设计

一、在VsCode中写代码 目录 一、在VsCode中写代码 二、在Quartus中创建工程与仿真 1、建立工程项目文件md_counter 2、打开项目文件&#xff0c;创建三个目录 3、打开文件trl&#xff0c;创建md_counter.v文件 4、打开文件tb&#xff0c;创建md_counter_tb.v文件 5、用VsCod…

Flink介绍——发展历史

引入 我们整个大数据处理里面的计算模式主要可以分为以下四种&#xff1a; 批量计算&#xff08;batch computing&#xff09; MapReduce Hive Spark Flink pig流式计算&#xff08;stream computing&#xff09; Storm SparkStreaming/StructuredStreaming Flink Samza交互计…

12. STL的原理

目录 1. 容器、迭代器、算法 什么是迭代器? 迭代器的作用&#xff1f; 迭代器的类型&#xff1f; 迭代器失效 迭代器的实现细节&#xff1a; 2. 适配器 什么是适配器&#xff1f; 适配器种类&#xff1a; 3. 仿函数 什么是仿函数&#xff1f; 仿函数与算法和容器的…

OSPFv3 的 LSA 详解

一、复习&#xff1a; OSPFv3 运行于 IPv6 协议上&#xff0c;所以是基于链路&#xff0c;而不是基于网段&#xff0c;它实现了拓扑和网络的分离。另外&#xff0c;支持一个链路上多个进程&#xff1b;支持泛洪范围标记和泛洪不识别的报文&#xff08;ospfv2 的行为是丢弃&…

python 原型链污染学习

复现SU的时候遇到一道python原型链污染的题&#xff0c;借此机会学一下参考&#xff1a; 【原型链污染】Python与Jshttps://blog.abdulrah33m.com/prototype-pollution-in-python/pydash原型链污染 文章目录 基础知识对父类的污染命令执行对子类的污染pydash原型链污染打污染的…

入栈操作-出栈操作

入栈操作 其 入栈操作 汇编代码流程解析如下&#xff1a; 出栈操作 其 出栈操作 汇编代码流程解析如下&#xff1a;

C++ 多态:面向对象编程的核心概念(一)

文章目录 引言1. 多态的概念2. 多态的定义和实现2.1 实现多态的条件2.2 虚函数2.3 虚函数的重写/覆盖2.4 虚函数重写的一些其他问题2.5 override 和 final 关键字2.6 重载/重写/隐藏的对比 3. 纯虚函数和抽象类 引言 多态是面向对象编程的三大特性之一&#xff08;封装、继承、…

Python数据可视化-第3章-图表辅助元素的定制

教材 本书为《Python数据可视化》一书的配套内容&#xff0c;本章为第3章-图表辅助元素的定制 本章主要介绍了图表辅助元素的定制&#xff0c;包括认识常用的辅助元素、设置坐标轴的标签、设置刻度范围和刻度标签、添加标题和图例、显示网格、添加参考线和参考区域、添加注释文…

springboot实现异步导入Excel的注意点

springboot实现异步导入Excel 需求前言异步导入面临的问题实现异步如何导入大Excel文件避免OOM&#xff1f;异步操作后&#xff0c;如何通知导入结果&#xff1f;如何加快导入效率&#xff1f;将导入结果通知给用户后&#xff0c;如何避免重复通知&#xff1f; 优化点完结撒花&…

Linux练习——有关硬盘、联网、软件包的管理

1、将你的虚拟机的网卡模式设置为nat模式&#xff0c;给虚拟机网卡配置三个主机位分别为100、200、168的ip地址 #使用nmtui打开文本图形界面配置网络 [rootrhcsa0306 ~]# nmtui #使用命令激活名为 ens160 的 NetworkManager 网络连接 [rootrhcsa0306 ~]# nmcli c up ens160 #通…

论文阅读:GS-Blur: A 3D Scene-Based Dataset for Realistic Image Deblurring

今天介绍一篇 2024 NeurIPS 的文章&#xff0c;是关于真实世界去模糊任务的数据集构建的工作&#xff0c;论文作者来自韩国首尔大学 Abstract 要训练去模糊网络&#xff0c;拥有一个包含成对模糊图像和清晰图像的合适数据集至关重要。现有的数据集收集模糊图像的方式主要有两…

Cocos Creator Shader入门实战(七):RGB不同算法效果的实现,及渲染技术、宏定义、属性参数的延伸配置

引擎&#xff1a;3.8.5 您好&#xff0c;我是鹤九日&#xff01; 回顾 上篇文章&#xff0c;讲解了Cocos Shader如何通过setProperty动态设置材质的属性&#xff0c;以及设置属性时候的一些注意事项&#xff0c;比如&#xff1a; 一、CCEffect部分properties参数的设定后&…

算法学习记录:递归

递归算法的关键在于回复现场&#xff0c;dfs&#xff08;&#xff09;函数返回值、结束条件、它的作用。 目录 1.综合练习 2. 二叉树的深搜 1.综合练习 39. 组合总和 - 力扣&#xff08;LeetCode&#xff09; 关键在画出的决策树当中&#xff0c;前面使用过的2、3&#xff0c;…

可发1区的超级创新思路(python\matlab实现):MPTS+Lconv+注意力集成机制的Transformer时间序列模型

首先声明,该模型为原创!原创!原创!且该思路还未有成果发表,感兴趣的小伙伴可以借鉴! 应用场景 该模型主要用于时间序列数据预测问题,包含功率预测、电池寿命预测、电机故障检测等等。 一、模型整体架构(本文以光伏功率预测为例) 本模型由多尺度特征提取模块(MPTS)…

三、分类模块,通用组件顶部导航栏Navbar

1.封装通用组件顶部导航栏Navbar 不同效果 Component export struct MkNavbar {Prop title: string Prop leftIcon: ResourceStr $r("app.media.ic_public_left")ProprightIcon: ResourceStr $r("app.media.ic_public_more")PropshowLeftIcon: boolean…

PHY——LAN8720A 寄存器读写 (二)

文章目录 PHY——LAN8720A 寄存器读写 (二)工程配置引脚初始化代码以太网初始化代码PHY 接口实现LAN8720 接口实现PHY 接口测试 PHY——LAN8720A 寄存器读写 (二) 工程配置 这里以野火电子的 F429 开发板为例&#xff0c;配置以太网外设 这里有一点需要注意原理图 RMII_TXD0…

Flutter_学习记录_AppBar中取消leading的占位展示

将leading设置为null将automaticallyImplyLeading设置为false 看看automaticallyImplyLeading的说明&#xff1a; Controls whether we should try to imply the leading widget if null. If true and [AppBar.leading] is null, automatically try to deduce what the leading…

未来派几何风格包装徽标品牌海报标牌logo设计无衬线英文字体安装包 Myfonts – Trakya Sans Font Family

Trakya Sans 是一种具有几何风格的现代无衬线字体。Futura、Avant Garde 等。它具有现代条纹&#xff0c;这是宽度和高度协调的结果&#xff0c;尤其是在小写字母中&#xff0c;以支持易读性。 非常适合广告和包装、编辑和出版、徽标、品牌和创意产业、海报和广告牌、小文本、寻…

C语言深度解析:从零到系统级开发的完整指南

一、C语言的核心特性与优势 1. 高效性与直接硬件控制 C语言通过编译为机器码的特性&#xff0c;成为系统级开发的首选语言。例如&#xff0c;Linux内核通过C语言直接操作内存和硬件寄存器&#xff0c;实现高效进程调度。 关键点&#xff1a; malloc/free直接管理内存&#…