$ 시스템 해킹 $/pwnable.kr

[Toddler's Bottle] 2번.[collision]

ws1004 2018. 11. 29. 17:00

이번에 풀어볼 문제는 pwnable.kr 2번문제인 [collision] 문제 입니다.

(* 사정상 이번에는 cmd 이용해서 문제를 풀겠습니다. )

MD5 해시 라는 말이 보이네요

ssh 통해서 한번 문제로 들어가 보겠습니다.

 ls -l 명령어를 통해 무슨 파일이 있는지 확인해 보겠습니다.

 col, col.c , flag 있네요

 flag 접근 불가능 하고 col.c 읽어 봐야 할거 같네요.

Hash code 16진수로 되어있네요. 대충 코드를 살펴 보니 argc 2보다 커 야하고 길이는 20이어야 합니다.

 

Hashcode 16진수를 10진수로 변환해 보겠습니다.

0x21DD09EC -> 568134124

 

Check_password함수를 보면 입력 받은 p 주소 값을 포인터형 변수 ip 집어 넣는데 ip res라는 변수에 하나씩 넣는다.

그렇게 반환된 값이 0x21DD09EC 되야 하기 때문에 입력해야 하는 값은 0x21DD09EC 5 나눠서 더한 형태를 입력해 줘야 한다.

for문으로 5 돌기 때문에 Hash code 5 나누어 보니까 나누어 떨어지지 않더라고요 나머지 4 남더라고요

113626824 * 4 + 113626828 = 0x21DD09EC 16진수로 다시 바꿔보면

6c5cec8 * 4 + 6c5cecc = 0x21DD09EC 됩니다.

 

답이 6c5cec8 * 4 + 6c5cecc 이거인 거 같네요

 

하지만 20byte가 아니더라고요…

리틀 엔디안 // 엔디안 이라는 있는데 메모리 구조와 관련이 있습니다. 따로 공부 하실 분은 찾아서 공부해보시면 될 거 같아요.

리틀 엔디안은 16진수를 거꾸로 적습니다. 위와 같이

 

Flag daddy! I just managed to create a hash collision :) 입니다.