Hash_Extend

日常记录

pip install hashpumpy

MD5, SHA1, SHA256每轮加密块大小为64Byte(512Bits),其中前56Byte(448Bits)用于存储加密数据,后8Byte(64Bits)用于存储数据Bit位数

SHA512每轮加密块大小为128Byte(1024Bits),其中前112Byte(896Bits)用于存储加密数据,后16Byte(128Bits)用于存储数据Bit位数

MD5存储数据长度时使用小端排序,SHA1, SHA256, SHA512则使用大端排序

SHA384在使用hashpumpy.pump时会报错

1
hashpumpy.error: unsupported hash size

以上Hash算法均基于Merkle-Damgård结构,抽象来看,可以类比于对称加密中的OFB模式,即上一轮的加密结果会作为下一轮加密的输入

以MD5为例

我们要加密明文admin,此时明文长度小于加密块数据长度,则会被填充\x80\x00\x00\x00...

那么加密块为

1
admin\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00

在完成第一轮加密之后我们会得到这一部分的Hash值,如有后续部分,则这部分Hash将作为输入对后一轮加密进行处理

假设存在一个认证方式,将以下内容作为Cookie
username+signature
且signature=MD5(secret+username)
且在校验方法为
MD5(secret+input_username) == signature

我们以Alice身份登入后得到这个Cookie,即

1
MD5(secret+"Alice")

如果secret长度已知,假设为6

那么可以得到以下加密块,以及其MD5值

1
??????Alice\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00

在加密块后续内容追加内容Bob,则可以将上一部分的MD5作为下一轮加密的输入

1
??????Alice\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00Bob

即可得到这部分的MD5值

在进行认证时,可以使用以下用户名以及其相应的MD5

1
username="Alice\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00Bob"

服务器在验证身份

1
MD5(secert+"Alice\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00Bob") == signature

即完成了哈希扩展攻击,如果服务器对用户名的验证存在不安全的逻辑,那么就有可能越权漏洞