[pwnable.kr] collision 문제 풀이
ssh col@pwnable.kr -p2222 (pw:guest) 로 우분투에서 접속했다.
그 후 ls -li로 어떤 파일들이 있는지 확인했다.
3개가 있는데 flag는 col 계정으로는 못 읽는다. 짐작해보면 특수 권한이 있는 col 파일로 flag를 읽어야 할 것 같다.
일단 col.c가 col의 소스코드로 보이니 cat으로 읽어보자.
일단 hashcode가 0x21DD09EC 이다. check_password(const char* p) 함수에서는 반복문으로 int형 4byte씩 더해주어 res변수에 저장하고 있는 걸 알 수 있다.
main에서는 조건문들을 봤을 때 매개변수의 길이가 20이 아닌 걸 입력하면 "passcode length should be 20 bytes"를 출력할 것 같고, hashcode 와 check_password(argv[1]) 즉, 매개변수가 같다면 flag 파일을 읽어준다는 것을 알 수 있다. 만약 매개변수의 길이가 20글자긴 한데 hashcode와 다를 시에는 "wrong passcode."가 출력된다.
우리는 길이가 20byte 인 값을 매개변수로 넣어주기 위해 파이썬을 쓰면 된다. hashcode 와 같은 값을 만들기 위해 다양한 계산법을 쓸 수 있는데 2가지만 보겠다. 1번째 방법
6C5CEC8이 나온다. 근데 21DD09EC에서 6C5CEC8*5한 값을 빼면 4가 모자라므로 마지막에 6C5CEC8 + 4 한 값인
6C5CECC를 넣어주면 21DD09EC가 된다.
2번째 방법
1010101 *4 +1dd905E8을 해주면 21DD09EC가 나온다.
플래그 : daddy! I just managed to create a hash collision :)