去年我写了一篇哈希长度扩展攻击的简介以及HashPump安装使用方法,本来已经足够了,但HashPump还不是很完善的哈希长度扩展攻击,HashPump在使用的时候必须提供original_data,近来的哈希长度扩展攻击的题目已经不提供original_data,从原理上来说也不一定需要这个original_data,所以今年pcat又来写一篇hexpand的安装使用方法,鉴于时间关系,本人只在kali、Ubuntu14.04下测试。

--------------------------------------------------------------------

1. 安装pkg-config

https://pkg-config.freedesktop.org/releases/

目前最新版pkg-config-0.29.2.tar.gz

v=0.29.
wget https://pkg-config.freedesktop.org/releases/pkg-config-${v}.tar.gz
tar -xzvf pkg-config-${v}.tar.gz
cd pkg-config-${v}/
./configure --with-internal-glib && make && make install

2. 安装OpenSSL开发包

apt-get update
apt-get install -y libssl-dev

# 新版kali里这样安装openssl是不行的,参考下面第7点。

3. hexpand的安装

git clone https://github.com/amlweems/hexpand
cd hexpand
make

4. 报错Package openssl was not found in the pkg-config search path.

搜索本机pkgconfig文件夹的openssl.pc、libssl.pc、libcrypto.pc,并将这3个文件复制到/usr/lib/pkgconfig/(如果不存在就新建个)下,然后

export PKG_CONFIG_PATH=/usr/lib/pkgconfig:$PKG_CONFIG_PATH

再进去hexpand所在目录下进行hexpand的编译

5. 报错make: clang: Command not found

apt-get install clang

6. hexpand的使用方法

在hexpand所在目录(当然你也可以把文件复制到/usr/bin/里)

./hexpand -t md5 -s 21232f297a57a5a743894a0e4a801fc3 -l  -m "pcat"

其中-l的5是哈希原文的长度,运行后就会得到附加数据,以及新得到的哈希值。

7. Kali 2018.1等安装错误

-= 2018.08补充 =-

按以上的方法如果在Kali 2018.1或者别的版本上运行报错如下:

hexpand.c::: error: incomplete definition of type 'struct evp_md_ctx_st'
int length_modulo = mdctx->digest->block_size;
~~~~~^
/usr/include/openssl/ossl_typ.h::: note: forward declaration of 'struct evp_md_ctx_st'
typedef struct evp_md_ctx_st EVP_MD_CTX;
^
hexpand.c::: error: incomplete definition of type 'struct evp_md_ctx_st'
unsigned char* h_data = (unsigned char *)((SHA512_CTX *)mdctx->md_data)->h; ……

这个跟系统有关系,Kali每一次变化都很大。这个得更新到最新的OpenSSL

git clone https://github.com/PeterMosmans/openssl
cd openssl
./config && make && make test && make install

在最后的make install会看到

cp libcrypto.pc /usr/local/ssl/lib/pkgconfig
chmod /usr/local/ssl/lib/pkgconfig/libcrypto.pc
cp libssl.pc /usr/local/ssl/lib/pkgconfig
chmod /usr/local/ssl/lib/pkgconfig/libssl.pc
cp openssl.pc /usr/local/ssl/lib/pkgconfig
chmod /usr/local/ssl/lib/pkgconfig/openssl.pc

把这3个新的pc文件替换到/usr/lib/pkgconfig/下

cd /usr/local/ssl/lib/pkgconfig/ && cp openssl.pc libssl.pc libcrypto.pc /usr/lib/pkgconfig/

(注意,PKG_CONFIG_PATH环境变量要存在,可往上翻看第4点)

再进去hexpand文件夹下编译会报错:

hexpand.c::: error: format specifies type 'unsigned int' but the argument has type '__uint64_t' (aka 'unsigned long') [-Werror,-Wformat]
if (length_modulo == ) sprintf(output+*padding, "%032" PRIx32 , htole64(*length));
~~~~~~ ^~~~~~~~~~~~~~~~~
/usr/include/endian.h::: note: expanded from macro 'htole64'
# define htole64(x) __uint64_identity (x)
^~~~~~~~~~~~~~~~~~~~~
hexpand.c::: error: format specifies type 'unsigned int' but the argument has type '__uint64_t' (aka 'unsigned long') [-Werror,-Wformat]
else sprintf(output+*padding, "%016" PRIx32 ,htole64(*length));
~~~~~~ ^~~~~~~~~~~~~~~~~
/usr/include/endian.h::: note: expanded from macro 'htole64'
# define htole64(x) __uint64_identity (x)
^~~~~~~~~~~~~~~~~~~~~
errors generated.
Makefile:: recipe for target 'hexpand.o' failed

