Write Up/pwnable.kr

[pwnable.kr] collision

jxx_yxjx 2024. 1. 19. 17:14

Question

 

해당 문제로 접속 후

 

 

ls -ll

ls -ll로 어떤 파일이 있는지와 그 권한을 살펴본다.

flag에 바로 접근할 수 없으므로 앞서 풀었던 문제와 마찬가지로 col.c에 먼저 접근해본다.

 

colc.c

코드를 해석해보니 먼저 20byte의 인자가 필요하며 인자가 check_password()에 넘겨나온 반환값이 hashcode와 같아야한다는 것을 알 수 있다.

 

이 때,  check_password() 가 인자를 int형으로 변환하여 for문을 돌리고 4byte씩 읽어들인 후 res에 값을 적고, 마지막에 반환한다.

이렇게 반환된 res가 hashcode (0x21DD09EC) 와 같으면 해결된다.

20byte인 인자를 4byte씩 읽어들이므로 hashcode의 값을 5로 나누고 값을 붙이면 될 것 같은데, hashcode의 값이 5로 나누어지지 않으므로 나머지인 4를 마지막에 더해주어야겠다.

 

먼저 hashcode의 값을 5로 나누어주고 마지막 값에만 4를 더해서 계산해주자.

(0x6C5CEC8)*4 + 0x6C5CECC

 

이를 리틀엔디언방식으로 인자로 넣어주면 flag 값을 알 수 있다.

 

flag:

daddy! I just managed to create a hash collision :)