해시 길이 확장 공격(length length extension attack) 툴
https://github.com/bwall/HashPump
ex) BRUCON CTF 2016 Covering "Breaking the crypto"
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