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