这个就是系统文件的问题了,我查阅了当前的/usr/include/endian.h

# define htole64(x) __uint64_identity (x)

而查阅老系统版本的/usr/include/endian.h

# define htole64(x) (x)

所以这个问题的暂时解决方法,修改下hexpand.c文件

sed -i 's/htole64(8\*length)/(8\*length)/g' hexpand.c

再进行编译,报错:

clang hexpand.o main.o -o hexpand  -L/usr/local/ssl/lib -lssl -lcrypto
/usr/local/ssl/lib/libcrypto.a(dso_dlfcn.o): In function `dlfcn_globallookup':
dso_dlfcn.c:(.text+0x11): undefined reference to `dlopen'
dso_dlfcn.c:(.text+0x24): undefined reference to `dlsym'
dso_dlfcn.c:(.text+0x2f): undefined reference to `dlclose'
/usr/local/ssl/lib/libcrypto.a(dso_dlfcn.o): In function `dlfcn_bind_func':
dso_dlfcn.c:(.text+0x374): undefined reference to `dlsym'
dso_dlfcn.c:(.text+0x432): undefined reference to `dlerror'
/usr/local/ssl/lib/libcrypto.a(dso_dlfcn.o): In function `dlfcn_bind_var':
dso_dlfcn.c:(.text+0x4a7): undefined reference to `dlsym'
dso_dlfcn.c:(.text+0x562): undefined reference to `dlerror'
/usr/local/ssl/lib/libcrypto.a(dso_dlfcn.o): In function `dlfcn_load':
dso_dlfcn.c:(.text+0x5c8): undefined reference to `dlopen'
dso_dlfcn.c:(.text+0x62d): undefined reference to `dlclose'
dso_dlfcn.c:(.text+0x665): undefined reference to `dlerror'
/usr/local/ssl/lib/libcrypto.a(dso_dlfcn.o): In function `dlfcn_pathbyaddr':
dso_dlfcn.c:(.text+0x701): undefined reference to `dladdr'
dso_dlfcn.c:(.text+0x75f): undefined reference to `dlerror'
/usr/local/ssl/lib/libcrypto.a(dso_dlfcn.o): In function `dlfcn_unload':
dso_dlfcn.c:(.text+0x7b2): undefined reference to `dlclose'
clang: error: linker command failed with exit code (use -v to see invocation)
Makefile:: recipe for target 'hexpand' failed

这也是新版OpenSSL的问题,只要加上-ldl -lpthread进行编译即可,编辑Makefile文件

sed -i 's/--libs openssl)/& -ldl -lpthread /g' Makefile

最后就可以顺利编译成功。

哈希长度扩展攻击(Hash Length Extension Attack)利用工具hexpand安装使用方法的更多相关文章

  1. 哈希长度扩展攻击的简介以及HashPump安装使用方法

    哈希长度扩展攻击(hash length extension attacks)是指针对某些允许包含额外信息的加密散列函数的攻击手段.该攻击适用于在消息与密钥的长度已知的情形下,所有采取了 H(密钥 ∥ ...

  2. hash长度扩展攻击

    这里面就放一张百度百科的解释吧,emmm 反正我是看不懂还是做一下题来巩固一下吧 CTF中的hash长度攻击 进入网页你会发现页面显示  我这里没有看到什么可以利用的,抓了一下包也没有什么有可以利 ...

  3. 实验吧_天下武功唯快不破&让我进去(哈希长度拓展攻击)

    天下武功唯快不破 第一反应就去抓包,看到返回包的header中有FLAG的值,base64解码后得到下图所示 这就要求我们在请求头中post相应key的值,我直接在burp中尝试了多次都没有用,想起来 ...

  4. MD5的Hash长度扩展攻击

    Hash长度扩展攻击 引子 无意中碰到一道题,大概代码是这样的 $flag = "XXXXXXXXXXXXXXXXXXXXXXX"; $secret = "XXXXXXX ...

  5. 实验吧——让我进去(hash长度扩展攻击)

    题目地址:http://ctf5.shiyanbar.com/web/kzhan.php 在页面源码没发现什么,于是用burp进行抓包重放 看到有setcookie,于是重新刷新页面拦截数据包(这次才 ...

  6. Hash Length Extension Attacks

    catalogue . Hash函数的内部原理 . 漏洞原理 1. Hash函数的内部原理 0x1: 分组.Padding 哈希函数以区块为单位操作数据.比如说,MD5, SHA1, SHA256的区 ...

  7. 实验吧Web-中-让我进去(Hash长度扩展攻击、加盐密码及Linux下hashpump的安装使用)

    打开网页,测试开始,注入费老大劲,看了大佬的blog才知道怎么干. bp抓包,观察发现cookie中有个source=0,在repeater中修改为source=1,然go一下,出来了一段源代码. $ ...

  8. 哈希长度拓展攻击之De1CTF - SSRF Me

    题目考查:python代码审计.hash长度拓展攻击 0x01 题目源码: #! /usr/bin/env python #encoding=utf-8 from flask import Flask ...

  9. [De1CTF 2019]SSRF Me-MD5长度扩展攻击&CVE-2019-9948

    0x00 打开题目查看源代码,开始审计 这里贴上网上师傅的博客笔记: https://xz.aliyun.com/t/6050 #! /usr/bin/env python #encoding=utf ...

随机推荐

  1. PE知识复习之PE的RVA与FOA的转换

    PE知识复习之PE的RVA与FOA的转换 一丶简介PE的两种状态 首先我们知道PE有两种状态.一种是内存展开.一种是在文件中的状态.那么此时我们有一个需求. 我们想改变一个全局变量的初始值.此时应该怎 ...

  2. [六]JavaIO之 ByteArrayInputStream与ByteArrayOutputStream

      功能简介   ByteArrayInputStream 和 ByteArrayOutputStream 提供了针对于字符数组 byte [] 的标准的IO操作方式     ByteArrayInp ...

  3. eclipse maven 打war包的几种方式

    第一种:利用pom.xml文件打包. 右键pom.xml文件,选择Debug as或Run as 都行.但需要选择Maven install  打包 执行成功后,日志会打印出位置(看自己配置是否日志输 ...

  4. [Go] Go的WaitGroup计数信号量

    WaitGroup是一个计数信号量,可以用来记录并维护运行的goroutine,如果WaitGroup的值大于0,Wait方法就会阻塞 调用Done方法来减少WaitGroup的值,并最终释放main ...

  5. Java开发笔记(七十五)异常的处理:扔出与捕捉

    前面介绍的几种异常(不包含错误),编码的时候没认真看还发现不了,直到程序运行到特定的代码跑不下去了,程序员才会恍然大悟:原来这里的代码逻辑有问题.像这些在运行的时候才暴露出来的异常,又被称作“运行时异 ...

  6. Java 学习笔记 两大集合框架Map和Collection

    两大框架图解 Collection接口 由第一张图,我们可以知道,Collection接口的子接口有三种,分别是List接口,Set接口和Queue接口 List接口 允许有重复的元素,元素按照添加的 ...

  7. Windows系统 应用或游戏 打开出现0xc000007b错误 解决方法

    1.使用directX修复工具(推荐) 标准版 增强版 标准版备用地址 增强版备用地址 2. 重新安装DirectX 9.0 安装包(安装包体积大) 微软官方离线安装包 摘录CSDN博客 运行游戏时出 ...

  8. MatrixTree速成

    前言 MatrixTree定理是用来解决生成树计数问题的有利工具 比如说这道题 MatrixTree定理的算法流程也非常简单 我们记矩阵\(A\)为无向图的度数矩阵 记矩阵\(D\)为无向图的邻接矩阵 ...

  9. 将Dynamics 365中的用户及其角色、角色导出到Excel中

    关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复240或者20161204可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong. ...

  10. spring学习总结——装配Bean学习二(JavaConfig装配bean)

    通过Java代码装配bean 前言:上面梳理了通过注解来隐式的完成了组件的扫描和自动装配,下面来学习下如何通过显式的配置的装配bean: 使用场景:比如说,你想要将第三方库中的组件装配到你的应用中,在 ...