[CTF] pwnable.kr_collison
pwnable.kr의 collision 문제 풀이

MD5 hash collison 관련 문제라고 힌트를 줍니다.
맥os를 사용하기 때문에 터미널을 사용해 ssh 서버에 접속하겠습니다. ssh col@pwnable.kr -p2222

ls -al 명령어로 해당 위치에 어떤 파일이 있는지 확인하고, 찾은 파일을 cat 명령어로 출력합니다.

입력값과 hashcode가 동일하면 system()함수로 flag 파일을 출력합니다.
입력값은 20비트의 길이여야하며, 4바이트씩 쪼개 다 더한 값이 hashcode이어야 합니다. (총 5등분)
hashcode = 0x21DD09EC 를 5로 나누면,

0x06C5CEC8 값이 나오는데 이 값에 다시 5를 곱하면 0x21DD09E8 값이 나옵니다.

hashcode = 0x21DD09EC 값과 동일하지 않다는 걸 알 수 있습니다.
hashcode 값에 방금 계산한 값을 빼면 0x4입니다.
0x21DD09EC = 0x06C5CEC8 * 4 + (0x06C5CEC8 + 0x4) = 00x6C5CEC8 * 4 + 0x06C5CECC
으로 입력값으로 0x06C5CEC8 * 4 + 0x06C5CECC 을 넣어줘야합니다.
하지만 ./col 인자값 과 같은 명령어로는 인자값에 16진수가 의미하는 문자열을 넣을 수 없기 때문에 pyhon -c 를 사용해 아스키 문자를 전달 합니다.
또한 리눅스는 little-endian 기법을 사용하기 때문에 이에 맞춰 값들의 위치를 조정합니다.
endian 기법은 다음 게시물을 참고 : http://firejune.com/1790/빅엔디안과+리틀엔디안+개념

다음과 같이 명령어를 입력하면 flag 값이 나옵니다.