pwnable.kr collision

pwnable.kr collision Writeup

pwnable.kr collision 의 풀이입니다.

Daddy told me about cool MD5 hash collision today.
I wanna do something like that too!

ssh [email protected] -p2222 (pw:guest)

해쉬 충돌에 대한 문제라는 것 같습니다.

#include <stdio.h>
#include <string.h>
unsigned long hashcode = 0x21DD09EC;
unsigned long check_password(const char* p){
int* ip = (int*)p;
int i;
int res=0;
for(i=0; i<5; i++){
res += ip[i];
}
return res;
}

int main(int argc, char* argv[]){
if(argc<2){
printf("usage : %s [passcode]\n", argv[0]);
return 0;
}
if(strlen(argv[1]) != 20){
printf("passcode length should be 20 bytes\n");
return 0;
}

if(hashcode == check_password( argv[1] )){
system("/bin/cat flag");
return 0;
}
else
printf("wrong passcode.\n");
return 0;
}

check_password() 함수는 인자로 받아온 문자열을 int 형 포인터로 바꿔서 더하여 반환하고 있습니다.
그 반환된 값이 hashcode 와 같다면 flag 를 출력할 것입니다.

20byte 크기의 문자열을 int 형 포인터로 캐스팅하여 res 에 더하게 됩니다.
0x21DD09EC 를 5 로 나눈 값(0x6c5cec8)을 5 번에 걸쳐 넣어줍시다.

col@ubuntu:~$ ./col `python -c 'print "\xc8\xce\xc5\x06" * 5'`
wrong passcode.
col@ubuntu:~$

오답이라고 합니다.

>>> 0x21DD09EC - 0x6c5cec8 * 5
4
>>>

나머지로 4 가 남게 된다는 것을 알았습니다. 0x6c5cec8 * 4 + (0x6c5cec8 + 4)를 넣으면 해결될 것임이 자명합니다.

Solve

col@ubuntu:~$ ./col `python -c 'print "\xc8\xce\xc5\x06" * 4 + "\xcc\xce\xc5\x06"'`
daddy! I just managed to create a hash collision :)
col@ubuntu:~$
Total views

댓글

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×