본문 바로가기

해킹공부/pwnable.kr

collision

md5 hash의 collision을 발견했단다.

대단하다.

나도 함 발견하게 소스코드를 보자.

 

 

 

main의 argument로 받은 20byte를 parameter로 check_password를 실행해 받아온 값이

hashcode의 값과 같으면 flag를 볼 수 있다.

그럼 check_password함수의 코드를 보자

( 너무 길어서 한번에 설명하자니 글만 많아져 사진을 잘랐다. )

 

 

parameter로 넘어온 값의 pointer를 int *로 캐스팅한다.

int는 4byte를 갖는 data type이므로 int p[5]와 같은 셈이다.

check_password함수는 이 int형 배열의 값들을 모두 더한 값을 반환한다.

 

즉 argument값으로 0x21DD09EC/5를 한 값을 5번 연달아 입력해주면 된다.

 

0x21DD09EC / 5 = 0x06C5CEC8  ........ 4

입력값으로 0x06C5CEC806C5CEC806C5CEC806C5CEC806C5CECC를 넣어주자.

 

***

little endian표기법에 의해 int의 4byte단위로 값을 거꾸로 넣어주어야 의도한대로 연산이 처리된다.

python을 사용해 hex값을 입력해 줄 수 있다.

***

 

./col `python -c 'print "\xc8\xce\xc5\x06"*4+"\xcc\xce\xc5\x06"'`

 

 

나도 md5의 collision을 발견했다.

 

이 연산을 md5 hash라고 하는 이유는 정확히는 모르겠다

그냥 block방식으로 hash를 해서 그런거 아닐까

'해킹공부 > pwnable.kr' 카테고리의 다른 글

mistake  (0) 2017.08.30
random  (0) 2017.08.30
flag  (0) 2017.08.30
bof  (0) 2017.08.29
fd  (0) 2017.08.29