■ Wargame/- Pwnable.kr

[Pwnable.kr] collision - 3 pt (Write Up)

개발따 2019. 6. 9. 00:59

□ 문제 코드는 아래와 같다.

 

  문제를 해결하기 위해 3가지를 해결해야한다.

 - argv 인자 2 이상

 - argv[1] 길이가 20

 - Check_password 함수의 return 값이 hashcode(=0x21DD09EC) 같아야한다.

 

 아래의 Check_password() 함수를 자세히 봐보면 인자로 const char* p , 문자열을 입력 받아와서 (int *)형으로 타입 변환 int 포인터인 ip 데이터를 넣어준다.

 - 만약 인자를 "abcdefgh"(= 8바이트) 입력했다면 const char* p형을 (int*) 형으로 변환되므로 ip 포인터에서 ip[0] "abcd" 데이터를 가리키고 ip[1] "efgh" 가리킨다.

 - 이 , 당연히 "abcd" "efgh" char 형이므로 int형으로 저장된다.

 - 그 다음에 for문으로 ip배열에 있는 값들을 모두 합한 값을 unsigned long형으로 반환한다.

 

  문제를 해결하기 위해서는 ip[0] + ip[1] + ip[2] + ip[3] + ip[4] 값이 "0x21DD09EC"여야한다.

 ,  "0x21DD09EC" 다섯개로 나누면 된다.다섯개 나누면 "0x06C5CEC8" * 4 + "0x6C5CECC" 된다.

 따라서 아래와 같이 "0x06C5CEC8" * 4 + "0x6C5CECC" 20글자로 만든다음 인자에 전달하면 문제가 풀리게 된다.

'■ Wargame > - Pwnable.kr' 카테고리의 다른 글

[Pwnable.kr] flag - 7 pt ( Write Up )  (0) 2019.06.10
[Pwnable.kr] BoF - 5 pt ( Write Up )  (0) 2019.06.09
[Pwnable.kr] Fd - 1pt (Write up)  (0) 2019.06.09