哈希攻击技术 是做什么的?
哈希攻击手册。适用于利用长度扩展攻击、MD5/SHA1碰撞、HMAC时序泄露、生日攻击或基于哈希的工作量证明的CTF及授权测试场景。
目录
长度扩展攻击
原理:对基于Merkle-Damgård结构的哈希函数(如MD5、SHA1、SHA256)进行攻击,通过已知H(secret || message)和len(secret),构造出H(secret || message || padding || additional_data)。
适用条件:
- 哈希算法使用Merkle-Damgård结构
- 已知
H(secret || message)的值 - 知道
secret的长度(精确或可枚举)
攻击步骤:
- 使用
hashpumpy或yak内置函数进行长度扩展 - 构造新数据包并提交
示例代码
import hashpumpy
original_hash = "..." # 原始哈希值
secret_len = 10 # 推测的密钥长度
original_message = b"data"
extra_message = b"&admin=true"
new_hash, new_message = hashpumpy.hashpumpy(
original_hash,
original_message,
extra_message,
secret_len
)
MD5/SHA1碰撞攻击
原理:利用已知的碰撞攻击技术(如fastcoll、unicoll、SHA1-SHAttered)生成两个具有相同哈希值的不同消息。
适用场景:
- 数字证书伪造
- 文件完整性绕过
- 哈希签名认证绕过
示例命令
# 使用fastcoll生成MD5碰撞对
./fastcoll -o file1 file2
# 使用SHAttered技术生成SHA1碰撞
python sha1_collider.py --prefix prefix.bin
HMAC时序泄露攻击
原理:通过测量HMAC验证的时间差异,逐字节或逐比特恢复HMAC密钥。
攻击条件:
- 目标系统暴露了可测量的时序差异
- 可以使用大量请求进行统计
时序攻击代码片段
import time
import requests
def time_hmac_validation(guess):
start = time.perf_counter()
response = requests.post(url, data={"hmac": guess})
# 注:实际攻击需要更精确的统计
return time.perf_counter() - start
生日攻击
原理:利用生日悖论寻找哈希碰撞,适用于寻找n位哈希的碰撞,时间复杂度约为O(2^(n/2))。
应用场景:
- PDF碰撞签名绕过
- 哈希表拒绝服务攻击
- 数字签名伪造
生日快乐攻击脚本
import hashlib
import random
def birthday_attack(target_hash_len=32):
# 生成随机字符串并哈希,寻找碰撞
seen = {}
while True:
rand_str = str(random.getrandbits(128))
h = hashlib.sha256(rand_str.encode()).hexdigest()[:target_hash_len]
if h in seen:
return seen[h], rand_str
seen[h] = rand_str
哈希型工作量证明破解
原理:对PoW挑战中使用的哈希函数进行暴力破解,寻找满足H(data || nonce) < target的随机数。
加速技术:
- 使用GPU/FPGA并行计算
- 预计算哈希前缀
- 利用硬件加速指令
Yaklang实现示例
poSolve = func(target, hashPrefix) {
// 暴力搜索nonce
i = 0
for {
data = hashPrefix + i
h = sha256(data)
if str(h).hex() < target {
return data
}
i++
}
}
免责声明
这些技术仅供教育和授权安全测试使用。未经明确授权使用这些攻击技术是违法的。使用者需自行承担所有法律和伦理责任。