TDCTF Academy Logo TDCTF ACADEMY

Int 2: Hash Length Extension Attack

Target: Mengeksploitasi kelemahan struktural hash MD5/SHA1/SHA256
Tools: python3


Praktikum

Konsep: Hash seperti MD5, SHA1, SHA256 menggunakan Merkle-Damgård construction - hash tergantung pada output dari blok sebelumnya. Ini memungkinkan length extension attack: dari H(message) kita bisa menghitung H(message || padding || extension) tanpa tahu message!

cd ~ && mkdir crypto-int2 && cd crypto-int2

python3 << 'PYEOF'
import hashlib, struct

# Demonstrasi konseptual hash length extension
# Skenario: Server menggunakan MAC = SHA256(secret || message)
# Attacker bisa menambahkan data ke message tanpa tahu secret!

# Server side
secret = b"rahasia_server_123"
message = b"transfer=1000&to=user1"
valid_mac = hashlib.sha256(secret + message).hexdigest()

print(f"Secret: {secret}")
print(f"Message: {message}")
print(f"MAC: {valid_mac[:20]}...")
print()

# Client mengirim message + MAC - server verifikasi
def verify(message, mac):
expected = hashlib.sha256(secret + message).hexdigest()
return mac == expected

print(f"Verifikasi asli: {'✅' if verify(message, valid_mac) else '❌'}")
print()

# ATTACK: length extension tanpa tahu secret!
# Attacker punya: message, MAC, dan panjang secret (ditebak)
# Bisa hitung: MAC(message || padding || extra) tanpa secret!

# Hash length extension attack secara teknis butuh implementasi
# internal dari SHA256 - di sini kita simulasikan saja
print("=== Length Extension Attack (konseptual) ==*")
extra = b"&transfer=999999999&to=attacker"
print(f"Attacker menambahkan: {extra}")
print(f"Tanpa tahu secret, attacker bisa menghitung")
print(f"SHA256(secret || message || padding || extra)")
print(f"Menggunakan teknik 'state recovery' dari MAC asli!")
print()

# Mitigasi: gunakan HMAC, bukan hash(secret || message)
import hmac
hmac_mac = hmac.new(secret, message, hashlib.sha256).hexdigest()
print(f"=== Mitigasi: Gunakan HMAC ==*")
print(f"HMAC: {hmac_mac[:20]}...")
print("HMAC kebal terhadap length extension attack!")
PYEOF

Temuan

Hash Rentan Length Extension?
MD5
SHA1
SHA256
SHA3 (Keccak) ❌ (sponge construction)
HMAC ❌ (menggunakan 2 hash)

Refleksi: Jangan pernah gunakan SHA256(secret || message) sebagai MAC! Selalu gunakan HMAC. Inilah kenapa standar keamanan seperti TLS, JWT, dan API tokens menggunakan HMAC, bukan raw hash.


Generated by @farishhz Agent Pentest Pipeline - TDCTF Security Academy

PADA HALAMAN INI