哈希拓展攻击CTF题做法

目录

基础:

盐(Salt):

哈希长度拓展攻击:

kali下载相关工具hash-ext-attack:

hash拓展题目特征:

哈希拓展ctf题:

2023楚慧杯upload_shell

实验吧之让我进去:


前言:具体怎么加密解密补位的原理我不懂,深入理解的部分我在文末挂了链接,以下也只是我做题的结论和通解,可能不准确(但是做题还挺准确),有错误欢迎指出:

基础:

盐(Salt):

是在密码加密过程中引入的一个随机值,它与密码结合使用,目的是增加密码的复杂性和安全性。在密码加密中,常见的做法是将用户提供的密码进行哈希处理,然后存储哈希值而不是明文密码。这样可以防止密码被明文泄露,但也带来了一些安全风险。盐的作用是对密码进行加强并增加密码的熵。具体而言,它通过在密码中添加一个随机生成的字符串,使得相同的密码在加密后生成不同的哈希值。这样即使两个用户拥有相同的密码,它们的哈希值也会不同,从而增加了破解密码的难度。使用盐的典型示例是将盐值和密码一起输入到哈希函数中进行计算,然后将盐值和生成的哈希值一起存储在数据库中。在验证密码时,系统会从数据库中获取盐值,并将用户输入的密码和盐值一起传递给哈希函数进行匹配。

哈希长度拓展攻击:

可以被用来构造一个新的有效哈希值,从而绕过原有的认证。这是因为,MD5和SHA-1算法的哈希函数存在一个特定的性质:给定一个消息M和其哈希值H,可以很容易地计算出一个新的消息M',使得M'的哈希值为任意指定的值H'。也就是说我们可以在不知道a的字符串具体字母:(前提知道字符串a的md5值和字符串a的长度) 可以算出字符串(a+b)的md5值 ,b为你自己构造的一个字符串。

如果一个应用程序是这样操作的:

  1. 准备了一个密文和一些数据构造成一个字符串里,并且使用了MD5之类的哈希函数生成了一个哈希值(也就是所谓的signature/签名)
  2. 让攻击者可以提交数据以及哈希值,虽然攻击者不知道密文
  3. 服务器把提交的数据跟密文构造成字符串,并经过哈希后判断是否等同于提交上来的哈希值

这个时候,该应用程序就易受长度扩展攻击,攻击者可以构造出{$secret || data || attacker_controlled_data}的哈希值

kali下载相关工具hash-ext-attack:

git clone https://github.com/shellfeel/hash-ext-attack.git

cd /home/kali/hash-ext-attack/
pip install -r requirements.txt

hash拓展题目特征:

通常会给出$secert+“一串明文”的md5值,虽然不知道$secret是什么但是会给出$secret的长度,出现这种情况题目就大概率掺杂了哈希拓展攻击

哈希拓展ctf题:

2023楚慧杯upload_shell

 <?php
session_start();
highlight_file(__FILE__);
include "./my.php";
echo strlen($secret);
echo"<br>";
echo(md5($secret."adminpassword"));
@$username = urldecode($_POST["username"]);
@$password = urldecode($_POST["password"]);
if (!empty($_COOKIE["source"])) {
    if ($username === "admin" && $password != "password") {
         if ($_COOKIE["source"] === md5($secret.$username.$password)) {

         // 在验证用户后,如果登录成功,设置会话变量来表示用户已登录
          $_SESSION['loggedin'] = true;
          $_SESSION['username'] = 'admin'; // 用户名
          $_SESSION['role'] = 'admin'; // 用户角色或权限
          echo "<script>window.location.href='upload.php';</script>";
        }
        else {
             echo "<br>"; 
            die ("你的cookie好像不太对啊");
        }
    }
    else {
        die ("可不会轻易放你进去");
    }
}
    
14
879bd10c8628894d388c068a25326c21

关于该源码解析:

  1. 首先,通过highlight_file(__FILE__);将当前文件的源代码显示在页面上,这可能是为了方便调试和查看代码。

  2. 通过include "./my.php";引入了一个名为"my.php"的文件,其中可能包含了一些相关的变量或函数。

  3. echo strlen($secret);输出了变量$secret的长度为14。

  4. echo(md5($secret."adminpassword"));计算了$secret与字符串"adminpassword"拼接后的MD5哈希值,并将结果输出。

  5. 通过$_POST获取了通过POST请求发送的"username"和"password"参数,并使用urldecode对其进行解码。

  6. 如果存在名为"source"的Cookie,执行以下逻辑:

    • 检查输入的用户名是否为"admin",并且密码不等于"password"。
    • 检查Cookie中的"source"是否等于md5($secret.$username.$password)的值。
  7. 如果验证通过,则设置会话变量来表示用户已登录,包括$_SESSION['loggedin'] = true;$_SESSION['username'] = 'admin';$_SESSION['role'] = 'admin';,然后重定向到"upload.php"页面。

  8. 如果验证未通过,输出错误信息"你的cookie好像不太对啊"。

  9. 如果用户名不是"admin"或密码为"password",则输出错误信息"可不会轻易放你进去"。

