System/[Pwnable.kr]

[Pwnable.kr] collision - 3pt 풀이

유뱃 2015. 7. 24. 14:53



[Pwnable.kr] collision - 3pt  풀이




check_password() 함수의 인자는 포인터로 받는다.  

즉 주소인 4바이트로 나눠서 받는다.


argv[1]가 무조건 20바이트여야 된다.


check_password(argv[1])와 hashcode와 동일하게 맞쳐주면 플래그가 출력된다.


check_password함수는 4바이트로 나눠서 받기 때문에 hashcode를 5로 나눠보았다.



저렇게 나오는것을 알 수 있다.


한번 다시 5로 곱해 보았다.




원본값에서 -4된 값이 나오는걸 볼 수 있다.

왜 그런건지는 모르겠지만 그렇게 나왔다.


check_password함수에서 4바이트로 나눠서 받고 그것을 res에 다 더하기 때문에,

hash값을 5로 나눈뒤 그 값인 0x6c5cec8을 4번  0x6c5cecc를 1번 이렇게 인자값에 넣어주면,

check_passwor()에서 res로 다 더해주고 res를 return 한다.

그러면 hashcode랑 값이 동일해져서 플래그가 출력 될 것이다.





클리어