Write Up/pwnable.kr
[pwnable.kr] collision
jxx_yxjx
2024. 1. 19. 17:14
ls -ll로 어떤 파일이 있는지와 그 권한을 살펴본다.
flag에 바로 접근할 수 없으므로 앞서 풀었던 문제와 마찬가지로 col.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 :)