我们注意到,md5($salt+“adminroot”)=e6ccbf12de9d33ec27a5bcfb6a3293df,对于未知salt的MD5或SHA-1哈希,哈希长度拓展攻击可以被用来构造一个新的有效哈希值,从而绕过原有的认证。这是因为,MD5和SHA-1算法的哈希函数存在一个特定的性质:给定一个消息M和其哈希值H,可以很容易地计算出一个新的消息M',使得M'的哈希值为任意指定的值H'。也就是说我们可以在不知道a的字符串具体字母:(前提知道字符串a的md5值和字符串a的长度) 可以算出字符串(a+b)的md5值 ,b为你自己构造的一个字符串。

具体怎么加密解密补位的原理我不懂,以下也只是我做题的结论,可能不准确,有错误欢迎指出:

这里我们得知了md5($secret."adminpassword"),即$secret拼接上adminpassword这13个字符等于879bd10c8628894d388c068a25326c21,secret的长度是14,明文的长度是13,明文加秘钥的长度必须要有27。秘钥的长度可以是14到27(14加13),规定了username=admin,下面是把admin当做秘钥的一部分塞进秘钥的长度里,那么秘钥长度就是19,已知明文就是password(不能是其他的,因为我们已知的MD5值就是$secret+adminpassword拼接起来的MD5值),已知hash就是源码里给出的879bd10c8628894d388c068a25326c21,扩展字符随便。把新hash和新明文url塞进包里上传绕过验证

后面对上传页面用sqlmap得到flag

 

实验吧之让我进去:

靶场链接:http://ctf5.shiyanbar.com/web/kzhan.php

抓包把里面的source=0改成source=1,得到源码

源码:

$flag = "XXXXXXXXXXXXXXXXXXXXXXX";
$secret = "XXXXXXXXXXXXXXX"; // This secret is 15 characters long for security!

$username = $_POST["username"];
$password = $_POST["password"];

if (!empty($_COOKIE["getmein"])) {
    if (urldecode($username) === "admin" && urldecode($password) != "admin") {
        if ($COOKIE["getmein"] === md5($secret . urldecode($username . $password))) {
            echo "Congratulations! You are a registered user.\n";
            die ("The flag is ". $flag);
        }
        else {
            die ("Your cookies don't match up! STOP HACKING THIS SITE.");
        }
    }
    else {
        die ("You are not an admin! LEAVE.");
    }
}

setcookie("sample-hash", md5($secret . urldecode("admin" . "admin")), time() + (60 * 60 * 24 * 7));

