System/pwnable.kr

pwnable.kr collision

언우s 2018. 4. 4. 09:33

collision

argc는 인자의 개수, argv는 인자의 주소를 저장한다.

그러므로 첫 번째 if문을 탈출하기 위해서는 인자가 2개 이상이어야 한다.

./col ??? 이런 식으로 실행시키면 된다.

인자를 넣어주면 사진과 같이 passcode 20바이트가 되어야만 한다고 출력된다.

그렇다면 20바이트로 넣어줘보자.

그러면 사진과 같이 passcode가 잘못됐다고 출력된다.

flag를 보기 위해서는 사진에 있는 if문을 만족시켜야 한다.

그러면 check_password함수에서 hashcode와 같은 값이 리턴되어야 한다.

여기서 hashcode의 값은 0x21dd09ec=568134124이다.

check_password함수를 보면 첫 번째 인자에 있는 값 5개를 더한 값을 리턴한다.

그러면 인자로 568134124의 값을 넣어줘야 하는데 그러면 20바이트가 되지 않고 5번 넣어줄 수도 없다.

그래서 파이썬을 이용해서 568134124 5번 분할해서 넣어주기로 했다.

113626825 568134124 1을 더한 후 5로 나누어진 값이다.

그러므로 인자로 0x06c5cec9 4, 0x06c5cec8 1번 넣어주면 될 것이다.