본문 바로가기

툴/Crypto

hashpump

해시 길이 확장 공격(length length extension attack) 툴

 

https://github.com/bwall/HashPump

 

bwall/HashPump

A tool to exploit the hash length extension attack in various hashing algorithms - bwall/HashPump

github.com

 

ex) BRUCON CTF 2016 Covering "Breaking the crypto"

key의 길이 18

 

user의 value fDY4fAA= -> base64로 디코딩하면 "|68|"

mac(Message Authentication Code)의 value는 해시값으로 32자(16byte)인걸 봐서 md5인듯

admin은 |1| 일거 같으니 |1|을 base64 encondig하면 "fDF8"

user의 value를 "fDF8"로만 바꾸고 mac의 값을 그대로 둔 상태에서 요청을 하면 제대로 된 응답이 오지 않는다

mac의 value는 md5($secret_key . $user)의 형식으로 만들어진 것 같다

결국 mac의 값이 md5($secret_key . $user)와 일치해야만 응답을 얻어 낼 수 있다

지금 user가 |68| 일 때 mac의 값은

md5($secret_key . "fDY4fAA")의 결과값

지금 가진 정보를 종합해보면

secret_key의 길이 = 18

admin의 user파라미터 value = fDF8

md($secret_key . "fDY4fAA")의 결과 값

구해야 하는 것은 md5($secret_key . "fDF8")의 결과 값

 

hashpump를 사용한다

./hashpump -s (알고 있는 해쉬 값) -d (알고 있는 메세지) -k (key의 길이) -a (알고 있는 메세지에 추가 할 정보)

 

hashpump로 찾아 낸 새로운 message를 base64 enconding하여 전송하면 

 

flag가 나온다

 

출처: https://www.youtube.com/watch?v=sMla6_4Z-CQ