if (empty($_COOKIE["source"])) {
    setcookie("source", 0, time() + (60 * 60 * 24 * 7));
}
else {
    if ($_COOKIE["source"] != 0) {
        echo ""; // This source code is outputted here
    }
}

 代码分析:

  1. 变量 $flag 存储了一个标志字符串,表示注册用户成功登录后可以获取到flag。
  2. 变量 $secret 是用于加密和验证的秘密字符串,长度为 15 个字符。
  3. 变量 $username$password 存储了从用户输入中获取的用户名和密码。
  4. 如果存在名为 "getmein" 的 Cookie,会执行以下判断:
    • 判断用户名解码后是否等于 "admin",且密码解码后不等于 "admin"。

    • 如果 "getmein" Cookie 的值等于将秘密字符串与用户名和密码解码拼接后进行哈希得到的结果(md5(secret.urldecode(secret.urldecode(username . $password)))。
    • 如果以上条件都满足,则输出一条成功登录的消息,并终止程序并显示标志字符串。
    • 否则,终止程序并显示错误消息。
  5. 设置名为 "sample-hash" 的 Cookie,值为将秘密字符串与用户名为 "admin",密码为 "admin" 的组合进行哈希得到的结果(md5($secret . urldecode("admin" . "admin"))),有效期为 7 天。
  6. 如果不存在名为 "source" 的 Cookie,会设置一个名为 "source" 的 Cookie,值为 0,有效期为 7 天。
  7. 如果存在名为 "source" 的 Cookie,会进行一个条件判断:
    • 如果 "source" Cookie 的值不等于 0,则输出一段空字符串。这可能是为了输出当前的源代码。

重点在这一行:

setcookie("sample-hash", md5($secret . urldecode("admin" . "admin")), time() + (60 * 60 * 24 * 7));

代码逻辑如下:

  1. 使用md5($secret . urldecode("admin" . "admin"))计算了字符串"adminadmin"与变量$secret拼接后的MD5哈希值。

  2. setcookie("sample-hash", md5($secret . urldecode("admin" . "admin")), time() + (60 * 60 * 24 * 7));将名为"sample-hash"的Cookie设置为上一步计算得到的哈希值。

  3. time() + (60 * 60 * 24 * 7)设置了Cookie的过期时间,当前时间加上7天的秒数,即表示Cookie在7天后过期。

抓包后再cookie里能看见sample-hash的值,也就是说我们已知$secert+adminadmin的md5值,还知道 secert的长度为15,我们题里面password不能为admin 但必须是admin开头的字符,因为前提是已知secert+adminadmin的md5值,把admin传给username,新明文传给password,以下两种都能成功得到flag,但是注意第二种在传给password的时候需要删掉一个admin,以保证$username . $password拼接的结果是adminadmin+一串东西,而不是adminadminadmin+一串东西,毕竟我们知道的不是$secert+adminadminadmin的md5值

相关深度理解的链接:

hash哈希长度扩展攻击解析(记录一下,保证不忘)_攻击者对hash算法进行长度扩展攻击的是-CSDN博客

 Everything you need to know about hash length extension attacks | SkullSecurity Blog

用MD5实现hash长度扩展攻击 By Assassin_hash_extender-CSDN博客从一个题目到hash扩展攻击 - 先知社区用MD5实现hash长度扩展攻击 By Assassin_hash_extender-CSDN博客

实验吧之【让我进去】(哈希长度扩展攻击)-CSDN博客 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【量化金融】证券投资学

韭菜的自我修养 第一章&#xff1a; 基本框架和概念1.1 大盘底部形成的技术条件1.2 牛市与熊市1.3 交易系统1.3.1 树懒型交易系统1.3.2 止损止损的4个技术 第二章&#xff1a;证券家族4兄弟2.1 债券&#xff08;1&#xff09;债券&#xff0c;是伟大的创新&#xff08;2&#x…

Kafka日志

位置 server.properties配置文件中通过log.dir指定日志存储目录 log.dir/{topic}-{partition} 核心文件 .log 存储消息的日志文件&#xff0c;固定大小为1G&#xff0c;写满后会新增一个文件&#xff0c;文件名表示当前日志文件记录的第一条消息的偏移量。 .index 以偏移…

【Spring实战】04 Lombok集成及常用注解

文章目录 0. 集成1. Data2. Getter 和 Setter3. NoArgsConstructor&#xff0c;AllArgsConstructor和RequiredArgsConstructor4. ToString5. EqualsAndHashCode6. NonNull7. Builder总结 Lombok 是一款 Java 开发的工具&#xff0c;它通过注解的方式简化了 Java 代码的编写&…

nodejs+vue+微信小程序+python+PHP计算机网络在线考试系统-计算机毕业设计推荐

信息数据的处理完全依赖人工进行操作&#xff0c; 所以电子化信息管理的出现就能缓解以及改变传统人工方式面临的处境&#xff0c;一方面可以确保信息数据在短时间被高效处理&#xff0c;还能节省人力成本&#xff0c;另一方面可以确保信息数据的安全性&#xff0c;可靠性&…

SQL进阶理论篇(二十):什么是SQL注入

文章目录 简介SQL注入的原理SQL注入的实例搭建sqli-labs注入环境实例一&#xff1a;猜测where条件判断查询语句的字段数获取当前数据库和用户信息获取MySQL中的所有数据库名称查询wucai数据库中的所有数据表查询heros数据表中的所有字段参考文献 简介 这节是纯兴趣篇了。 web…

【快速开发】使用SvelteKit

自我介绍 做一个简单介绍&#xff0c;酒架年近48 &#xff0c;有20多年IT工作经历&#xff0c;目前在一家500强做企业架构&#xff0e;因为工作需要&#xff0c;另外也因为兴趣涉猎比较广&#xff0c;为了自己学习建立了三个博客&#xff0c;分别是【全球IT瞭望】&#xff0c;【…

MATLAB遗传算法工具箱的三种使用方法

MATLAB中有三种调用遗传算法的方式&#xff1a; 一、遗传算法的开源文件 下载“gatbx”压缩包文件&#xff0c;解压后&#xff0c;里面有多个.m文件&#xff0c;可以看到这些文件的编辑日期都是1998年&#xff0c;很古老了。 这些文件包含了遗传算法的基础操作&#xff0c;包含…

YOLOv5算法改进(23)— 更换主干网络GhostNet + 添加CA注意力机制 + 引入GhostConv

前言:Hello大家好,我是小哥谈。本节课就让我们结合论文来对YOLOv5进行组合改进(更换主干网络GhostNet + 添加CA注意力机制 + 引入GhostConv),希望同学们学完本节课可以有所启迪,并且后期可以自行进行YOLOv5算法的改进!🌈 前期回顾: YOLOv5算法改进(1)— 如何去…

MyBatis笔记

Mybatis Mybatis介绍 什么是Mybatis? mybatis是支持普通SQL查询、存储过程和高级映射的优秀持久层框架。 Mybatis优点 几乎消除了JDBC代码和参数的手动设置消除结果集的检索使用XML或注解用于配置和原始映射&#xff0c;将接口和POJOs(实体类)映射成数据库中的记录。 My…

Qt/QML编程学习之心得:在QML中调用fileDialog(十六)

Qt中有一些内置的对话框dialog,比如 在QWidget工程中使用比较容易,比如 #include <QFileDialog>fileName = QFileDialog::getOpenFileName(this, tr("Open Image"), "/home/jana", tr("Image Files (*.png *.jpg *.bmp)")); 那么在QM…

oracle即时客户端(Instant Client)安装与配置

之前的文章记录了oracle客户端和服务端的下载与安装&#xff0c;内容参见&#xff1a; 在Windows中安装Oracle_windows安装oracle 如果不想安装oracle客户端&#xff08;或者是电脑因为某些原因无法安装oracle客户端&#xff09;&#xff0c;还想能够连接oracle远程服务&#…

智能优化算法应用:基于原子轨道搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于原子轨道搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于原子轨道搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.原子轨道搜索算法4.实验参数设定…

智能优化算法应用:基于跳蛛算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于跳蛛算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于跳蛛算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.跳蛛算法4.实验参数设定5.算法结果6.参考文献7.MA…

贪吃蛇(十)贪吃蛇吃食物

上节讲到限制蛇身回头&#xff0c;本节要实现吃食物功能 实现思路 在存储上食物方面可以复用蛇的结构体。初始化食物的时候&#xff0c;我们设置食物的坐标&#xff0c;每次调用这个函数的时候&#xff0c;坐标发生一些规律的变化。另外我们需要扫描食物的函数&#xff0c;这…

科研学习|论文解读——面向电商内容安全风险管控的协同过滤推荐算法研究

【论文完整内容详见知网链接】&#xff1a; 面向电商内容安全风险管控的协同过滤推荐算法研究 - 中国知网 (cnki.net) 面向电商内容安全风险管控的协同过滤推荐算法研究* 摘 要&#xff1a;[目的/意义]随着电商平台商家入驻要求降低以及商品上线审核流程简化&#xff0c;内容安…

一起学量化之macd指标

macd指标 1. macd指标定义 MACD的组成要素MACD称为异同移动平均线&#xff0c;是从双指数移动平均线发展而来的。MACD由一根快线、一根慢线、一根0轴线和无数根红绿柱状线组成。 如下图所示&#xff0c;粉色的是快线&#xff0c;也称DIFF线&#xff1b;蓝色的是慢线&#xf…

线程池构造方法的认识

线程池中构造方法的认识 文章目录 线程池中构造方法的认识corePoolSize (核心线程数)maximumPoolSize&#xff08;最大线程数&#xff09;keepAliveTime(非核心线程的空闲超时时间)TimeUnitworkQueuethreadFactoryRejectedExecutionHandler拒绝策略 标准库中提供了一个ThreadPo…

C语言 enum类型

enum,枚举,是 C 语言中的一种基本数据类型&#xff0c;用于定义一组具有离散值的常量&#xff0c;它可以让数据更简洁&#xff0c;更易读。 语法&#xff1a; enum 枚举名 {枚举元素1,枚举元素2,……}; 直接上例子 #include<stdio.h> enum DAY { MON1, TUE, WED, TH…

华为鸿蒙应用--封装数据持久化工具:首选项Preferences(鸿蒙工具)-ArkTs

一、使用方法&#xff1a; 0、初始化实例&#xff1a;一般在EntryAbility.ts的onWindowStageCreate中初始化&#xff1b;&#xff08;可忽略&#xff09; 1、将数据写入Preferences实例 function() {let arrayNum: number[] [1, 2, 3];let arrayStr: string[] ["5&quo…

2023美团机器人研究院学术年会成功举办

2023年12月19日&#xff0c;深圳市美团机器人研究院学术年会在清华大学深圳国际研究生院成功落下帷幕。会议回顾了研究院成立一年来的进展和成果&#xff0c;并邀请了各界专家共同讨论机器人技术的未来发展趋势。此外&#xff0c;年会期间还举办了首届低空经济智能飞行管理挑战…