Wargame/pwnable2017. 6. 25. 19:15

pwnable.kr 사이트의 collision 문제를 보면 다음과 같다.

문제를 보니 MD5 해쉬 충돌과 관련된 문제인 것 같다.

해쉬 충돌이란 해쉬 함수가 서로 다른 두 개의 입력값에 대해 동일한 출력값을 갖는 것을 의미한다.


우선 ssh로 접속해 코드를 보면 다음과 같다.

우선 코드를 분석해보자.

main 함수를 보면 인자가 20바이트가 아니면 "passcode length should be 20 bytes" 문자열을 찍어내고 종료한다. 이를 통해 20바이트의 인자를 넘겨주어야 하는 것을 알 수 있다.

hashcode는 0x21DD09EC 이고, check_password() 함수의 결과 값이 hashcode와 같으면 문제가 풀리는 것 같다.


인자의 값이 0x21DD09EC와 같아야 하는데, 총 20바이트를 넘겨주어야 한다.

총 20바이트의 값이 0x21DD09EC( 4바이트 )와 같아야 하기 때문에 0x21DD09EC를 5로 나눈 값을 넘겨주면 된다.

0x21DD09EC를 5로 나누면 0x6C5CEC8이고, 0x6C5CEC8에 5를 곱하면 0x21DD09E8이 나온다.

즉, 4만큼 차이가 난다.

따라서 0x6C5CEC8 * 4 + 0x6C5CECC를 넘겨주면 된다.

이 값을 python 코드로 넘겨주도록 하자.

python -c 'print "\xC8\xCE\xC5\x06"*4+"\xCC\xCE\xC5\x06"'


위 코드를 인자로 넘겨주면 된다.

위와 같이 플래그가 툭 튀어 나온다.

이 값을 Auth에 넘겨주면 문제가 풀린다.

'Wargame > pwnable' 카테고리의 다른 글

[pwnable.kr] bof  (0) 2017.07.25
[pwnable.kr] fd  (0) 2017.06.18
Posted by Imp3rio